diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/config_file.c | 60 | ||||
-rw-r--r-- | util/config_file.h | 55 | ||||
-rw-r--r-- | util/configlexer.c | 5705 | ||||
-rw-r--r-- | util/configlexer.lex | 18 | ||||
-rw-r--r-- | util/configparser.c | 2767 | ||||
-rw-r--r-- | util/configparser.h | 378 | ||||
-rw-r--r-- | util/configparser.y | 137 | ||||
-rw-r--r-- | util/data/msgreply.c | 30 | ||||
-rw-r--r-- | util/data/msgreply.h | 4 | ||||
-rw-r--r-- | util/fptr_wlist.c | 9 | ||||
-rw-r--r-- | util/iana_ports.inc | 6 | ||||
-rw-r--r-- | util/log.c | 11 | ||||
-rw-r--r-- | util/log.h | 9 | ||||
-rw-r--r-- | util/module.h | 9 | ||||
-rw-r--r-- | util/net_help.c | 15 | ||||
-rw-r--r-- | util/net_help.h | 9 | ||||
-rw-r--r-- | util/netevent.c | 796 | ||||
-rw-r--r-- | util/netevent.h | 41 | ||||
-rw-r--r-- | util/ub_event.c | 2 |
19 files changed, 5835 insertions, 4226 deletions
diff --git a/util/config_file.c b/util/config_file.c index ae3b6682ebf5..0784f055912d 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -108,6 +108,7 @@ config_create(void) cfg->ssl_service_pem = NULL; cfg->ssl_port = 853; cfg->ssl_upstream = 0; + cfg->tls_cert_bundle = NULL; cfg->use_syslog = 1; cfg->log_identity = NULL; /* changed later with argv[0] */ cfg->log_time_ascii = 0; @@ -177,6 +178,7 @@ config_create(void) cfg->out_ifs = NULL; cfg->stubs = NULL; cfg->forwards = NULL; + cfg->auths = NULL; #ifdef CLIENT_SUBNET cfg->client_subnet = NULL; cfg->client_subnet_zone = NULL; @@ -219,6 +221,7 @@ config_create(void) cfg->val_log_level = 0; cfg->val_log_squelch = 0; cfg->val_permissive_mode = 0; + cfg->aggressive_nsec = 0; cfg->ignore_cd = 0; cfg->serve_expired = 0; cfg->add_holddown = 30*24*3600; @@ -282,6 +285,7 @@ config_create(void) cfg->dnscrypt_port = 0; cfg->dnscrypt_provider = NULL; cfg->dnscrypt_provider_cert = NULL; + cfg->dnscrypt_provider_cert_rotated = NULL; cfg->dnscrypt_secret_key = NULL; cfg->dnscrypt_shared_secret_cache_size = 4*1024*1024; cfg->dnscrypt_shared_secret_cache_slabs = 4; @@ -374,6 +378,10 @@ struct config_file* config_create_forlib(void) /** put string into strlist */ #define S_STRLIST(str, var) if(strcmp(opt, str)==0) \ { return cfg_strlist_insert(&cfg->var, strdup(val)); } +/** put string into strlist if not present yet*/ +#define S_STRLIST_UNIQ(str, var) if(strcmp(opt, str)==0) \ + { if(cfg_strlist_find(cfg->var, val)) { return 0;} \ + return cfg_strlist_insert(&cfg->var, strdup(val)); } int config_set_option(struct config_file* cfg, const char* opt, const char* val) @@ -437,6 +445,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("ssl-service-key:", ssl_service_key) else S_STR("ssl-service-pem:", ssl_service_pem) else S_NUMBER_NONZERO("ssl-port:", ssl_port) + else S_STR("tls-cert-bundle:", tls_cert_bundle) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -513,6 +522,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("log-queries:", log_queries) else S_YNO("log-replies:", log_replies) else S_YNO("val-permissive-mode:", val_permissive_mode) + else S_YNO("aggressive-nsec:", aggressive_nsec) else S_YNO("ignore-cd-flag:", ignore_cd) else S_YNO("serve-expired:", serve_expired) else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations) @@ -570,8 +580,9 @@ int config_set_option(struct config_file* cfg, const char* opt, 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) + else S_STRLIST_UNIQ("dnscrypt-provider-cert:", dnscrypt_provider_cert) + else S_STRLIST("dnscrypt-provider-cert-rotated:", dnscrypt_provider_cert_rotated) + else S_STRLIST_UNIQ("dnscrypt-secret-key:", dnscrypt_secret_key) else S_MEMSIZE("dnscrypt-shared-secret-cache-size:", dnscrypt_shared_secret_cache_size) else S_POW2("dnscrypt-shared-secret-cache-slabs:", @@ -628,7 +639,7 @@ int config_set_option(struct config_file* cfg, const char* opt, * 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, + * stub-ssl-upstream, forward-zone, auth-zone * name, forward-addr, forward-host, * ratelimit-for-domain, ratelimit-below-domain, * local-zone-tag, access-control-view, @@ -844,6 +855,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "ssl-service-key", ssl_service_key) else O_STR(opt, "ssl-service-pem", ssl_service_pem) else O_DEC(opt, "ssl-port", ssl_port) + else O_STR(opt, "tls-cert-bundle", tls_cert_bundle) else O_YNO(opt, "use-systemd", use_systemd) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) @@ -876,6 +888,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "val-clean-additional", val_clean_additional) else O_DEC(opt, "val-log-level", val_log_level) else O_YNO(opt, "val-permissive-mode", val_permissive_mode) + else O_YNO(opt, "aggressive-nsec:", aggressive_nsec) else O_YNO(opt, "ignore-cd-flag", ignore_cd) else O_YNO(opt, "serve-expired", serve_expired) else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations) @@ -941,6 +954,7 @@ config_get_option(struct config_file* cfg, const char* opt, 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-provider-cert-rotated", dnscrypt_provider_cert_rotated) else O_LST(opt, "dnscrypt-secret-key", dnscrypt_secret_key) else O_MEM(opt, "dnscrypt-shared-secret-cache-size", dnscrypt_shared_secret_cache_size) @@ -1158,6 +1172,28 @@ config_deltrplstrlist(struct config_str3list* p) } void +config_delauth(struct config_auth* p) +{ + if(!p) return; + free(p->name); + config_delstrlist(p->masters); + config_delstrlist(p->urls); + free(p->zonefile); + free(p); +} + +void +config_delauths(struct config_auth* p) +{ + struct config_auth* np; + while(p) { + np = p->next; + config_delauth(p); + p = np; + } +} + +void config_delstub(struct config_stub* p) { if(!p) return; @@ -1237,11 +1273,13 @@ config_delete(struct config_file* cfg) free(cfg->target_fetch_policy); free(cfg->ssl_service_key); free(cfg->ssl_service_pem); + free(cfg->tls_cert_bundle); free(cfg->log_identity); config_del_strarray(cfg->ifs, cfg->num_ifs); config_del_strarray(cfg->out_ifs, cfg->num_out_ifs); config_delstubs(cfg->stubs); config_delstubs(cfg->forwards); + config_delauths(cfg->auths); config_delviews(cfg->views); config_delstrlist(cfg->donotqueryaddrs); config_delstrlist(cfg->root_hints); @@ -1458,6 +1496,22 @@ cfg_region_strlist_insert(struct regional* region, return 1; } +struct config_strlist* +cfg_strlist_find(struct config_strlist* head, const char *item) +{ + struct config_strlist *s = head; + if(!head){ + return NULL; + } + while(s) { + if(strcmp(s->str, item) == 0) { + return s; + } + s = s->next; + } + return NULL; +} + int cfg_strlist_insert(struct config_strlist** head, char* item) { diff --git a/util/config_file.h b/util/config_file.h index 5d9b2d0be15e..2e1c53ee0733 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -42,6 +42,7 @@ #ifndef UTIL_CONFIG_FILE_H #define UTIL_CONFIG_FILE_H struct config_stub; +struct config_auth; struct config_view; struct config_strlist; struct config_str2list; @@ -99,6 +100,8 @@ struct config_file { int ssl_port; /** if outgoing tcp connections use SSL */ int ssl_upstream; + /** cert bundle for outgoing connections */ + char* tls_cert_bundle; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; @@ -170,6 +173,8 @@ struct config_file { struct config_stub* stubs; /** the forward zone definitions, linked list */ struct config_stub* forwards; + /** the auth zone definitions, linked list */ + struct config_auth* auths; /** the views definitions, linked list */ struct config_view* views; /** list of donotquery addresses, linked list */ @@ -297,6 +302,8 @@ struct config_file { int val_log_squelch; /** should validator allow bogus messages to go through */ int val_permissive_mode; + /** use cached NSEC records to synthesise (negative) answers */ + int aggressive_nsec; /** ignore the CD flag in incoming queries and refuse them bogus data */ int ignore_cd; /** serve expired entries and prefetch them */ @@ -466,6 +473,10 @@ struct config_file { struct config_strlist* dnscrypt_secret_key; /** dnscrypt provider certs 1.cert */ struct config_strlist* dnscrypt_provider_cert; + /** dnscrypt provider certs 1.cert which have been rotated and should not be + * advertised through DNS's providername TXT record but are required to be + * able to handle existing traffic using the old cert. */ + struct config_strlist* dnscrypt_provider_cert_rotated; /** memory size in bytes for dnscrypt shared secrets cache */ size_t dnscrypt_shared_secret_cache_size; /** number of slabs for dnscrypt shared secrets cache */ @@ -527,6 +538,29 @@ struct config_stub { }; /** + * Auth config options + */ +struct config_auth { + /** next in list */ + struct config_auth* next; + /** domain name (in text) of the auth apex domain */ + char* name; + /** list of masters */ + struct config_strlist* masters; + /** list of urls */ + struct config_strlist* urls; + /** zonefile (or NULL) */ + char* zonefile; + /** provide downstream answers */ + int for_downstream; + /** provide upstream answers */ + int for_upstream; + /** fallback to recursion to authorities if zone expired and other + * reasons perhaps (like, query bogus) */ + int fallback_enabled; +}; + +/** * View config options */ struct config_view { @@ -721,6 +755,15 @@ char* config_collate_cat(struct config_strlist* list); int cfg_strlist_append(struct config_strlist_head* list, char* item); /** + * Find string in strlist. + * @param head: pointer to strlist head variable. + * @param item: the item to search for. + * @return: the element in the list when found, NULL otherwise. + */ +struct config_strlist* cfg_strlist_find(struct config_strlist* head, + const char* item); + +/** * Insert string into strlist. * @param head: pointer to strlist head variable. * @param item: new item. malloced by caller. If NULL the insertion fails. @@ -808,6 +851,18 @@ void config_delstub(struct config_stub* p); void config_delstubs(struct config_stub* list); /** + * Delete an auth item + * @param p: auth item + */ +void config_delauth(struct config_auth* p); + +/** + * Delete items in config auth list. + * @param list: list. + */ +void config_delauths(struct config_auth* list); + +/** * Delete a view item * @param p: view item */ diff --git a/util/configlexer.c b/util/configlexer.c index 93a9cc7d1379..5d8d17cf3e01 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 237 -#define YY_END_OF_BUFFER 238 +#define YY_NUM_RULES 254 +#define YY_END_OF_BUFFER 255 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,265 +372,284 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2341] = +static yyconst flex_int16_t yy_accept[2508] = { 0, - 1, 1, 219, 219, 223, 223, 227, 227, 231, 231, - 1, 1, 238, 235, 1, 217, 217, 236, 2, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 236, 219, 220, 220, 221, 236, 223, 224, 224, 225, - 236, 230, 227, 228, 228, 229, 236, 231, 232, 232, - 233, 236, 234, 218, 2, 222, 234, 236, 235, 0, - 1, 2, 2, 2, 2, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 219, 0, 223, 0, 230, 0, 227, - 231, 0, 234, 0, 2, 2, 234, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 234, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 234, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 77, - 235, 235, 235, 235, 235, 235, 8, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 88, - 234, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 234, - 235, 235, 235, 235, 235, 235, 235, 37, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 170, 235, 14, 15, 235, 18, 17, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 156, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 3, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 234, 235, 235, 235, - 214, 235, 235, 213, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 226, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 40, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 41, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 145, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 20, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 103, 235, 226, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 197, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 120, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 102, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 75, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 25, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 38, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 39, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 121, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 28, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 185, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 32, 235, - 33, 235, 235, 235, 78, 235, 79, 235, 235, 76, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 7, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 163, 235, 235, 235, 235, 105, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 29, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 137, 235, 136, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 16, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 42, 235, 235, - 235, 235, 235, 235, 235, 144, 235, 235, 235, 235, - - 81, 80, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 131, 235, 235, 235, 235, 235, 235, 235, 235, - 89, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 60, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 64, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 36, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 134, - - 135, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 6, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 195, 235, 235, 215, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 26, 235, 235, 235, 235, 235, 235, 235, - 235, 127, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 149, 235, 128, 235, 235, 161, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 27, 235, 235, 235, 235, 84, - - 235, 85, 235, 83, 235, 235, 235, 235, 235, 235, - 235, 235, 100, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 184, 235, 235, 235, 235, 235, - 235, 235, 235, 129, 235, 235, 235, 235, 235, 132, - 235, 235, 160, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 74, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 34, 235, 235, 22, 235, - 235, 235, 235, 19, 235, 110, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 49, 51, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 199, 235, 235, 235, 171, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 86, 235, 235, 235, 235, 235, 235, - 235, 99, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 209, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 104, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 155, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 119, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 115, 235, 122, 235, 235, - 235, 235, 235, 92, 235, 235, 70, 235, 235, 235, - 235, 147, 235, 235, 235, 235, 235, 162, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 176, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 118, 235, 235, 235, 235, 235, - 52, 53, 235, 235, 235, 235, 235, 35, 235, 235, - 235, 235, 235, 59, 123, 235, 138, 235, 164, 133, - 235, 235, 235, 45, 235, 125, 235, 235, 235, 235, - - 235, 9, 235, 235, 235, 73, 235, 235, 235, 235, - 189, 235, 146, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 106, 198, 235, 235, 235, 235, 175, 235, - 235, 235, 235, 235, 235, 235, 235, 157, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 212, 235, 124, 235, 235, 235, 44, 46, 235, - - 235, 235, 235, 235, 235, 235, 72, 235, 235, 235, - 235, 187, 235, 194, 235, 235, 235, 235, 235, 151, - 23, 24, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 69, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 153, 150, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 43, 235, 235, 235, 235, 235, 235, - 235, 235, 101, 13, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 207, 235, 210, 235, 235, 235, 235, - 235, 235, 12, 235, 235, 21, 235, 235, 235, 193, - - 235, 196, 47, 235, 159, 235, 152, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 114, 113, 235, 235, 235, 235, 235, 235, 235, - 154, 148, 235, 235, 235, 200, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 54, 235, 235, - 235, 188, 235, 235, 235, 235, 235, 158, 235, 235, - 235, 235, 235, 235, 235, 235, 48, 235, 235, 235, - 82, 235, 107, 235, 109, 235, 139, 235, 235, 235, - 112, 235, 235, 165, 235, 235, 235, 235, 235, 94, - - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 172, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 140, 235, 235, 186, 235, - 211, 235, 235, 235, 30, 235, 235, 235, 235, 4, - 235, 235, 93, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 168, 235, 235, 235, 235, 235, - 235, 235, 201, 235, 235, 235, 235, 235, 235, 174, - 235, 235, 143, 235, 235, 235, 235, 235, 235, 235, - 235, 57, 235, 31, 192, 235, 169, 235, 235, 11, - 235, 235, 235, 235, 235, 235, 141, 61, 235, 235, - - 235, 235, 235, 117, 235, 235, 235, 235, 235, 96, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 173, - 90, 235, 87, 235, 235, 235, 63, 67, 62, 235, - 55, 235, 235, 235, 10, 235, 235, 235, 190, 235, - 235, 235, 235, 116, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 68, 66, 235, 56, 208, 235, 235, 235, 130, - 235, 235, 142, 235, 235, 235, 235, 235, 235, 108, - 50, 235, 235, 235, 235, 202, 235, 235, 235, 235, - 235, 235, 235, 91, 65, 97, 98, 58, 235, 191, - - 111, 235, 235, 235, 235, 167, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 71, 235, 166, 235, 183, - 205, 235, 235, 235, 235, 235, 235, 235, 235, 5, - 235, 235, 235, 206, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 95, 235, 235, 235, 235, 235, 235, - 235, 235, 126, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, - - 235, 235, 235, 235, 235, 235, 235, 235, 216, 235, - 235, 179, 235, 235, 235, 235, 235, 203, 235, 235, - 235, 235, 235, 235, 204, 235, 235, 235, 177, 235, - 180, 181, 235, 235, 235, 235, 235, 178, 182, 0 + 1, 1, 236, 236, 240, 240, 244, 244, 248, 248, + 1, 1, 255, 252, 1, 234, 234, 253, 2, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 253, 236, 237, 237, 238, 253, 240, 241, 241, + 242, 253, 247, 244, 245, 245, 246, 253, 248, 249, + 249, 250, 253, 251, 235, 2, 239, 251, 253, 252, + 0, 1, 2, 2, 2, 2, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 236, 0, + 240, 0, 247, 0, 244, 248, 0, 251, 0, 2, + 2, 251, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 251, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 99, 252, 252, 252, 252, 252, 252, 252, + 251, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 83, 252, 252, 252, 252, 252, + + 252, 8, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 103, + 252, 251, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 251, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 43, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 186, 252, 14, 15, + 252, 18, 17, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 98, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 172, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 3, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 251, 252, 252, 252, 252, 252, 231, + 252, 252, 230, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 243, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 46, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 47, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 161, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 20, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 118, 252, 252, 243, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 213, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 136, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 117, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 81, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 28, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 29, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 44, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 97, 252, 252, 252, + 96, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 45, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 137, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 34, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 201, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 38, 252, 39, 252, + 252, 252, 252, 84, 252, 85, 252, 252, 252, 82, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 7, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 179, 252, 252, + 252, 252, 120, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 35, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 153, 252, 152, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 16, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 48, 252, 252, 252, 252, + 252, 252, 252, 160, 252, 252, 252, 252, 252, 87, + + 86, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 147, 252, 252, 252, 252, 252, + 252, 252, 252, 104, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 66, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 70, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 42, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 150, 151, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 6, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 211, 252, + 252, 232, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 32, 252, 252, 252, 252, + 252, 252, 252, 252, 143, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 165, 252, 144, 252, + 252, 177, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 33, 252, + 252, 252, 252, 252, 252, 101, 91, 252, 92, 252, + 252, 90, 252, 252, 252, 252, 252, 252, 252, 252, + 115, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 200, 252, 252, 252, 252, 252, 252, 252, + 252, 145, 252, 252, 252, 252, 252, 148, 252, 252, + 176, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 80, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 40, 252, 252, 252, 22, 252, 252, + + 252, 252, 252, 19, 252, 252, 252, 23, 252, 125, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 55, 57, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 215, 252, 252, 252, 187, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 93, 252, 252, 252, 252, 252, 252, 252, 252, 114, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 226, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 119, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 171, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 135, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 130, 252, + 138, 252, 252, 252, 252, 252, 107, 252, 252, 252, + 76, 252, 252, 252, 252, 163, 252, 252, 252, 252, + 252, 178, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 192, 252, 252, 252, 252, 252, + 252, 100, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 134, 252, 252, 252, 252, 252, 58, 59, 252, + 252, 252, 252, 252, 41, 252, 252, 252, 252, 252, + 65, 139, 252, 154, 252, 180, 149, 252, 252, 252, + 51, 252, 141, 252, 252, 252, 252, 252, 9, 252, + 252, 252, 79, 252, 252, 252, 252, 205, 252, 162, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 133, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 121, 214, 252, 252, 252, + + 252, 191, 252, 252, 252, 252, 252, 252, 252, 252, + 173, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 229, 252, 140, 252, + 252, 252, 50, 52, 252, 252, 252, 252, 252, 252, + 252, 78, 252, 252, 252, 252, 203, 252, 210, 252, + 252, 252, 252, 252, 167, 30, 24, 26, 252, 252, + 252, 252, 252, 31, 25, 27, 252, 252, 252, 252, + 252, 252, 75, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 169, 166, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 49, 252, 102, 252, 252, 252, 252, + 252, 252, 252, 252, 116, 13, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 224, 252, 227, 252, 252, + 252, 252, 252, 252, 12, 252, 252, 21, 252, 252, + 252, 209, 252, 212, 53, 252, 175, 252, 168, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 129, 128, 252, 252, 252, 252, + 252, 252, 252, 170, 164, 252, 252, 252, 216, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 60, 252, 252, 252, 204, 252, 252, 252, 252, + 252, 174, 252, 252, 252, 252, 252, 252, 252, 252, + 54, 252, 252, 252, 88, 89, 252, 122, 252, 124, + 252, 155, 252, 252, 252, 127, 252, 252, 181, 252, + 252, 252, 252, 252, 109, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 188, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 156, 252, 252, 202, 252, 228, 252, 252, 252, + 36, 252, 252, 252, 252, 4, 252, 252, 108, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 184, 252, 252, 252, 252, 252, 252, 252, 217, 252, + 252, 252, 252, 252, 252, 190, 252, 252, 159, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 63, 252, + 37, 208, 252, 185, 252, 252, 11, 252, 252, 252, + 252, 252, 252, 157, 67, 252, 252, 252, 252, 252, + 132, 252, 252, 252, 252, 252, 111, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 189, 105, 252, 94, + 95, 252, 252, 252, 69, 73, 68, 252, 61, 252, + 252, 252, 10, 252, 252, 252, 206, 252, 252, 252, + + 252, 131, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 74, + 72, 252, 62, 225, 252, 252, 252, 146, 252, 252, + 158, 252, 252, 252, 252, 252, 252, 123, 56, 252, + 252, 252, 252, 252, 218, 252, 252, 252, 252, 252, + 252, 252, 106, 71, 112, 113, 64, 252, 207, 126, + 252, 252, 252, 252, 183, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 77, 252, 182, 252, + + 199, 222, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 5, 252, 252, 252, 223, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 110, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 142, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 219, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 233, 252, 252, 195, 252, + 252, 252, 252, 252, 220, 252, 252, 252, 252, 252, + 252, 221, 252, 252, 252, 193, 252, 196, 197, 252, + + 252, 252, 252, 252, 194, 198, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -676,1285 +695,1371 @@ static yyconst YY_CHAR yy_meta[67] = 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2355] = +static yyconst flex_uint16_t yy_base[2522] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 333, 290, 96, 6728, 6728, 6728, 109, 111, + 131, 137, 429, 374, 96, 7166, 7166, 7166, 109, 111, 85, 142, 180, 129, 134, 138, 183, 50, 166, 75, - 214, 204, 124, 256, 141, 248, 304, 200, 258, 286, - 246, 283, 6728, 6728, 6728, 96, 240, 6728, 6728, 6728, - 102, 231, 265, 6728, 6728, 6728, 311, 221, 6728, 6728, - 6728, 115, 212, 6728, 336, 6728, 161, 343, 207, 349, - 115, 0, 353, 0, 0, 107, 216, 159, 252, 345, - 241, 242, 243, 346, 337, 284, 335, 364, 280, 340, - 357, 347, 351, 362, 371, 372, 391, 395, 381, 401, - - 402, 388, 393, 413, 416, 418, 428, 429, 427, 430, - 445, 433, 454, 441, 464, 446, 458, 437, 468, 491, - 457, 269, 484, 479, 481, 403, 462, 485, 511, 497, - 503, 498, 512, 186, 324, 177, 217, 173, 556, 207, - 151, 379, 117, 560, 564, 0, 530, 514, 302, 544, - 551, 555, 546, 552, 561, 548, 560, 575, 572, 573, - 508, 606, 650, 579, 589, 592, 593, 587, 607, 612, - 601, 603, 634, 595, 616, 624, 662, 642, 638, 651, - 628, 656, 693, 665, 666, 679, 677, 691, 684, 692, - 694, 690, 702, 685, 704, 711, 707, 709, 719, 698, - - 723, 721, 738, 726, 748, 732, 750, 737, 762, 747, - 759, 751, 768, 753, 774, 764, 783, 778, 792, 788, - 770, 786, 781, 794, 797, 799, 801, 814, 803, 808, - 819, 824, 828, 787, 813, 830, 841, 246, 826, 846, - 849, 840, 833, 851, 857, 843, 863, 858, 867, 865, - 875, 887, 869, 868, 870, 885, 899, 901, 888, 905, - 890, 902, 892, 917, 911, 916, 918, 912, 937, 913, - 931, 929, 941, 960, 537, 956, 950, 951, 965, 976, - 585, 983, 971, 980, 986, 984, 982, 989, 981, 994, - 1000, 1011, 1012, 1015, 1025, 1010, 1027, 1031, 1038, 1029, - - 1047, 1039, 1042, 1035, 1057, 1061, 1058, 1106, 1074, 1067, - 1083, 1075, 1073, 1090, 1077, 1099, 1111, 1104, 1110, 1114, - 1124, 1123, 1129, 1054, 1126, 1131, 1145, 1084, 1135, 1147, - 1162, 1166, 1148, 1153, 1161, 1164, 1174, 1175, 1180, 1165, - 1171, 1200, 1188, 1203, 1210, 1204, 1087, 1196, 1212, 1215, - 1211, 1201, 1224, 1237, 1227, 1240, 1228, 1238, 1230, 1239, - 1257, 1249, 1251, 1256, 1265, 1270, 1267, 1252, 1274, 6728, - 1280, 1261, 1278, 1284, 1283, 1279, 6728, 1294, 1295, 1290, - 1321, 1310, 1318, 1311, 1316, 1331, 1307, 1326, 1337, 1322, - 1330, 1338, 1340, 1343, 1344, 1363, 1350, 1353, 1399, 1349, - - 1356, 1365, 1384, 1385, 1394, 1383, 1408, 1379, 1412, 1402, - 1410, 1423, 1414, 1421, 1441, 1442, 1428, 1439, 1450, 6728, - 1449, 1396, 1445, 1440, 1455, 1448, 1460, 1463, 1464, 1468, - 1467, 1497, 1481, 1496, 1485, 1498, 1501, 1486, 1491, 1514, - 1506, 1510, 1511, 1520, 1516, 1517, 1526, 1515, 1530, 1521, - 1531, 1518, 1555, 1547, 1534, 1549, 1544, 1560, 1563, 1542, - 1572, 1559, 1569, 1567, 1583, 1587, 1579, 1574, 1578, 1591, - 1595, 1604, 1612, 1616, 1597, 1596, 1623, 1620, 1610, 1622, - 1637, 1627, 1635, 1639, 1636, 1640, 1632, 1650, 1647, 1656, - 1667, 1666, 1680, 1659, 1663, 1683, 1662, 1673, 1684, 1689, - - 1679, 1690, 1701, 1703, 1688, 1710, 1700, 1718, 1705, 1706, - 1707, 1715, 1717, 1716, 1734, 1736, 1737, 1740, 1741, 1738, - 1739, 1759, 1765, 1751, 1761, 1766, 1763, 1775, 1764, 1773, - 1784, 1788, 1796, 1798, 1787, 1802, 1799, 1804, 1810, 1807, - 1814, 1816, 1806, 1813, 1841, 1824, 1829, 6728, 1830, 1746, - 1828, 1854, 1840, 1835, 1864, 1855, 1843, 1846, 1866, 1909, - 6728, 1845, 6728, 6728, 1857, 6728, 6728, 1869, 1877, 1885, - 1896, 1898, 1900, 1958, 1902, 1882, 1888, 1867, 1905, 1911, - 1910, 1919, 1924, 1941, 1947, 1937, 1948, 1954, 1945, 1944, - 1969, 1968, 1972, 1974, 1992, 1979, 1984, 1987, 1990, 2003, - - 1922, 2007, 1983, 2018, 2013, 2017, 2014, 2019, 2006, 2021, - 2029, 2028, 2031, 2033, 2030, 2057, 2040, 6728, 2052, 2053, - 2063, 2065, 2050, 2067, 2056, 2054, 2069, 2048, 2098, 6728, - 2083, 2076, 2081, 2099, 2086, 2091, 2092, 2095, 2097, 2112, - 2103, 2108, 2123, 2125, 2126, 2138, 2120, 2129, 2131, 2128, - 2141, 2151, 2153, 2143, 2154, 2155, 2142, 2172, 2156, 2176, - 2159, 2178, 2180, 2165, 2194, 2184, 2195, 2181, 2193, 2190, - 6728, 2186, 2200, 6728, 2199, 2204, 2250, 2215, 2229, 2220, - 2205, 2236, 2223, 2243, 2231, 2249, 2237, 2264, 2254, 2274, - 2278, 2270, 2273, 2276, 2281, 2297, 2285, 156, 2324, 2292, - - 2302, 2295, 2301, 2314, 2321, 2310, 2306, 2308, 2319, 2339, - 2340, 6728, 2328, 2346, 2337, 2345, 2365, 2357, 2342, 2354, - 2359, 2364, 2379, 2366, 2377, 2373, 2367, 2383, 2381, 2389, - 2390, 2384, 6728, 2395, 2393, 2400, 2388, 2408, 2414, 2416, - 2420, 2430, 2437, 2425, 6728, 2417, 2442, 2449, 2448, 2440, - 2435, 2444, 2439, 2441, 2460, 2452, 2465, 2467, 2458, 2478, - 2479, 2477, 6728, 2485, 2480, 2487, 2495, 2494, 2490, 2499, - 2497, 2500, 2505, 2518, 2514, 2523, 2529, 6728, 2520, 2510, - 2522, 2521, 2524, 2548, 2549, 2542, 2554, 2553, 2543, 2550, - 2555, 121, 2556, 2563, 2552, 2560, 6728, 2569, 68, 2578, - - 2580, 2573, 2583, 2602, 2598, 2604, 2608, 2597, 2600, 2612, - 2594, 2599, 2616, 2619, 2628, 2632, 2635, 2624, 2631, 2633, - 2651, 6728, 2662, 2652, 2641, 2658, 2668, 2655, 2677, 2661, - 2682, 2676, 2683, 6728, 2687, 2692, 2697, 2690, 2688, 2703, - 2704, 2700, 2716, 2699, 2719, 2715, 2725, 2724, 2729, 2727, - 6728, 2730, 2739, 2733, 2738, 2745, 2743, 2774, 2754, 2761, - 2765, 2782, 2806, 2766, 2777, 2764, 2789, 2791, 2785, 2803, - 2817, 2823, 2800, 2827, 2821, 2818, 2810, 2804, 2812, 2835, - 2830, 2859, 2842, 164, 2847, 6728, 2856, 2849, 2853, 2857, - 2894, 2851, 2863, 2869, 2874, 2883, 2876, 2891, 2898, 2893, - - 2887, 2908, 2916, 2902, 2919, 6728, 2920, 2921, 2903, 2927, - 2925, 2928, 2931, 2930, 2933, 2939, 2937, 2948, 2957, 2960, - 2940, 2943, 2967, 2964, 2963, 6728, 2979, 2982, 2975, 2984, - 2972, 2966, 2986, 2995, 2990, 2994, 2978, 3009, 3005, 2996, - 3003, 3004, 3002, 3026, 3013, 3023, 3017, 3029, 3038, 3028, - 3044, 6728, 3039, 3064, 3054, 3059, 3043, 3053, 3074, 3088, - 3070, 3073, 3078, 3075, 3071, 3084, 3081, 3086, 3105, 3094, - 3097, 6728, 3114, 3108, 3106, 3115, 3122, 3113, 3123, 3124, - 3141, 3140, 3151, 3130, 3149, 3159, 3154, 3155, 3145, 3157, - 3164, 3176, 3178, 3189, 6728, 3177, 3188, 3171, 3181, 3183, - - 3185, 3187, 3201, 3191, 3205, 3204, 3206, 3203, 3239, 3242, - 3221, 3216, 3225, 3226, 3228, 3224, 3227, 3251, 3261, 3240, - 3255, 3256, 3260, 3249, 3237, 3265, 3269, 3278, 3277, 3291, - 3288, 3290, 3282, 3301, 3285, 3317, 6728, 3304, 3284, 3299, - 3308, 3325, 3326, 3312, 3315, 3314, 3343, 3345, 6728, 3331, - 6728, 3342, 3353, 3348, 6728, 3355, 6728, 3362, 3350, 6728, - 3361, 3367, 3356, 3340, 3372, 3370, 3374, 3363, 3385, 3382, - 3376, 3401, 3388, 3393, 3403, 3389, 3409, 6728, 3417, 3400, - 3405, 3420, 3428, 3422, 3423, 3429, 3434, 3431, 3450, 3435, - 3427, 3437, 3458, 6728, 3445, 3463, 3449, 3465, 6728, 3456, - - 3472, 3474, 3467, 3464, 3478, 3484, 3488, 3485, 3476, 3507, - 3479, 3499, 3508, 3514, 3502, 3515, 3526, 3521, 3512, 3509, - 3523, 3537, 3533, 3552, 3535, 3546, 3556, 3554, 3545, 3541, - 3547, 3555, 3557, 3564, 3553, 3580, 3572, 3575, 3573, 3583, - 6728, 3589, 3581, 3600, 3596, 3591, 3598, 3593, 3603, 3602, - 3619, 3608, 3628, 3620, 6728, 3630, 6728, 3616, 3626, 3649, - 3648, 3633, 3653, 3638, 3647, 3643, 3657, 3664, 3582, 3659, - 3667, 3675, 3672, 3668, 3676, 3685, 6728, 3679, 3680, 3700, - 3689, 3699, 3706, 3719, 3709, 3695, 3742, 6728, 3728, 3712, - 3729, 3746, 3738, 3749, 3744, 6728, 3731, 3754, 3739, 3759, - - 6728, 6728, 3745, 3755, 3740, 3756, 3765, 3772, 3780, 3771, - 3770, 6728, 3793, 3776, 3790, 3795, 3797, 3799, 3801, 3782, - 6728, 3791, 3808, 3811, 3809, 3807, 3818, 3820, 3821, 3845, - 3832, 3824, 3843, 3850, 3851, 3853, 6728, 3855, 3847, 3858, - 3852, 3859, 3862, 3870, 3871, 3857, 3876, 3868, 3887, 3889, - 3884, 3900, 3897, 3888, 3895, 3904, 3912, 3909, 3915, 3898, - 3913, 3921, 3929, 3917, 3943, 3945, 3952, 3947, 6728, 3956, - 3935, 3957, 3933, 3951, 3955, 3962, 3964, 3974, 3972, 3975, - 3969, 3977, 6728, 3971, 3980, 3998, 3999, 3990, 4008, 4002, - 3989, 3985, 4018, 4004, 4022, 4014, 4017, 4027, 4040, 6728, - - 6728, 4033, 4025, 4043, 4032, 4041, 4044, 4036, 4050, 4038, - 4056, 6728, 4071, 4061, 4059, 4074, 4063, 4087, 4084, 4080, - 4083, 4073, 4075, 4097, 4101, 4078, 4089, 4112, 4102, 4114, - 6728, 4103, 4110, 6728, 4108, 4128, 4120, 4124, 4138, 4146, - 4143, 4129, 4144, 4147, 4151, 4148, 4168, 4169, 4171, 4153, - 4160, 4174, 6728, 4164, 4177, 4170, 4161, 4188, 4178, 4195, - 4180, 6728, 4190, 4201, 4210, 4211, 4194, 4217, 4212, 4219, - 4220, 4207, 6728, 4225, 6728, 4228, 4221, 6728, 4223, 4237, - 4227, 4236, 4247, 4260, 4261, 4240, 4248, 4262, 4251, 4253, - 4273, 4274, 4275, 4267, 6728, 4285, 4264, 4294, 4296, 6728, - - 4284, 6728, 4291, 6728, 4295, 4300, 4290, 4298, 4318, 4324, - 4316, 4312, 6728, 4321, 4309, 4330, 4335, 4333, 4337, 4338, - 4340, 4342, 4346, 4353, 6728, 4343, 4362, 4366, 4357, 4358, - 4379, 4386, 4367, 6728, 4392, 4381, 4380, 4395, 4389, 6728, - 4394, 4402, 6728, 4401, 4411, 4406, 4407, 4418, 4421, 4430, - 4419, 4416, 4422, 4439, 4427, 4433, 6728, 4431, 4438, 4451, - 4454, 4446, 4449, 4475, 4467, 4478, 4462, 4482, 4484, 4481, - 4489, 4465, 4487, 4488, 4492, 6728, 4495, 4498, 6728, 4508, - 4506, 4505, 4512, 6728, 4530, 6728, 4531, 4511, 4514, 4515, - 4535, 4543, 4538, 4545, 4527, 4548, 4554, 4553, 4582, 4560, - - 4558, 6728, 6728, 4569, 4587, 4574, 4584, 4589, 4579, 4576, - 4565, 4592, 4598, 4595, 4604, 6728, 4603, 4606, 4608, 6728, - 4611, 4615, 4605, 4622, 4618, 4625, 4630, 4641, 4640, 4633, - 4649, 4632, 4642, 6728, 4647, 4655, 4638, 4653, 4656, 4667, - 4663, 6728, 4671, 4687, 4688, 4682, 4683, 4689, 4699, 4692, - 4696, 4693, 4690, 4706, 4716, 4712, 4726, 6728, 4727, 4717, - 4718, 4709, 4740, 4741, 4723, 4746, 4729, 4749, 4751, 4743, - 4744, 6728, 4755, 4761, 4753, 4762, 4748, 4771, 4776, 4780, - 4783, 4767, 4770, 4773, 4791, 6728, 4775, 4778, 4794, 4807, - 4814, 4797, 4815, 4800, 4810, 4799, 4828, 4821, 4831, 6728, - - 4823, 4827, 4824, 4826, 4819, 4856, 4858, 4850, 4855, 4859, - 4860, 4862, 4866, 4875, 4870, 6728, 4852, 6728, 4885, 4877, - 4886, 4899, 4889, 6728, 4888, 4897, 6728, 4898, 4901, 4904, - 4902, 6728, 4915, 4927, 4920, 4922, 4923, 6728, 4939, 4945, - 4938, 4925, 4956, 4953, 4941, 4957, 4950, 4946, 4944, 4968, - 6728, 4970, 4961, 4976, 4973, 4959, 4972, 4967, 4989, 4982, - 4999, 5003, 5001, 4994, 6728, 4995, 5005, 5018, 5006, 5013, - 6728, 6728, 5009, 5016, 5021, 5020, 5026, 6728, 5031, 5030, - 5037, 5052, 5047, 6728, 6728, 5055, 6728, 5041, 6728, 6728, - 5058, 5060, 5061, 6728, 5066, 6728, 5072, 5068, 5054, 5053, - - 5073, 6728, 5079, 5077, 5084, 6728, 5082, 5076, 5083, 5092, - 6728, 5094, 6728, 5111, 5108, 5109, 5113, 5103, 5106, 5118, - 5122, 5124, 5126, 5119, 5125, 5128, 5136, 5142, 5130, 5147, - 5140, 5156, 5145, 5162, 5157, 5150, 5151, 5155, 5167, 5182, - 5172, 5170, 5183, 5158, 5181, 5187, 5188, 5200, 5206, 5212, - 5213, 5215, 6728, 6728, 5218, 5203, 5209, 5207, 6728, 5217, - 5223, 5227, 5231, 5243, 5235, 5238, 5258, 6728, 5257, 5254, - 5242, 5264, 5246, 5248, 5262, 5276, 5275, 5272, 5274, 5240, - 5277, 5281, 5278, 5301, 5289, 5290, 5307, 5298, 5311, 5313, - 5314, 6728, 5299, 6728, 5320, 5323, 5325, 6728, 6728, 5326, - - 5327, 5331, 5333, 5337, 5332, 5345, 6728, 5336, 5357, 5335, - 5352, 6728, 5366, 6728, 5367, 5350, 5368, 5375, 5374, 6728, - 6728, 6728, 5382, 5359, 5372, 5378, 5384, 5376, 5386, 5392, - 5379, 5396, 6728, 5405, 5410, 5416, 5407, 5397, 5426, 5423, - 5424, 5433, 5431, 5434, 5425, 5439, 5438, 5441, 6728, 6728, - 5432, 5443, 5469, 5449, 5450, 5479, 5471, 5473, 5474, 5465, - 5476, 5481, 5477, 6728, 5482, 5488, 5472, 5501, 5509, 5510, - 5494, 5515, 6728, 6728, 5504, 5505, 5507, 5527, 5511, 5520, - 5528, 5533, 5521, 6728, 5534, 6728, 5538, 5535, 5564, 5544, - 5555, 5567, 6728, 5559, 5556, 6728, 5570, 5561, 5562, 6728, - - 5578, 6728, 6728, 5573, 6728, 5560, 6728, 5583, 5591, 5581, - 5590, 5584, 5597, 5609, 5599, 5612, 5595, 5601, 5621, 5623, - 5625, 6728, 6728, 5632, 5608, 5627, 5626, 5618, 5630, 5637, - 6728, 6728, 5639, 5638, 5648, 6728, 5622, 5652, 5645, 5664, - 5649, 5657, 5654, 5680, 5666, 5675, 5673, 5686, 5696, 5698, - 5689, 5701, 5688, 5691, 5694, 5700, 5702, 6728, 5709, 5728, - 5716, 6728, 5711, 5730, 5739, 5735, 5732, 6728, 5724, 5745, - 5744, 5743, 5738, 5778, 5747, 5754, 6728, 5750, 5767, 5770, - 6728, 5758, 6728, 5772, 6728, 5765, 6728, 5788, 5790, 5780, - 6728, 5795, 5797, 6728, 5796, 5799, 5792, 5787, 5816, 6728, - - 5761, 5824, 5825, 5804, 5814, 5813, 5831, 5819, 5843, 5817, - 5845, 6728, 5828, 5835, 5849, 5840, 5856, 5857, 5838, 5852, - 5865, 5863, 5859, 5875, 5869, 6728, 5878, 5882, 6728, 5870, - 6728, 5889, 5883, 5896, 6728, 5894, 5884, 5880, 5887, 6728, - 5907, 5905, 6728, 5895, 5913, 5920, 5915, 5909, 5918, 5926, - 5921, 5925, 5936, 5942, 6728, 5945, 5934, 5932, 5949, 5947, - 5960, 5940, 6728, 5966, 5968, 5956, 5965, 5961, 5962, 6728, - 5980, 5963, 6728, 5986, 5989, 5977, 5992, 5996, 5999, 6001, - 5998, 6728, 6008, 6728, 6728, 5993, 6728, 5988, 6013, 6728, - 6011, 6015, 6007, 6022, 6017, 6028, 6728, 6728, 6018, 6041, - - 6035, 6046, 6042, 6728, 6030, 6044, 6048, 6039, 6055, 6728, - 6057, 6060, 6056, 6066, 6045, 6069, 6077, 6078, 6084, 6728, - 6728, 6080, 6728, 6081, 6097, 6098, 6728, 6728, 6728, 6101, - 6728, 6109, 2275, 6106, 6728, 6114, 6105, 6103, 6728, 6115, - 6111, 6116, 6104, 6728, 6121, 6125, 6148, 6135, 6140, 6136, - 6150, 6144, 6154, 6162, 6133, 6157, 6138, 6163, 6164, 6160, - 6170, 6728, 6728, 6173, 6728, 6728, 6174, 6188, 6192, 6728, - 6184, 6194, 6728, 6198, 6187, 6191, 6204, 6195, 6207, 6728, - 6728, 6190, 6206, 6186, 6215, 6728, 6220, 6229, 6213, 6221, - 6219, 6231, 6225, 6728, 6728, 6728, 6728, 6728, 6242, 6728, - - 6728, 6228, 6240, 6237, 6246, 6728, 6236, 6250, 6265, 6264, - 6273, 6262, 6263, 6267, 6279, 6256, 6283, 6276, 6290, 6280, - 6302, 6299, 6312, 6305, 6314, 6297, 6315, 6322, 6323, 6294, - 6320, 6325, 6330, 6333, 6329, 6728, 6336, 6728, 6340, 6728, - 6728, 6334, 6345, 6346, 6341, 6342, 6350, 6357, 6347, 6728, - 6356, 6367, 6355, 6728, 6374, 6368, 6375, 6377, 6380, 6384, - 6391, 6382, 6386, 6398, 6415, 6411, 6414, 6416, 6417, 6401, - 6429, 6425, 6431, 6728, 6418, 6426, 6432, 6435, 6434, 6436, - 6452, 6439, 6728, 6459, 6445, 6456, 6457, 6460, 6469, 6480, - 6461, 6463, 6490, 6486, 6492, 6498, 6501, 6487, 6496, 6504, - - 6503, 6507, 6510, 6517, 6520, 6519, 6534, 6521, 6728, 6522, - 6526, 6728, 6536, 6547, 6531, 6537, 6542, 6728, 6555, 6554, - 6557, 6558, 6560, 6564, 6728, 6562, 6575, 6581, 6728, 6585, - 6728, 6728, 6587, 6574, 6577, 6578, 6580, 6728, 6728, 6728, - 6636, 6643, 6650, 6657, 6664, 83, 6671, 6678, 6685, 6692, - 6699, 6706, 6713, 6720 + 214, 204, 179, 256, 141, 248, 304, 288, 303, 250, + 136, 246, 318, 7166, 7166, 7166, 96, 315, 7166, 7166, + 7166, 102, 314, 339, 7166, 7166, 7166, 278, 299, 7166, + 7166, 7166, 115, 298, 7166, 305, 7166, 161, 346, 293, + 363, 115, 0, 367, 0, 0, 107, 216, 145, 181, + 227, 344, 284, 177, 339, 356, 346, 169, 268, 375, + 355, 352, 366, 358, 363, 380, 392, 386, 403, 391, + + 393, 416, 425, 407, 415, 413, 438, 433, 440, 444, + 434, 448, 458, 451, 471, 443, 257, 459, 464, 467, + 468, 494, 475, 278, 489, 498, 493, 502, 486, 496, + 506, 525, 524, 526, 528, 516, 532, 533, 252, 253, + 237, 319, 235, 577, 259, 121, 312, 117, 587, 591, + 0, 559, 545, 348, 566, 579, 387, 565, 569, 515, + 585, 575, 589, 596, 599, 600, 608, 610, 654, 606, + 619, 615, 624, 627, 637, 640, 645, 635, 628, 667, + 651, 656, 681, 692, 684, 653, 687, 657, 690, 709, + 701, 697, 696, 706, 702, 717, 704, 731, 728, 725, + + 734, 723, 739, 719, 748, 744, 742, 736, 737, 759, + 755, 758, 769, 766, 764, 771, 782, 772, 793, 774, + 799, 802, 785, 807, 798, 812, 707, 823, 816, 819, + 801, 800, 818, 817, 825, 837, 828, 840, 844, 848, + 852, 839, 845, 843, 860, 850, 857, 870, 876, 888, + 241, 865, 890, 892, 879, 881, 899, 894, 903, 867, + 897, 904, 905, 923, 913, 928, 909, 915, 919, 922, + 932, 946, 948, 934, 949, 938, 957, 950, 960, 954, + 962, 964, 970, 983, 977, 991, 985, 989, 987, 1005, + 998, 1014, 1004, 1022, 1011, 1027, 1039, 1035, 1041, 1028, + + 1045, 1034, 1032, 1038, 1061, 1051, 1055, 1062, 1069, 1070, + 1080, 1072, 1090, 1067, 1063, 1087, 1102, 1118, 1104, 1095, + 1113, 1077, 7166, 1122, 1130, 1170, 1120, 1147, 1100, 1099, + 1132, 1148, 1150, 1160, 1143, 1161, 1149, 1198, 1168, 1183, + 1187, 1190, 1196, 1200, 1151, 1199, 1208, 1210, 1209, 1206, + 1222, 1216, 1241, 1225, 1228, 1234, 1239, 1252, 1255, 1256, + 1261, 1242, 1247, 1246, 1271, 1283, 1284, 1289, 1291, 1287, + 1272, 1249, 1298, 1297, 1302, 1286, 1299, 1322, 1310, 1323, + 1316, 1313, 1334, 1318, 1341, 1342, 1340, 1329, 1343, 1344, + 1353, 1359, 1356, 1357, 7166, 1371, 1366, 1368, 1379, 1369, + + 1378, 7166, 1374, 1380, 1383, 1314, 1393, 1403, 1395, 1404, + 1416, 1398, 1410, 1428, 1420, 1421, 1411, 1423, 1437, 1427, + 1436, 1447, 1440, 1430, 1483, 1438, 1450, 1454, 1461, 1465, + 1481, 1471, 1495, 1478, 1498, 1492, 1505, 1490, 1519, 1508, + 1522, 1516, 1518, 1526, 1533, 1532, 1525, 1536, 1549, 7166, + 1545, 1552, 1477, 1550, 1547, 1542, 1567, 1569, 1574, 1568, + 1572, 1540, 1591, 1576, 1595, 1586, 1589, 1590, 1597, 1601, + 1607, 1593, 1611, 1608, 1610, 1627, 1613, 1630, 1633, 1644, + 1620, 1637, 1624, 1638, 1649, 1622, 1636, 1654, 1661, 1662, + 1656, 1670, 1657, 1664, 1673, 1653, 1684, 1668, 1689, 1680, + + 1694, 1701, 1695, 1688, 1713, 1711, 1707, 1723, 1719, 1726, + 1702, 1728, 1730, 1712, 1733, 1716, 1736, 1757, 1738, 1753, + 1758, 1759, 1752, 1760, 1771, 1762, 1777, 1775, 1768, 1782, + 1779, 1780, 1786, 1784, 1781, 1796, 1801, 1798, 1807, 1821, + 1817, 1797, 1813, 1808, 1829, 1820, 1825, 1828, 1832, 1830, + 1849, 1852, 1845, 1844, 1847, 1855, 1848, 1837, 1864, 1865, + 1868, 1878, 1879, 1880, 1900, 1877, 1890, 1887, 1907, 1902, + 1903, 1906, 1908, 1911, 1913, 1926, 1927, 1923, 1930, 1935, + 1934, 1942, 1940, 1950, 1953, 1959, 1957, 1946, 1949, 1965, + 1980, 1972, 1976, 7166, 1969, 1841, 1971, 1990, 1983, 1982, + + 1979, 1993, 1984, 1998, 1999, 2046, 7166, 2015, 7166, 7166, + 1987, 7166, 7166, 2025, 2026, 2009, 2036, 2042, 2022, 2021, + 2027, 2029, 2095, 2039, 2056, 2049, 2054, 2081, 2045, 2082, + 2090, 2073, 2092, 2098, 2109, 2100, 2108, 2116, 2119, 2117, + 2122, 2126, 2123, 2132, 2136, 2140, 2129, 2149, 2152, 2162, + 7166, 2159, 2171, 2173, 2167, 2169, 2172, 2174, 2165, 2185, + 2186, 2158, 2187, 2194, 2197, 2200, 2189, 7166, 2202, 2206, + 2216, 2213, 2209, 2221, 2210, 2207, 2230, 2204, 2248, 7166, + 2242, 2241, 2233, 2253, 2235, 2243, 2245, 2252, 2257, 2255, + 2269, 2249, 2268, 2279, 2281, 2270, 2284, 2296, 2299, 2283, + + 2285, 2297, 2291, 2301, 2295, 2312, 2307, 2324, 2329, 2316, + 2325, 2326, 2320, 2348, 2343, 2339, 2328, 2344, 2355, 2347, + 2359, 2360, 2356, 2363, 2350, 2375, 2358, 2376, 2370, 7166, + 2369, 2377, 7166, 2390, 2374, 2435, 2397, 2396, 2384, 2387, + 2405, 2406, 2423, 2416, 2434, 2427, 2443, 2437, 2448, 2454, + 2431, 2439, 2455, 2470, 2482, 2415, 207, 2489, 2466, 2473, + 2518, 2483, 2493, 2474, 2490, 2503, 2500, 2486, 2509, 2487, + 2515, 2508, 2535, 7166, 2516, 2525, 2521, 2536, 2546, 2542, + 2541, 2545, 2548, 2543, 2561, 2568, 2563, 2553, 2569, 2564, + 2572, 2570, 2574, 2598, 7166, 2580, 2581, 2584, 2588, 2607, + + 2608, 2609, 2611, 2616, 2623, 2615, 7166, 2606, 2631, 2644, + 2629, 2610, 2626, 2637, 2659, 2640, 2654, 2641, 2656, 2658, + 2649, 2664, 2672, 2666, 7166, 2668, 2681, 2676, 2671, 2680, + 2685, 2684, 2703, 2692, 2695, 2693, 2704, 2705, 2720, 2711, + 2718, 7166, 2707, 2731, 2727, 2719, 2721, 2732, 2738, 2724, + 2741, 2761, 2762, 2745, 2758, 2764, 2748, 2756, 2759, 1133, + 2755, 2765, 2776, 2752, 7166, 2780, 2778, 68, 2779, 2769, + 2797, 2781, 2789, 2815, 2817, 2808, 2812, 2816, 2804, 2805, + 2820, 2822, 2811, 2826, 2835, 2832, 2827, 2841, 2838, 2852, + 2843, 2870, 7166, 2860, 2864, 2865, 2853, 2868, 2882, 2892, + + 2876, 2847, 2899, 2887, 7166, 2905, 2902, 2890, 2913, 2908, + 2911, 2909, 2896, 2929, 2928, 2923, 2932, 2927, 2931, 2935, + 2942, 2934, 2940, 2945, 2954, 7166, 2969, 2964, 2958, 2957, + 2981, 2962, 2988, 2975, 2968, 2984, 2998, 3022, 2993, 3001, + 3005, 3011, 3002, 3033, 3038, 3039, 3046, 3028, 3050, 3051, + 3009, 3034, 3019, 3024, 3058, 3049, 3082, 3066, 184, 3070, + 7166, 3080, 3072, 3074, 3079, 3110, 3089, 3086, 3085, 3109, + 3106, 3116, 3112, 3115, 3114, 3113, 3123, 3134, 3130, 3135, + 3144, 7166, 3149, 3151, 3139, 3154, 3140, 3163, 3159, 3147, + 3148, 3170, 3157, 3175, 3186, 7166, 3179, 3184, 3185, 3187, + + 3194, 3197, 3183, 3202, 3196, 3204, 7166, 3205, 3210, 3213, + 3227, 3224, 3215, 3225, 3238, 3219, 7166, 3221, 3220, 3232, + 7166, 3254, 3242, 3230, 3246, 3253, 3237, 3270, 3252, 3249, + 3257, 3273, 3286, 3264, 3283, 7166, 3276, 3309, 3281, 3284, + 3279, 3297, 3303, 3320, 3305, 3302, 3331, 3319, 3322, 3308, + 3311, 3324, 3335, 3326, 3336, 7166, 3343, 3341, 3360, 3362, + 3347, 3353, 3363, 3354, 3364, 3367, 3370, 3376, 3374, 3389, + 3393, 3386, 3399, 3406, 3400, 3405, 3397, 3409, 3422, 3424, + 3420, 3427, 7166, 3410, 3425, 3430, 3426, 3432, 3435, 3433, + 3442, 3438, 3453, 3459, 3449, 3455, 3483, 3484, 3448, 3462, + + 3473, 3475, 3477, 3470, 3479, 3487, 3504, 3486, 3488, 3490, + 3497, 3508, 3491, 3511, 3502, 3524, 3521, 3528, 3532, 3536, + 3529, 3535, 3534, 3539, 7166, 3530, 3549, 3546, 3570, 3574, + 3576, 3559, 3563, 3562, 3557, 3583, 7166, 3569, 7166, 3567, + 3586, 3592, 3600, 7166, 3598, 7166, 3599, 3595, 3596, 7166, + 3601, 3615, 3603, 3627, 3620, 3602, 3608, 3635, 3623, 3629, + 3625, 3641, 3642, 3638, 3644, 3648, 3655, 3649, 3659, 3652, + 7166, 3674, 3663, 3669, 3673, 3676, 3684, 3668, 3671, 3685, + 3697, 3672, 3704, 3708, 3712, 3700, 3714, 7166, 3703, 3722, + 3707, 3719, 7166, 3718, 3727, 3731, 3709, 3730, 3736, 3734, + + 3755, 3750, 3740, 3767, 3771, 3763, 3765, 3775, 3754, 3769, + 3776, 3783, 3787, 3781, 3778, 3798, 3790, 3799, 3825, 3826, + 3817, 3828, 3801, 3827, 3738, 3829, 3812, 3811, 3813, 3821, + 3823, 3851, 3852, 3846, 3847, 3848, 3855, 3845, 7166, 3870, + 3856, 3872, 3879, 3871, 3873, 3857, 3883, 3882, 3890, 3895, + 3903, 3900, 7166, 3904, 7166, 3896, 3911, 3920, 3922, 3907, + 3928, 3929, 3927, 3931, 3932, 3948, 3940, 3937, 3942, 3952, + 3943, 3959, 3958, 3954, 7166, 3951, 3964, 3979, 3967, 3978, + 3985, 3996, 3986, 3981, 4020, 7166, 4001, 4000, 4002, 4009, + 4014, 4021, 4024, 7166, 4012, 4017, 4026, 4022, 4034, 7166, + + 7166, 4023, 4033, 4046, 4050, 4041, 4038, 4053, 4049, 4056, + 4058, 4045, 4062, 4068, 7166, 4074, 4064, 4083, 4091, 4092, + 4094, 4079, 4077, 7166, 4093, 4103, 4090, 4098, 4115, 4104, + 4117, 4113, 4114, 4133, 4125, 4120, 4139, 4146, 4147, 4148, + 7166, 4149, 4142, 4153, 4143, 4156, 4159, 4164, 4141, 4161, + 4169, 4166, 4183, 4182, 4180, 4196, 4190, 4177, 4188, 4200, + 4207, 4204, 4186, 4209, 4206, 4215, 4218, 4220, 4217, 4238, + 4219, 4227, 4241, 4245, 4255, 4250, 7166, 4256, 4239, 4260, + 4233, 4259, 4261, 4268, 4264, 4280, 4243, 4251, 4278, 4254, + 7166, 4302, 4286, 4277, 4297, 4288, 4314, 4301, 4291, 4295, + + 4312, 4305, 4322, 4313, 4320, 4324, 4317, 7166, 7166, 4327, + 4332, 4334, 4330, 4339, 4347, 4338, 4354, 4341, 4359, 7166, + 4357, 4376, 4350, 4371, 4381, 4384, 4385, 4382, 4379, 4372, + 4374, 4383, 4397, 4386, 4390, 4406, 4403, 4417, 7166, 4409, + 4408, 7166, 4413, 4422, 4419, 4420, 4438, 4435, 4447, 4441, + 4430, 4440, 4449, 4450, 4465, 4461, 4467, 4464, 4472, 4484, + 4478, 4487, 4460, 4477, 4488, 7166, 4481, 4491, 4494, 4476, + 4505, 4490, 4514, 4498, 7166, 4518, 4516, 4525, 4524, 4527, + 4509, 4535, 4528, 4533, 4536, 4522, 7166, 4539, 7166, 4537, + 4545, 7166, 4547, 4556, 4543, 4573, 4567, 4572, 4574, 4578, + + 4560, 4581, 4564, 4566, 4584, 4587, 4586, 4575, 7166, 4609, + 4600, 4611, 4613, 4612, 4615, 7166, 7166, 4596, 7166, 4614, + 4616, 7166, 4619, 4617, 4602, 4608, 4649, 4651, 4633, 4646, + 7166, 4655, 4636, 4663, 4657, 4644, 4658, 4660, 4667, 4642, + 4659, 4669, 7166, 4678, 4691, 4700, 4686, 4687, 4705, 4706, + 4689, 7166, 4712, 4718, 4692, 4716, 4715, 7166, 4714, 4724, + 7166, 4732, 4728, 4730, 4735, 4750, 4749, 4753, 4742, 4741, + 4768, 4759, 4757, 4763, 7166, 4747, 4751, 4772, 4774, 4767, + 4769, 4805, 4798, 4802, 4794, 4807, 4809, 4811, 4812, 4792, + 4815, 4817, 4816, 7166, 4833, 4819, 4822, 7166, 4835, 4832, + + 4838, 4839, 4842, 7166, 4849, 4859, 4862, 7166, 4868, 7166, + 4865, 4850, 4855, 4853, 4854, 4893, 4890, 4896, 4883, 4900, + 4898, 4894, 4911, 4905, 4901, 4892, 7166, 7166, 4913, 4932, + 4915, 4916, 4917, 4910, 4923, 4951, 4943, 4952, 4949, 4960, + 7166, 4953, 4936, 4961, 7166, 4937, 4964, 4944, 4971, 4968, + 4972, 4950, 4982, 4993, 4987, 4996, 4977, 4988, 5000, 5006, + 7166, 4989, 4991, 4998, 4995, 5012, 5015, 4999, 5020, 7166, + 5025, 5043, 5042, 5037, 5030, 5038, 5048, 5053, 5054, 5046, + 5047, 5055, 5077, 5066, 5074, 7166, 5080, 5064, 5070, 5082, + 5092, 5095, 5081, 5096, 5087, 5098, 5099, 5088, 5091, 7166, + + 5115, 5103, 5109, 5124, 5113, 5127, 5132, 5137, 5134, 5122, + 5129, 5147, 5143, 7166, 5125, 5123, 5142, 5159, 5148, 5158, + 5167, 5156, 5171, 5155, 5186, 5170, 5189, 7166, 5180, 5183, + 5190, 5174, 5196, 5200, 5197, 5206, 5207, 5205, 5223, 5210, + 5217, 5216, 5222, 5232, 5233, 5226, 5250, 5247, 7166, 5234, + 7166, 5237, 5255, 5268, 5270, 5264, 7166, 5265, 5260, 5263, + 7166, 5273, 5277, 5261, 5282, 7166, 5298, 5291, 5287, 5303, + 5289, 7166, 5305, 5314, 5319, 5313, 5327, 5310, 5312, 5328, + 5321, 5322, 5316, 5330, 7166, 5334, 5342, 5347, 5354, 5344, + 5346, 7166, 5348, 5356, 5352, 5363, 5358, 5365, 5357, 5374, + + 5369, 7166, 5372, 5377, 5394, 5390, 5400, 7166, 7166, 5392, + 5407, 5409, 5384, 5415, 7166, 5414, 5405, 5401, 5420, 5417, + 7166, 7166, 5422, 7166, 5428, 7166, 7166, 5425, 5433, 5423, + 7166, 5424, 7166, 5436, 5447, 5440, 5432, 5453, 7166, 5442, + 5450, 5464, 7166, 5457, 5473, 5452, 5463, 7166, 5471, 7166, + 5475, 5472, 5477, 5484, 5480, 5481, 5487, 5496, 5501, 5506, + 5510, 5500, 5497, 5516, 5519, 5513, 5518, 5526, 5529, 5522, + 5523, 5524, 5511, 5527, 5521, 5535, 5546, 5538, 5540, 5553, + 5545, 5556, 5573, 5562, 7166, 5557, 5554, 5563, 5582, 5565, + 5572, 5583, 5578, 5594, 5606, 7166, 7166, 5610, 5590, 5603, + + 5597, 7166, 5598, 5601, 5600, 5609, 5617, 5612, 5613, 5641, + 7166, 5620, 5639, 5623, 5633, 5634, 5647, 5640, 5644, 5645, + 5649, 5658, 5657, 5664, 5675, 5668, 5672, 5661, 5678, 5673, + 5674, 5691, 5695, 5698, 5701, 5706, 7166, 5689, 7166, 5700, + 5692, 5707, 7166, 7166, 5711, 5714, 5715, 5722, 5725, 5729, + 5728, 7166, 5730, 5736, 5746, 5734, 7166, 5748, 7166, 5750, + 5735, 5751, 5755, 5765, 7166, 7166, 7166, 7166, 5767, 5744, + 5756, 5763, 5770, 7166, 7166, 7166, 5775, 5771, 5781, 5783, + 5782, 5792, 7166, 5784, 5809, 5810, 5789, 5805, 5817, 5813, + 5816, 5827, 5818, 5824, 5819, 5828, 5829, 5830, 7166, 7166, + + 5822, 5836, 5858, 5854, 5860, 5843, 5863, 5864, 5862, 5853, + 5866, 5870, 5861, 7166, 5876, 7166, 5872, 5878, 5889, 5895, + 5900, 5902, 5912, 5905, 7166, 7166, 5896, 5897, 5899, 5919, + 5901, 5916, 5906, 5930, 5931, 7166, 5922, 7166, 5933, 5947, + 5936, 5954, 5948, 5957, 7166, 5946, 5952, 7166, 5963, 5945, + 5961, 7166, 5968, 7166, 7166, 5966, 7166, 5971, 7166, 5977, + 5984, 5987, 5999, 5998, 6000, 6004, 6002, 5992, 6006, 5990, + 5995, 6015, 6013, 6012, 7166, 7166, 6020, 6014, 6017, 6026, + 6021, 6034, 6030, 7166, 7166, 6040, 6041, 6048, 7166, 6027, + 6053, 6042, 6050, 6044, 6043, 6067, 6058, 6047, 6076, 6069, + + 6090, 6094, 6096, 6098, 6085, 6087, 6080, 6078, 6093, 6086, + 6089, 7166, 6110, 6127, 6114, 7166, 6134, 6128, 6138, 6137, + 6131, 7166, 6121, 6143, 6141, 6144, 6136, 6149, 6133, 6147, + 7166, 6150, 6166, 6167, 7166, 7166, 6157, 7166, 6169, 7166, + 6164, 7166, 6183, 6186, 6180, 7166, 6190, 6196, 7166, 6192, + 6194, 6178, 6199, 6206, 7166, 6204, 6215, 6223, 6229, 6214, + 6213, 6230, 6219, 6209, 6224, 6239, 7166, 6225, 6233, 6243, + 6240, 6241, 6259, 6256, 6242, 6255, 6264, 6268, 6251, 6279, + 6269, 7166, 6284, 6287, 7166, 6276, 7166, 6289, 6278, 6293, + 7166, 6302, 6290, 6285, 6299, 7166, 6306, 6295, 7166, 6301, + + 6313, 6319, 6321, 6311, 6320, 6315, 6324, 6332, 6338, 6342, + 7166, 6337, 6333, 6357, 6355, 6358, 6367, 6345, 7166, 6351, + 6368, 6360, 6372, 6374, 6375, 7166, 6377, 6362, 7166, 6386, + 6393, 6398, 6382, 6400, 6397, 6407, 6410, 6406, 7166, 6412, + 7166, 7166, 6395, 7166, 6394, 6425, 7166, 6415, 6417, 6408, + 6420, 6436, 6435, 7166, 7166, 6432, 6422, 6437, 6448, 6449, + 7166, 6430, 6441, 6455, 6439, 6459, 7166, 6462, 6452, 6463, + 6464, 6467, 6453, 6482, 6474, 6488, 7166, 7166, 6486, 7166, + 7166, 6502, 6503, 6501, 7166, 7166, 7166, 6504, 7166, 6507, + 6518, 6510, 7166, 6508, 6520, 6509, 7166, 6519, 6517, 6521, + + 6527, 7166, 6522, 6530, 6552, 6543, 6555, 6541, 6554, 6549, + 6577, 6565, 6537, 6548, 6557, 6566, 6568, 6572, 6574, 7166, + 7166, 6587, 7166, 7166, 6594, 6596, 6597, 7166, 6593, 6603, + 7166, 6606, 6592, 6598, 6608, 6600, 6611, 7166, 7166, 6595, + 6614, 6605, 6625, 6621, 7166, 6640, 6633, 6632, 6642, 6630, + 6627, 6634, 7166, 7166, 7166, 7166, 7166, 6648, 7166, 7166, + 6641, 6652, 6635, 6657, 7166, 6658, 6669, 6660, 6661, 6674, + 6685, 6682, 6675, 6679, 6677, 6678, 6684, 6690, 6700, 6715, + 6709, 6719, 6722, 6725, 6728, 6712, 6713, 6726, 6727, 6730, + 6736, 6749, 6739, 6724, 6743, 6748, 7166, 6753, 7166, 6751, + + 7166, 7166, 6744, 6746, 6771, 6758, 6786, 6787, 6770, 6759, + 6773, 7166, 6763, 6775, 6797, 7166, 6785, 6788, 6790, 6794, + 6795, 6799, 6798, 6822, 6811, 6804, 6833, 6832, 6844, 6839, + 6836, 6838, 6842, 6834, 6849, 6846, 6848, 7166, 6854, 6860, + 6850, 6863, 6864, 6867, 6869, 6859, 6891, 7166, 6889, 6886, + 6896, 6878, 6881, 6880, 6902, 6899, 6908, 7166, 6885, 6913, + 6915, 6916, 6931, 6928, 6929, 6918, 6939, 6941, 6945, 6949, + 6943, 6944, 6935, 6948, 6938, 7166, 6952, 6963, 7166, 6962, + 6964, 6966, 6968, 6991, 7166, 6983, 6978, 6979, 6999, 6986, + 6981, 7166, 7001, 7002, 6996, 7166, 7006, 7166, 7166, 7012, + + 7013, 7015, 7004, 7016, 7166, 7166, 7166, 7074, 7081, 7088, + 7095, 7102, 83, 7109, 7116, 7123, 7130, 7137, 7144, 7151, + 7158 } ; -static yyconst flex_int16_t yy_def[2355] = +static yyconst flex_int16_t yy_def[2522] = { 0, - 2340, 1, 2341, 2341, 2342, 2342, 2343, 2343, 2344, 2344, - 2345, 2345, 2340, 2346, 2340, 2340, 2340, 2340, 2347, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2348, 2340, 2340, 2340, 2348, 2349, 2340, 2340, 2340, - 2349, 2350, 2340, 2340, 2340, 2340, 2350, 2351, 2340, 2340, - 2340, 2351, 2352, 2340, 2353, 2340, 2352, 2352, 2346, 2346, - 2340, 2354, 2347, 2354, 2347, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2348, 2348, 2349, 2349, 2350, 2350, 2340, - 2351, 2351, 2352, 2352, 2353, 2353, 2352, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2352, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2352, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2340, 2346, 2340, 2340, 2346, 2340, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2352, 2346, 2346, 2346, - 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2352, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, - 2340, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2340, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - - 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - - 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340, - - 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346, - 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, - 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2340, 2340, 2346, 2340, 2346, 2340, 2340, - 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, - - 2346, 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2340, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2340, 2340, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, - 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, - 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2340, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2340, - - 2346, 2340, 2340, 2346, 2340, 2346, 2340, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2340, 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, - 2340, 2346, 2340, 2346, 2340, 2346, 2340, 2346, 2346, 2346, - 2340, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2340, 2346, - 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2340, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2346, 2340, 2340, 2346, 2340, 2346, 2346, 2340, - 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2340, 2346, 2346, - - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2340, 2346, 2340, 2346, 2346, 2346, 2340, 2340, 2340, 2346, - 2340, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2340, 2340, 2346, 2340, 2340, 2346, 2346, 2346, 2340, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2340, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2340, 2340, 2340, 2340, 2346, 2340, - - 2340, 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2340, 2346, 2340, - 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, - - 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2340, 2346, - 2346, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2346, 2346, - 2346, 2346, 2346, 2346, 2340, 2346, 2346, 2346, 2340, 2346, - 2340, 2340, 2346, 2346, 2346, 2346, 2346, 2340, 2340, 0, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340 + 2507, 1, 2508, 2508, 2509, 2509, 2510, 2510, 2511, 2511, + 2512, 2512, 2507, 2513, 2507, 2507, 2507, 2507, 2514, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2515, 2507, 2507, 2507, 2515, 2516, 2507, 2507, + 2507, 2516, 2517, 2507, 2507, 2507, 2507, 2517, 2518, 2507, + 2507, 2507, 2518, 2519, 2507, 2520, 2507, 2519, 2519, 2513, + 2513, 2507, 2521, 2514, 2521, 2514, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2515, 2515, + 2516, 2516, 2517, 2517, 2507, 2518, 2518, 2519, 2519, 2520, + 2520, 2519, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2519, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2519, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, + 2513, 2519, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2519, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2507, 2507, + 2513, 2507, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2519, 2513, 2513, 2513, 2513, 2513, 2507, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2519, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2507, 2513, + 2513, 2513, 2513, 2507, 2513, 2507, 2513, 2513, 2513, 2507, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2507, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2507, + + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2507, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2507, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2507, 2513, 2507, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2507, 2513, 2513, + + 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2507, 2513, 2507, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2507, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2507, 2507, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2507, 2507, 2513, 2507, 2513, 2507, 2507, 2513, 2513, 2513, + 2507, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2507, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2507, 2513, 2507, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2507, 2513, 2513, 2513, + + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2507, 2513, + 2513, 2513, 2507, 2507, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2507, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2507, 2507, 2507, 2507, 2513, 2513, + 2513, 2513, 2513, 2507, 2507, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2507, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2507, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2507, 2513, 2513, + 2513, 2507, 2513, 2507, 2507, 2513, 2507, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2507, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2507, 2513, 2513, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2507, 2507, 2513, 2507, 2513, 2507, + 2513, 2507, 2513, 2513, 2513, 2507, 2513, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2507, 2513, 2507, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2507, 2513, + + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, + 2507, 2507, 2513, 2507, 2513, 2513, 2507, 2513, 2513, 2513, + 2513, 2513, 2513, 2507, 2507, 2513, 2513, 2513, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2507, 2513, 2507, + 2507, 2513, 2513, 2513, 2507, 2507, 2507, 2513, 2507, 2513, + 2513, 2513, 2507, 2513, 2513, 2513, 2507, 2513, 2513, 2513, + + 2513, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, + 2507, 2513, 2507, 2507, 2513, 2513, 2513, 2507, 2513, 2513, + 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2507, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2507, 2507, 2507, 2507, 2507, 2513, 2507, 2507, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2507, 2513, + + 2507, 2507, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, + 2513, 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2507, 2513, + 2513, 2513, 2513, 2513, 2507, 2513, 2513, 2513, 2513, 2513, + 2513, 2507, 2513, 2513, 2513, 2507, 2513, 2507, 2507, 2513, + + 2513, 2513, 2513, 2513, 2507, 2507, 0, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507 } ; -static yyconst flex_uint16_t yy_nxt[6795] = +static yyconst flex_uint16_t yy_nxt[7233] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 14, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 14, 14, 14, 14, 41, + 36, 37, 38, 39, 40, 14, 14, 14, 41, 42, 20, 21, 22, 23, 24, 25, 14, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 14, 14, 14, 14, 43, 44, 45, 43, - 44, 45, 48, 49, 48, 49, 50, 99, 50, 53, - 54, 55, 56, 69, 18, 53, 54, 55, 56, 70, - 18, 59, 60, 61, 59, 60, 61, 71, 79, 134, - - 134, 72, 101, 46, 99, 136, 46, 144, 136, 51, - 74, 51, 74, 74, 70, 74, 71, 57, 141, 141, - 72, 74, 148, 57, 70, 79, 76, 77, 62, 101, - 930, 62, 15, 16, 17, 64, 65, 66, 15, 16, - 17, 64, 65, 66, 78, 89, 70, 91, 75, 148, - 70, 93, 67, 76, 77, 80, 144, 109, 67, 94, - 70, 92, 81, 70, 835, 90, 82, 115, 70, 83, - 68, 78, 89, 70, 91, 1030, 68, 70, 93, 67, - 70, 70, 80, 100, 109, 67, 94, 147, 92, 81, - 142, 150, 90, 82, 115, 70, 83, 84, 70, 95, - - 144, 85, 96, 70, 86, 70, 87, 88, 140, 97, - 100, 98, 139, 125, 147, 126, 137, 106, 150, 70, - 136, 107, 70, 136, 84, 135, 95, 102, 85, 96, - 127, 86, 149, 87, 88, 103, 97, 108, 98, 70, - 125, 104, 126, 70, 106, 105, 70, 69, 107, 69, - 69, 144, 69, 70, 102, 70, 328, 127, 69, 149, - 142, 116, 103, 155, 108, 117, 140, 151, 104, 156, - 139, 154, 105, 110, 128, 118, 208, 111, 119, 137, - 70, 70, 70, 112, 129, 70, 113, 70, 116, 130, - 155, 70, 117, 114, 151, 70, 156, 70, 154, 131, - - 110, 128, 118, 132, 111, 119, 165, 133, 70, 224, - 112, 129, 138, 113, 138, 138, 130, 138, 161, 70, - 114, 120, 135, 70, 121, 70, 131, 134, 134, 70, - 132, 122, 2340, 165, 133, 123, 124, 74, 2340, 74, - 74, 70, 74, 70, 143, 161, 143, 143, 120, 143, - 69, 121, 69, 69, 74, 69, 74, 74, 122, 74, - 152, 69, 123, 124, 157, 74, 162, 159, 160, 2340, - 158, 163, 166, 153, 70, 146, 70, 168, 170, 70, - 167, 169, 141, 141, 70, 70, 70, 152, 171, 164, - 70, 157, 75, 162, 159, 160, 70, 158, 172, 166, - - 153, 70, 177, 70, 168, 170, 173, 167, 169, 174, - 70, 70, 179, 2340, 2340, 171, 164, 182, 180, 185, - 70, 183, 175, 176, 184, 172, 178, 70, 2340, 186, - 70, 213, 70, 173, 70, 187, 174, 2340, 181, 179, - 70, 70, 70, 188, 182, 180, 185, 189, 183, 175, - 176, 184, 70, 178, 190, 70, 186, 70, 213, 191, - 192, 193, 187, 194, 202, 181, 70, 70, 70, 70, - 188, 195, 70, 197, 189, 196, 70, 198, 199, 2340, - 70, 190, 207, 200, 70, 70, 191, 192, 193, 201, - 194, 202, 210, 70, 2340, 214, 70, 70, 195, 203, - - 197, 70, 196, 70, 198, 199, 204, 70, 209, 207, - 200, 212, 211, 215, 218, 237, 201, 205, 70, 210, - 70, 206, 214, 70, 70, 216, 203, 219, 220, 221, - 70, 223, 2340, 204, 2340, 209, 70, 70, 212, 211, - 215, 218, 70, 2340, 205, 222, 217, 70, 206, 370, - 70, 70, 216, 70, 219, 220, 221, 138, 223, 138, - 138, 143, 138, 143, 143, 74, 143, 74, 74, 144, - 74, 225, 222, 217, 226, 227, 70, 228, 230, 229, - 231, 232, 233, 70, 2340, 70, 236, 70, 234, 235, - 70, 70, 246, 2340, 70, 2340, 2340, 377, 225, 70, - - 70, 226, 227, 146, 228, 230, 229, 231, 232, 248, - 249, 70, 70, 236, 70, 234, 235, 238, 70, 246, - 247, 239, 250, 251, 70, 257, 70, 253, 70, 252, - 254, 70, 70, 258, 70, 267, 248, 249, 240, 2340, - 70, 259, 70, 2340, 2340, 70, 70, 247, 239, 250, - 251, 70, 257, 2340, 253, 70, 252, 254, 255, 264, - 258, 256, 2340, 70, 2340, 240, 241, 70, 259, 268, - 265, 242, 271, 70, 2340, 260, 243, 70, 2340, 266, - 261, 70, 244, 245, 274, 255, 264, 272, 256, 70, - 70, 276, 262, 241, 263, 70, 268, 265, 242, 277, - - 269, 70, 260, 243, 70, 70, 266, 261, 275, 244, - 245, 270, 273, 278, 272, 279, 70, 281, 70, 262, - 280, 263, 282, 70, 70, 287, 2340, 284, 2340, 70, - 70, 70, 70, 70, 285, 275, 286, 70, 270, 273, - 278, 70, 279, 70, 281, 283, 70, 280, 70, 282, - 70, 288, 287, 289, 284, 290, 291, 294, 70, 2340, - 70, 285, 70, 286, 292, 70, 293, 295, 296, 297, - 300, 70, 283, 299, 2340, 301, 70, 70, 288, 298, - 289, 303, 290, 291, 302, 306, 70, 70, 304, 70, - 70, 292, 70, 293, 295, 296, 305, 300, 70, 308, - - 299, 70, 309, 70, 315, 311, 298, 70, 307, 70, - 312, 302, 313, 70, 314, 304, 316, 70, 317, 310, - 70, 318, 70, 305, 324, 144, 70, 70, 325, 309, - 319, 70, 311, 70, 320, 307, 70, 312, 70, 313, - 70, 314, 70, 316, 326, 317, 310, 70, 323, 321, - 322, 324, 70, 70, 327, 325, 329, 319, 70, 330, - 333, 320, 331, 70, 336, 70, 334, 70, 332, 70, - 337, 326, 70, 335, 339, 323, 321, 322, 340, 70, - 70, 327, 70, 329, 338, 70, 330, 333, 70, 331, - 70, 336, 341, 334, 342, 332, 70, 70, 344, 2340, - - 335, 343, 70, 345, 70, 340, 70, 70, 70, 70, - 346, 338, 347, 2340, 70, 352, 348, 2340, 349, 341, - 351, 350, 353, 356, 70, 344, 70, 70, 343, 70, - 345, 70, 354, 357, 363, 355, 358, 346, 70, 347, - 70, 70, 352, 348, 70, 349, 364, 351, 350, 353, - 70, 70, 70, 2340, 366, 70, 70, 70, 359, 354, - 357, 363, 355, 358, 365, 367, 360, 361, 70, 362, - 70, 371, 2340, 364, 368, 369, 70, 2340, 374, 372, - 70, 366, 373, 2340, 379, 359, 375, 2340, 385, 70, - 70, 365, 367, 360, 361, 70, 362, 376, 371, 70, - - 378, 368, 369, 381, 70, 374, 372, 380, 382, 373, - 70, 379, 2340, 375, 383, 70, 384, 387, 388, 70, - 70, 70, 70, 70, 376, 70, 386, 378, 70, 389, - 381, 2340, 390, 70, 380, 382, 394, 2340, 391, 70, - 392, 383, 393, 384, 387, 399, 400, 2340, 2340, 70, - 70, 70, 398, 386, 70, 395, 389, 2340, 396, 390, - 397, 434, 405, 394, 70, 391, 70, 392, 70, 393, - 70, 403, 401, 400, 70, 404, 407, 70, 70, 398, - 402, 70, 395, 406, 409, 396, 70, 397, 418, 405, - 419, 438, 408, 70, 461, 420, 70, 70, 403, 401, - - 70, 417, 404, 407, 422, 2340, 70, 402, 421, 424, - 406, 409, 70, 70, 144, 418, 70, 423, 426, 408, - 410, 411, 70, 70, 2340, 425, 70, 427, 417, 70, - 412, 422, 413, 414, 415, 421, 424, 416, 70, 428, - 432, 2340, 429, 70, 423, 70, 430, 410, 411, 70, - 70, 431, 425, 70, 427, 436, 433, 412, 435, 413, - 414, 415, 70, 70, 416, 70, 428, 432, 70, 429, - 70, 437, 439, 430, 70, 440, 442, 443, 431, 441, - 444, 445, 436, 433, 70, 435, 70, 70, 448, 446, - 447, 449, 70, 2340, 2340, 452, 450, 453, 437, 439, - - 70, 70, 440, 70, 70, 70, 441, 444, 445, 457, - 70, 451, 2340, 70, 70, 448, 446, 447, 449, 70, - 458, 454, 452, 450, 453, 460, 459, 70, 465, 462, - 463, 464, 455, 466, 456, 70, 457, 467, 451, 70, - 70, 471, 70, 70, 469, 472, 473, 458, 454, 70, - 70, 70, 460, 459, 70, 465, 462, 463, 464, 455, - 466, 456, 468, 70, 467, 470, 70, 70, 471, 70, - 476, 469, 474, 473, 475, 477, 70, 70, 70, 70, - 478, 479, 2340, 480, 481, 482, 2340, 483, 70, 468, - 70, 70, 470, 484, 485, 70, 70, 476, 486, 474, - - 70, 475, 477, 489, 70, 487, 70, 478, 479, 70, - 480, 481, 482, 70, 483, 488, 493, 70, 70, 70, - 484, 485, 70, 70, 490, 486, 491, 492, 494, 70, - 489, 495, 487, 70, 70, 496, 498, 497, 499, 500, - 2340, 501, 488, 493, 502, 2340, 70, 505, 504, 70, - 70, 490, 2340, 491, 492, 70, 2340, 70, 495, 508, - 70, 70, 496, 498, 497, 70, 500, 503, 501, 70, - 70, 509, 506, 507, 505, 504, 70, 70, 511, 70, - 510, 519, 70, 70, 512, 2340, 508, 520, 70, 70, - 2340, 522, 70, 521, 503, 70, 2340, 2340, 509, 506, - - 507, 523, 70, 541, 70, 511, 2340, 510, 519, 525, - 2340, 512, 513, 524, 520, 526, 528, 514, 70, 515, - 521, 527, 70, 70, 70, 529, 2340, 516, 523, 530, - 517, 2340, 2340, 70, 531, 70, 525, 518, 70, 513, - 524, 70, 526, 528, 514, 533, 515, 70, 527, 70, - 532, 70, 529, 70, 516, 534, 530, 517, 535, 537, - 70, 531, 70, 536, 518, 540, 538, 70, 539, 542, - 543, 544, 533, 545, 546, 549, 548, 532, 70, 70, - 70, 70, 534, 547, 70, 535, 537, 70, 144, 70, - 536, 550, 540, 538, 70, 539, 542, 543, 544, 70, - - 545, 546, 70, 70, 551, 552, 70, 70, 2340, 2340, - 547, 553, 554, 2340, 557, 555, 556, 558, 550, 559, - 70, 560, 563, 564, 70, 70, 561, 565, 566, 567, - 70, 562, 552, 568, 573, 70, 70, 70, 553, 554, - 70, 557, 555, 556, 558, 70, 559, 570, 569, 70, - 70, 572, 571, 70, 70, 70, 70, 70, 562, 70, - 70, 573, 574, 575, 576, 70, 577, 579, 581, 70, - 70, 2340, 2340, 70, 570, 569, 578, 2340, 572, 571, - 580, 70, 586, 70, 2340, 592, 70, 582, 70, 585, - 575, 576, 583, 577, 70, 581, 584, 587, 70, 70, - - 588, 591, 70, 578, 589, 590, 70, 580, 70, 586, - 594, 70, 593, 70, 582, 2340, 585, 70, 70, 583, - 595, 600, 70, 584, 587, 599, 70, 588, 591, 597, - 70, 589, 590, 598, 70, 70, 70, 594, 603, 593, - 601, 602, 596, 70, 605, 606, 604, 595, 600, 70, - 607, 70, 599, 609, 608, 70, 597, 612, 611, 70, - 598, 70, 70, 614, 613, 603, 70, 601, 602, 596, - 610, 70, 606, 604, 70, 70, 70, 607, 70, 70, - 609, 608, 615, 616, 619, 611, 70, 617, 620, 70, - 621, 613, 618, 622, 623, 70, 626, 610, 70, 624, - - 2340, 70, 70, 627, 2340, 70, 70, 628, 629, 615, - 616, 619, 70, 630, 625, 620, 631, 2340, 70, 70, - 622, 623, 70, 70, 633, 632, 624, 70, 70, 70, - 627, 634, 635, 640, 628, 636, 637, 641, 638, 70, - 70, 625, 70, 631, 70, 70, 70, 639, 646, 70, - 2340, 633, 632, 677, 70, 70, 70, 70, 634, 635, - 640, 642, 636, 637, 641, 638, 643, 645, 644, 647, - 648, 2340, 649, 70, 639, 70, 70, 70, 70, 70, - 70, 650, 651, 653, 652, 70, 2340, 2340, 642, 656, - 70, 654, 657, 643, 645, 644, 647, 648, 70, 649, - - 70, 658, 70, 70, 70, 70, 655, 659, 650, 651, - 653, 652, 70, 660, 70, 661, 656, 662, 654, 657, - 664, 663, 2340, 70, 667, 671, 70, 70, 658, 668, - 665, 666, 669, 655, 659, 70, 674, 70, 70, 670, - 660, 70, 661, 70, 662, 70, 144, 664, 663, 70, - 675, 667, 70, 70, 672, 70, 668, 665, 666, 669, - 678, 676, 673, 70, 680, 681, 670, 70, 70, 70, - 679, 682, 692, 684, 70, 683, 2340, 675, 2340, 70, - 70, 672, 70, 685, 70, 70, 693, 678, 676, 673, - 694, 680, 681, 70, 70, 695, 70, 679, 686, 692, - - 684, 696, 683, 70, 710, 70, 70, 699, 70, 697, - 685, 698, 2340, 693, 2340, 708, 70, 694, 709, 707, - 711, 70, 695, 712, 70, 686, 687, 70, 696, 713, - 688, 710, 714, 689, 733, 70, 697, 70, 698, 70, - 690, 70, 708, 691, 70, 709, 707, 711, 70, 70, - 70, 715, 718, 687, 716, 2340, 713, 688, 70, 714, - 689, 70, 2340, 70, 717, 719, 2340, 690, 720, 721, - 691, 700, 701, 2340, 702, 722, 70, 703, 715, 718, - 70, 716, 704, 70, 70, 723, 70, 70, 705, 706, - 735, 717, 719, 70, 726, 720, 721, 70, 700, 701, - - 724, 702, 722, 725, 703, 727, 728, 70, 70, 704, - 729, 70, 723, 70, 731, 705, 706, 730, 70, 2340, - 732, 726, 70, 70, 734, 736, 70, 724, 737, 70, - 725, 70, 727, 728, 739, 738, 741, 729, 742, 740, - 2340, 731, 70, 745, 730, 70, 70, 732, 743, 2340, - 747, 734, 70, 70, 746, 737, 70, 70, 70, 744, - 70, 739, 738, 741, 748, 742, 740, 70, 70, 70, - 70, 749, 70, 750, 751, 743, 754, 747, 752, 70, - 755, 746, 753, 756, 759, 757, 744, 70, 763, 70, - 758, 70, 70, 70, 2340, 70, 70, 762, 749, 2340, - - 750, 751, 70, 754, 70, 752, 70, 755, 70, 753, - 756, 759, 757, 760, 764, 70, 765, 758, 770, 766, - 70, 761, 70, 767, 762, 70, 768, 769, 771, 2340, - 70, 70, 778, 772, 70, 781, 70, 70, 70, 773, - 760, 764, 70, 765, 774, 770, 766, 70, 761, 775, - 767, 70, 776, 768, 769, 771, 777, 780, 783, 70, - 772, 779, 70, 791, 70, 70, 773, 70, 70, 784, - 70, 774, 788, 782, 785, 789, 775, 70, 786, 776, - 70, 70, 70, 777, 780, 790, 787, 795, 779, 793, - 70, 792, 70, 70, 70, 70, 784, 796, 70, 788, - - 782, 785, 789, 794, 70, 786, 797, 799, 800, 801, - 2340, 70, 790, 787, 798, 70, 793, 70, 792, 70, - 70, 802, 803, 70, 796, 70, 804, 2340, 813, 70, - 794, 805, 70, 70, 144, 800, 801, 806, 70, 70, - 2340, 798, 816, 70, 70, 814, 2340, 815, 802, 803, - 818, 2340, 817, 804, 70, 813, 821, 820, 805, 70, - 819, 822, 70, 823, 806, 807, 2340, 808, 70, 816, - 70, 809, 814, 810, 815, 70, 70, 818, 811, 817, - 824, 825, 70, 812, 820, 2167, 2168, 819, 70, 70, - 823, 826, 807, 70, 808, 828, 829, 834, 809, 832, - - 810, 827, 831, 70, 833, 811, 830, 824, 825, 70, - 812, 2340, 70, 70, 70, 70, 841, 70, 826, 842, - 70, 843, 828, 829, 70, 844, 832, 845, 827, 831, - 847, 70, 848, 830, 70, 853, 70, 836, 846, 849, - 70, 70, 837, 841, 838, 70, 842, 70, 843, 70, - 850, 851, 844, 70, 845, 839, 852, 847, 70, 848, - 70, 854, 840, 70, 836, 846, 849, 70, 855, 837, - 856, 838, 857, 859, 858, 860, 70, 850, 70, 70, - 861, 70, 839, 852, 70, 70, 863, 864, 854, 840, - 866, 872, 862, 70, 2340, 855, 70, 856, 70, 867, - - 859, 858, 860, 70, 70, 70, 70, 861, 865, 868, - 870, 871, 70, 869, 864, 876, 70, 866, 70, 862, - 70, 873, 70, 70, 874, 877, 867, 70, 70, 70, - 875, 878, 70, 879, 70, 865, 868, 870, 871, 70, - 869, 880, 876, 881, 882, 884, 893, 70, 873, 885, - 883, 874, 877, 70, 886, 70, 70, 875, 878, 70, - 879, 2340, 887, 889, 70, 888, 890, 891, 880, 70, - 881, 892, 884, 894, 70, 895, 70, 883, 70, 70, - 70, 70, 897, 70, 898, 896, 899, 70, 70, 887, - 889, 70, 888, 890, 891, 900, 901, 70, 892, 70, - - 894, 902, 895, 903, 70, 905, 70, 906, 904, 897, - 2340, 898, 896, 899, 909, 907, 70, 70, 70, 70, - 908, 914, 900, 901, 70, 918, 70, 910, 902, 70, - 903, 911, 905, 70, 70, 904, 70, 912, 70, 70, - 915, 909, 907, 913, 70, 919, 916, 908, 921, 70, - 917, 920, 918, 70, 910, 922, 923, 70, 911, 70, - 70, 70, 70, 70, 912, 926, 2340, 915, 70, 924, - 913, 925, 919, 916, 927, 921, 928, 917, 920, 929, - 2340, 70, 70, 933, 932, 2340, 931, 70, 70, 70, - 939, 70, 70, 70, 70, 70, 924, 934, 925, 70, - - 935, 927, 70, 928, 936, 938, 929, 937, 70, 940, - 933, 932, 70, 931, 2340, 941, 2340, 70, 942, 70, - 2340, 947, 70, 944, 934, 943, 945, 935, 2340, 946, - 948, 936, 938, 70, 937, 949, 70, 70, 70, 70, - 2340, 70, 941, 70, 952, 942, 950, 70, 947, 955, - 944, 70, 943, 945, 954, 70, 946, 948, 70, 951, - 963, 953, 949, 70, 2340, 956, 2340, 70, 957, 962, - 70, 70, 70, 950, 70, 961, 955, 958, 968, 959, - 70, 954, 960, 965, 964, 966, 951, 963, 953, 2340, - 70, 70, 956, 970, 70, 957, 962, 70, 967, 972, - - 70, 70, 961, 2340, 958, 968, 959, 70, 973, 960, - 965, 964, 966, 969, 971, 70, 70, 975, 974, 976, - 970, 70, 70, 978, 979, 967, 70, 70, 2340, 70, - 977, 70, 981, 983, 2340, 973, 70, 988, 70, 70, - 969, 971, 70, 70, 975, 974, 976, 980, 987, 982, - 978, 979, 984, 990, 70, 70, 985, 977, 70, 981, - 983, 986, 992, 70, 70, 989, 70, 993, 70, 70, - 991, 1008, 70, 2340, 980, 987, 982, 70, 70, 984, - 990, 994, 70, 985, 70, 996, 995, 997, 986, 992, - 998, 1006, 989, 70, 993, 999, 2340, 991, 1007, 2340, - - 70, 2340, 1009, 70, 70, 70, 1011, 2340, 1010, 2340, - 2340, 1020, 996, 70, 997, 2340, 70, 998, 1006, 1021, - 1012, 70, 999, 1000, 70, 1007, 1001, 1002, 70, 1009, - 70, 1003, 1015, 1011, 1013, 1010, 1014, 1004, 1017, 70, - 1019, 1005, 70, 70, 1018, 70, 1023, 1012, 1016, 70, - 1000, 70, 1022, 1001, 1002, 1029, 70, 70, 1003, 1015, - 70, 1013, 70, 1014, 1004, 1017, 70, 1019, 1005, 70, - 1031, 1018, 1032, 1023, 70, 1016, 1033, 1038, 1035, 1022, - 1024, 70, 1029, 1034, 1039, 1025, 70, 1026, 70, 1027, - 70, 1028, 70, 1043, 1041, 70, 70, 1031, 70, 1032, - - 1040, 1036, 70, 1033, 1038, 1035, 1037, 1024, 70, 1042, - 1034, 1039, 1025, 70, 1026, 70, 1027, 1044, 1028, 1045, - 1043, 1041, 70, 1046, 1047, 1048, 70, 1040, 1049, 1050, - 70, 1051, 70, 70, 1054, 1052, 1042, 70, 1053, 1055, - 1057, 70, 70, 2340, 1044, 1060, 1045, 70, 1058, 2340, - 1046, 1047, 1048, 1066, 1062, 70, 1050, 1056, 70, 70, - 70, 1054, 1052, 1059, 70, 1053, 70, 70, 1063, 70, - 70, 1061, 70, 1067, 1064, 1058, 70, 1065, 70, 70, - 1066, 1062, 70, 1069, 1056, 1068, 1071, 70, 1070, 1072, - 1059, 1074, 1073, 1075, 2340, 1063, 70, 1076, 1061, 70, - - 1067, 1064, 70, 70, 1065, 70, 70, 1078, 2340, 1077, - 1069, 70, 1068, 1081, 70, 1070, 1082, 70, 70, 1073, - 1075, 70, 1079, 70, 1076, 70, 1080, 1086, 1085, 70, - 1087, 1083, 1088, 70, 70, 70, 1077, 1084, 2340, 1089, - 1081, 70, 70, 70, 70, 1090, 1093, 1092, 70, 1079, - 1094, 2340, 70, 1080, 1086, 1085, 70, 1087, 1083, 1088, - 1091, 1096, 70, 1095, 1084, 70, 1089, 70, 70, 1102, - 1097, 1098, 1090, 1093, 1092, 1100, 1099, 70, 70, 1101, - 1103, 2340, 70, 70, 1108, 1110, 2340, 1091, 1096, 2340, - 1095, 1111, 70, 70, 1112, 2340, 1102, 1097, 70, 1109, - - 2340, 1104, 1100, 70, 1105, 1106, 1101, 1103, 1107, 70, - 70, 1108, 70, 70, 70, 1113, 1115, 70, 1111, 1114, - 70, 1112, 1116, 70, 1117, 70, 1109, 70, 1104, 1118, - 1119, 1105, 1106, 70, 2340, 1107, 70, 1121, 1120, 1122, - 1124, 2340, 1113, 1115, 70, 70, 1114, 70, 1123, 1116, - 1125, 1117, 70, 70, 70, 1126, 1118, 1119, 1127, 1128, - 1130, 70, 70, 70, 1121, 1120, 1122, 1124, 1129, 70, - 1131, 1137, 1132, 1134, 1136, 1123, 2340, 1125, 1135, 70, - 70, 1133, 1126, 1138, 70, 1127, 1128, 1130, 70, 1141, - 70, 1139, 1143, 70, 70, 1129, 70, 1131, 70, 1132, - - 1134, 1136, 1140, 70, 1142, 1135, 1147, 2340, 1133, 1145, - 70, 1144, 1146, 2340, 1148, 70, 70, 70, 1139, 1143, - 70, 1151, 70, 1149, 70, 1150, 70, 70, 70, 1140, - 70, 1142, 1152, 1147, 1153, 1162, 1145, 2340, 1144, 1146, - 70, 1148, 70, 70, 70, 70, 1154, 1159, 1151, 1156, - 1149, 1155, 1150, 1158, 1157, 70, 1160, 1161, 1164, 1152, - 70, 1153, 1163, 70, 70, 70, 70, 70, 1166, 1165, - 1172, 1167, 2340, 2340, 1159, 1171, 70, 2340, 70, 70, - 1158, 70, 1174, 1160, 1161, 1164, 1168, 1169, 70, 1163, - 70, 1170, 1173, 1175, 70, 70, 1165, 1172, 1167, 70, - - 70, 1176, 1171, 1177, 70, 1178, 1179, 1180, 70, 1174, - 1182, 1188, 1187, 1168, 1169, 2340, 70, 70, 1170, 1173, - 1175, 70, 1181, 70, 70, 1189, 2340, 70, 1176, 70, - 70, 1183, 1178, 1179, 1180, 1184, 1186, 1182, 70, 1187, - 70, 1190, 1191, 70, 1192, 1193, 1194, 70, 1185, 1181, - 1195, 70, 1189, 70, 70, 1200, 70, 1196, 1183, 1198, - 2340, 1197, 1184, 1186, 70, 70, 1199, 1201, 1190, 1191, - 70, 1192, 1193, 1194, 1202, 1185, 1204, 1207, 1203, 70, - 1205, 70, 70, 1206, 70, 1208, 1198, 70, 1197, 70, - 1211, 1210, 70, 1199, 70, 70, 1209, 1212, 1213, 2340, - - 70, 70, 70, 1204, 1207, 1203, 70, 1205, 1214, 70, - 1206, 70, 1208, 70, 1215, 70, 1217, 1211, 1210, 1218, - 1219, 70, 1216, 1209, 70, 1213, 1220, 70, 70, 1221, - 1222, 1223, 70, 1224, 1233, 1214, 2340, 2340, 2340, 70, - 70, 1215, 70, 1217, 70, 1225, 1218, 1219, 70, 1216, - 1228, 1229, 1232, 1220, 1226, 1227, 70, 1222, 1223, 70, - 1224, 70, 70, 1230, 1231, 1235, 70, 70, 70, 1234, - 70, 1236, 1225, 70, 70, 1237, 70, 1228, 1229, 1232, - 1238, 1226, 1227, 1239, 70, 1241, 1253, 1242, 70, 70, - 1230, 1231, 1240, 1243, 1244, 70, 1234, 70, 1236, 1246, - - 2340, 1247, 70, 70, 70, 1245, 70, 1238, 1249, 1248, - 1239, 70, 1241, 70, 1242, 70, 1254, 70, 70, 1240, - 1243, 1244, 1250, 70, 70, 1251, 1246, 70, 1247, 1255, - 1258, 1256, 1245, 1259, 1260, 1249, 1248, 1252, 70, 1257, - 1262, 70, 1261, 1254, 1264, 2340, 70, 70, 70, 1250, - 1265, 70, 1251, 70, 70, 1263, 1255, 1258, 1256, 1266, - 70, 1260, 70, 1268, 1252, 70, 1257, 1262, 1269, 1261, - 1267, 1270, 70, 1272, 70, 1271, 70, 1265, 1277, 1273, - 70, 1274, 1263, 1275, 70, 70, 70, 1278, 1276, 1311, - 1268, 70, 70, 70, 70, 70, 70, 1267, 1270, 1281, - - 1272, 1283, 1271, 70, 1279, 1277, 1273, 1280, 1274, 1286, - 1275, 70, 70, 1284, 70, 1276, 1282, 1285, 1287, 70, - 70, 70, 70, 1291, 1288, 2340, 1281, 1293, 70, 1289, - 70, 1279, 70, 1290, 1280, 70, 1286, 70, 1300, 70, - 1284, 70, 70, 1282, 1285, 1287, 1292, 70, 1296, 1294, - 1291, 1288, 1295, 1299, 1293, 70, 1289, 1297, 70, 70, - 1290, 1301, 1298, 1302, 1303, 70, 1305, 70, 1306, 70, - 1304, 1312, 70, 1292, 1307, 1296, 1294, 70, 1308, 1295, - 1299, 1309, 70, 2340, 1297, 1310, 70, 70, 70, 1298, - 1302, 1303, 70, 1305, 1316, 1306, 70, 1304, 70, 1313, - - 1314, 1307, 1315, 70, 1317, 1308, 70, 70, 1309, 1318, - 1320, 70, 1310, 1321, 70, 70, 1319, 1322, 70, 70, - 1323, 1316, 2340, 1324, 70, 1329, 1313, 1314, 70, 1315, - 1327, 1317, 1325, 1328, 70, 1332, 1318, 1320, 70, 70, - 1321, 1334, 1333, 1319, 1322, 70, 1326, 1323, 70, 1330, - 1324, 70, 1329, 1335, 1331, 1336, 1337, 1327, 70, 1325, - 1328, 1340, 1338, 1339, 1341, 1346, 2340, 70, 70, 1333, - 70, 2340, 2340, 1326, 1342, 1345, 1344, 70, 70, 70, - 1343, 70, 1336, 70, 70, 70, 1347, 1350, 70, 1338, - 1339, 1341, 1346, 70, 70, 70, 1348, 1349, 70, 1351, - - 1352, 1342, 1345, 1344, 70, 1353, 1355, 1343, 1354, 70, - 70, 70, 1356, 1347, 1357, 70, 1358, 1360, 1361, 70, - 1362, 70, 1359, 1348, 1349, 2340, 1351, 1352, 1364, 70, - 70, 1365, 70, 1355, 70, 1354, 70, 1363, 70, 1356, - 70, 1357, 1366, 1358, 1360, 1361, 70, 70, 70, 1359, - 70, 1367, 1369, 1368, 1371, 1364, 1370, 70, 1365, 70, - 70, 1372, 1373, 70, 1363, 1375, 1374, 2340, 1377, 1366, - 1378, 70, 1376, 1380, 2340, 2340, 1379, 1381, 1367, 2340, - 1368, 1371, 70, 1370, 70, 1386, 70, 1384, 1372, 70, - 70, 70, 70, 1374, 70, 1377, 70, 70, 70, 1376, - - 1380, 70, 1382, 1379, 1381, 1383, 1385, 70, 1387, 70, - 70, 1389, 1386, 1388, 1384, 70, 1395, 1390, 1391, 1396, - 1393, 2340, 1394, 70, 2340, 1400, 70, 70, 70, 1382, - 1399, 1392, 1383, 1385, 70, 1387, 70, 70, 1389, 70, - 1388, 1402, 1397, 70, 1390, 1391, 1398, 1393, 70, 1394, - 1403, 70, 70, 1401, 70, 1404, 70, 1399, 1392, 1406, - 70, 1405, 1407, 1408, 1410, 1409, 1412, 1413, 70, 1397, - 1411, 1415, 70, 1398, 70, 1414, 1422, 1403, 1424, 2340, - 1401, 2340, 70, 1425, 70, 2340, 70, 2340, 1405, 1407, - 70, 70, 1409, 1412, 70, 70, 70, 1411, 1416, 1417, - - 1418, 70, 1414, 70, 1420, 1419, 1426, 1421, 70, 1423, - 70, 70, 1427, 70, 70, 1430, 70, 1429, 1433, 70, - 2340, 1432, 1428, 1431, 70, 1416, 1417, 1418, 70, 70, - 1434, 1420, 1419, 1426, 1421, 1436, 1423, 70, 70, 1427, - 1439, 70, 1435, 70, 1429, 1433, 1437, 70, 1432, 1428, - 1431, 1438, 1440, 70, 1441, 1443, 70, 70, 1442, 1444, - 1445, 70, 1436, 1448, 70, 1446, 70, 1439, 1452, 1435, - 1455, 70, 70, 1437, 1447, 70, 1449, 70, 1438, 70, - 70, 1441, 70, 70, 1450, 1442, 1444, 1445, 1451, 70, - 1448, 1453, 1446, 1454, 1456, 70, 1457, 1458, 70, 2340, - - 70, 1447, 70, 1449, 1459, 1460, 1461, 2340, 1464, 2340, - 70, 1450, 70, 70, 70, 1451, 1463, 70, 1453, 70, - 1454, 1462, 70, 70, 1458, 1466, 70, 1465, 70, 1467, - 1468, 1459, 1460, 1461, 1470, 1464, 70, 1471, 1474, 1472, - 70, 70, 70, 1463, 1473, 1475, 1469, 70, 1462, 70, - 1476, 70, 1466, 70, 1465, 1479, 1467, 1468, 1483, 70, - 1484, 1470, 1480, 70, 1471, 1474, 1472, 70, 70, 1477, - 1481, 1473, 1475, 1469, 1478, 1485, 1487, 70, 1488, 1482, - 1486, 1491, 70, 70, 1490, 70, 70, 70, 1492, 1480, - 70, 1489, 70, 1493, 1494, 1496, 1477, 1481, 1495, 70, - - 70, 1478, 1498, 70, 1499, 1500, 1482, 70, 70, 70, - 70, 1490, 1497, 70, 1501, 1492, 70, 70, 1489, 70, - 1493, 1494, 1502, 1503, 1505, 1495, 1504, 70, 1509, 70, - 1506, 1499, 1500, 70, 70, 2340, 1507, 2340, 1508, 1497, - 70, 1501, 1510, 1511, 1515, 1512, 70, 1513, 1516, 70, - 70, 70, 1520, 1504, 2340, 1509, 70, 1506, 70, 70, - 70, 1514, 70, 1507, 70, 1508, 70, 70, 1517, 1510, - 1511, 1515, 1512, 2340, 1513, 70, 70, 1518, 1519, 70, - 1521, 1523, 1527, 1522, 1524, 2340, 70, 70, 1514, 1525, - 70, 1526, 70, 1528, 1531, 1517, 1534, 1538, 1529, 70, - - 70, 70, 2340, 70, 1518, 1519, 70, 1521, 1523, 1530, - 1522, 1524, 70, 70, 70, 1532, 1525, 1533, 1526, 1535, - 1528, 1531, 1536, 70, 70, 1529, 1537, 1539, 1542, 70, - 70, 1540, 1543, 70, 70, 70, 1530, 70, 1541, 70, - 1544, 1545, 1532, 1546, 1533, 2340, 1535, 2340, 70, 1536, - 2340, 70, 2340, 1537, 1539, 70, 1547, 70, 1540, 1543, - 70, 1549, 1550, 70, 1551, 1541, 1548, 1544, 1545, 70, - 1546, 1554, 70, 1553, 70, 1556, 70, 70, 1558, 70, - 1552, 70, 70, 1547, 1555, 70, 1557, 1559, 1549, 1550, - 1560, 1551, 70, 1548, 1561, 1565, 70, 70, 1554, 1563, - - 1553, 70, 1556, 1562, 2340, 70, 70, 1552, 1568, 1564, - 1566, 1555, 1567, 1557, 1559, 1569, 1570, 1560, 70, 70, - 70, 1561, 1565, 1572, 1574, 70, 1563, 1571, 70, 1580, - 1562, 70, 1575, 70, 70, 1568, 1564, 1566, 1576, 1567, - 70, 70, 1569, 1570, 1573, 70, 70, 1577, 1579, 1578, - 70, 1574, 1582, 1583, 1571, 70, 1581, 70, 70, 1575, - 70, 70, 1584, 1586, 1585, 1576, 70, 1587, 2340, 70, - 70, 1573, 70, 1588, 1577, 1579, 1578, 70, 70, 1582, - 1583, 1589, 1590, 1581, 1591, 70, 1593, 2340, 70, 1584, - 70, 1585, 1592, 70, 1587, 1594, 2340, 1595, 1599, 1600, - - 1588, 70, 1596, 1598, 70, 1597, 70, 2340, 1589, 1601, - 2340, 1591, 1603, 1593, 70, 1604, 1602, 70, 2340, 1592, - 70, 70, 1594, 70, 1595, 1599, 70, 70, 70, 1596, - 1598, 70, 1597, 1605, 70, 1607, 1601, 70, 1606, 1603, - 1608, 1613, 1604, 1602, 70, 70, 1612, 70, 1609, 1611, - 70, 70, 1614, 70, 70, 1616, 1615, 1618, 1619, 1617, - 1605, 1610, 1607, 2340, 1620, 1606, 70, 1608, 1613, 70, - 70, 1621, 1636, 1612, 70, 1609, 1611, 70, 1622, 1614, - 1625, 1627, 70, 1615, 70, 1619, 1617, 70, 1610, 1623, - 1626, 1620, 70, 70, 1624, 1631, 1632, 70, 1621, 70, - - 1628, 2340, 1633, 1634, 70, 1622, 1635, 1625, 70, 1637, - 1638, 1640, 1639, 70, 1629, 70, 2340, 1626, 70, 1641, - 2340, 70, 1631, 70, 1643, 1630, 70, 1628, 70, 1633, - 1634, 70, 1645, 1635, 70, 1648, 1637, 70, 1642, 1639, - 1646, 1629, 70, 70, 70, 70, 1641, 70, 1644, 1647, - 70, 1643, 1630, 1651, 70, 1649, 1652, 70, 1650, 1645, - 1653, 70, 1648, 2340, 70, 1642, 1654, 1646, 2340, 70, - 1655, 70, 70, 1656, 1659, 1644, 1647, 70, 1657, 70, - 70, 70, 1649, 1652, 1660, 1650, 70, 1653, 70, 1661, - 1658, 1662, 70, 1654, 70, 70, 1663, 1655, 1664, 1665, - - 1656, 1659, 70, 1666, 1671, 1657, 70, 1667, 1672, 1668, - 70, 1660, 1670, 2340, 1669, 1674, 1661, 1658, 1662, 1675, - 1673, 70, 70, 1663, 1678, 1664, 70, 70, 70, 70, - 1666, 70, 70, 1683, 1667, 70, 1668, 1676, 70, 1670, - 1677, 1669, 1674, 1679, 1680, 70, 1675, 1673, 70, 1681, - 1682, 70, 1684, 1685, 1686, 70, 70, 70, 1687, 1688, - 1683, 1689, 70, 1690, 1676, 70, 70, 1677, 70, 1691, - 1679, 1680, 1693, 1694, 1696, 1692, 1681, 1682, 1697, 70, - 70, 1686, 70, 70, 1695, 70, 1688, 70, 70, 1698, - 70, 1699, 70, 1700, 70, 1702, 1691, 1704, 1703, 1693, - - 70, 70, 1692, 1706, 1705, 1697, 70, 1707, 1701, 70, - 70, 1695, 70, 1708, 70, 70, 1698, 70, 1699, 70, - 1700, 1709, 70, 1710, 1704, 1703, 1711, 1713, 1712, 1715, - 70, 1705, 1714, 70, 1707, 1701, 70, 1716, 70, 70, - 1708, 1717, 1718, 2340, 1721, 1719, 70, 1720, 1709, 70, - 1710, 1723, 1724, 70, 70, 1712, 1715, 2340, 70, 1714, - 70, 1722, 70, 70, 1716, 70, 70, 70, 1717, 1718, - 70, 1721, 1719, 1725, 1720, 1726, 1728, 1727, 1723, 1724, - 1729, 1730, 1733, 1731, 1735, 2340, 1734, 2340, 1722, 70, - 1737, 70, 1732, 1738, 70, 70, 2340, 70, 70, 70, - - 1725, 70, 1726, 1728, 1727, 70, 1736, 1729, 1730, 70, - 1731, 1735, 1739, 1734, 70, 1743, 70, 1737, 1744, 1732, - 1740, 1741, 1745, 1742, 70, 70, 1748, 70, 70, 1746, - 1749, 1747, 1757, 1736, 2340, 1753, 70, 70, 70, 1739, - 70, 70, 1743, 70, 1750, 1744, 1752, 1740, 1741, 1745, - 1742, 1754, 1751, 1748, 70, 1756, 1746, 1749, 1747, 70, - 1755, 70, 70, 1758, 70, 1759, 70, 1760, 2340, 2340, - 1761, 1750, 1763, 1752, 1762, 1764, 1767, 70, 70, 1751, - 70, 1765, 1756, 70, 70, 70, 1766, 1755, 1768, 70, - 1769, 1770, 70, 1772, 1760, 70, 70, 1761, 70, 1763, - - 70, 1762, 1764, 1767, 1771, 1773, 70, 70, 1765, 70, - 1776, 70, 70, 1766, 1774, 70, 1775, 1769, 1770, 1777, - 1772, 70, 1780, 1779, 1778, 1781, 1782, 1783, 70, 1785, - 2340, 1771, 1773, 70, 70, 1784, 1786, 1790, 70, 1788, - 70, 1774, 70, 1775, 70, 70, 1777, 1789, 70, 1780, - 1779, 1778, 70, 1782, 1783, 70, 1785, 70, 1787, 70, - 70, 1791, 1784, 1786, 1792, 70, 1788, 1794, 1793, 70, - 70, 1795, 2340, 1798, 1789, 1796, 70, 1797, 1799, 1800, - 70, 1801, 1802, 1809, 2340, 1787, 70, 1803, 1791, 2340, - 1804, 70, 70, 70, 70, 1793, 1807, 70, 1795, 70, - - 70, 1806, 1796, 1808, 1797, 70, 1812, 70, 1801, 1802, - 1805, 70, 70, 1810, 1803, 70, 70, 1804, 70, 1811, - 1814, 70, 70, 70, 1813, 2340, 1815, 1816, 1806, 1817, - 1808, 70, 1818, 70, 1820, 1819, 1821, 1805, 1822, 2340, - 1810, 1825, 70, 1823, 2340, 70, 1811, 70, 70, 1828, - 70, 1813, 70, 1815, 1816, 1824, 1817, 70, 70, 1818, - 1826, 70, 1819, 70, 70, 70, 1827, 70, 1825, 70, - 1823, 1829, 1830, 1831, 1833, 70, 1828, 1832, 1834, 70, - 1837, 70, 1824, 1836, 70, 1840, 70, 1826, 1835, 70, - 70, 1841, 1843, 1827, 70, 70, 70, 70, 1829, 1830, - - 1831, 70, 1845, 1838, 1832, 1834, 70, 1837, 1839, 70, - 1836, 70, 1840, 1842, 1846, 1835, 1844, 1847, 1841, 1843, - 70, 70, 70, 1848, 1849, 1850, 70, 70, 1851, 1845, - 1838, 1852, 1854, 1853, 2340, 1839, 2340, 2340, 1855, 70, - 1842, 1846, 70, 1844, 1847, 70, 70, 1875, 70, 1856, - 1848, 70, 70, 1857, 70, 1851, 70, 70, 1852, 1854, - 1853, 1858, 70, 1859, 1860, 1855, 70, 1861, 1862, 1864, - 70, 1863, 1866, 1868, 70, 1865, 1856, 70, 1869, 70, - 1857, 70, 70, 1867, 1873, 70, 1874, 70, 1858, 2340, - 1859, 1860, 1870, 70, 1861, 1862, 70, 70, 1863, 1866, - - 1868, 70, 1865, 70, 1871, 1869, 1872, 1876, 1877, 1878, - 1867, 70, 1883, 70, 70, 70, 70, 70, 1879, 1870, - 70, 1880, 1881, 1884, 1882, 2340, 1886, 1885, 70, 70, - 1887, 1871, 2340, 1872, 1876, 1877, 1878, 70, 70, 1883, - 70, 1888, 1892, 1893, 1896, 1879, 70, 1900, 1880, 1881, - 70, 1882, 70, 70, 1885, 1889, 1890, 1887, 1891, 70, - 1894, 1897, 70, 1898, 70, 70, 70, 1895, 1888, 1892, - 70, 70, 70, 1899, 70, 70, 70, 1901, 1902, 1903, - 1905, 1904, 1889, 1890, 70, 1891, 1907, 1894, 1897, 70, - 1898, 70, 1906, 1909, 1895, 1908, 70, 1910, 70, 1911, - - 1899, 1912, 1913, 1914, 1901, 70, 70, 70, 1904, 1922, - 1916, 70, 1915, 70, 70, 70, 1917, 70, 70, 1906, - 1909, 70, 1908, 70, 1910, 70, 1911, 1919, 1912, 1913, - 1914, 70, 1918, 1920, 1921, 70, 70, 1916, 1923, 1915, - 1926, 1925, 1924, 1917, 70, 2340, 70, 1928, 1927, 70, - 1931, 2340, 1929, 1932, 1919, 70, 1930, 1933, 1934, 1918, - 1920, 1921, 70, 70, 70, 70, 1937, 1938, 1925, 1924, - 70, 70, 70, 70, 1928, 1927, 1935, 70, 70, 1929, - 70, 1936, 70, 1930, 1933, 1934, 1939, 1940, 70, 70, - 1941, 2340, 1943, 1937, 1938, 1942, 1944, 1947, 1945, 2340, - - 2340, 1946, 1949, 2340, 70, 1948, 2340, 1953, 70, 2340, - 70, 70, 70, 70, 1940, 70, 70, 1941, 70, 1943, - 70, 70, 1942, 1944, 1947, 1945, 1950, 70, 1946, 1949, - 1951, 1952, 1948, 70, 1953, 1955, 1954, 1956, 1957, 1958, - 70, 1960, 1959, 70, 70, 1962, 70, 2340, 70, 70, - 70, 1966, 1963, 1950, 70, 1961, 1968, 1951, 1952, 70, - 70, 1964, 1955, 1954, 1956, 1957, 70, 70, 1960, 1959, - 1965, 1967, 70, 70, 70, 1969, 2340, 70, 1966, 1963, - 1971, 1972, 1961, 70, 1970, 1977, 1973, 1974, 1964, 1975, - 2340, 1976, 1978, 1981, 70, 70, 1983, 1965, 70, 70, - - 70, 70, 1969, 70, 1980, 1982, 70, 1971, 1972, 70, - 1984, 1970, 70, 1973, 1974, 1979, 1975, 70, 1976, 1978, - 70, 1985, 70, 70, 1987, 1988, 1986, 1989, 1990, 70, - 70, 1980, 1982, 1997, 70, 1991, 70, 1984, 70, 1993, - 70, 1992, 1979, 1995, 1994, 1996, 1999, 70, 70, 2000, - 2340, 70, 1988, 1986, 1989, 1998, 2001, 70, 2002, 2004, - 70, 70, 70, 2003, 70, 70, 70, 2005, 1992, 70, - 1995, 70, 1996, 1999, 2006, 2007, 70, 70, 70, 2009, - 2011, 2008, 1998, 2001, 70, 2002, 2004, 70, 70, 2010, - 2003, 70, 2012, 70, 2005, 2014, 70, 2013, 2340, 2016, - - 2340, 2006, 2007, 70, 2015, 70, 2009, 2011, 2008, 2017, - 2340, 2018, 70, 2340, 70, 2023, 2010, 2019, 2020, 70, - 2021, 2026, 2014, 2029, 2013, 70, 2016, 70, 70, 2022, - 70, 2015, 2024, 70, 2025, 70, 2017, 70, 2018, 70, - 70, 70, 2023, 2027, 2019, 2020, 2028, 2021, 70, 2030, - 70, 2031, 2032, 2033, 2034, 70, 2022, 2035, 2340, 2024, - 2036, 2025, 2043, 70, 2037, 2038, 2340, 70, 2060, 70, - 2027, 70, 2041, 2028, 70, 2042, 2030, 70, 70, 2032, - 2033, 2034, 70, 70, 70, 2039, 70, 2036, 2044, 70, - 2040, 2037, 2038, 70, 2045, 2046, 2047, 70, 2048, 2041, - - 70, 2051, 2042, 2050, 70, 2049, 70, 2340, 2055, 70, - 2053, 70, 2052, 2054, 2340, 2044, 2063, 70, 2058, 70, - 2056, 2045, 2046, 2047, 2057, 2048, 70, 70, 2051, 70, - 2050, 70, 2049, 2059, 70, 70, 70, 2053, 70, 2052, - 2054, 2061, 2062, 70, 2064, 2058, 2065, 2056, 2066, 2067, - 2068, 2057, 70, 70, 2069, 70, 70, 2070, 70, 2071, - 2059, 2073, 2072, 70, 70, 2074, 2077, 70, 2061, 2062, - 70, 2064, 2075, 2065, 70, 2066, 2067, 70, 2076, 70, - 2080, 2069, 70, 2078, 70, 2079, 2071, 2082, 70, 2072, - 2084, 70, 2074, 2077, 2085, 70, 70, 2081, 70, 2075, - - 2083, 2087, 70, 2086, 70, 2076, 2090, 2080, 70, 70, - 2078, 2088, 2079, 2089, 70, 2092, 2091, 70, 2093, 70, - 2094, 70, 70, 70, 2081, 2097, 70, 2083, 70, 2096, - 2086, 2095, 2098, 70, 70, 70, 2099, 2104, 2088, 2109, - 2089, 2100, 2092, 2091, 70, 2093, 70, 2094, 70, 2101, - 2102, 2105, 70, 2103, 70, 2106, 2096, 70, 2095, 70, - 70, 2110, 2111, 2099, 70, 70, 2108, 2112, 2100, 2107, - 2113, 70, 2117, 70, 2120, 70, 2101, 2102, 2105, 70, - 2103, 70, 2106, 2114, 70, 2115, 70, 2116, 70, 2111, - 2118, 2119, 2121, 2108, 2122, 70, 2107, 2113, 2123, 70, - - 70, 70, 70, 2125, 70, 70, 2124, 70, 2127, 2126, - 2114, 2128, 2115, 2129, 2116, 2130, 70, 2118, 2119, 70, - 2131, 2122, 2133, 2135, 2132, 70, 2134, 70, 70, 2139, - 2125, 70, 70, 2124, 2340, 70, 2126, 70, 70, 2137, - 70, 2136, 2130, 2138, 2141, 2140, 70, 70, 2142, 2133, - 70, 2132, 70, 2134, 70, 2143, 70, 70, 2144, 2145, - 2340, 70, 2146, 2149, 2340, 2148, 2137, 70, 2136, 70, - 2138, 2141, 2140, 2150, 70, 2155, 2147, 2151, 70, 2340, - 70, 70, 2143, 70, 70, 70, 2145, 70, 2153, 2146, - 2149, 2152, 2148, 2162, 70, 70, 70, 2156, 2154, 70, - - 2150, 2160, 2155, 2147, 2151, 70, 2157, 2158, 70, 2163, - 2340, 2159, 2161, 2165, 2164, 2153, 70, 70, 2152, 70, - 70, 2166, 2169, 70, 2156, 2154, 2170, 2173, 2160, 2172, - 2174, 2176, 2175, 2157, 2158, 2171, 70, 70, 2159, 2161, - 70, 2164, 70, 70, 70, 70, 2178, 2180, 70, 2169, - 70, 2177, 2181, 70, 70, 70, 2172, 2174, 2176, 2175, - 70, 2179, 2171, 2182, 70, 2184, 2186, 2183, 2185, 2187, - 2188, 2190, 70, 2178, 70, 70, 2340, 70, 2177, 70, - 2191, 2192, 2194, 70, 2189, 2195, 2196, 70, 2179, 70, - 2182, 2193, 2184, 70, 2183, 2185, 70, 2188, 2190, 70, - - 2197, 70, 70, 70, 2198, 2199, 2200, 2191, 2192, 70, - 2201, 2189, 70, 70, 2202, 2203, 2340, 2204, 2193, 2206, - 2207, 2208, 2205, 70, 2209, 70, 70, 70, 2210, 70, - 70, 70, 2199, 70, 70, 2211, 2212, 70, 2214, 2213, - 2340, 2202, 2203, 70, 2204, 70, 70, 2207, 2208, 2205, - 2215, 2209, 70, 2217, 70, 2210, 2220, 2218, 70, 70, - 70, 2216, 2211, 2219, 70, 2214, 2213, 70, 70, 2221, - 70, 2223, 2222, 2224, 2340, 70, 70, 2215, 2226, 70, - 2217, 70, 2225, 2220, 2218, 70, 2227, 2228, 2216, 70, - 2219, 2340, 2236, 2232, 2229, 70, 2221, 2230, 2223, 2222, - - 2224, 70, 70, 70, 70, 2226, 70, 2231, 2234, 2225, - 2233, 2238, 70, 2227, 2228, 70, 2235, 2240, 70, 70, - 2232, 2229, 70, 2237, 2230, 2239, 2241, 2340, 2242, 70, - 2243, 2246, 2248, 70, 2231, 2234, 70, 2233, 70, 2244, - 2245, 70, 2340, 2235, 70, 2250, 2254, 2247, 2257, 2258, - 2237, 70, 2239, 70, 70, 2242, 2249, 2243, 2246, 70, - 2251, 70, 70, 2252, 70, 2255, 2244, 2245, 70, 70, - 2253, 2264, 70, 70, 2247, 70, 2259, 2256, 2261, 70, - 70, 70, 2260, 2249, 70, 70, 70, 2251, 2262, 70, - 2252, 2265, 2255, 2263, 70, 70, 70, 2253, 2264, 2266, - - 2267, 2270, 2268, 2259, 2256, 2261, 70, 70, 2271, 2260, - 2274, 2269, 2272, 70, 70, 2262, 70, 2273, 2265, 70, - 2263, 70, 2275, 70, 2276, 70, 2266, 2267, 2270, 2268, - 70, 2277, 2280, 2278, 2279, 2271, 2281, 70, 2269, 2272, - 70, 2288, 2282, 2283, 2273, 2285, 2340, 2340, 2340, 2284, - 70, 2276, 2291, 70, 70, 70, 70, 70, 2277, 2280, - 2278, 2279, 2294, 2286, 70, 70, 2287, 2289, 70, 2282, - 70, 70, 2285, 70, 70, 70, 2284, 2290, 70, 2291, - 2292, 2340, 2298, 2293, 70, 2297, 2300, 2295, 2296, 2294, - 2286, 70, 2340, 2287, 2289, 70, 70, 2299, 70, 70, - - 70, 2301, 70, 2302, 2290, 2304, 2307, 2292, 70, 2298, - 2293, 2305, 2297, 2300, 2295, 2296, 2309, 2303, 2306, 70, - 2310, 2311, 2312, 2340, 2299, 70, 70, 2308, 2301, 70, - 2302, 70, 2304, 2307, 2318, 70, 2313, 70, 2305, 2314, - 70, 2340, 70, 70, 2303, 2306, 70, 2310, 2311, 70, - 2315, 2316, 2317, 2320, 2308, 2324, 70, 2319, 70, 70, - 70, 70, 2322, 2313, 2321, 70, 2314, 2325, 2323, 2340, - 70, 2328, 2329, 70, 2331, 70, 70, 2315, 2316, 2317, - 2320, 70, 2324, 2330, 2319, 2326, 70, 2332, 2327, 2322, - 2338, 2321, 2339, 70, 70, 2323, 70, 70, 2328, 70, - - 2333, 70, 2334, 70, 2335, 2336, 2340, 2340, 2337, 2340, - 2330, 2340, 2326, 70, 70, 2327, 70, 70, 2340, 70, - 70, 2340, 2340, 2340, 70, 2340, 70, 2333, 2340, 2334, - 2340, 2335, 2336, 2340, 2340, 2337, 42, 42, 42, 42, - 42, 42, 42, 47, 47, 47, 47, 47, 47, 47, - 52, 52, 52, 52, 52, 52, 52, 58, 58, 58, - 58, 58, 58, 58, 63, 63, 63, 63, 63, 63, - 63, 73, 73, 2340, 73, 73, 73, 73, 134, 134, - 2340, 2340, 2340, 134, 134, 136, 136, 2340, 2340, 136, - 2340, 136, 138, 2340, 2340, 2340, 2340, 2340, 138, 141, - - 141, 2340, 2340, 2340, 141, 141, 143, 2340, 2340, 2340, - 2340, 2340, 143, 145, 145, 2340, 145, 145, 145, 145, - 74, 74, 2340, 74, 74, 74, 74, 13, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340 - + 39, 40, 14, 14, 14, 41, 44, 45, 46, 44, + 45, 46, 49, 50, 49, 50, 51, 101, 51, 54, + 55, 56, 57, 70, 18, 54, 55, 56, 57, 71, + 18, 60, 61, 62, 60, 61, 62, 72, 81, 139, + + 139, 73, 103, 47, 101, 141, 47, 149, 141, 52, + 75, 52, 75, 75, 71, 75, 72, 58, 146, 146, + 73, 75, 153, 58, 71, 81, 77, 78, 63, 103, + 79, 63, 15, 16, 17, 65, 66, 67, 15, 16, + 17, 65, 66, 67, 80, 91, 71, 93, 76, 153, + 71, 95, 68, 77, 78, 82, 149, 79, 68, 96, + 147, 94, 83, 138, 155, 92, 84, 117, 71, 85, + 69, 80, 91, 71, 93, 71, 69, 71, 95, 68, + 71, 71, 82, 102, 71, 68, 96, 152, 94, 83, + 138, 155, 92, 84, 117, 1118, 85, 86, 161, 97, + + 149, 87, 98, 167, 88, 71, 89, 90, 71, 99, + 102, 100, 111, 156, 152, 906, 71, 108, 71, 71, + 71, 109, 71, 71, 86, 161, 97, 104, 87, 98, + 167, 88, 154, 89, 90, 105, 99, 110, 100, 111, + 156, 106, 157, 71, 108, 107, 71, 70, 109, 70, + 70, 349, 70, 71, 104, 71, 139, 139, 70, 154, + 145, 118, 105, 135, 110, 119, 71, 136, 106, 157, + 206, 137, 107, 112, 144, 120, 142, 113, 121, 143, + 71, 143, 143, 114, 143, 216, 115, 71, 118, 71, + 135, 140, 119, 116, 136, 71, 71, 206, 137, 168, + + 112, 127, 120, 128, 113, 121, 75, 71, 75, 75, + 114, 75, 129, 115, 160, 146, 146, 71, 130, 131, + 116, 122, 141, 71, 123, 141, 168, 71, 127, 132, + 128, 124, 71, 133, 134, 125, 126, 149, 147, 129, + 145, 160, 71, 71, 151, 130, 131, 148, 122, 148, + 148, 123, 148, 144, 142, 235, 132, 140, 124, 158, + 133, 134, 125, 126, 70, 162, 70, 70, 75, 70, + 75, 75, 159, 75, 163, 70, 165, 166, 71, 75, + 164, 171, 169, 71, 172, 71, 158, 71, 175, 173, + 174, 71, 162, 176, 71, 71, 177, 71, 184, 159, + + 170, 163, 71, 165, 166, 71, 76, 164, 171, 178, + 239, 172, 179, 71, 71, 175, 173, 174, 180, 71, + 176, 181, 185, 177, 186, 71, 71, 170, 2507, 194, + 71, 71, 71, 187, 182, 183, 178, 239, 191, 179, + 189, 193, 71, 192, 190, 180, 71, 2507, 181, 185, + 2507, 186, 71, 188, 71, 71, 194, 195, 196, 197, + 187, 182, 183, 2507, 71, 191, 199, 189, 193, 198, + 192, 190, 71, 71, 201, 205, 2507, 71, 200, 71, + 188, 202, 71, 71, 195, 196, 197, 71, 203, 208, + 71, 207, 204, 199, 210, 209, 198, 71, 71, 211, + + 215, 201, 205, 71, 2507, 200, 71, 71, 202, 212, + 71, 218, 2507, 217, 71, 203, 208, 222, 207, 204, + 213, 210, 209, 220, 214, 71, 211, 215, 71, 223, + 221, 219, 71, 71, 224, 71, 212, 71, 218, 225, + 217, 71, 242, 228, 222, 71, 230, 213, 227, 231, + 220, 214, 229, 2507, 71, 71, 223, 221, 219, 232, + 226, 224, 234, 71, 71, 71, 225, 71, 2507, 242, + 228, 71, 71, 230, 233, 227, 231, 2507, 143, 229, + 143, 143, 2507, 143, 71, 240, 232, 226, 148, 234, + 148, 148, 75, 148, 75, 75, 236, 75, 149, 237, + + 241, 233, 243, 246, 71, 71, 238, 244, 71, 247, + 245, 2507, 240, 249, 71, 250, 248, 2507, 71, 259, + 2507, 251, 2507, 236, 71, 252, 237, 241, 71, 243, + 151, 2507, 261, 238, 244, 71, 247, 245, 71, 71, + 249, 262, 253, 248, 264, 71, 259, 71, 2507, 71, + 260, 263, 252, 2507, 71, 269, 266, 2507, 71, 261, + 2507, 268, 267, 71, 282, 2507, 71, 71, 262, 253, + 254, 2507, 265, 273, 71, 255, 71, 260, 263, 71, + 256, 272, 269, 266, 71, 280, 257, 258, 268, 267, + 71, 270, 71, 71, 271, 71, 71, 254, 274, 265, + + 273, 279, 255, 283, 287, 275, 71, 256, 272, 290, + 276, 292, 280, 257, 258, 281, 284, 288, 270, 323, + 71, 271, 277, 71, 278, 274, 71, 285, 279, 71, + 283, 71, 275, 286, 291, 71, 71, 276, 293, 289, + 71, 71, 281, 71, 288, 71, 71, 294, 71, 277, + 295, 278, 296, 299, 285, 297, 71, 298, 71, 302, + 286, 291, 71, 303, 71, 304, 289, 71, 300, 301, + 71, 310, 306, 71, 294, 71, 71, 295, 71, 296, + 299, 71, 297, 71, 298, 308, 302, 71, 307, 313, + 303, 305, 304, 316, 71, 300, 301, 71, 71, 306, + + 309, 311, 312, 71, 314, 71, 317, 315, 71, 318, + 71, 71, 308, 71, 320, 307, 319, 330, 305, 2507, + 316, 71, 321, 326, 71, 322, 2507, 309, 311, 312, + 324, 314, 71, 327, 315, 335, 329, 71, 71, 71, + 71, 71, 331, 319, 330, 333, 71, 336, 332, 321, + 328, 71, 322, 325, 334, 71, 71, 149, 71, 339, + 327, 337, 71, 329, 71, 338, 340, 71, 2507, 331, + 344, 341, 333, 342, 358, 332, 71, 328, 71, 71, + 325, 334, 71, 71, 71, 346, 343, 71, 337, 71, + 347, 71, 338, 340, 345, 350, 71, 344, 341, 71, + + 342, 348, 2507, 351, 71, 352, 71, 353, 354, 71, + 356, 360, 346, 343, 355, 71, 366, 347, 71, 361, + 71, 345, 350, 359, 357, 2507, 364, 71, 348, 71, + 351, 71, 352, 71, 353, 354, 71, 356, 71, 362, + 2507, 355, 71, 71, 71, 365, 361, 367, 71, 368, + 359, 357, 71, 364, 71, 369, 363, 370, 71, 371, + 2507, 71, 71, 372, 373, 374, 362, 71, 375, 380, + 376, 71, 365, 71, 367, 378, 368, 71, 379, 381, + 377, 2507, 369, 363, 370, 71, 371, 71, 71, 71, + 372, 373, 374, 71, 382, 375, 71, 376, 387, 71, + + 389, 71, 378, 71, 383, 379, 381, 377, 388, 71, + 395, 392, 384, 385, 391, 386, 71, 2507, 390, 393, + 394, 382, 71, 2507, 71, 387, 71, 389, 71, 396, + 71, 383, 400, 397, 2507, 388, 398, 71, 392, 384, + 385, 391, 386, 71, 71, 390, 393, 394, 401, 399, + 71, 402, 403, 71, 404, 405, 396, 2507, 407, 400, + 397, 71, 406, 398, 408, 409, 71, 71, 410, 413, + 425, 71, 412, 71, 71, 401, 399, 71, 71, 403, + 71, 404, 405, 411, 71, 407, 414, 415, 424, 406, + 71, 408, 409, 416, 71, 417, 2507, 418, 419, 412, + + 71, 71, 71, 436, 426, 420, 71, 449, 71, 71, + 411, 71, 450, 414, 415, 424, 71, 451, 421, 71, + 416, 422, 417, 423, 418, 419, 71, 427, 434, 71, + 436, 426, 420, 429, 71, 428, 433, 437, 71, 71, + 435, 71, 1011, 71, 451, 421, 430, 447, 422, 431, + 423, 432, 71, 438, 427, 434, 439, 71, 467, 71, + 429, 71, 428, 433, 437, 452, 2507, 435, 448, 71, + 2507, 149, 71, 430, 447, 458, 431, 454, 432, 453, + 438, 456, 71, 439, 440, 441, 71, 71, 71, 71, + 71, 455, 452, 457, 442, 448, 443, 444, 445, 71, + + 71, 446, 458, 461, 454, 459, 453, 71, 456, 71, + 2507, 440, 441, 465, 460, 462, 471, 464, 455, 463, + 457, 442, 71, 443, 444, 445, 71, 466, 446, 71, + 461, 468, 469, 474, 2507, 71, 470, 71, 71, 71, + 465, 460, 462, 472, 464, 71, 463, 71, 71, 71, + 473, 475, 476, 2507, 466, 71, 478, 477, 468, 469, + 474, 71, 479, 470, 71, 480, 481, 71, 2507, 486, + 472, 482, 483, 71, 485, 487, 488, 473, 71, 497, + 71, 71, 498, 478, 477, 71, 71, 484, 71, 479, + 2507, 71, 480, 481, 71, 71, 486, 489, 482, 483, + + 71, 485, 487, 488, 490, 493, 494, 495, 496, 498, + 71, 71, 503, 500, 484, 491, 499, 492, 502, 501, + 508, 531, 71, 71, 489, 71, 71, 505, 71, 507, + 71, 490, 493, 494, 495, 496, 71, 71, 71, 503, + 500, 71, 491, 499, 492, 502, 501, 504, 506, 71, + 509, 510, 71, 71, 505, 71, 507, 71, 511, 514, + 516, 71, 71, 512, 513, 2507, 517, 515, 71, 2507, + 520, 2507, 2507, 71, 504, 506, 518, 509, 510, 71, + 71, 71, 71, 71, 521, 511, 514, 516, 523, 519, + 512, 513, 71, 517, 515, 71, 71, 520, 71, 522, + + 524, 525, 526, 518, 527, 71, 528, 71, 71, 530, + 71, 521, 529, 71, 532, 523, 519, 71, 71, 71, + 533, 534, 71, 536, 535, 538, 522, 524, 525, 526, + 537, 527, 71, 528, 71, 539, 530, 71, 542, 529, + 2507, 532, 71, 71, 546, 543, 541, 533, 534, 71, + 71, 535, 538, 545, 2507, 71, 544, 537, 540, 71, + 71, 550, 71, 547, 548, 542, 71, 71, 549, 71, + 558, 546, 543, 541, 2507, 71, 71, 71, 561, 71, + 545, 559, 560, 544, 585, 540, 71, 2507, 550, 71, + 547, 548, 562, 71, 2507, 549, 551, 558, 563, 564, + + 71, 552, 565, 553, 71, 561, 567, 2507, 559, 560, + 71, 554, 566, 568, 555, 556, 71, 71, 570, 562, + 71, 557, 71, 551, 569, 563, 564, 571, 552, 71, + 553, 71, 572, 567, 71, 573, 2507, 71, 554, 566, + 568, 555, 556, 575, 71, 570, 574, 71, 557, 576, + 578, 569, 594, 579, 571, 71, 580, 71, 71, 572, + 577, 71, 573, 581, 71, 71, 583, 582, 584, 588, + 575, 71, 71, 574, 586, 71, 576, 578, 587, 71, + 579, 71, 592, 580, 71, 590, 71, 577, 71, 71, + 581, 149, 593, 583, 582, 584, 588, 589, 595, 591, + + 596, 586, 597, 2507, 599, 587, 71, 71, 71, 592, + 598, 71, 590, 71, 601, 71, 602, 600, 606, 593, + 611, 605, 609, 607, 589, 71, 591, 596, 71, 71, + 71, 599, 71, 608, 71, 603, 71, 598, 604, 610, + 71, 601, 612, 602, 600, 613, 71, 71, 605, 71, + 71, 614, 71, 615, 616, 617, 2507, 620, 618, 71, + 608, 71, 603, 71, 619, 604, 71, 621, 623, 71, + 622, 628, 71, 2507, 2507, 71, 71, 71, 624, 630, + 615, 616, 617, 71, 620, 618, 625, 626, 71, 627, + 629, 619, 71, 71, 621, 71, 71, 622, 634, 631, + + 71, 71, 635, 71, 632, 624, 630, 71, 633, 71, + 636, 637, 71, 625, 626, 640, 627, 629, 638, 71, + 641, 639, 643, 71, 651, 634, 631, 71, 71, 635, + 648, 632, 642, 71, 71, 633, 646, 636, 637, 644, + 71, 71, 640, 647, 653, 638, 71, 650, 639, 643, + 71, 71, 71, 649, 652, 71, 656, 648, 71, 642, + 654, 645, 71, 646, 655, 71, 644, 71, 657, 71, + 647, 653, 71, 658, 650, 71, 659, 71, 662, 663, + 649, 652, 660, 656, 664, 666, 661, 654, 645, 667, + 665, 71, 71, 671, 668, 657, 71, 71, 71, 71, + + 658, 71, 673, 659, 669, 670, 663, 71, 676, 660, + 71, 674, 666, 661, 71, 672, 71, 665, 71, 71, + 71, 71, 677, 71, 678, 71, 675, 683, 679, 673, + 681, 669, 670, 680, 682, 71, 71, 71, 674, 684, + 71, 2507, 672, 685, 698, 2507, 71, 71, 736, 677, + 686, 678, 71, 675, 683, 687, 71, 681, 688, 71, + 71, 682, 690, 689, 71, 691, 684, 71, 71, 71, + 685, 71, 693, 692, 694, 697, 71, 686, 695, 696, + 71, 2507, 687, 71, 71, 688, 71, 71, 71, 690, + 689, 71, 691, 706, 71, 699, 700, 2507, 701, 693, + + 692, 694, 697, 71, 71, 695, 696, 71, 702, 703, + 708, 704, 2507, 705, 2507, 2507, 71, 71, 71, 71, + 706, 707, 699, 700, 709, 701, 71, 713, 714, 71, + 710, 712, 715, 2507, 711, 702, 703, 708, 704, 71, + 705, 71, 71, 716, 717, 71, 71, 71, 707, 719, + 71, 709, 71, 718, 713, 714, 720, 710, 712, 715, + 721, 711, 71, 722, 723, 71, 71, 724, 725, 71, + 716, 717, 728, 71, 71, 726, 719, 730, 727, 71, + 718, 71, 729, 720, 733, 71, 741, 721, 71, 149, + 722, 723, 71, 731, 724, 725, 71, 734, 71, 728, + + 735, 732, 726, 737, 71, 727, 738, 739, 71, 729, + 71, 71, 740, 742, 743, 71, 752, 2507, 71, 71, + 731, 71, 71, 71, 734, 755, 71, 735, 732, 71, + 737, 745, 71, 738, 739, 744, 761, 71, 71, 740, + 742, 743, 751, 752, 754, 758, 753, 759, 71, 756, + 2507, 2507, 755, 2507, 71, 757, 769, 774, 745, 760, + 71, 71, 744, 746, 71, 71, 71, 747, 71, 751, + 748, 754, 758, 753, 759, 71, 756, 749, 71, 771, + 750, 71, 757, 769, 71, 71, 760, 2507, 71, 770, + 746, 772, 2507, 71, 747, 71, 773, 748, 2507, 2507, + + 777, 775, 2507, 776, 749, 778, 771, 750, 762, 763, + 2507, 764, 71, 2507, 765, 779, 770, 781, 772, 766, + 71, 71, 782, 773, 780, 767, 768, 777, 775, 71, + 776, 71, 778, 785, 71, 762, 763, 71, 764, 71, + 783, 765, 779, 788, 781, 789, 766, 71, 71, 782, + 784, 780, 767, 768, 786, 71, 71, 787, 71, 792, + 785, 71, 71, 790, 2507, 71, 791, 783, 71, 794, + 788, 71, 789, 793, 795, 71, 796, 784, 797, 71, + 798, 786, 799, 2507, 787, 2507, 792, 800, 71, 806, + 790, 71, 801, 791, 802, 803, 794, 71, 71, 807, + + 793, 71, 804, 796, 71, 805, 71, 810, 71, 799, + 71, 71, 71, 71, 800, 808, 806, 809, 2507, 801, + 811, 802, 803, 812, 71, 71, 71, 813, 71, 804, + 815, 814, 805, 71, 817, 816, 71, 818, 819, 71, + 821, 71, 808, 71, 809, 71, 71, 811, 71, 71, + 812, 820, 71, 825, 813, 71, 824, 815, 814, 2507, + 71, 817, 816, 822, 818, 819, 826, 821, 828, 71, + 827, 823, 71, 2507, 71, 829, 833, 830, 820, 835, + 71, 71, 71, 824, 71, 834, 831, 71, 71, 832, + 822, 71, 71, 826, 71, 828, 71, 827, 823, 836, + + 837, 839, 829, 833, 830, 838, 835, 71, 71, 71, + 840, 842, 834, 831, 841, 843, 832, 844, 71, 849, + 71, 848, 71, 71, 71, 846, 836, 837, 839, 845, + 71, 851, 838, 847, 71, 71, 71, 840, 71, 850, + 71, 841, 843, 856, 844, 852, 71, 853, 848, 854, + 859, 71, 846, 857, 860, 71, 845, 855, 861, 71, + 847, 858, 863, 71, 71, 71, 850, 71, 71, 862, + 856, 865, 852, 867, 853, 868, 854, 869, 71, 864, + 857, 860, 71, 71, 855, 861, 71, 71, 858, 71, + 866, 870, 871, 872, 71, 71, 862, 71, 71, 71, + + 867, 873, 149, 875, 869, 874, 864, 877, 71, 71, + 884, 886, 885, 71, 71, 71, 71, 866, 870, 871, + 872, 888, 876, 71, 887, 2507, 71, 905, 873, 71, + 875, 2507, 874, 889, 877, 71, 71, 884, 886, 885, + 890, 892, 891, 2507, 71, 71, 893, 2507, 888, 876, + 878, 887, 879, 894, 71, 71, 880, 900, 881, 895, + 889, 2507, 71, 882, 896, 897, 71, 890, 883, 891, + 71, 899, 901, 71, 71, 898, 71, 878, 71, 879, + 894, 902, 71, 880, 900, 881, 895, 71, 903, 904, + 882, 896, 897, 71, 71, 883, 907, 908, 899, 901, + + 918, 2507, 898, 909, 2507, 71, 922, 916, 902, 71, + 917, 2507, 71, 71, 919, 903, 920, 921, 924, 2507, + 926, 71, 71, 928, 908, 71, 71, 918, 71, 71, + 909, 910, 71, 922, 916, 923, 911, 917, 912, 71, + 929, 919, 71, 920, 921, 924, 925, 71, 71, 913, + 914, 927, 930, 932, 71, 71, 915, 71, 910, 933, + 71, 931, 923, 911, 71, 912, 935, 929, 938, 936, + 941, 937, 934, 925, 71, 71, 913, 914, 927, 930, + 71, 71, 71, 915, 71, 71, 933, 71, 931, 939, + 943, 945, 71, 935, 940, 946, 936, 941, 937, 934, + + 71, 942, 71, 71, 944, 947, 948, 71, 71, 71, + 2507, 71, 949, 71, 950, 951, 939, 943, 945, 71, + 71, 940, 946, 71, 952, 953, 954, 71, 942, 956, + 957, 944, 955, 948, 959, 2507, 965, 71, 960, 949, + 958, 950, 951, 961, 964, 71, 71, 71, 71, 71, + 71, 952, 953, 954, 71, 71, 956, 962, 966, 955, + 963, 959, 71, 965, 967, 71, 968, 958, 71, 970, + 71, 964, 969, 972, 971, 973, 71, 974, 981, 71, + 71, 975, 2507, 71, 962, 966, 978, 963, 71, 976, + 977, 967, 982, 71, 980, 71, 970, 71, 71, 969, + + 972, 971, 973, 71, 974, 71, 983, 71, 975, 979, + 71, 71, 990, 978, 984, 71, 976, 977, 985, 71, + 71, 980, 986, 71, 71, 988, 987, 991, 992, 989, + 2507, 71, 71, 983, 71, 993, 979, 994, 995, 996, + 997, 984, 71, 71, 71, 985, 71, 999, 2507, 986, + 71, 998, 988, 987, 1001, 992, 989, 71, 71, 71, + 71, 1000, 993, 71, 994, 1002, 71, 997, 1003, 1004, + 71, 71, 1005, 2507, 999, 1006, 1007, 71, 998, 1008, + 71, 1001, 1009, 1010, 71, 1012, 1013, 71, 1000, 1015, + 1017, 71, 1002, 1021, 71, 71, 1019, 71, 71, 1005, + + 71, 71, 1006, 71, 71, 1018, 1008, 1014, 71, 1009, + 1010, 1016, 1012, 1013, 1020, 71, 1015, 71, 71, 71, + 71, 1022, 1023, 1019, 1024, 1025, 1026, 2507, 71, 2507, + 1028, 1029, 1018, 1027, 1014, 2507, 71, 1030, 1016, 1036, + 2507, 1020, 1032, 71, 71, 1033, 2507, 71, 1022, 1031, + 71, 71, 1025, 1026, 71, 71, 71, 1028, 1029, 71, + 1027, 71, 1034, 1035, 1030, 71, 71, 1037, 1038, 1032, + 1039, 71, 1033, 1045, 71, 1040, 1031, 71, 1053, 1048, + 71, 1046, 71, 1049, 1047, 2507, 71, 1041, 2507, 1034, + 1035, 71, 71, 1052, 1037, 1038, 1042, 1039, 1043, 71, + + 1045, 1044, 1040, 71, 71, 1053, 1048, 71, 1046, 71, + 1049, 1047, 1050, 1051, 1041, 71, 1054, 1056, 1055, 1057, + 1052, 71, 1058, 1042, 1060, 1043, 71, 1063, 1044, 71, + 1059, 71, 1061, 2507, 2507, 71, 1062, 2507, 71, 1050, + 1051, 71, 1066, 1054, 71, 1055, 1057, 71, 71, 1058, + 71, 1060, 71, 1064, 1063, 1065, 1067, 1059, 1068, 1061, + 1071, 1072, 71, 1062, 1069, 1070, 71, 71, 71, 1066, + 71, 71, 1073, 71, 71, 1075, 1076, 1074, 1078, 71, + 1064, 71, 1065, 1067, 71, 1068, 1081, 1071, 1072, 1079, + 1077, 1069, 1070, 71, 1085, 1082, 71, 71, 1080, 1073, + + 1083, 71, 1075, 71, 1074, 1078, 1084, 71, 71, 1086, + 2507, 1087, 1096, 1081, 71, 2507, 1079, 1077, 1094, 1098, + 71, 1085, 1095, 71, 1097, 1080, 1108, 71, 2507, 2507, + 2507, 1109, 71, 1084, 2507, 1106, 1086, 71, 1087, 1088, + 71, 71, 1089, 1090, 71, 1094, 1098, 1091, 71, 1095, + 71, 1097, 2507, 1092, 1099, 1100, 1101, 1093, 71, 1102, + 1103, 71, 1106, 71, 1107, 1111, 1088, 71, 1105, 1089, + 1090, 1104, 71, 71, 1091, 1110, 2507, 71, 71, 1117, + 1092, 1099, 1100, 1101, 1093, 71, 1102, 1103, 71, 71, + 71, 1107, 1111, 1119, 2507, 1105, 1120, 71, 1104, 1121, + + 1123, 2507, 1110, 1112, 1122, 71, 1117, 1127, 1113, 71, + 1114, 71, 1115, 71, 1116, 1126, 1128, 1124, 71, 71, + 1119, 71, 1125, 1120, 71, 71, 1121, 1123, 71, 1129, + 1112, 1122, 1130, 1131, 1127, 1113, 1133, 1114, 1132, 1115, + 1136, 1116, 1126, 1128, 1134, 71, 1137, 1139, 71, 71, + 1135, 71, 71, 71, 71, 71, 1129, 1138, 1140, 1130, + 1131, 2507, 71, 1133, 1141, 1132, 1144, 1136, 1142, 71, + 1143, 1134, 1145, 71, 71, 1146, 1147, 1135, 71, 71, + 1148, 1149, 1150, 71, 1138, 1140, 71, 71, 71, 1151, + 71, 1141, 1152, 71, 1154, 1142, 71, 1143, 71, 1145, + + 1153, 1155, 71, 1147, 1157, 1156, 2507, 1148, 1149, 71, + 1159, 1158, 1164, 1160, 71, 1162, 1151, 1165, 71, 1152, + 1161, 1154, 71, 71, 71, 71, 71, 1153, 1155, 1163, + 1166, 1157, 1156, 71, 1167, 71, 71, 1159, 1158, 1175, + 1160, 71, 1162, 71, 71, 1168, 1169, 1161, 1170, 71, + 1171, 1172, 71, 1173, 71, 1174, 1163, 1166, 71, 71, + 71, 1176, 1179, 71, 71, 2507, 71, 1182, 1177, 71, + 1180, 71, 1168, 1169, 1178, 1170, 71, 71, 1172, 1181, + 1173, 71, 1174, 1183, 1184, 71, 1185, 1186, 71, 1179, + 1187, 71, 71, 71, 1182, 1177, 71, 1180, 1188, 1189, + + 1190, 1178, 1194, 71, 1195, 1196, 1181, 1191, 2507, 71, + 1183, 1184, 71, 1185, 1186, 71, 1192, 1187, 71, 1202, + 71, 1193, 71, 71, 1197, 71, 1189, 1190, 1203, 1194, + 1198, 1195, 1196, 1199, 1191, 1205, 71, 1200, 1204, 1207, + 1201, 71, 71, 2507, 71, 1206, 1202, 71, 71, 1208, + 71, 1197, 1210, 2507, 1209, 1203, 1211, 1198, 71, 71, + 1199, 71, 1205, 71, 1200, 71, 1207, 1201, 1212, 1213, + 71, 1214, 1206, 1215, 71, 71, 1208, 1217, 1216, 1210, + 71, 1209, 71, 1211, 1218, 1220, 71, 1219, 2507, 2507, + 1221, 1225, 71, 71, 1222, 1212, 1213, 1223, 1214, 71, + + 1215, 71, 71, 71, 1217, 1216, 71, 1224, 1226, 71, + 1227, 1218, 1220, 71, 1219, 71, 1228, 1221, 1225, 1230, + 1229, 1222, 1239, 1232, 1223, 71, 1234, 1231, 71, 1235, + 1233, 1236, 71, 1237, 1224, 1226, 71, 1227, 71, 71, + 1238, 1240, 2507, 1228, 71, 71, 1230, 1229, 71, 71, + 1232, 1241, 1245, 1234, 1231, 1246, 1242, 1233, 1243, 71, + 1237, 71, 1244, 71, 71, 71, 71, 1238, 1240, 71, + 1247, 71, 71, 1248, 71, 1250, 1249, 71, 1241, 1245, + 1256, 71, 1246, 1242, 1260, 1243, 1251, 71, 71, 1244, + 1252, 1254, 71, 1257, 71, 1253, 1255, 1247, 71, 2507, + + 1248, 71, 1250, 1249, 1258, 1263, 1259, 1256, 1261, 71, + 1262, 1264, 71, 1251, 71, 1272, 71, 1265, 71, 1266, + 1257, 1267, 71, 71, 1270, 71, 71, 71, 1268, 71, + 71, 1258, 1263, 1259, 1269, 1261, 71, 1262, 1271, 1273, + 1275, 71, 1272, 71, 1265, 1274, 1266, 71, 1267, 1276, + 71, 1270, 1277, 1281, 1278, 1268, 1279, 1282, 1286, 1280, + 71, 1269, 1284, 71, 1293, 1271, 1273, 71, 71, 71, + 1283, 71, 1274, 71, 71, 71, 1276, 1285, 71, 1277, + 1281, 1278, 2507, 1279, 1282, 71, 1280, 1287, 71, 1284, + 1288, 1290, 1289, 1291, 1292, 1294, 71, 1283, 71, 1295, + + 1296, 71, 71, 1297, 1285, 1298, 71, 1299, 71, 71, + 1300, 1301, 2507, 71, 1287, 71, 1304, 1288, 1290, 1289, + 1291, 1292, 71, 1302, 1303, 71, 1295, 1296, 1305, 1309, + 1297, 71, 1298, 1308, 71, 71, 1306, 71, 71, 71, + 71, 71, 71, 1304, 1307, 1310, 1313, 71, 1311, 1312, + 1302, 1303, 1314, 1315, 71, 1305, 1309, 1318, 1316, 71, + 1308, 2507, 71, 1306, 71, 1321, 71, 2507, 71, 1323, + 1317, 1307, 1310, 1313, 71, 1311, 1312, 71, 1320, 1314, + 71, 71, 1319, 71, 1318, 1316, 1324, 71, 71, 1328, + 1322, 71, 1321, 1325, 71, 1326, 1323, 1317, 71, 1327, + + 1330, 1329, 71, 1331, 1334, 1320, 1332, 71, 71, 1319, + 71, 71, 71, 71, 1333, 71, 1328, 1322, 1335, 1337, + 1325, 1339, 1326, 71, 71, 1336, 1327, 1330, 1329, 1340, + 1331, 1334, 1338, 1332, 1341, 1347, 71, 1343, 1342, 71, + 1345, 1333, 71, 71, 1346, 1335, 71, 71, 71, 1350, + 1377, 71, 1336, 71, 1344, 2507, 1340, 71, 71, 1338, + 1348, 71, 1347, 1349, 1343, 1342, 71, 1345, 1351, 71, + 71, 1346, 1353, 71, 1352, 71, 1350, 71, 1357, 71, + 1358, 1344, 1354, 1363, 1362, 1355, 1359, 1348, 2507, 71, + 1349, 1361, 1360, 71, 71, 1351, 1364, 1356, 1366, 1353, + + 1365, 1352, 71, 1367, 71, 2507, 71, 1358, 71, 1354, + 71, 1362, 1355, 1359, 71, 71, 2507, 71, 1361, 1360, + 71, 1369, 71, 1364, 1356, 1366, 71, 1365, 1368, 71, + 1367, 1370, 1371, 1372, 1373, 1374, 1375, 71, 71, 2507, + 71, 2507, 1379, 1380, 1376, 1381, 1378, 1382, 1369, 1383, + 71, 71, 71, 1386, 2507, 1368, 71, 2507, 1370, 2507, + 71, 1373, 71, 1375, 71, 71, 71, 71, 71, 1379, + 1380, 1376, 1381, 1378, 1382, 1384, 1383, 1385, 1390, 1387, + 1388, 1389, 1391, 2507, 71, 71, 71, 71, 1392, 1393, + 71, 71, 1394, 1397, 71, 71, 71, 2507, 1395, 1396, + + 2507, 2507, 1384, 1399, 1385, 1390, 1387, 1388, 1389, 71, + 71, 71, 71, 1398, 1401, 1392, 1393, 1400, 71, 1394, + 1397, 71, 71, 1408, 1402, 1395, 1396, 1403, 1404, 71, + 1399, 1405, 1409, 1407, 71, 71, 1406, 1410, 1411, 71, + 1398, 1401, 71, 71, 1400, 1412, 71, 1419, 1414, 1420, + 71, 1402, 2507, 1416, 1403, 1404, 1417, 1413, 1405, 71, + 1407, 71, 1415, 1406, 1410, 1411, 71, 71, 71, 1418, + 71, 71, 1412, 1423, 1421, 1414, 71, 1422, 1426, 71, + 1416, 71, 71, 1417, 1413, 1424, 1425, 71, 1427, 1415, + 71, 71, 1429, 71, 1428, 1430, 1418, 71, 71, 1431, + + 1423, 1421, 1432, 71, 1422, 1426, 71, 1435, 1440, 1433, + 1436, 1437, 1424, 1425, 1442, 1427, 1443, 71, 71, 1429, + 71, 1428, 1430, 1434, 71, 71, 1431, 1438, 1445, 1432, + 1441, 1444, 1439, 1449, 1435, 71, 1433, 1436, 1437, 71, + 71, 71, 1446, 1448, 1447, 1458, 2507, 1450, 71, 1451, + 1434, 71, 1463, 71, 1453, 1452, 71, 1441, 1444, 71, + 71, 71, 71, 71, 1454, 71, 1455, 1457, 2507, 1446, + 1448, 1447, 71, 71, 1450, 1456, 1451, 71, 1459, 1460, + 71, 1453, 1452, 1462, 71, 71, 1466, 1461, 71, 71, + 1464, 1454, 71, 1455, 1457, 71, 1467, 71, 1465, 1468, + + 1472, 71, 1456, 71, 2507, 1459, 1460, 71, 1469, 1470, + 1462, 1471, 1473, 71, 1461, 1475, 71, 1464, 71, 2507, + 1474, 1476, 71, 1467, 1477, 1465, 1468, 1472, 1479, 71, + 71, 71, 71, 71, 1478, 1469, 1470, 71, 1471, 1473, + 1483, 1480, 71, 71, 1481, 2507, 1482, 1474, 1476, 1484, + 1485, 1477, 71, 71, 71, 1479, 71, 1486, 1487, 71, + 1489, 1478, 1488, 1491, 71, 1492, 1490, 1493, 1480, 2507, + 1494, 1481, 71, 1482, 1495, 1497, 1484, 1485, 71, 2507, + 71, 71, 71, 1500, 1486, 71, 71, 71, 71, 1488, + 1491, 1498, 71, 1490, 1493, 71, 1496, 1494, 71, 1499, + + 71, 1495, 1497, 71, 1501, 71, 1502, 1503, 71, 1507, + 1500, 1505, 1509, 1504, 1510, 1508, 71, 1512, 1498, 71, + 1514, 71, 71, 1496, 1506, 71, 1499, 71, 1515, 71, + 1516, 1501, 1517, 1502, 1503, 71, 1507, 1511, 1505, 71, + 1504, 1513, 1508, 71, 1512, 71, 71, 1514, 71, 1518, + 1519, 1506, 1520, 1522, 71, 1515, 71, 71, 71, 71, + 1521, 1523, 1524, 1526, 1511, 1525, 71, 1528, 1513, 1527, + 1529, 1533, 71, 1531, 1530, 1538, 1518, 71, 71, 1520, + 71, 1532, 71, 1539, 71, 1540, 1541, 1521, 1523, 71, + 71, 1545, 1525, 71, 71, 71, 1527, 1529, 71, 71, + + 71, 1530, 1538, 71, 1534, 1535, 1536, 71, 1532, 1542, + 1539, 1537, 1544, 1541, 1543, 1547, 71, 71, 1545, 71, + 1546, 1548, 1549, 1550, 1552, 71, 2507, 71, 1551, 1558, + 71, 1534, 1535, 1536, 71, 1554, 71, 1557, 1537, 1544, + 71, 71, 1547, 1553, 71, 1555, 1561, 1546, 1559, 1549, + 1550, 71, 71, 71, 1556, 1551, 71, 1562, 1563, 71, + 2507, 71, 1554, 71, 1557, 1560, 71, 1566, 1564, 71, + 1553, 71, 1555, 71, 1569, 1559, 1565, 71, 71, 1567, + 71, 1556, 1571, 1570, 1562, 1563, 71, 1568, 1573, 71, + 1572, 1574, 1560, 71, 1566, 1564, 71, 1575, 71, 1576, + + 1577, 1569, 2507, 1565, 1578, 1579, 1567, 1580, 2507, 1571, + 71, 71, 1581, 71, 1568, 71, 1582, 1572, 71, 1584, + 71, 71, 71, 71, 71, 71, 1576, 1577, 1583, 71, + 1585, 1578, 1579, 1586, 1580, 1589, 71, 1592, 1591, 1581, + 1588, 1593, 71, 1582, 1590, 71, 1584, 71, 71, 1587, + 1594, 1595, 71, 1598, 2507, 1583, 71, 1585, 71, 71, + 1586, 71, 1589, 1599, 1592, 1591, 1600, 1588, 1593, 71, + 1596, 1590, 1603, 1604, 71, 1597, 1587, 71, 1595, 71, + 71, 1601, 1602, 1605, 1608, 1611, 71, 1606, 71, 71, + 1599, 1609, 1607, 1600, 1612, 1615, 1610, 1596, 1613, 71, + + 71, 1614, 1597, 71, 71, 1616, 71, 1617, 1601, 1602, + 1605, 71, 1620, 1619, 1606, 71, 71, 71, 1618, 1607, + 71, 1622, 1623, 71, 1621, 1613, 71, 71, 1614, 71, + 71, 1625, 1616, 71, 1617, 1624, 1627, 71, 1626, 1628, + 1619, 1629, 1630, 1634, 71, 1618, 1631, 2507, 71, 1623, + 1632, 1621, 1636, 71, 1633, 71, 1635, 71, 1625, 2507, + 1640, 71, 1624, 71, 71, 1626, 71, 71, 1629, 1637, + 1634, 1638, 71, 1631, 71, 71, 71, 1632, 71, 1636, + 1639, 1633, 71, 1635, 71, 1641, 71, 1640, 1642, 1643, + 1645, 1644, 1646, 1652, 1648, 71, 1637, 1649, 1638, 71, + + 1650, 1653, 1647, 71, 1651, 71, 71, 1639, 1661, 1666, + 2507, 71, 71, 71, 71, 1642, 1643, 71, 1644, 1646, + 71, 1648, 1654, 71, 1649, 71, 71, 1650, 1653, 1647, + 1656, 1651, 1657, 1655, 1658, 71, 1659, 1667, 2507, 71, + 1660, 71, 1662, 1665, 1663, 1670, 1664, 71, 71, 1654, + 71, 71, 71, 71, 71, 71, 71, 1656, 71, 1657, + 1655, 1658, 1668, 1659, 1667, 1669, 1671, 1660, 1673, 1662, + 1665, 1663, 71, 1664, 1672, 71, 1674, 1676, 1675, 2507, + 1680, 71, 1677, 71, 1678, 71, 1681, 1682, 71, 1668, + 71, 1679, 1669, 1671, 71, 1673, 71, 71, 71, 71, + + 1683, 1672, 71, 1674, 1676, 1675, 71, 1680, 71, 1677, + 1684, 1678, 1686, 1681, 1682, 1685, 1687, 71, 1679, 1688, + 1689, 1691, 1694, 1690, 2507, 71, 71, 1683, 71, 1692, + 71, 71, 1693, 1695, 1696, 1697, 2507, 1684, 1698, 71, + 1700, 2507, 1685, 1687, 71, 71, 1688, 1689, 1691, 1694, + 1690, 71, 1702, 71, 71, 71, 1692, 71, 1699, 1693, + 1695, 1696, 1697, 71, 1703, 1698, 1704, 71, 1701, 71, + 1705, 71, 1706, 1707, 71, 1708, 1709, 1713, 1712, 1702, + 71, 71, 1710, 1711, 1714, 1699, 71, 1715, 71, 71, + 71, 1703, 71, 1704, 1716, 1701, 71, 1705, 71, 1706, + + 1707, 1717, 71, 1709, 1713, 1712, 71, 71, 71, 1710, + 1711, 71, 1718, 71, 1715, 1719, 1720, 2507, 1721, 2507, + 1722, 1716, 1723, 2507, 2507, 1727, 1726, 1728, 1717, 2507, + 2507, 71, 1724, 71, 2507, 1725, 1732, 71, 1729, 1733, + 1730, 71, 1719, 1720, 71, 1721, 71, 1722, 71, 1723, + 71, 71, 1727, 1726, 71, 71, 71, 1731, 71, 1724, + 1734, 71, 1725, 1732, 1735, 1729, 1733, 1730, 1736, 1737, + 1738, 71, 71, 1739, 71, 1748, 1740, 71, 71, 1741, + 2507, 71, 1746, 1744, 1731, 1745, 1742, 1734, 71, 71, + 1747, 1735, 71, 71, 71, 1736, 1737, 1738, 71, 1743, + + 1739, 71, 1748, 1740, 71, 1749, 1741, 71, 1751, 1746, + 1744, 1750, 1745, 1742, 1752, 1754, 1753, 1747, 1756, 1755, + 1758, 1759, 71, 1757, 1760, 1761, 1743, 2507, 1766, 71, + 1767, 71, 71, 71, 1768, 71, 1765, 71, 1750, 71, + 71, 1752, 1754, 1753, 71, 1762, 1755, 1758, 1759, 71, + 71, 1760, 71, 1769, 71, 71, 71, 1767, 1770, 1763, + 1771, 1768, 71, 1765, 1772, 2507, 1773, 1774, 1776, 1775, + 1764, 71, 1762, 2507, 1778, 71, 71, 1777, 1784, 1780, + 1769, 1779, 71, 71, 2507, 1782, 1763, 1771, 71, 71, + 71, 71, 71, 1773, 1785, 1776, 1775, 1764, 1781, 71, + + 71, 1778, 1783, 71, 1777, 1784, 1780, 71, 1779, 1786, + 71, 71, 1782, 1788, 1787, 1789, 71, 1791, 1792, 1790, + 1793, 71, 1794, 1799, 2507, 1781, 71, 71, 71, 1783, + 71, 1796, 71, 1795, 71, 71, 1786, 71, 71, 71, + 1788, 1787, 1789, 1797, 1791, 71, 1790, 1793, 1798, 1794, + 1799, 71, 1801, 1800, 71, 1802, 1805, 1803, 1796, 71, + 1795, 1807, 1804, 1806, 71, 1808, 1809, 2507, 1812, 71, + 1797, 2507, 1811, 1810, 2507, 1798, 71, 71, 1815, 1801, + 1800, 71, 71, 1805, 1803, 71, 71, 71, 1807, 1804, + 1806, 1816, 71, 71, 71, 1812, 1818, 1817, 1813, 1811, + + 1810, 1814, 1819, 71, 1821, 71, 1820, 1822, 1824, 71, + 1826, 1827, 1823, 71, 1828, 1831, 71, 1825, 1816, 71, + 71, 71, 1829, 1818, 1817, 1813, 71, 71, 1814, 1819, + 71, 71, 1830, 1820, 71, 71, 1833, 71, 71, 1823, + 1832, 1828, 71, 1834, 1825, 1835, 1839, 1836, 71, 1829, + 1837, 2507, 71, 1840, 71, 1843, 1841, 1844, 1845, 1830, + 1848, 71, 71, 71, 71, 1838, 71, 1832, 71, 1846, + 1834, 71, 1835, 71, 1836, 1847, 71, 1837, 1842, 1850, + 1840, 71, 71, 1841, 1844, 1845, 71, 71, 1851, 1849, + 1852, 1855, 1838, 1853, 71, 71, 1846, 71, 71, 1854, + + 1858, 2507, 1847, 1856, 1857, 1842, 71, 1859, 2507, 71, + 71, 1860, 2507, 71, 1863, 1851, 1849, 1852, 1855, 71, + 1853, 1861, 71, 1864, 1865, 71, 1854, 1858, 71, 71, + 1856, 1857, 1866, 1862, 1859, 71, 71, 1870, 1860, 71, + 1867, 1863, 1869, 1871, 71, 71, 71, 1868, 1861, 71, + 1864, 1865, 1874, 1872, 1873, 71, 71, 1875, 1878, 1866, + 1862, 71, 71, 1876, 1870, 71, 1877, 1867, 1879, 1869, + 1871, 71, 71, 71, 1868, 1880, 71, 1885, 2507, 1874, + 1872, 1873, 2507, 1881, 1887, 1878, 71, 1886, 1890, 71, + 1876, 1882, 2507, 1877, 71, 1879, 1883, 1888, 1884, 71, + + 71, 1896, 71, 71, 71, 1889, 1891, 71, 1893, 71, + 1881, 1887, 71, 1892, 1886, 1890, 71, 1897, 1882, 1894, + 1900, 71, 1902, 1883, 1888, 1884, 71, 1895, 71, 1898, + 71, 2507, 1889, 1891, 1901, 1893, 1899, 71, 1903, 2507, + 1892, 1904, 71, 1908, 71, 1905, 1894, 1907, 1906, 71, + 1909, 71, 71, 71, 1895, 71, 1898, 1910, 71, 1911, + 71, 71, 1914, 1899, 1921, 1903, 71, 71, 1904, 71, + 1908, 1912, 1905, 71, 1907, 1906, 1913, 1909, 1917, 1918, + 1915, 71, 1920, 71, 1910, 71, 71, 71, 1916, 1914, + 1919, 71, 1922, 71, 1925, 71, 71, 71, 1912, 1923, + + 1924, 1926, 71, 1913, 71, 1917, 1918, 1915, 71, 1920, + 1927, 71, 1935, 71, 1928, 1916, 71, 1919, 1929, 1922, + 1930, 1925, 1932, 71, 1931, 1936, 1923, 1924, 1933, 71, + 1934, 71, 1937, 71, 1939, 1943, 1944, 1927, 1938, 71, + 71, 1928, 1941, 1945, 71, 1929, 71, 1930, 71, 1932, + 1942, 1931, 1936, 71, 71, 1933, 71, 1934, 1940, 71, + 1946, 71, 71, 71, 71, 1938, 1948, 71, 1947, 1941, + 1949, 71, 71, 1950, 1951, 71, 1952, 1942, 1953, 71, + 1954, 71, 1955, 1957, 1959, 1940, 71, 1946, 1958, 71, + 1956, 71, 71, 1948, 1960, 1947, 71, 1949, 1961, 2507, + + 1950, 1951, 71, 71, 1964, 1953, 1962, 1963, 1965, 1955, + 71, 71, 71, 1966, 71, 1958, 71, 1956, 1967, 71, + 71, 1960, 1968, 71, 1969, 1961, 71, 1970, 2507, 1971, + 1974, 1964, 1972, 1962, 1963, 71, 71, 1973, 1975, 71, + 71, 1976, 1978, 1980, 1981, 71, 1977, 1983, 1979, 71, + 71, 1969, 71, 1982, 1970, 71, 1971, 71, 71, 1972, + 71, 71, 71, 71, 1973, 71, 71, 1984, 71, 1978, + 1980, 1981, 1986, 1977, 71, 1979, 1985, 71, 1987, 71, + 1982, 1988, 1989, 1991, 71, 71, 1990, 1992, 1993, 1997, + 1999, 1996, 71, 71, 1984, 71, 71, 1995, 1994, 1986, + + 1998, 71, 71, 1985, 71, 1987, 2000, 2507, 1988, 1989, + 1991, 71, 71, 1990, 1992, 1993, 1997, 71, 1996, 2001, + 2003, 71, 71, 2002, 1995, 1994, 2004, 1998, 2005, 71, + 2006, 2007, 2014, 71, 2008, 2016, 71, 71, 2010, 71, + 71, 2009, 71, 2012, 2011, 71, 2001, 2003, 71, 71, + 2002, 71, 71, 2004, 2013, 2005, 71, 2006, 2007, 71, + 2015, 2008, 71, 2017, 2018, 2010, 2019, 2020, 2009, 2025, + 2012, 2011, 71, 71, 2021, 2022, 2026, 2023, 71, 71, + 71, 2013, 2027, 71, 71, 2507, 71, 2015, 71, 2024, + 2017, 2018, 2030, 2019, 2020, 2031, 71, 71, 2028, 2029, + + 71, 2021, 2022, 71, 2023, 2032, 2033, 71, 2034, 2035, + 2036, 71, 71, 71, 71, 2037, 2024, 71, 2038, 2030, + 2039, 2040, 2031, 2507, 2041, 2028, 2029, 2045, 71, 2044, + 71, 71, 2032, 2033, 71, 2034, 2035, 71, 2042, 71, + 71, 2048, 2037, 2043, 2049, 71, 71, 2039, 2040, 2046, + 71, 2041, 2051, 71, 71, 2047, 2044, 2050, 2052, 2053, + 2054, 71, 2055, 2057, 71, 2042, 2056, 71, 71, 71, + 2043, 2049, 2058, 71, 71, 71, 2046, 2059, 2061, 2051, + 2060, 2062, 2047, 71, 2050, 71, 2053, 71, 2063, 71, + 71, 2064, 2065, 2056, 71, 71, 2507, 2066, 2067, 2058, + + 2507, 2507, 71, 2068, 71, 2061, 71, 2060, 2062, 71, + 71, 2071, 2070, 2069, 71, 2063, 2074, 2075, 2064, 2065, + 71, 71, 71, 71, 2066, 2067, 2072, 2073, 71, 2076, + 2068, 71, 2077, 2078, 2079, 2080, 2507, 2081, 2071, 2070, + 2069, 2084, 2085, 2074, 71, 2083, 2082, 2086, 71, 71, + 2092, 2087, 71, 2072, 2073, 71, 71, 71, 71, 2077, + 2078, 71, 2080, 71, 2081, 2088, 71, 71, 71, 71, + 2089, 2090, 2083, 2082, 2086, 71, 2507, 2091, 2087, 2093, + 2096, 2094, 71, 2095, 2507, 2099, 2097, 2098, 2507, 2101, + 2507, 2100, 71, 71, 2507, 2102, 2507, 71, 2090, 71, + + 71, 71, 71, 71, 2091, 71, 2093, 2096, 2094, 71, + 2095, 71, 2099, 2097, 2098, 71, 2101, 71, 2100, 2103, + 2104, 2105, 2102, 2106, 2507, 2107, 2108, 2109, 71, 2110, + 2111, 2112, 2113, 2115, 71, 71, 71, 2114, 71, 71, + 71, 71, 2116, 2121, 71, 71, 2103, 2104, 2105, 2118, + 2106, 71, 2107, 2108, 2109, 71, 2110, 2111, 71, 2113, + 2115, 71, 2117, 2120, 2114, 2119, 2122, 2125, 2123, 71, + 71, 2128, 71, 2507, 2124, 71, 2118, 2126, 2131, 2127, + 2507, 2130, 2507, 2507, 71, 71, 71, 71, 2129, 2117, + 2120, 71, 2119, 71, 2125, 2123, 71, 2134, 2128, 2135, + + 71, 2124, 71, 2132, 2126, 71, 2127, 71, 2130, 2133, + 71, 2136, 2138, 2137, 2140, 2129, 71, 2139, 2142, 2141, + 2143, 2144, 2145, 71, 2134, 2146, 71, 2148, 2147, 71, + 2132, 71, 2149, 2152, 71, 2151, 2133, 71, 71, 71, + 2137, 71, 2155, 71, 2139, 71, 2141, 2143, 2144, 2150, + 2154, 71, 71, 71, 71, 2147, 71, 2156, 2153, 71, + 71, 2157, 2151, 2158, 2159, 71, 71, 2163, 2160, 71, + 2167, 2161, 2162, 71, 2164, 2165, 2150, 2154, 2168, 71, + 71, 71, 71, 71, 2156, 2153, 71, 71, 2157, 71, + 2158, 2159, 71, 2166, 2163, 2160, 2169, 71, 2161, 2162, + + 2170, 2164, 2165, 2171, 2176, 2168, 71, 2172, 71, 2173, + 2507, 2174, 2177, 2175, 2179, 71, 2178, 71, 2180, 71, + 2166, 2181, 2182, 2169, 71, 71, 71, 2170, 71, 71, + 2171, 2176, 71, 71, 2172, 71, 2173, 71, 2174, 2177, + 2175, 2179, 2183, 2178, 2184, 2180, 2185, 2186, 2181, 71, + 2187, 2190, 2189, 71, 2188, 2191, 2195, 2192, 2197, 2507, + 71, 2196, 2199, 2194, 2507, 2193, 71, 71, 2198, 2183, + 71, 2184, 71, 71, 2186, 71, 71, 71, 2190, 2189, + 71, 2188, 71, 71, 2192, 2197, 71, 2200, 71, 71, + 2194, 2201, 2193, 2203, 2202, 2198, 71, 2204, 2507, 2206, + + 2205, 2207, 2507, 71, 2211, 71, 71, 2208, 71, 2209, + 2213, 2216, 2210, 2507, 2200, 2212, 2224, 71, 2201, 71, + 2203, 2202, 71, 2215, 2204, 71, 2206, 2205, 2207, 71, + 2214, 71, 2217, 71, 2208, 71, 2209, 2213, 71, 2210, + 2218, 2219, 2212, 71, 2220, 71, 2221, 2222, 71, 2223, + 2215, 2226, 71, 71, 71, 2229, 2227, 2214, 71, 2217, + 2228, 2225, 71, 71, 71, 2230, 2231, 2218, 71, 71, + 2234, 2220, 71, 2221, 2222, 2232, 2223, 2233, 71, 71, + 71, 71, 71, 2227, 2236, 2237, 2235, 2228, 2225, 2238, + 71, 2239, 2230, 2231, 71, 71, 2241, 2234, 71, 2242, + + 2240, 2244, 2232, 71, 2233, 2507, 2245, 71, 71, 2243, + 2246, 2236, 2237, 2235, 2247, 71, 2238, 71, 71, 2251, + 2249, 2252, 2248, 71, 71, 2254, 71, 2240, 71, 71, + 2250, 2255, 71, 2245, 71, 2253, 2243, 2246, 71, 2259, + 71, 71, 2256, 2257, 2261, 71, 2251, 2249, 2252, 2248, + 71, 2258, 71, 2262, 71, 2263, 2260, 2250, 71, 71, + 71, 2264, 2253, 71, 2266, 2265, 2259, 2267, 2271, 2256, + 2257, 71, 71, 2268, 2269, 2270, 71, 71, 2258, 2274, + 2262, 71, 2263, 2260, 71, 2272, 2507, 2277, 2264, 2278, + 71, 2273, 2265, 2279, 71, 2271, 71, 71, 2280, 71, + + 2268, 71, 2270, 2275, 2276, 2281, 71, 71, 2283, 2285, + 2507, 71, 2272, 71, 71, 2282, 71, 2284, 2273, 2286, + 2279, 71, 2287, 2288, 2289, 71, 2290, 2293, 2291, 2300, + 2275, 2276, 71, 71, 71, 2283, 71, 71, 2292, 71, + 2295, 2296, 2282, 2294, 2284, 71, 71, 71, 2297, 71, + 2288, 71, 2298, 2290, 71, 2291, 71, 2301, 2299, 71, + 2302, 71, 2304, 2307, 71, 2292, 2303, 2295, 2296, 71, + 2294, 71, 2306, 2305, 71, 71, 71, 2308, 71, 2298, + 71, 2314, 2309, 2310, 2301, 2299, 2507, 71, 71, 2304, + 2307, 71, 71, 2303, 71, 2311, 2312, 2313, 71, 2306, + + 2305, 71, 71, 71, 2308, 2318, 71, 2317, 2314, 2309, + 2310, 2315, 2316, 71, 2320, 2321, 2323, 2322, 2319, 2324, + 2328, 71, 2311, 2312, 2313, 71, 2327, 71, 2325, 2326, + 2507, 2331, 2318, 2507, 2317, 2330, 2332, 2333, 2315, 2316, + 71, 71, 71, 71, 2322, 2319, 71, 71, 71, 71, + 2329, 2336, 2335, 2327, 2334, 2338, 71, 71, 71, 71, + 71, 71, 2330, 2332, 2333, 2337, 71, 2339, 2340, 71, + 2342, 2341, 2346, 2343, 2347, 2348, 71, 2329, 2336, 2335, + 71, 2334, 71, 2350, 2344, 2351, 2353, 71, 71, 2345, + 2349, 71, 2337, 71, 71, 2340, 71, 2342, 2341, 2354, + + 2343, 2347, 2348, 2352, 71, 71, 2355, 71, 2356, 2357, + 2350, 71, 2351, 71, 2358, 2359, 71, 2349, 2360, 2361, + 2507, 2363, 2362, 2365, 2507, 2366, 71, 2364, 2507, 2367, + 2352, 71, 71, 71, 71, 71, 71, 71, 2369, 71, + 2372, 2358, 71, 2368, 71, 71, 2361, 71, 2363, 2362, + 71, 2370, 2366, 71, 2364, 2371, 2367, 2376, 2373, 2374, + 71, 2375, 2377, 2378, 71, 2369, 71, 2381, 2380, 71, + 2368, 71, 71, 71, 71, 2386, 2379, 2385, 2370, 71, + 71, 71, 2371, 2382, 2376, 2373, 2374, 71, 2375, 2377, + 2378, 71, 2384, 2383, 2381, 2380, 71, 71, 2388, 71, + + 71, 2387, 2386, 2379, 2385, 2392, 2390, 2389, 71, 2391, + 2382, 2394, 2507, 71, 71, 2393, 71, 71, 71, 2384, + 2383, 71, 2395, 71, 71, 2388, 2396, 2397, 2387, 71, + 2398, 2399, 2392, 2390, 2389, 2400, 2391, 2401, 2394, 71, + 2402, 2405, 2393, 2403, 2406, 2404, 2410, 2407, 71, 2395, + 2411, 71, 71, 2396, 71, 2412, 2416, 2398, 71, 2417, + 2507, 71, 2400, 71, 71, 71, 71, 71, 2405, 71, + 2403, 2406, 2404, 2408, 2407, 71, 2409, 2411, 71, 2413, + 2414, 2415, 71, 71, 2423, 71, 2417, 71, 71, 2419, + 71, 2418, 71, 2420, 2421, 2425, 2422, 71, 71, 2507, + + 2408, 2426, 71, 2409, 2424, 2429, 2413, 2414, 2415, 71, + 71, 2423, 71, 2427, 71, 2434, 2419, 2428, 2418, 2431, + 2432, 2430, 2425, 2422, 71, 71, 71, 71, 2426, 71, + 2433, 2424, 2429, 71, 71, 2437, 71, 71, 71, 2435, + 2427, 2436, 2434, 71, 2428, 2438, 2431, 2432, 2430, 2439, + 71, 2440, 2441, 2442, 2507, 2443, 2446, 2433, 2507, 2444, + 2448, 71, 2437, 2447, 2507, 2445, 2435, 2507, 2436, 2451, + 2449, 71, 71, 71, 2454, 71, 2439, 71, 71, 2441, + 2442, 71, 2443, 71, 2456, 71, 2444, 71, 71, 71, + 2447, 2450, 2445, 71, 2452, 2453, 2451, 2449, 71, 71, + + 2455, 2458, 71, 71, 2457, 2464, 71, 2459, 71, 2462, + 2460, 2456, 2463, 2461, 2507, 2465, 2466, 71, 2450, 71, + 71, 2452, 2453, 2468, 71, 71, 2469, 2455, 71, 2471, + 71, 2457, 2464, 2467, 2459, 71, 2462, 2460, 71, 2463, + 2461, 71, 2465, 2466, 2472, 2473, 2470, 71, 2474, 2475, + 2468, 2476, 71, 2469, 71, 71, 2471, 71, 2477, 2478, + 2467, 2479, 2480, 2481, 2485, 2483, 2482, 71, 71, 2484, + 71, 2472, 2473, 2470, 71, 2474, 2475, 71, 71, 2487, + 71, 2488, 71, 71, 71, 2477, 2478, 71, 71, 2480, + 2481, 71, 2483, 2482, 2486, 2492, 2484, 2489, 2496, 2490, + + 2497, 71, 71, 71, 2491, 71, 2487, 71, 2488, 2493, + 2494, 2507, 2495, 2498, 2499, 2500, 2505, 71, 71, 2507, + 71, 2486, 71, 2501, 2489, 71, 2490, 2497, 2506, 2502, + 71, 2491, 2507, 2507, 2507, 71, 2493, 2494, 71, 2495, + 71, 71, 2500, 71, 2503, 71, 2504, 2507, 2507, 2507, + 2501, 71, 71, 2507, 71, 71, 2502, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2503, 2507, 2504, 43, 43, 43, 43, 43, 43, + 43, 48, 48, 48, 48, 48, 48, 48, 53, 53, + 53, 53, 53, 53, 53, 59, 59, 59, 59, 59, + + 59, 59, 64, 64, 64, 64, 64, 64, 64, 74, + 74, 2507, 74, 74, 74, 74, 139, 139, 2507, 2507, + 2507, 139, 139, 141, 141, 2507, 2507, 141, 2507, 141, + 143, 2507, 2507, 2507, 2507, 2507, 143, 146, 146, 2507, + 2507, 2507, 146, 146, 148, 2507, 2507, 2507, 2507, 2507, + 148, 150, 150, 2507, 150, 150, 150, 150, 75, 75, + 2507, 75, 75, 75, 75, 13, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507 } ; -static yyconst flex_int16_t yy_chk[6795] = +static yyconst flex_int16_t yy_chk[7233] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1964,746 +2069,794 @@ static yyconst flex_int16_t yy_chk[6795] = 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, 28, 6, 7, - 7, 7, 7, 2346, 7, 8, 8, 8, 8, 28, - 8, 9, 9, 9, 10, 10, 10, 15, 21, 46, - - 46, 15, 30, 3, 28, 51, 4, 799, 51, 5, - 19, 6, 19, 19, 30, 19, 71, 7, 62, 62, - 71, 19, 76, 8, 21, 21, 20, 20, 9, 30, - 792, 10, 11, 11, 11, 11, 11, 11, 12, 12, - 12, 12, 12, 12, 20, 24, 76, 25, 19, 76, - 20, 26, 11, 20, 20, 22, 143, 33, 12, 26, - 792, 25, 22, 33, 698, 24, 22, 35, 24, 22, - 11, 20, 24, 25, 25, 884, 12, 26, 26, 11, - 35, 22, 22, 29, 33, 12, 26, 67, 25, 22, - 141, 78, 24, 22, 35, 698, 22, 23, 78, 27, - - 67, 23, 27, 884, 23, 29, 23, 23, 140, 27, - 29, 27, 138, 38, 67, 38, 136, 32, 78, 23, - 137, 32, 27, 137, 23, 134, 27, 31, 23, 27, - 38, 23, 77, 23, 23, 31, 27, 32, 27, 38, - 38, 31, 38, 32, 32, 31, 69, 41, 32, 41, - 41, 63, 41, 31, 31, 77, 238, 38, 41, 77, - 58, 36, 31, 82, 32, 36, 53, 79, 31, 83, - 52, 81, 31, 34, 39, 36, 122, 34, 36, 47, - 81, 82, 83, 34, 39, 238, 34, 36, 36, 39, - 82, 79, 36, 34, 79, 34, 83, 39, 81, 40, - - 34, 39, 36, 40, 34, 36, 89, 40, 122, 149, - 34, 39, 57, 34, 57, 57, 39, 57, 86, 89, - 34, 37, 42, 86, 37, 40, 40, 135, 135, 14, - 40, 37, 13, 89, 40, 37, 37, 65, 0, 65, - 65, 149, 65, 37, 68, 86, 68, 68, 37, 68, - 70, 37, 70, 70, 73, 70, 73, 73, 37, 73, - 80, 70, 37, 37, 84, 73, 87, 85, 85, 0, - 84, 88, 90, 80, 87, 65, 85, 92, 94, 90, - 91, 93, 142, 142, 80, 84, 92, 80, 95, 88, - 93, 84, 73, 87, 85, 85, 91, 84, 96, 90, - - 80, 94, 98, 88, 92, 94, 97, 91, 93, 97, - 95, 96, 99, 0, 0, 95, 88, 101, 100, 103, - 99, 101, 97, 97, 102, 96, 98, 102, 0, 104, - 97, 126, 103, 97, 98, 105, 97, 0, 100, 99, - 100, 101, 126, 106, 101, 100, 103, 107, 101, 97, - 97, 102, 104, 98, 108, 105, 104, 106, 126, 109, - 110, 111, 105, 112, 118, 100, 109, 107, 108, 110, - 106, 113, 112, 114, 107, 113, 118, 115, 116, 0, - 114, 108, 121, 117, 111, 116, 109, 110, 111, 117, - 112, 118, 124, 113, 0, 127, 121, 117, 113, 119, - - 114, 127, 113, 115, 115, 116, 120, 119, 123, 121, - 117, 125, 124, 128, 130, 161, 117, 120, 124, 124, - 125, 120, 127, 123, 128, 129, 119, 131, 132, 133, - 120, 148, 0, 120, 0, 123, 130, 132, 125, 124, - 128, 130, 131, 0, 120, 147, 129, 161, 120, 275, - 129, 133, 129, 148, 131, 132, 133, 139, 148, 139, - 139, 144, 139, 144, 144, 145, 144, 145, 145, 147, - 145, 150, 147, 129, 151, 152, 275, 153, 155, 154, - 156, 157, 158, 150, 0, 153, 160, 156, 158, 159, - 151, 154, 164, 0, 152, 0, 0, 281, 150, 157, - - 155, 151, 152, 145, 153, 155, 154, 156, 157, 166, - 167, 159, 160, 160, 158, 158, 159, 162, 164, 164, - 165, 162, 168, 169, 281, 174, 168, 171, 165, 170, - 172, 166, 167, 175, 174, 181, 166, 167, 162, 0, - 171, 176, 172, 0, 0, 162, 169, 165, 162, 168, - 169, 170, 174, 0, 171, 175, 170, 172, 173, 178, - 175, 173, 0, 176, 0, 162, 163, 181, 176, 182, - 179, 163, 184, 173, 0, 177, 163, 179, 0, 180, - 177, 178, 163, 163, 187, 173, 178, 185, 173, 163, - 180, 189, 177, 163, 177, 182, 182, 179, 163, 190, - - 183, 177, 177, 163, 184, 185, 180, 177, 188, 163, - 163, 183, 186, 191, 185, 192, 187, 194, 186, 177, - 193, 177, 195, 189, 194, 200, 0, 197, 0, 192, - 188, 190, 183, 191, 198, 188, 199, 200, 183, 186, - 191, 193, 192, 195, 194, 196, 197, 193, 198, 195, - 196, 201, 200, 202, 197, 203, 204, 207, 199, 0, - 202, 198, 201, 199, 205, 204, 206, 208, 208, 209, - 212, 206, 196, 211, 0, 213, 208, 203, 201, 210, - 202, 215, 203, 204, 214, 218, 210, 205, 216, 207, - 212, 205, 214, 206, 208, 208, 217, 212, 211, 219, - - 211, 209, 220, 216, 225, 221, 210, 213, 218, 221, - 222, 214, 223, 215, 224, 216, 226, 218, 227, 220, - 223, 228, 217, 217, 234, 222, 234, 220, 235, 220, - 229, 219, 221, 224, 230, 218, 225, 222, 226, 223, - 227, 224, 229, 226, 236, 227, 220, 230, 233, 231, - 232, 234, 235, 228, 237, 235, 239, 229, 231, 240, - 243, 230, 241, 232, 246, 239, 244, 233, 242, 236, - 247, 236, 243, 245, 249, 233, 231, 232, 250, 242, - 237, 237, 246, 239, 248, 240, 240, 243, 241, 241, - 244, 246, 251, 244, 252, 242, 245, 248, 254, 0, - - 245, 253, 247, 255, 250, 250, 249, 254, 253, 255, - 256, 248, 257, 0, 251, 262, 258, 0, 259, 251, - 261, 260, 263, 266, 256, 254, 252, 259, 253, 261, - 255, 263, 264, 267, 270, 265, 268, 256, 257, 257, - 258, 262, 262, 258, 260, 259, 271, 261, 260, 263, - 265, 268, 270, 0, 272, 266, 264, 267, 269, 264, - 267, 270, 265, 268, 271, 273, 269, 269, 272, 269, - 271, 276, 0, 271, 274, 274, 269, 0, 278, 277, - 273, 272, 277, 0, 283, 269, 279, 0, 289, 277, - 278, 271, 273, 269, 269, 276, 269, 280, 276, 274, - - 282, 274, 274, 285, 279, 278, 277, 284, 286, 277, - 283, 283, 0, 279, 287, 280, 288, 291, 292, 284, - 289, 287, 282, 286, 280, 285, 290, 282, 288, 293, - 285, 0, 294, 290, 284, 286, 296, 0, 294, 291, - 295, 287, 295, 288, 291, 299, 300, 0, 0, 296, - 292, 293, 298, 290, 294, 297, 293, 0, 297, 294, - 297, 324, 304, 296, 295, 294, 297, 295, 300, 295, - 298, 302, 301, 300, 304, 303, 306, 299, 302, 298, - 301, 303, 297, 305, 307, 297, 301, 297, 310, 304, - 311, 328, 306, 324, 347, 311, 305, 307, 302, 301, - - 306, 309, 303, 306, 313, 0, 310, 301, 312, 315, - 305, 307, 313, 309, 312, 310, 315, 314, 317, 306, - 308, 308, 311, 328, 0, 316, 347, 317, 309, 314, - 308, 313, 308, 308, 308, 312, 315, 308, 316, 318, - 322, 0, 319, 318, 314, 308, 320, 308, 308, 319, - 317, 321, 316, 320, 317, 326, 323, 308, 325, 308, - 308, 308, 322, 321, 308, 325, 318, 322, 323, 319, - 326, 327, 329, 320, 329, 330, 332, 332, 321, 331, - 333, 334, 326, 323, 327, 325, 330, 333, 337, 335, - 336, 338, 334, 0, 0, 340, 339, 341, 327, 329, - - 335, 331, 330, 336, 340, 332, 331, 333, 334, 343, - 341, 339, 0, 337, 338, 337, 335, 336, 338, 339, - 344, 342, 340, 339, 341, 346, 345, 343, 351, 348, - 349, 350, 342, 352, 342, 348, 343, 353, 339, 342, - 352, 357, 344, 346, 355, 358, 359, 344, 342, 345, - 351, 349, 346, 345, 350, 351, 348, 349, 350, 342, - 352, 342, 354, 353, 353, 356, 355, 357, 357, 359, - 362, 355, 360, 359, 361, 363, 354, 358, 360, 356, - 364, 365, 0, 366, 367, 368, 0, 369, 362, 354, - 363, 368, 356, 371, 372, 364, 361, 362, 373, 360, - - 372, 361, 363, 376, 365, 374, 367, 364, 365, 366, - 366, 367, 368, 369, 369, 375, 380, 373, 376, 371, - 371, 372, 375, 374, 378, 373, 378, 379, 381, 380, - 376, 382, 374, 378, 379, 383, 385, 384, 386, 387, - 0, 388, 375, 380, 389, 0, 387, 391, 390, 382, - 384, 378, 0, 378, 379, 385, 0, 383, 382, 394, - 381, 390, 383, 385, 384, 388, 387, 389, 388, 391, - 386, 395, 392, 393, 391, 390, 389, 392, 397, 393, - 396, 400, 394, 395, 398, 0, 394, 401, 400, 397, - 0, 403, 398, 402, 389, 401, 0, 0, 395, 392, - - 393, 403, 396, 422, 402, 397, 0, 396, 400, 405, - 0, 398, 399, 404, 401, 406, 408, 399, 408, 399, - 402, 407, 406, 403, 404, 409, 0, 399, 403, 410, - 399, 0, 0, 405, 411, 422, 405, 399, 399, 399, - 404, 410, 406, 408, 399, 413, 399, 407, 407, 411, - 412, 409, 409, 413, 399, 414, 410, 399, 415, 417, - 414, 411, 412, 416, 399, 421, 418, 417, 419, 423, - 424, 425, 413, 426, 427, 430, 429, 412, 418, 424, - 415, 416, 414, 428, 423, 415, 417, 426, 421, 419, - 416, 431, 421, 418, 425, 419, 423, 424, 425, 427, - - 426, 427, 428, 429, 432, 433, 431, 430, 0, 0, - 428, 434, 435, 0, 438, 436, 437, 438, 431, 439, - 433, 440, 442, 443, 435, 438, 440, 444, 445, 446, - 439, 441, 433, 447, 452, 434, 432, 436, 434, 435, - 437, 438, 436, 437, 438, 441, 439, 449, 448, 442, - 443, 451, 450, 440, 448, 445, 446, 452, 441, 444, - 450, 452, 453, 454, 455, 447, 456, 458, 460, 449, - 451, 0, 0, 455, 449, 448, 457, 0, 451, 450, - 459, 460, 463, 457, 0, 469, 454, 461, 456, 462, - 454, 455, 461, 456, 453, 460, 461, 464, 462, 458, - - 465, 468, 459, 457, 466, 467, 464, 459, 463, 463, - 471, 461, 470, 468, 461, 0, 462, 469, 467, 461, - 472, 476, 465, 461, 464, 475, 466, 465, 468, 473, - 470, 466, 467, 474, 471, 476, 475, 471, 479, 470, - 477, 478, 472, 472, 481, 482, 480, 472, 476, 479, - 483, 473, 475, 485, 484, 474, 473, 488, 487, 478, - 474, 480, 477, 490, 489, 479, 482, 477, 478, 472, - 486, 487, 482, 480, 483, 485, 481, 483, 484, 486, - 485, 484, 491, 492, 494, 487, 489, 493, 495, 488, - 496, 489, 493, 497, 498, 490, 500, 486, 494, 499, - - 0, 497, 495, 501, 0, 492, 491, 502, 503, 491, - 492, 494, 498, 503, 499, 495, 504, 0, 501, 493, - 497, 498, 496, 499, 506, 505, 499, 505, 500, 502, - 501, 507, 508, 513, 502, 509, 510, 514, 511, 507, - 503, 499, 504, 504, 509, 510, 511, 512, 519, 506, - 0, 506, 505, 550, 512, 514, 513, 508, 507, 508, - 513, 515, 509, 510, 514, 511, 516, 518, 517, 520, - 521, 0, 522, 515, 512, 516, 517, 520, 521, 518, - 519, 523, 524, 526, 525, 550, 0, 0, 515, 529, - 524, 527, 530, 516, 518, 517, 520, 521, 522, 522, - - 525, 531, 527, 529, 523, 526, 528, 532, 523, 524, - 526, 525, 530, 533, 528, 534, 529, 535, 527, 530, - 537, 536, 0, 531, 540, 544, 535, 532, 531, 541, - 538, 539, 542, 528, 532, 533, 546, 534, 537, 543, - 533, 536, 534, 538, 535, 543, 540, 537, 536, 539, - 547, 540, 544, 541, 545, 542, 541, 538, 539, 542, - 551, 549, 545, 546, 553, 554, 543, 551, 547, 549, - 552, 555, 562, 557, 554, 556, 0, 547, 0, 553, - 545, 545, 557, 558, 562, 558, 565, 551, 549, 545, - 568, 553, 554, 552, 556, 569, 565, 552, 559, 562, - - 557, 570, 556, 555, 578, 559, 578, 573, 568, 571, - 558, 572, 0, 565, 0, 576, 569, 568, 577, 575, - 579, 576, 569, 580, 570, 559, 560, 577, 570, 581, - 560, 578, 582, 560, 601, 571, 571, 572, 572, 573, - 560, 575, 576, 560, 579, 577, 575, 579, 560, 581, - 580, 583, 586, 560, 584, 0, 581, 560, 582, 582, - 560, 601, 0, 583, 585, 587, 0, 560, 588, 589, - 560, 574, 574, 0, 574, 590, 586, 574, 583, 586, - 584, 584, 574, 590, 589, 591, 585, 587, 574, 574, - 603, 585, 587, 588, 594, 588, 589, 574, 574, 574, - - 592, 574, 590, 593, 574, 595, 596, 592, 591, 574, - 597, 593, 591, 594, 599, 574, 574, 598, 596, 0, - 600, 594, 603, 597, 602, 604, 598, 592, 605, 599, - 593, 595, 595, 596, 607, 606, 609, 597, 610, 608, - 0, 599, 600, 613, 598, 609, 602, 600, 611, 0, - 615, 602, 605, 607, 614, 605, 606, 604, 608, 612, - 610, 607, 606, 609, 616, 610, 608, 612, 611, 615, - 613, 617, 614, 619, 620, 611, 623, 615, 621, 617, - 624, 614, 622, 625, 628, 626, 612, 628, 632, 623, - 627, 619, 620, 626, 0, 625, 616, 631, 617, 0, - - 619, 620, 621, 623, 622, 621, 624, 624, 627, 622, - 625, 628, 626, 629, 633, 632, 634, 627, 639, 635, - 633, 629, 631, 636, 631, 635, 637, 638, 640, 0, - 636, 637, 647, 641, 638, 650, 639, 629, 634, 642, - 629, 633, 641, 634, 643, 639, 635, 642, 629, 644, - 636, 640, 645, 637, 638, 640, 646, 649, 652, 647, - 641, 648, 643, 659, 644, 645, 642, 650, 648, 653, - 649, 643, 656, 651, 654, 657, 644, 646, 655, 645, - 651, 657, 654, 646, 649, 658, 655, 663, 648, 661, - 652, 660, 653, 655, 656, 659, 653, 664, 661, 656, - - 651, 654, 657, 662, 664, 655, 665, 667, 668, 669, - 0, 658, 658, 655, 666, 660, 661, 662, 660, 663, - 668, 670, 672, 666, 664, 672, 673, 0, 678, 670, - 662, 675, 669, 665, 667, 668, 669, 676, 675, 673, - 0, 666, 681, 676, 681, 679, 0, 680, 670, 672, - 683, 0, 682, 673, 678, 678, 686, 685, 675, 680, - 684, 686, 683, 687, 676, 677, 0, 677, 679, 681, - 685, 677, 679, 677, 680, 682, 687, 683, 677, 682, - 688, 689, 684, 677, 685, 2133, 2133, 684, 686, 677, - 687, 690, 677, 689, 677, 691, 692, 697, 677, 695, - - 677, 690, 694, 688, 696, 677, 693, 688, 689, 692, - 677, 0, 693, 690, 2133, 694, 700, 691, 690, 701, - 695, 702, 691, 692, 697, 703, 695, 704, 690, 694, - 706, 700, 707, 693, 702, 713, 696, 699, 705, 708, - 703, 701, 699, 700, 699, 707, 701, 708, 702, 706, - 709, 710, 703, 704, 704, 699, 711, 706, 709, 707, - 705, 714, 699, 699, 699, 705, 708, 713, 715, 699, - 716, 699, 717, 719, 718, 720, 715, 709, 710, 711, - 721, 719, 699, 711, 716, 714, 723, 724, 714, 699, - 726, 732, 722, 720, 0, 715, 718, 716, 721, 727, - - 719, 718, 720, 722, 717, 724, 727, 721, 725, 728, - 730, 731, 726, 729, 724, 737, 725, 726, 723, 722, - 729, 734, 728, 732, 735, 738, 727, 737, 730, 731, - 736, 739, 735, 740, 734, 725, 728, 730, 731, 736, - 729, 741, 737, 742, 743, 746, 753, 738, 734, 747, - 744, 735, 738, 739, 747, 740, 746, 736, 739, 741, - 740, 0, 748, 749, 744, 748, 750, 751, 741, 742, - 742, 752, 746, 754, 751, 755, 743, 744, 753, 750, - 754, 747, 757, 752, 758, 756, 759, 749, 748, 748, - 749, 756, 748, 750, 751, 760, 761, 759, 752, 755, - - 754, 762, 755, 764, 757, 766, 758, 767, 765, 757, - 0, 758, 756, 759, 770, 768, 762, 760, 761, 765, - 769, 775, 760, 761, 764, 780, 766, 771, 762, 769, - 764, 772, 766, 768, 767, 765, 771, 773, 770, 772, - 776, 770, 768, 774, 773, 781, 777, 769, 783, 780, - 779, 782, 780, 775, 771, 784, 785, 774, 772, 779, - 782, 781, 776, 783, 773, 788, 0, 776, 777, 786, - 774, 787, 781, 777, 789, 783, 790, 779, 782, 791, - 0, 786, 789, 795, 794, 0, 793, 784, 785, 790, - 803, 795, 788, 787, 791, 793, 786, 796, 787, 796, - - 798, 789, 794, 790, 800, 802, 791, 801, 798, 804, - 795, 794, 802, 793, 0, 805, 0, 800, 806, 801, - 0, 811, 803, 808, 796, 807, 809, 798, 0, 810, - 812, 800, 802, 811, 801, 813, 808, 805, 812, 809, - 0, 804, 805, 806, 816, 806, 814, 807, 811, 819, - 808, 810, 807, 809, 818, 813, 810, 812, 814, 815, - 825, 817, 813, 818, 0, 820, 0, 815, 821, 824, - 819, 816, 820, 814, 817, 823, 819, 821, 830, 821, - 825, 818, 821, 827, 826, 828, 815, 825, 817, 0, - 821, 824, 820, 832, 828, 821, 824, 826, 829, 835, - - 830, 823, 823, 0, 821, 830, 821, 827, 836, 821, - 827, 826, 828, 831, 833, 832, 829, 838, 837, 839, - 832, 831, 833, 841, 842, 829, 835, 839, 0, 838, - 840, 836, 844, 846, 0, 836, 837, 852, 844, 842, - 831, 833, 840, 841, 838, 837, 839, 843, 850, 845, - 841, 842, 847, 854, 846, 843, 848, 840, 845, 844, - 846, 849, 856, 848, 847, 853, 850, 857, 849, 852, - 855, 866, 854, 0, 843, 850, 845, 855, 853, 847, - 854, 858, 857, 848, 856, 859, 858, 860, 849, 856, - 861, 864, 853, 859, 857, 862, 0, 855, 865, 0, - - 860, 0, 867, 866, 861, 864, 869, 0, 868, 0, - 0, 878, 859, 858, 860, 0, 865, 861, 864, 879, - 870, 862, 862, 863, 869, 865, 863, 863, 867, 867, - 868, 863, 873, 869, 871, 868, 872, 863, 875, 873, - 877, 863, 870, 878, 876, 863, 881, 870, 874, 877, - 863, 879, 880, 863, 863, 883, 871, 876, 863, 873, - 875, 871, 872, 872, 863, 875, 874, 877, 863, 881, - 885, 876, 887, 881, 880, 874, 888, 892, 890, 880, - 882, 883, 883, 889, 893, 882, 885, 882, 888, 882, - 892, 882, 889, 897, 895, 887, 890, 885, 882, 887, - - 894, 891, 893, 888, 892, 890, 891, 882, 894, 896, - 889, 893, 882, 895, 882, 897, 882, 898, 882, 899, - 897, 895, 896, 900, 901, 902, 901, 894, 903, 904, - 898, 905, 900, 891, 909, 907, 896, 899, 908, 910, - 912, 904, 909, 0, 898, 915, 899, 902, 913, 0, - 900, 901, 902, 921, 917, 903, 904, 911, 905, 907, - 908, 909, 907, 914, 911, 908, 910, 912, 918, 914, - 913, 916, 915, 922, 919, 913, 917, 920, 916, 921, - 921, 917, 922, 924, 911, 923, 927, 918, 925, 928, - 914, 930, 929, 931, 0, 918, 919, 932, 916, 920, - - 922, 919, 925, 924, 920, 932, 923, 934, 0, 933, - 924, 931, 923, 937, 929, 925, 938, 937, 927, 929, - 931, 928, 935, 930, 932, 933, 936, 941, 940, 935, - 942, 939, 943, 936, 934, 940, 933, 939, 0, 944, - 937, 943, 941, 942, 939, 945, 948, 947, 938, 935, - 949, 0, 945, 936, 941, 940, 947, 942, 939, 943, - 946, 951, 946, 950, 939, 944, 944, 950, 948, 957, - 953, 954, 945, 948, 947, 955, 954, 949, 953, 956, - 958, 0, 957, 951, 961, 963, 0, 946, 951, 0, - 950, 964, 958, 955, 965, 0, 957, 953, 956, 962, - - 0, 959, 955, 954, 959, 960, 956, 958, 960, 961, - 965, 961, 962, 959, 964, 966, 968, 963, 964, 967, - 967, 965, 969, 966, 970, 968, 962, 960, 959, 971, - 973, 959, 960, 970, 0, 960, 971, 975, 974, 976, - 978, 0, 966, 968, 969, 975, 967, 974, 977, 969, - 979, 970, 978, 973, 976, 980, 971, 973, 981, 982, - 984, 977, 979, 980, 975, 974, 976, 978, 983, 984, - 985, 991, 986, 988, 990, 977, 0, 979, 989, 982, - 981, 987, 980, 992, 989, 981, 982, 984, 985, 996, - 983, 993, 998, 987, 988, 983, 990, 985, 986, 986, - - 988, 990, 994, 991, 997, 989, 1002, 0, 987, 1000, - 998, 999, 1001, 0, 1003, 992, 996, 993, 993, 998, - 999, 1006, 1000, 1004, 1001, 1005, 1002, 997, 994, 994, - 1004, 997, 1007, 1002, 1008, 1015, 1000, 0, 999, 1001, - 1003, 1003, 1008, 1006, 1005, 1007, 1009, 1012, 1006, 1010, - 1004, 1009, 1005, 1011, 1010, 1012, 1013, 1014, 1017, 1007, - 1011, 1008, 1016, 1016, 1013, 1014, 1017, 1015, 1019, 1018, - 1025, 1020, 0, 0, 1012, 1024, 1025, 0, 1009, 1020, - 1011, 1010, 1027, 1013, 1014, 1017, 1021, 1022, 1024, 1016, - 1018, 1023, 1026, 1028, 1021, 1022, 1018, 1025, 1020, 1023, - - 1019, 1029, 1024, 1030, 1026, 1031, 1032, 1033, 1027, 1027, - 1035, 1040, 1039, 1021, 1022, 0, 1029, 1028, 1023, 1026, - 1028, 1033, 1034, 1039, 1035, 1041, 0, 1031, 1029, 1032, - 1030, 1036, 1031, 1032, 1033, 1036, 1038, 1035, 1040, 1039, - 1034, 1042, 1043, 1038, 1044, 1045, 1046, 1041, 1036, 1034, - 1047, 1044, 1041, 1046, 1045, 1054, 1036, 1048, 1036, 1052, - 0, 1050, 1036, 1038, 1042, 1043, 1053, 1056, 1042, 1043, - 1050, 1044, 1045, 1046, 1058, 1036, 1061, 1064, 1059, 1064, - 1062, 1052, 1047, 1063, 1048, 1065, 1052, 1054, 1050, 1059, - 1068, 1067, 1053, 1053, 1056, 1063, 1066, 1069, 1070, 0, - - 1061, 1058, 1068, 1061, 1064, 1059, 1062, 1062, 1071, 1066, - 1063, 1065, 1065, 1067, 1072, 1071, 1074, 1068, 1067, 1075, - 1076, 1070, 1073, 1066, 1069, 1070, 1077, 1073, 1076, 1079, - 1080, 1081, 1074, 1082, 1091, 1071, 0, 0, 0, 1080, - 1072, 1072, 1075, 1074, 1081, 1083, 1075, 1076, 1077, 1073, - 1086, 1087, 1090, 1077, 1084, 1085, 1079, 1080, 1081, 1082, - 1082, 1084, 1085, 1088, 1089, 1093, 1091, 1083, 1086, 1092, - 1088, 1095, 1083, 1087, 1090, 1096, 1092, 1086, 1087, 1090, - 1097, 1084, 1085, 1098, 1095, 1101, 1111, 1102, 1097, 1089, - 1088, 1089, 1100, 1103, 1104, 1100, 1092, 1093, 1095, 1106, - - 0, 1107, 1096, 1104, 1098, 1105, 1103, 1097, 1109, 1108, - 1098, 1101, 1101, 1102, 1102, 1109, 1112, 1105, 1111, 1100, - 1103, 1104, 1110, 1106, 1108, 1110, 1106, 1107, 1107, 1113, - 1116, 1114, 1105, 1117, 1118, 1109, 1108, 1110, 1112, 1115, - 1120, 1115, 1119, 1112, 1122, 0, 1110, 1113, 1120, 1110, - 1123, 1119, 1110, 1114, 1116, 1121, 1113, 1116, 1114, 1124, - 1118, 1118, 1121, 1126, 1110, 1117, 1115, 1120, 1127, 1119, - 1125, 1128, 1123, 1130, 1125, 1129, 1122, 1123, 1135, 1131, - 1130, 1132, 1121, 1133, 1129, 1126, 1131, 1136, 1134, 1169, - 1126, 1124, 1135, 1128, 1132, 1127, 1133, 1125, 1128, 1139, - - 1130, 1142, 1129, 1134, 1137, 1135, 1131, 1138, 1132, 1145, - 1133, 1137, 1139, 1143, 1138, 1134, 1140, 1144, 1146, 1136, - 1143, 1169, 1140, 1150, 1147, 0, 1139, 1152, 1142, 1148, - 1146, 1137, 1148, 1149, 1138, 1145, 1145, 1147, 1159, 1144, - 1143, 1150, 1149, 1140, 1144, 1146, 1151, 1152, 1154, 1153, - 1150, 1147, 1153, 1158, 1152, 1158, 1148, 1156, 1151, 1154, - 1149, 1160, 1156, 1161, 1162, 1159, 1164, 1153, 1165, 1156, - 1163, 1170, 1162, 1151, 1166, 1154, 1153, 1164, 1167, 1153, - 1158, 1167, 1166, 0, 1156, 1168, 1165, 1161, 1160, 1156, - 1161, 1162, 1163, 1164, 1174, 1165, 1167, 1163, 1170, 1171, - - 1172, 1166, 1173, 1168, 1175, 1167, 1171, 1174, 1167, 1176, - 1179, 1173, 1168, 1180, 1172, 1175, 1178, 1181, 1178, 1179, - 1182, 1174, 0, 1183, 1176, 1186, 1171, 1172, 1181, 1173, - 1185, 1175, 1184, 1185, 1186, 1189, 1176, 1179, 1182, 1180, - 1180, 1191, 1190, 1178, 1181, 1183, 1184, 1182, 1185, 1187, - 1183, 1190, 1186, 1192, 1187, 1193, 1194, 1185, 1184, 1184, - 1185, 1198, 1195, 1197, 1199, 1205, 0, 1189, 1191, 1190, - 1197, 0, 0, 1184, 1200, 1204, 1203, 1193, 1199, 1205, - 1200, 1187, 1193, 1195, 1203, 1192, 1206, 1209, 1194, 1195, - 1197, 1199, 1205, 1198, 1204, 1206, 1207, 1208, 1200, 1210, - - 1211, 1200, 1204, 1203, 1207, 1213, 1215, 1200, 1214, 1211, - 1210, 1208, 1216, 1206, 1217, 1214, 1218, 1220, 1222, 1209, - 1223, 1220, 1219, 1207, 1208, 0, 1210, 1211, 1225, 1215, - 1222, 1226, 1213, 1215, 1216, 1214, 1217, 1224, 1218, 1216, - 1219, 1217, 1227, 1218, 1220, 1222, 1226, 1223, 1225, 1219, - 1224, 1228, 1230, 1229, 1232, 1225, 1231, 1227, 1226, 1228, - 1229, 1233, 1234, 1232, 1224, 1236, 1235, 0, 1239, 1227, - 1240, 1231, 1238, 1242, 0, 0, 1241, 1243, 1228, 0, - 1229, 1232, 1233, 1231, 1230, 1248, 1239, 1246, 1233, 1234, - 1235, 1241, 1236, 1235, 1238, 1239, 1246, 1240, 1242, 1238, - - 1242, 1243, 1244, 1241, 1243, 1245, 1247, 1248, 1249, 1244, - 1245, 1251, 1248, 1250, 1246, 1247, 1256, 1252, 1253, 1257, - 1254, 0, 1255, 1251, 0, 1261, 1249, 1254, 1250, 1244, - 1260, 1253, 1245, 1247, 1255, 1249, 1253, 1260, 1251, 1252, - 1250, 1263, 1258, 1256, 1252, 1253, 1259, 1254, 1258, 1255, - 1264, 1257, 1261, 1262, 1259, 1265, 1264, 1260, 1253, 1267, - 1262, 1266, 1268, 1270, 1272, 1271, 1274, 1275, 1263, 1258, - 1273, 1277, 1273, 1259, 1271, 1276, 1281, 1264, 1284, 0, - 1262, 0, 1265, 1284, 1266, 0, 1268, 0, 1266, 1268, - 1274, 1267, 1271, 1274, 1275, 1270, 1272, 1273, 1278, 1278, - - 1278, 1276, 1276, 1277, 1279, 1278, 1285, 1280, 1281, 1282, - 1284, 1279, 1286, 1278, 1280, 1289, 1282, 1288, 1292, 1285, - 0, 1291, 1287, 1290, 1292, 1278, 1278, 1278, 1291, 1288, - 1293, 1279, 1278, 1285, 1280, 1295, 1282, 1286, 1287, 1286, - 1298, 1290, 1294, 1294, 1288, 1292, 1296, 1289, 1291, 1287, - 1290, 1297, 1299, 1296, 1302, 1304, 1297, 1293, 1303, 1305, - 1306, 1295, 1295, 1309, 1303, 1307, 1298, 1298, 1314, 1294, - 1317, 1305, 1302, 1296, 1308, 1308, 1310, 1310, 1297, 1299, - 1306, 1302, 1304, 1307, 1311, 1303, 1305, 1306, 1313, 1309, - 1309, 1315, 1307, 1316, 1318, 1311, 1319, 1320, 1315, 0, - - 1314, 1308, 1317, 1310, 1321, 1322, 1323, 0, 1326, 0, - 1313, 1311, 1322, 1316, 1323, 1313, 1325, 1326, 1315, 1320, - 1316, 1324, 1321, 1319, 1320, 1328, 1318, 1327, 1327, 1329, - 1330, 1321, 1322, 1323, 1332, 1326, 1324, 1333, 1337, 1335, - 1325, 1329, 1332, 1325, 1336, 1338, 1330, 1335, 1324, 1333, - 1339, 1328, 1328, 1330, 1327, 1341, 1329, 1330, 1345, 1337, - 1346, 1332, 1342, 1338, 1333, 1337, 1335, 1336, 1342, 1340, - 1343, 1336, 1338, 1330, 1340, 1347, 1348, 1339, 1349, 1344, - 1347, 1352, 1341, 1343, 1351, 1340, 1344, 1346, 1354, 1342, - 1345, 1350, 1350, 1355, 1356, 1358, 1340, 1343, 1357, 1351, - - 1357, 1340, 1360, 1354, 1361, 1363, 1344, 1347, 1348, 1356, - 1349, 1351, 1359, 1352, 1364, 1354, 1355, 1359, 1350, 1361, - 1355, 1356, 1365, 1366, 1368, 1357, 1367, 1358, 1372, 1363, - 1369, 1361, 1363, 1367, 1360, 0, 1370, 0, 1371, 1359, - 1364, 1364, 1374, 1376, 1381, 1377, 1372, 1379, 1382, 1365, - 1366, 1369, 1386, 1367, 0, 1372, 1368, 1369, 1370, 1371, - 1377, 1380, 1379, 1370, 1374, 1371, 1381, 1376, 1383, 1374, - 1376, 1381, 1377, 0, 1379, 1382, 1380, 1384, 1385, 1386, - 1387, 1389, 1393, 1388, 1390, 0, 1383, 1387, 1380, 1391, - 1389, 1392, 1390, 1394, 1397, 1383, 1401, 1407, 1396, 1384, - - 1385, 1388, 0, 1397, 1384, 1385, 1394, 1387, 1389, 1396, - 1388, 1390, 1391, 1392, 1393, 1398, 1391, 1399, 1392, 1403, - 1394, 1397, 1405, 1401, 1396, 1396, 1406, 1408, 1411, 1407, - 1403, 1409, 1412, 1398, 1405, 1399, 1396, 1408, 1410, 1406, - 1414, 1415, 1398, 1416, 1399, 0, 1403, 0, 1415, 1405, - 0, 1412, 0, 1406, 1408, 1411, 1417, 1409, 1409, 1412, - 1414, 1419, 1420, 1410, 1421, 1410, 1418, 1414, 1415, 1416, - 1416, 1424, 1418, 1423, 1417, 1426, 1419, 1420, 1428, 1421, - 1422, 1422, 1426, 1417, 1424, 1423, 1427, 1429, 1419, 1420, - 1430, 1421, 1424, 1418, 1431, 1436, 1429, 1430, 1424, 1433, - - 1423, 1427, 1426, 1432, 0, 1428, 1433, 1422, 1439, 1435, - 1437, 1424, 1438, 1427, 1429, 1441, 1442, 1430, 1431, 1437, - 1436, 1431, 1436, 1445, 1447, 1432, 1433, 1444, 1439, 1453, - 1432, 1435, 1448, 1441, 1438, 1439, 1435, 1437, 1449, 1438, - 1444, 1442, 1441, 1442, 1446, 1446, 1447, 1450, 1452, 1451, - 1445, 1447, 1455, 1456, 1444, 1452, 1454, 1448, 1451, 1448, - 1449, 1453, 1458, 1460, 1459, 1449, 1455, 1461, 0, 1450, - 1458, 1446, 1456, 1462, 1450, 1452, 1451, 1459, 1454, 1455, - 1456, 1463, 1464, 1454, 1465, 1462, 1467, 0, 1463, 1458, - 1460, 1459, 1466, 1461, 1461, 1468, 0, 1469, 1472, 1473, - - 1462, 1467, 1470, 1471, 1472, 1470, 1465, 0, 1463, 1474, - 0, 1465, 1477, 1467, 1464, 1478, 1475, 1466, 0, 1466, - 1470, 1468, 1468, 1469, 1469, 1472, 1473, 1474, 1471, 1470, - 1471, 1475, 1470, 1480, 1477, 1482, 1474, 1478, 1481, 1477, - 1483, 1489, 1478, 1475, 1482, 1481, 1488, 1480, 1485, 1487, - 1488, 1483, 1490, 1489, 1490, 1492, 1491, 1494, 1495, 1493, - 1480, 1485, 1482, 0, 1496, 1481, 1495, 1483, 1489, 1485, - 1487, 1497, 1511, 1488, 1491, 1485, 1487, 1493, 1498, 1490, - 1500, 1504, 1492, 1491, 1494, 1495, 1493, 1496, 1485, 1499, - 1501, 1496, 1498, 1497, 1499, 1506, 1507, 1501, 1497, 1500, - - 1505, 0, 1508, 1509, 1511, 1498, 1510, 1500, 1504, 1512, - 1513, 1515, 1514, 1506, 1505, 1510, 0, 1501, 1509, 1517, - 0, 1499, 1506, 1507, 1519, 1505, 1505, 1505, 1508, 1508, - 1509, 1512, 1522, 1510, 1514, 1525, 1512, 1513, 1518, 1514, - 1523, 1505, 1517, 1515, 1523, 1518, 1517, 1519, 1521, 1524, - 1521, 1519, 1505, 1528, 1522, 1526, 1529, 1525, 1527, 1522, - 1530, 1524, 1525, 0, 1526, 1518, 1531, 1523, 0, 1527, - 1532, 1532, 1530, 1533, 1537, 1521, 1524, 1537, 1535, 1529, - 1528, 1533, 1526, 1529, 1538, 1527, 1535, 1530, 1531, 1539, - 1536, 1540, 1538, 1531, 1536, 1539, 1541, 1532, 1543, 1544, - - 1533, 1537, 1541, 1545, 1550, 1535, 1540, 1546, 1551, 1547, - 1543, 1538, 1549, 0, 1548, 1553, 1539, 1536, 1540, 1554, - 1552, 1546, 1547, 1541, 1556, 1543, 1544, 1545, 1548, 1553, - 1545, 1550, 1552, 1562, 1546, 1551, 1547, 1555, 1549, 1549, - 1555, 1548, 1553, 1557, 1559, 1554, 1554, 1552, 1562, 1560, - 1561, 1556, 1563, 1564, 1565, 1555, 1560, 1561, 1566, 1567, - 1562, 1568, 1565, 1569, 1555, 1557, 1559, 1555, 1567, 1570, - 1557, 1559, 1573, 1574, 1576, 1571, 1560, 1561, 1577, 1563, - 1564, 1565, 1570, 1571, 1575, 1566, 1567, 1577, 1568, 1578, - 1569, 1579, 1575, 1580, 1573, 1581, 1570, 1583, 1582, 1573, - - 1574, 1576, 1571, 1585, 1584, 1577, 1582, 1587, 1580, 1583, - 1578, 1575, 1584, 1588, 1587, 1579, 1578, 1588, 1579, 1580, - 1580, 1589, 1581, 1590, 1583, 1582, 1591, 1593, 1592, 1595, - 1585, 1584, 1594, 1589, 1587, 1580, 1592, 1596, 1596, 1594, - 1588, 1597, 1598, 0, 1602, 1599, 1590, 1601, 1589, 1595, - 1590, 1604, 1605, 1591, 1593, 1592, 1595, 0, 1605, 1594, - 1598, 1603, 1601, 1603, 1596, 1604, 1602, 1597, 1597, 1598, - 1599, 1602, 1599, 1606, 1601, 1607, 1609, 1608, 1604, 1605, - 1610, 1611, 1614, 1612, 1617, 0, 1615, 0, 1603, 1608, - 1620, 1617, 1613, 1621, 1609, 1606, 0, 1607, 1610, 1611, - - 1606, 1612, 1607, 1609, 1608, 1613, 1619, 1610, 1611, 1615, - 1612, 1617, 1622, 1615, 1614, 1625, 1620, 1620, 1626, 1613, - 1622, 1623, 1628, 1623, 1619, 1621, 1631, 1625, 1623, 1629, - 1633, 1630, 1642, 1619, 0, 1637, 1626, 1628, 1622, 1622, - 1629, 1631, 1625, 1630, 1634, 1626, 1636, 1622, 1623, 1628, - 1623, 1639, 1635, 1631, 1633, 1641, 1629, 1633, 1630, 1635, - 1640, 1636, 1637, 1643, 1642, 1644, 1634, 1645, 0, 0, - 1646, 1634, 1648, 1636, 1647, 1649, 1653, 1641, 1639, 1635, - 1645, 1650, 1641, 1649, 1640, 1648, 1652, 1640, 1654, 1647, - 1655, 1656, 1644, 1658, 1645, 1643, 1646, 1646, 1656, 1648, - - 1653, 1647, 1649, 1653, 1657, 1659, 1658, 1650, 1650, 1652, - 1662, 1657, 1655, 1652, 1660, 1654, 1661, 1655, 1656, 1663, - 1658, 1660, 1667, 1666, 1664, 1668, 1669, 1670, 1659, 1674, - 0, 1657, 1659, 1664, 1666, 1673, 1675, 1680, 1661, 1677, - 1663, 1660, 1662, 1661, 1667, 1669, 1663, 1679, 1673, 1667, - 1666, 1664, 1670, 1669, 1670, 1674, 1674, 1668, 1676, 1676, - 1675, 1681, 1673, 1675, 1682, 1677, 1677, 1686, 1683, 1680, - 1679, 1688, 0, 1693, 1679, 1691, 1681, 1692, 1695, 1697, - 1688, 1698, 1699, 1708, 0, 1676, 1683, 1700, 1681, 0, - 1701, 1682, 1700, 1699, 1686, 1683, 1705, 1691, 1688, 1692, - - 1693, 1704, 1691, 1707, 1692, 1695, 1712, 1698, 1698, 1699, - 1703, 1697, 1701, 1709, 1700, 1708, 1704, 1701, 1703, 1710, - 1715, 1707, 1709, 1705, 1714, 0, 1716, 1717, 1704, 1718, - 1707, 1710, 1719, 1712, 1721, 1720, 1722, 1703, 1723, 0, - 1709, 1726, 1718, 1724, 0, 1719, 1710, 1715, 1716, 1729, - 1714, 1714, 1717, 1716, 1717, 1725, 1718, 1720, 1724, 1719, - 1727, 1721, 1720, 1722, 1725, 1723, 1728, 1726, 1726, 1729, - 1724, 1730, 1731, 1732, 1734, 1727, 1729, 1733, 1735, 1731, - 1738, 1728, 1725, 1737, 1733, 1741, 1730, 1727, 1736, 1736, - 1737, 1742, 1744, 1728, 1738, 1732, 1735, 1744, 1730, 1731, - - 1732, 1734, 1746, 1739, 1733, 1735, 1739, 1738, 1740, 1742, - 1737, 1741, 1741, 1743, 1747, 1736, 1745, 1748, 1742, 1744, - 1745, 1740, 1743, 1749, 1750, 1751, 1746, 1747, 1752, 1746, - 1739, 1755, 1757, 1756, 0, 1740, 0, 0, 1758, 1748, - 1743, 1747, 1756, 1745, 1748, 1749, 1758, 1780, 1757, 1760, - 1749, 1750, 1751, 1761, 1752, 1752, 1760, 1755, 1755, 1757, - 1756, 1762, 1761, 1763, 1764, 1758, 1762, 1765, 1766, 1769, - 1763, 1767, 1771, 1773, 1765, 1770, 1760, 1766, 1774, 1780, - 1761, 1771, 1764, 1772, 1778, 1773, 1779, 1774, 1762, 0, - 1763, 1764, 1775, 1770, 1765, 1766, 1769, 1767, 1767, 1771, - - 1773, 1775, 1770, 1772, 1776, 1774, 1777, 1781, 1782, 1783, - 1772, 1778, 1788, 1779, 1777, 1776, 1781, 1783, 1784, 1775, - 1782, 1785, 1786, 1789, 1787, 0, 1791, 1790, 1785, 1786, - 1793, 1776, 0, 1777, 1781, 1782, 1783, 1788, 1793, 1788, - 1784, 1795, 1801, 1802, 1805, 1784, 1787, 1810, 1785, 1786, - 1789, 1787, 1790, 1791, 1790, 1796, 1797, 1793, 1800, 1795, - 1803, 1806, 1796, 1808, 1797, 1800, 1801, 1804, 1795, 1801, - 1802, 1805, 1803, 1809, 1810, 1808, 1804, 1811, 1813, 1815, - 1817, 1816, 1796, 1797, 1806, 1800, 1819, 1803, 1806, 1816, - 1808, 1811, 1818, 1824, 1804, 1823, 1809, 1825, 1824, 1826, - - 1809, 1827, 1828, 1829, 1811, 1813, 1815, 1817, 1816, 1838, - 1831, 1825, 1830, 1819, 1818, 1828, 1832, 1826, 1831, 1818, - 1824, 1823, 1823, 1827, 1825, 1829, 1826, 1835, 1827, 1828, - 1829, 1830, 1834, 1836, 1837, 1832, 1838, 1831, 1839, 1830, - 1842, 1841, 1840, 1832, 1834, 0, 1837, 1844, 1843, 1835, - 1847, 0, 1845, 1848, 1835, 1836, 1846, 1851, 1852, 1834, - 1836, 1837, 1840, 1841, 1845, 1839, 1854, 1855, 1841, 1840, - 1843, 1851, 1842, 1844, 1844, 1843, 1853, 1847, 1846, 1845, - 1848, 1853, 1852, 1846, 1851, 1852, 1856, 1857, 1854, 1855, - 1858, 0, 1860, 1854, 1855, 1859, 1861, 1865, 1862, 0, - - 0, 1863, 1867, 0, 1860, 1866, 0, 1871, 1853, 0, - 1857, 1867, 1858, 1859, 1857, 1861, 1863, 1858, 1856, 1860, - 1862, 1865, 1859, 1861, 1865, 1862, 1868, 1866, 1863, 1867, - 1869, 1870, 1866, 1871, 1871, 1875, 1872, 1876, 1877, 1878, - 1868, 1880, 1879, 1875, 1876, 1882, 1877, 0, 1869, 1870, - 1879, 1888, 1883, 1868, 1872, 1881, 1890, 1869, 1870, 1880, - 1883, 1885, 1875, 1872, 1876, 1877, 1878, 1881, 1880, 1879, - 1887, 1889, 1882, 1885, 1888, 1891, 0, 1887, 1888, 1883, - 1894, 1895, 1881, 1890, 1892, 1904, 1897, 1898, 1885, 1899, - 0, 1901, 1906, 1910, 1891, 1895, 1912, 1887, 1894, 1906, - - 1898, 1899, 1891, 1889, 1909, 1911, 1892, 1894, 1895, 1897, - 1913, 1892, 1904, 1897, 1898, 1908, 1899, 1901, 1901, 1906, - 1910, 1914, 1908, 1912, 1916, 1917, 1915, 1918, 1919, 1911, - 1909, 1909, 1911, 1927, 1917, 1920, 1913, 1913, 1915, 1924, - 1918, 1921, 1908, 1925, 1924, 1926, 1929, 1925, 1914, 1930, - 0, 1916, 1917, 1915, 1918, 1928, 1933, 1928, 1934, 1937, - 1919, 1937, 1920, 1935, 1921, 1927, 1926, 1938, 1921, 1929, - 1925, 1924, 1926, 1929, 1939, 1939, 1930, 1934, 1933, 1941, - 1943, 1940, 1928, 1933, 1939, 1934, 1937, 1935, 1941, 1942, - 1935, 1938, 1944, 1943, 1938, 1946, 1942, 1945, 0, 1948, - - 0, 1939, 1939, 1940, 1947, 1945, 1941, 1943, 1940, 1949, - 0, 1950, 1947, 0, 1946, 1955, 1942, 1951, 1952, 1944, - 1953, 1959, 1946, 1963, 1945, 1948, 1948, 1953, 1951, 1954, - 1954, 1947, 1956, 1955, 1957, 1949, 1949, 1950, 1950, 1956, - 1952, 1957, 1955, 1960, 1951, 1952, 1961, 1953, 1959, 1964, - 1963, 1965, 1966, 1967, 1969, 1961, 1954, 1970, 0, 1956, - 1971, 1957, 1978, 1969, 1972, 1973, 0, 1960, 2001, 1964, - 1960, 1967, 1975, 1961, 1966, 1976, 1964, 1973, 1965, 1966, - 1967, 1969, 1972, 1971, 1970, 1974, 1975, 1971, 1979, 1978, - 1974, 1972, 1973, 1976, 1980, 1982, 1984, 1982, 1986, 1975, - - 2001, 1990, 1976, 1989, 1986, 1988, 1979, 0, 1995, 1980, - 1993, 1984, 1992, 1993, 0, 1979, 2004, 1974, 1998, 1990, - 1996, 1980, 1982, 1984, 1997, 1986, 1998, 1988, 1990, 1989, - 1989, 1997, 1988, 1999, 1992, 1995, 1993, 1993, 1996, 1992, - 1993, 2002, 2003, 2004, 2005, 1998, 2006, 1996, 2007, 2008, - 2009, 1997, 2006, 2005, 2010, 1999, 2010, 2011, 2008, 2013, - 1999, 2015, 2014, 2002, 2003, 2016, 2019, 2013, 2002, 2003, - 2007, 2005, 2017, 2006, 2014, 2007, 2008, 2019, 2018, 2016, - 2022, 2010, 2009, 2020, 2011, 2021, 2013, 2024, 2015, 2014, - 2027, 2020, 2016, 2019, 2028, 2017, 2018, 2023, 2023, 2017, - - 2025, 2032, 2022, 2030, 2021, 2018, 2036, 2022, 2025, 2030, - 2020, 2033, 2021, 2034, 2024, 2038, 2037, 2027, 2039, 2038, - 2041, 2028, 2033, 2037, 2023, 2045, 2039, 2025, 2032, 2044, - 2030, 2042, 2046, 2036, 2044, 2034, 2047, 2052, 2033, 2058, - 2034, 2048, 2038, 2037, 2042, 2039, 2041, 2041, 2048, 2049, - 2050, 2053, 2045, 2051, 2047, 2054, 2044, 2049, 2042, 2046, - 2051, 2059, 2060, 2047, 2052, 2050, 2057, 2061, 2048, 2056, - 2062, 2058, 2067, 2057, 2069, 2053, 2049, 2050, 2053, 2062, - 2051, 2054, 2054, 2064, 2056, 2065, 2060, 2066, 2059, 2060, - 2068, 2068, 2071, 2057, 2072, 2066, 2056, 2062, 2074, 2061, - - 2068, 2069, 2072, 2076, 2067, 2064, 2075, 2065, 2078, 2077, - 2064, 2079, 2065, 2080, 2066, 2081, 2076, 2068, 2068, 2071, - 2083, 2072, 2088, 2091, 2086, 2074, 2089, 2088, 2075, 2095, - 2076, 2077, 2086, 2075, 0, 2078, 2077, 2081, 2079, 2093, - 2080, 2092, 2081, 2094, 2099, 2096, 2093, 2083, 2100, 2088, - 2091, 2086, 2089, 2089, 2092, 2101, 2095, 2099, 2102, 2103, - 0, 2094, 2105, 2108, 0, 2107, 2093, 2096, 2092, 2105, - 2094, 2099, 2096, 2109, 2101, 2115, 2106, 2111, 2108, 0, - 2100, 2103, 2101, 2106, 2115, 2102, 2103, 2107, 2113, 2105, - 2108, 2112, 2107, 2124, 2109, 2113, 2111, 2116, 2114, 2112, - - 2109, 2119, 2115, 2106, 2111, 2114, 2117, 2117, 2116, 2125, - 0, 2118, 2122, 2130, 2126, 2113, 2117, 2118, 2112, 2122, - 2124, 2132, 2134, 2119, 2116, 2114, 2136, 2140, 2119, 2138, - 2141, 2143, 2142, 2117, 2117, 2137, 2125, 2126, 2118, 2122, - 2130, 2126, 2138, 2143, 2137, 2134, 2146, 2148, 2132, 2134, - 2141, 2145, 2149, 2136, 2140, 2142, 2138, 2141, 2143, 2142, - 2145, 2147, 2137, 2150, 2146, 2152, 2153, 2151, 2152, 2154, - 2155, 2157, 2155, 2146, 2148, 2150, 0, 2157, 2145, 2149, - 2158, 2159, 2161, 2152, 2156, 2164, 2167, 2147, 2147, 2151, - 2150, 2160, 2152, 2153, 2151, 2152, 2156, 2155, 2157, 2160, - - 2168, 2154, 2158, 2159, 2169, 2171, 2172, 2158, 2159, 2161, - 2174, 2156, 2164, 2167, 2175, 2176, 0, 2177, 2160, 2179, - 2182, 2183, 2178, 2171, 2184, 2184, 2175, 2168, 2185, 2182, - 2176, 2169, 2171, 2172, 2178, 2187, 2188, 2174, 2190, 2189, - 0, 2175, 2176, 2177, 2177, 2183, 2179, 2182, 2183, 2178, - 2191, 2184, 2189, 2193, 2185, 2185, 2203, 2199, 2191, 2187, - 2190, 2192, 2187, 2202, 2193, 2190, 2189, 2202, 2188, 2204, - 2192, 2207, 2205, 2208, 0, 2207, 2204, 2191, 2210, 2203, - 2193, 2199, 2209, 2203, 2199, 2205, 2211, 2212, 2192, 2208, - 2202, 0, 2220, 2216, 2213, 2216, 2204, 2214, 2207, 2205, - - 2208, 2212, 2213, 2210, 2209, 2210, 2214, 2215, 2218, 2209, - 2217, 2222, 2211, 2211, 2212, 2218, 2219, 2224, 2215, 2220, - 2216, 2213, 2217, 2221, 2214, 2223, 2225, 0, 2226, 2219, - 2227, 2230, 2232, 2230, 2215, 2218, 2226, 2217, 2222, 2228, - 2229, 2221, 0, 2219, 2224, 2234, 2242, 2231, 2245, 2246, - 2221, 2223, 2223, 2225, 2227, 2226, 2233, 2227, 2230, 2231, - 2235, 2228, 2229, 2237, 2232, 2243, 2228, 2229, 2235, 2233, - 2239, 2253, 2234, 2242, 2231, 2237, 2247, 2244, 2249, 2239, - 2245, 2246, 2248, 2233, 2243, 2244, 2249, 2235, 2251, 2247, - 2237, 2255, 2243, 2252, 2253, 2251, 2248, 2239, 2253, 2256, - - 2257, 2260, 2258, 2247, 2244, 2249, 2252, 2256, 2261, 2248, - 2264, 2259, 2262, 2255, 2257, 2251, 2258, 2263, 2255, 2259, - 2252, 2262, 2265, 2260, 2266, 2263, 2256, 2257, 2260, 2258, - 2261, 2267, 2270, 2268, 2269, 2261, 2271, 2264, 2259, 2262, - 2270, 2279, 2272, 2273, 2263, 2276, 0, 0, 0, 2275, - 2266, 2266, 2282, 2267, 2265, 2268, 2269, 2275, 2267, 2270, - 2268, 2269, 2285, 2277, 2272, 2276, 2278, 2280, 2271, 2272, - 2273, 2277, 2276, 2279, 2278, 2280, 2275, 2281, 2282, 2282, - 2284, 0, 2289, 2284, 2285, 2288, 2291, 2286, 2287, 2285, - 2277, 2281, 0, 2278, 2280, 2286, 2287, 2290, 2284, 2288, - - 2291, 2292, 2292, 2293, 2281, 2295, 2298, 2284, 2289, 2289, - 2284, 2296, 2288, 2291, 2286, 2287, 2300, 2294, 2297, 2290, - 2301, 2302, 2303, 0, 2290, 2294, 2298, 2299, 2292, 2293, - 2293, 2295, 2295, 2298, 2310, 2299, 2304, 2296, 2296, 2305, - 2297, 0, 2301, 2300, 2294, 2297, 2302, 2301, 2302, 2303, - 2306, 2307, 2308, 2313, 2299, 2317, 2304, 2311, 2306, 2305, - 2308, 2310, 2315, 2304, 2314, 2311, 2305, 2319, 2316, 0, - 2315, 2322, 2323, 2307, 2326, 2313, 2316, 2306, 2307, 2308, - 2313, 2317, 2317, 2324, 2311, 2320, 2314, 2327, 2321, 2315, - 2336, 2314, 2337, 2320, 2319, 2316, 2321, 2322, 2322, 2323, - - 2328, 2326, 2330, 2324, 2333, 2334, 0, 0, 2335, 0, - 2324, 0, 2320, 2334, 2327, 2321, 2335, 2336, 0, 2337, - 2328, 0, 0, 0, 2330, 0, 2333, 2328, 0, 2330, - 0, 2333, 2334, 0, 0, 2335, 2341, 2341, 2341, 2341, - 2341, 2341, 2341, 2342, 2342, 2342, 2342, 2342, 2342, 2342, - 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2344, 2344, 2344, - 2344, 2344, 2344, 2344, 2345, 2345, 2345, 2345, 2345, 2345, - 2345, 2347, 2347, 0, 2347, 2347, 2347, 2347, 2348, 2348, - 0, 0, 0, 2348, 2348, 2349, 2349, 0, 0, 2349, - 0, 2349, 2350, 0, 0, 0, 0, 0, 2350, 2351, - - 2351, 0, 0, 0, 2351, 2351, 2352, 0, 0, 0, - 0, 0, 2352, 2353, 2353, 0, 2353, 2353, 2353, 2353, - 2354, 2354, 0, 2354, 2354, 2354, 2354, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, - 2340, 2340, 2340, 2340 - + 7, 7, 7, 2513, 7, 8, 8, 8, 8, 28, + 8, 9, 9, 9, 10, 10, 10, 15, 21, 47, + + 47, 15, 30, 3, 28, 52, 4, 868, 52, 5, + 19, 6, 19, 19, 30, 19, 72, 7, 63, 63, + 72, 19, 77, 8, 21, 21, 20, 20, 9, 30, + 20, 10, 11, 11, 11, 11, 11, 11, 12, 12, + 12, 12, 12, 12, 20, 24, 77, 25, 19, 77, + 20, 26, 11, 20, 20, 22, 148, 20, 12, 26, + 146, 25, 22, 41, 79, 24, 22, 35, 24, 22, + 11, 20, 24, 25, 25, 41, 12, 26, 26, 11, + 35, 22, 22, 29, 79, 12, 26, 68, 25, 22, + 41, 79, 24, 22, 35, 959, 22, 23, 84, 27, + + 68, 23, 27, 88, 23, 29, 23, 23, 88, 27, + 29, 27, 33, 80, 68, 757, 84, 32, 33, 23, + 80, 32, 27, 959, 23, 84, 27, 31, 23, 27, + 88, 23, 78, 23, 23, 31, 27, 32, 27, 33, + 80, 31, 81, 32, 32, 31, 757, 42, 32, 42, + 42, 251, 42, 31, 31, 78, 140, 140, 42, 78, + 145, 36, 31, 40, 32, 36, 81, 40, 31, 81, + 117, 40, 31, 34, 143, 36, 141, 34, 36, 58, + 251, 58, 58, 34, 58, 124, 34, 36, 36, 40, + 40, 139, 36, 34, 40, 34, 117, 117, 40, 89, + + 34, 38, 36, 38, 34, 36, 66, 89, 66, 66, + 34, 66, 38, 34, 83, 147, 147, 124, 38, 39, + 34, 37, 142, 83, 37, 142, 89, 38, 38, 39, + 38, 37, 70, 39, 39, 37, 37, 64, 59, 38, + 54, 83, 39, 37, 66, 38, 39, 69, 37, 69, + 69, 37, 69, 53, 48, 154, 39, 43, 37, 82, + 39, 39, 37, 37, 71, 85, 71, 71, 74, 71, + 74, 74, 82, 74, 86, 71, 87, 87, 85, 74, + 86, 91, 90, 82, 92, 87, 82, 154, 94, 93, + 93, 92, 85, 95, 91, 86, 96, 94, 100, 82, + + 90, 86, 95, 87, 87, 93, 74, 86, 91, 97, + 157, 92, 98, 14, 90, 94, 93, 93, 99, 96, + 95, 99, 100, 96, 101, 98, 157, 90, 13, 106, + 100, 97, 101, 102, 99, 99, 97, 157, 104, 98, + 103, 105, 99, 104, 103, 99, 104, 0, 99, 100, + 0, 101, 106, 102, 105, 102, 106, 107, 108, 109, + 102, 99, 99, 0, 103, 104, 111, 103, 105, 110, + 104, 103, 108, 111, 113, 116, 0, 107, 112, 109, + 102, 114, 116, 110, 107, 108, 109, 112, 115, 119, + 114, 118, 115, 111, 120, 119, 110, 113, 118, 121, + + 123, 113, 116, 119, 0, 112, 120, 121, 114, 122, + 115, 126, 0, 125, 123, 115, 119, 129, 118, 115, + 122, 120, 119, 127, 122, 129, 121, 123, 125, 130, + 128, 126, 127, 122, 131, 130, 122, 126, 126, 132, + 125, 128, 160, 134, 129, 131, 136, 122, 133, 137, + 127, 122, 135, 0, 160, 136, 130, 128, 126, 138, + 132, 131, 153, 133, 132, 134, 132, 135, 0, 160, + 134, 137, 138, 136, 152, 133, 137, 0, 144, 135, + 144, 144, 0, 144, 153, 158, 138, 132, 149, 153, + 149, 149, 150, 149, 150, 150, 155, 150, 152, 156, + + 159, 152, 161, 164, 158, 155, 156, 162, 159, 164, + 163, 0, 158, 166, 162, 167, 165, 0, 156, 170, + 0, 168, 0, 155, 161, 168, 156, 159, 163, 161, + 150, 0, 172, 156, 162, 164, 164, 163, 165, 166, + 166, 173, 168, 165, 175, 170, 170, 167, 0, 168, + 171, 174, 168, 0, 172, 179, 176, 0, 171, 172, + 0, 178, 177, 173, 188, 0, 174, 179, 173, 168, + 169, 0, 175, 182, 178, 169, 175, 171, 174, 176, + 169, 181, 179, 176, 177, 186, 169, 169, 178, 177, + 181, 180, 186, 169, 180, 182, 188, 169, 183, 175, + + 182, 185, 169, 189, 192, 184, 180, 169, 181, 195, + 184, 197, 186, 169, 169, 187, 190, 193, 180, 227, + 183, 180, 184, 185, 184, 183, 187, 190, 185, 189, + 189, 184, 184, 191, 196, 193, 192, 184, 198, 194, + 191, 195, 187, 197, 193, 194, 227, 199, 190, 184, + 200, 184, 201, 204, 190, 202, 196, 203, 204, 207, + 191, 196, 202, 208, 200, 209, 194, 199, 205, 206, + 198, 215, 211, 201, 199, 208, 209, 200, 203, 201, + 204, 207, 202, 206, 203, 213, 207, 205, 212, 217, + 208, 210, 209, 220, 211, 205, 206, 212, 210, 211, + + 214, 216, 216, 215, 218, 214, 221, 219, 213, 222, + 216, 218, 213, 220, 224, 212, 223, 232, 210, 0, + 220, 217, 225, 229, 223, 226, 0, 214, 216, 216, + 228, 218, 219, 230, 219, 237, 231, 225, 221, 232, + 231, 222, 233, 223, 232, 235, 224, 238, 234, 225, + 230, 226, 226, 228, 236, 229, 234, 233, 230, 241, + 230, 239, 228, 231, 235, 240, 242, 237, 0, 233, + 246, 243, 235, 244, 260, 234, 236, 230, 242, 238, + 228, 236, 244, 239, 243, 248, 245, 240, 239, 246, + 249, 241, 240, 242, 247, 252, 247, 246, 243, 245, + + 244, 250, 0, 253, 252, 254, 260, 255, 256, 248, + 258, 262, 248, 245, 257, 249, 267, 249, 255, 263, + 256, 247, 252, 261, 259, 0, 265, 250, 250, 253, + 253, 254, 254, 258, 255, 256, 261, 258, 257, 264, + 0, 257, 259, 262, 263, 266, 263, 268, 267, 269, + 261, 259, 265, 265, 268, 270, 264, 271, 269, 272, + 0, 270, 264, 273, 274, 275, 264, 266, 276, 281, + 277, 271, 266, 274, 268, 279, 269, 276, 280, 282, + 278, 0, 270, 264, 271, 272, 272, 273, 275, 278, + 273, 274, 275, 280, 283, 276, 277, 277, 285, 279, + + 287, 281, 279, 282, 284, 280, 282, 278, 286, 283, + 291, 289, 284, 284, 288, 284, 285, 0, 287, 290, + 290, 283, 284, 0, 287, 285, 289, 287, 288, 292, + 286, 284, 295, 293, 0, 286, 293, 291, 289, 284, + 284, 288, 284, 293, 290, 287, 290, 290, 296, 294, + 295, 297, 298, 292, 299, 300, 292, 0, 302, 295, + 293, 294, 301, 293, 303, 304, 296, 300, 305, 308, + 315, 303, 307, 302, 298, 296, 294, 304, 297, 298, + 299, 299, 300, 306, 301, 302, 309, 310, 314, 301, + 306, 303, 304, 310, 307, 311, 0, 311, 312, 307, + + 305, 308, 315, 322, 316, 313, 314, 329, 309, 310, + 306, 312, 329, 309, 310, 314, 322, 330, 313, 311, + 310, 313, 311, 313, 311, 312, 316, 317, 320, 313, + 322, 316, 313, 318, 320, 317, 319, 324, 330, 329, + 321, 317, 860, 319, 330, 313, 318, 327, 313, 318, + 313, 318, 321, 324, 317, 320, 325, 318, 345, 327, + 318, 324, 317, 319, 324, 331, 0, 321, 328, 325, + 0, 331, 860, 318, 327, 337, 318, 333, 318, 332, + 324, 335, 335, 325, 326, 326, 328, 332, 337, 333, + 345, 334, 331, 336, 326, 328, 326, 326, 326, 334, + + 336, 326, 337, 339, 333, 338, 332, 339, 335, 326, + 0, 326, 326, 343, 338, 340, 349, 342, 334, 341, + 336, 326, 340, 326, 326, 326, 341, 344, 326, 342, + 339, 346, 347, 352, 0, 343, 348, 338, 346, 344, + 343, 338, 340, 350, 342, 350, 341, 347, 349, 348, + 351, 353, 353, 0, 344, 352, 355, 354, 346, 347, + 352, 351, 356, 348, 354, 357, 358, 355, 0, 362, + 350, 359, 360, 356, 361, 363, 364, 351, 357, 371, + 353, 362, 372, 355, 354, 364, 363, 360, 372, 356, + 0, 358, 357, 358, 359, 360, 362, 365, 359, 360, + + 361, 361, 363, 364, 366, 367, 368, 369, 370, 372, + 365, 371, 377, 374, 360, 366, 373, 366, 376, 375, + 382, 406, 366, 367, 365, 376, 370, 379, 368, 381, + 369, 366, 367, 368, 369, 370, 374, 373, 377, 377, + 374, 375, 366, 373, 366, 376, 375, 378, 380, 379, + 383, 384, 382, 406, 379, 381, 381, 384, 385, 388, + 390, 378, 380, 386, 387, 0, 391, 389, 388, 0, + 394, 0, 0, 383, 378, 380, 392, 383, 384, 387, + 385, 386, 389, 390, 396, 385, 388, 390, 398, 393, + 386, 387, 391, 391, 389, 393, 394, 394, 392, 397, + + 399, 400, 401, 392, 403, 397, 403, 398, 400, 405, + 396, 396, 404, 403, 407, 398, 393, 401, 399, 404, + 408, 409, 405, 411, 410, 413, 397, 399, 400, 401, + 412, 403, 407, 403, 409, 414, 405, 412, 416, 404, + 0, 407, 408, 410, 420, 417, 415, 408, 409, 413, + 417, 410, 413, 419, 0, 411, 418, 412, 414, 415, + 416, 424, 418, 421, 422, 416, 420, 414, 423, 424, + 426, 420, 417, 415, 0, 421, 419, 426, 429, 423, + 419, 427, 428, 418, 453, 414, 422, 0, 424, 427, + 421, 422, 430, 428, 0, 423, 425, 426, 431, 432, + + 429, 425, 433, 425, 430, 429, 434, 0, 427, 428, + 432, 425, 433, 435, 425, 425, 453, 434, 437, 430, + 431, 425, 425, 425, 436, 431, 432, 438, 425, 438, + 425, 436, 439, 434, 433, 440, 0, 435, 425, 433, + 435, 425, 425, 442, 437, 437, 441, 440, 425, 443, + 445, 436, 462, 446, 438, 442, 447, 443, 439, 439, + 444, 441, 440, 448, 447, 444, 451, 449, 452, 456, + 442, 446, 445, 441, 454, 448, 443, 445, 455, 462, + 446, 456, 460, 447, 451, 458, 455, 444, 449, 454, + 448, 452, 461, 451, 449, 452, 456, 457, 463, 459, + + 464, 454, 465, 0, 467, 455, 457, 460, 458, 460, + 466, 461, 458, 459, 469, 464, 470, 468, 473, 461, + 477, 472, 475, 473, 457, 466, 459, 464, 467, 468, + 463, 467, 472, 474, 465, 471, 469, 466, 471, 476, + 470, 469, 478, 470, 468, 479, 471, 474, 472, 475, + 473, 480, 477, 481, 482, 483, 0, 486, 484, 481, + 474, 486, 471, 483, 485, 471, 476, 487, 489, 478, + 488, 494, 479, 0, 0, 487, 482, 484, 490, 496, + 481, 482, 483, 480, 486, 484, 491, 492, 485, 493, + 495, 485, 496, 488, 487, 491, 493, 488, 498, 497, + + 489, 490, 499, 494, 497, 490, 496, 498, 497, 492, + 500, 501, 495, 491, 492, 504, 493, 495, 502, 500, + 505, 503, 507, 497, 514, 498, 497, 504, 499, 499, + 511, 497, 506, 501, 503, 497, 509, 500, 501, 508, + 502, 511, 504, 510, 516, 502, 507, 513, 503, 507, + 506, 514, 505, 512, 515, 516, 519, 511, 509, 506, + 517, 508, 508, 509, 518, 510, 508, 512, 520, 513, + 510, 516, 515, 521, 513, 517, 522, 519, 525, 526, + 512, 515, 523, 519, 527, 529, 524, 517, 508, 530, + 528, 523, 520, 533, 530, 520, 518, 521, 522, 524, + + 521, 526, 535, 522, 531, 532, 526, 529, 537, 523, + 525, 536, 529, 524, 528, 534, 527, 528, 531, 532, + 535, 530, 538, 534, 539, 533, 536, 543, 540, 535, + 541, 531, 532, 540, 542, 536, 542, 538, 536, 544, + 537, 0, 534, 545, 558, 0, 539, 544, 596, 538, + 546, 539, 543, 536, 543, 547, 541, 541, 548, 546, + 540, 542, 550, 549, 547, 551, 544, 548, 545, 550, + 545, 549, 553, 552, 554, 557, 558, 546, 555, 556, + 596, 0, 547, 554, 553, 548, 555, 557, 551, 550, + 549, 552, 551, 566, 556, 559, 560, 0, 561, 553, + + 552, 554, 557, 559, 560, 555, 556, 561, 562, 563, + 568, 564, 0, 565, 0, 0, 566, 562, 563, 564, + 566, 567, 559, 560, 569, 561, 568, 573, 574, 567, + 570, 572, 575, 0, 571, 562, 563, 568, 564, 565, + 565, 570, 571, 576, 577, 572, 569, 573, 567, 579, + 574, 569, 575, 578, 573, 574, 580, 570, 572, 575, + 581, 571, 578, 582, 583, 576, 577, 584, 585, 579, + 576, 577, 588, 581, 580, 586, 579, 590, 587, 583, + 578, 582, 589, 580, 592, 588, 601, 581, 589, 584, + 582, 583, 585, 591, 584, 585, 587, 593, 586, 588, + + 595, 591, 586, 597, 590, 587, 598, 599, 595, 589, + 597, 592, 600, 602, 603, 593, 611, 0, 601, 591, + 591, 600, 599, 603, 593, 616, 611, 595, 591, 598, + 597, 605, 602, 598, 599, 604, 622, 604, 605, 600, + 602, 603, 608, 611, 615, 619, 614, 620, 616, 617, + 0, 0, 616, 0, 608, 618, 624, 629, 605, 621, + 620, 619, 604, 606, 614, 615, 621, 606, 622, 608, + 606, 615, 619, 614, 620, 617, 617, 606, 624, 626, + 606, 618, 618, 624, 629, 606, 621, 0, 626, 625, + 606, 627, 0, 627, 606, 625, 628, 606, 0, 0, + + 632, 630, 0, 631, 606, 633, 626, 606, 623, 623, + 0, 623, 632, 0, 623, 634, 625, 636, 627, 623, + 628, 630, 637, 628, 635, 623, 623, 632, 630, 631, + 631, 633, 633, 640, 623, 623, 623, 634, 623, 636, + 638, 623, 634, 643, 636, 644, 623, 637, 635, 637, + 639, 635, 623, 623, 641, 638, 640, 642, 639, 647, + 640, 641, 643, 645, 0, 642, 646, 638, 647, 649, + 643, 644, 644, 648, 650, 645, 652, 639, 653, 646, + 654, 641, 655, 0, 642, 0, 647, 656, 648, 662, + 645, 649, 657, 646, 658, 659, 649, 662, 652, 663, + + 648, 650, 660, 652, 659, 661, 655, 666, 656, 655, + 653, 657, 654, 658, 656, 664, 662, 665, 0, 657, + 667, 658, 659, 669, 660, 661, 663, 670, 667, 660, + 672, 671, 661, 664, 674, 673, 665, 675, 676, 666, + 678, 669, 664, 678, 665, 670, 676, 667, 673, 675, + 669, 677, 672, 682, 670, 671, 681, 672, 671, 0, + 674, 674, 673, 679, 675, 676, 683, 678, 685, 677, + 684, 679, 683, 0, 685, 686, 690, 687, 677, 692, + 682, 681, 686, 681, 687, 691, 688, 679, 692, 689, + 679, 688, 684, 683, 690, 685, 689, 684, 679, 693, + + 694, 696, 686, 690, 687, 695, 692, 693, 691, 696, + 697, 699, 691, 688, 698, 700, 689, 701, 694, 706, + 695, 705, 700, 697, 701, 703, 693, 694, 696, 702, + 703, 708, 695, 704, 705, 698, 702, 697, 699, 707, + 704, 698, 700, 712, 701, 709, 707, 710, 705, 711, + 715, 706, 703, 713, 716, 710, 702, 711, 717, 713, + 704, 714, 719, 708, 711, 712, 707, 717, 709, 718, + 712, 721, 709, 723, 710, 724, 711, 725, 716, 720, + 713, 716, 715, 718, 711, 717, 720, 714, 714, 725, + 722, 726, 727, 728, 719, 723, 718, 727, 721, 722, + + 723, 729, 724, 732, 725, 731, 720, 735, 731, 729, + 737, 739, 738, 735, 726, 728, 732, 722, 726, 727, + 728, 741, 734, 739, 740, 0, 740, 756, 729, 734, + 732, 0, 731, 742, 735, 738, 737, 737, 739, 738, + 743, 745, 744, 0, 741, 742, 745, 0, 741, 734, + 736, 740, 736, 746, 756, 744, 736, 751, 736, 747, + 742, 0, 743, 736, 748, 749, 746, 743, 736, 744, + 751, 750, 752, 745, 736, 749, 748, 736, 752, 736, + 746, 753, 747, 736, 751, 736, 747, 749, 754, 755, + 736, 748, 749, 750, 753, 736, 758, 759, 750, 752, + + 764, 0, 749, 760, 0, 759, 768, 762, 753, 754, + 763, 0, 760, 764, 765, 754, 766, 767, 770, 0, + 772, 755, 762, 775, 759, 768, 770, 764, 758, 765, + 760, 761, 763, 768, 762, 769, 761, 763, 761, 767, + 776, 765, 766, 766, 767, 770, 771, 772, 769, 761, + 761, 773, 777, 779, 771, 775, 761, 761, 761, 780, + 777, 778, 769, 761, 776, 761, 782, 776, 785, 783, + 788, 784, 781, 771, 773, 778, 761, 761, 773, 777, + 781, 780, 784, 761, 782, 779, 780, 783, 778, 786, + 790, 792, 788, 782, 787, 793, 783, 788, 784, 781, + + 785, 789, 787, 790, 791, 794, 796, 786, 789, 792, + 0, 791, 797, 793, 798, 799, 786, 790, 792, 796, + 797, 787, 793, 798, 800, 801, 802, 799, 789, 804, + 805, 791, 803, 796, 808, 0, 812, 794, 809, 797, + 806, 798, 799, 809, 811, 808, 800, 801, 802, 812, + 803, 800, 801, 802, 806, 804, 804, 810, 813, 803, + 810, 808, 805, 812, 814, 813, 815, 806, 811, 817, + 809, 811, 816, 819, 818, 820, 814, 821, 829, 816, + 818, 822, 0, 810, 810, 813, 826, 810, 821, 823, + 824, 814, 830, 817, 828, 819, 817, 820, 815, 816, + + 819, 818, 820, 822, 821, 824, 831, 826, 822, 827, + 829, 823, 838, 826, 832, 828, 823, 824, 833, 830, + 827, 828, 834, 832, 831, 836, 835, 839, 840, 837, + 0, 834, 836, 831, 835, 841, 827, 843, 844, 845, + 846, 832, 833, 837, 838, 833, 843, 848, 0, 834, + 840, 847, 836, 835, 850, 840, 837, 841, 846, 839, + 847, 849, 841, 850, 843, 851, 845, 846, 852, 853, + 844, 848, 854, 0, 848, 855, 856, 849, 847, 857, + 851, 850, 858, 859, 854, 861, 862, 857, 849, 864, + 867, 864, 851, 872, 861, 858, 870, 855, 859, 854, + + 852, 853, 855, 856, 862, 869, 857, 863, 870, 858, + 859, 866, 861, 862, 871, 863, 864, 867, 869, 866, + 872, 873, 874, 870, 875, 876, 877, 0, 873, 0, + 879, 880, 869, 878, 863, 0, 871, 881, 866, 887, + 0, 871, 883, 879, 880, 884, 0, 876, 873, 882, + 883, 877, 876, 877, 874, 878, 875, 879, 880, 881, + 878, 882, 885, 886, 881, 884, 887, 888, 889, 883, + 890, 886, 884, 894, 885, 891, 882, 889, 902, 897, + 888, 895, 891, 898, 896, 0, 902, 892, 0, 885, + 886, 890, 897, 901, 888, 889, 892, 890, 892, 894, + + 894, 892, 891, 895, 896, 902, 897, 898, 895, 892, + 898, 896, 899, 900, 892, 901, 903, 906, 904, 907, + 901, 899, 908, 892, 910, 892, 904, 913, 892, 908, + 909, 900, 911, 0, 0, 913, 912, 0, 903, 899, + 900, 907, 916, 903, 906, 904, 907, 910, 912, 908, + 911, 910, 909, 914, 913, 915, 917, 909, 918, 911, + 921, 922, 916, 912, 919, 920, 918, 915, 914, 916, + 919, 917, 923, 922, 920, 925, 927, 924, 929, 923, + 914, 921, 915, 917, 924, 918, 932, 921, 922, 930, + 928, 919, 920, 925, 935, 933, 930, 929, 931, 923, + + 933, 932, 925, 928, 924, 929, 934, 935, 927, 936, + 0, 937, 941, 932, 934, 0, 930, 928, 939, 943, + 931, 935, 940, 936, 942, 931, 953, 933, 0, 0, + 0, 954, 939, 934, 0, 951, 936, 937, 937, 938, + 940, 943, 938, 938, 941, 939, 943, 938, 951, 940, + 942, 942, 0, 938, 944, 945, 946, 938, 953, 947, + 948, 938, 951, 954, 952, 956, 938, 948, 950, 938, + 938, 949, 944, 952, 938, 955, 0, 945, 946, 958, + 938, 944, 945, 946, 938, 947, 947, 948, 956, 949, + 950, 952, 956, 960, 0, 950, 962, 955, 949, 963, + + 965, 0, 955, 957, 964, 958, 958, 968, 957, 960, + 957, 963, 957, 964, 957, 967, 969, 966, 965, 962, + 960, 957, 966, 962, 969, 968, 963, 965, 967, 970, + 957, 964, 971, 972, 968, 957, 974, 957, 973, 957, + 977, 957, 967, 969, 975, 971, 978, 980, 970, 966, + 976, 973, 976, 975, 974, 972, 970, 979, 981, 971, + 972, 0, 977, 974, 983, 973, 986, 977, 984, 979, + 985, 975, 987, 978, 980, 988, 989, 976, 985, 987, + 990, 991, 992, 981, 979, 981, 990, 991, 983, 993, + 984, 983, 994, 986, 997, 984, 993, 985, 989, 987, + + 995, 998, 988, 989, 1000, 999, 0, 990, 991, 992, + 1002, 1001, 1008, 1003, 994, 1005, 993, 1009, 997, 994, + 1004, 997, 1003, 998, 999, 995, 1000, 995, 998, 1006, + 1010, 1000, 999, 1001, 1011, 1005, 1002, 1002, 1001, 1020, + 1003, 1004, 1005, 1006, 1008, 1012, 1013, 1004, 1014, 1009, + 1015, 1016, 1010, 1018, 1013, 1019, 1006, 1010, 1016, 1019, + 1018, 1022, 1024, 1012, 1014, 0, 1011, 1027, 1023, 1024, + 1025, 1020, 1012, 1013, 1023, 1014, 1027, 1015, 1016, 1026, + 1018, 1023, 1019, 1028, 1029, 1025, 1030, 1031, 1030, 1024, + 1032, 1029, 1026, 1022, 1027, 1023, 1031, 1025, 1033, 1034, + + 1035, 1023, 1039, 1034, 1040, 1041, 1026, 1037, 0, 1028, + 1028, 1029, 1032, 1030, 1031, 1037, 1038, 1032, 1041, 1045, + 1039, 1038, 1035, 1040, 1042, 1033, 1034, 1035, 1046, 1039, + 1043, 1040, 1041, 1043, 1037, 1048, 1042, 1044, 1047, 1050, + 1044, 1046, 1043, 0, 1045, 1049, 1045, 1050, 1038, 1051, + 1051, 1042, 1053, 0, 1052, 1046, 1054, 1043, 1048, 1044, + 1043, 1049, 1048, 1052, 1044, 1054, 1050, 1044, 1055, 1057, + 1047, 1058, 1049, 1059, 1053, 1055, 1051, 1061, 1060, 1053, + 1058, 1052, 1057, 1054, 1062, 1064, 1061, 1063, 0, 0, + 1065, 1069, 1062, 1064, 1066, 1055, 1057, 1067, 1058, 1059, + + 1059, 1060, 1063, 1065, 1061, 1060, 1066, 1068, 1070, 1067, + 1071, 1062, 1064, 1069, 1063, 1068, 1072, 1065, 1069, 1074, + 1073, 1066, 1084, 1076, 1067, 1072, 1078, 1075, 1070, 1079, + 1077, 1080, 1071, 1081, 1068, 1070, 1077, 1071, 1073, 1075, + 1082, 1085, 0, 1072, 1076, 1074, 1074, 1073, 1078, 1084, + 1076, 1086, 1090, 1078, 1075, 1091, 1087, 1077, 1088, 1081, + 1081, 1079, 1089, 1080, 1085, 1087, 1082, 1082, 1085, 1086, + 1092, 1088, 1090, 1093, 1089, 1095, 1094, 1092, 1086, 1090, + 1099, 1091, 1091, 1087, 1103, 1088, 1096, 1099, 1095, 1089, + 1097, 1098, 1093, 1100, 1096, 1097, 1098, 1092, 1094, 0, + + 1093, 1100, 1095, 1094, 1101, 1106, 1102, 1099, 1104, 1104, + 1105, 1107, 1101, 1096, 1102, 1115, 1103, 1108, 1105, 1109, + 1100, 1110, 1097, 1098, 1113, 1108, 1106, 1109, 1111, 1110, + 1113, 1101, 1106, 1102, 1112, 1104, 1111, 1105, 1114, 1116, + 1118, 1115, 1115, 1107, 1108, 1117, 1109, 1112, 1110, 1119, + 1114, 1113, 1120, 1124, 1121, 1111, 1122, 1124, 1128, 1123, + 1117, 1112, 1126, 1116, 1135, 1114, 1116, 1118, 1121, 1126, + 1124, 1119, 1117, 1123, 1122, 1120, 1119, 1127, 1124, 1120, + 1124, 1121, 0, 1122, 1124, 1128, 1123, 1129, 1127, 1126, + 1130, 1132, 1131, 1133, 1134, 1136, 1135, 1124, 1132, 1138, + + 1140, 1134, 1133, 1141, 1127, 1142, 1140, 1143, 1138, 1129, + 1145, 1147, 0, 1130, 1129, 1131, 1151, 1130, 1132, 1131, + 1133, 1134, 1136, 1148, 1149, 1141, 1138, 1140, 1152, 1156, + 1141, 1142, 1142, 1155, 1148, 1149, 1153, 1145, 1147, 1143, + 1151, 1156, 1153, 1151, 1154, 1157, 1160, 1157, 1158, 1159, + 1148, 1149, 1161, 1162, 1152, 1152, 1156, 1165, 1163, 1155, + 1155, 0, 1159, 1153, 1161, 1168, 1154, 0, 1160, 1170, + 1164, 1154, 1157, 1160, 1158, 1158, 1159, 1164, 1167, 1161, + 1162, 1163, 1166, 1165, 1165, 1163, 1172, 1166, 1168, 1176, + 1169, 1170, 1168, 1173, 1167, 1174, 1170, 1164, 1169, 1175, + + 1178, 1177, 1173, 1179, 1182, 1167, 1180, 1178, 1174, 1166, + 1179, 1182, 1175, 1172, 1181, 1176, 1176, 1169, 1183, 1185, + 1173, 1187, 1174, 1177, 1180, 1184, 1175, 1178, 1177, 1189, + 1179, 1182, 1186, 1180, 1190, 1197, 1181, 1192, 1191, 1186, + 1195, 1181, 1189, 1183, 1196, 1183, 1191, 1184, 1197, 1200, + 1225, 1185, 1184, 1187, 1194, 0, 1189, 1194, 1192, 1186, + 1198, 1190, 1197, 1199, 1192, 1191, 1195, 1195, 1201, 1198, + 1196, 1196, 1203, 1200, 1202, 1199, 1200, 1225, 1205, 1203, + 1206, 1194, 1204, 1211, 1210, 1204, 1207, 1198, 0, 1202, + 1199, 1209, 1208, 1209, 1201, 1201, 1212, 1204, 1214, 1203, + + 1213, 1202, 1206, 1215, 1207, 0, 1204, 1206, 1210, 1204, + 1205, 1210, 1204, 1207, 1208, 1211, 0, 1215, 1209, 1208, + 1214, 1217, 1212, 1212, 1204, 1214, 1213, 1213, 1216, 1217, + 1215, 1218, 1219, 1220, 1221, 1222, 1223, 1216, 1218, 0, + 1223, 0, 1227, 1228, 1224, 1229, 1226, 1230, 1217, 1231, + 1228, 1227, 1229, 1234, 0, 1216, 1221, 0, 1218, 0, + 1230, 1221, 1231, 1223, 1219, 1220, 1224, 1222, 1226, 1227, + 1228, 1224, 1229, 1226, 1230, 1232, 1231, 1233, 1238, 1235, + 1236, 1237, 1240, 0, 1238, 1234, 1235, 1236, 1241, 1242, + 1232, 1233, 1243, 1246, 1237, 1241, 1246, 0, 1244, 1245, + + 0, 0, 1232, 1248, 1233, 1238, 1235, 1236, 1237, 1240, + 1244, 1242, 1245, 1247, 1250, 1241, 1242, 1249, 1243, 1243, + 1246, 1248, 1247, 1257, 1251, 1244, 1245, 1251, 1252, 1249, + 1248, 1254, 1258, 1256, 1250, 1256, 1254, 1259, 1260, 1252, + 1247, 1250, 1251, 1254, 1249, 1261, 1260, 1267, 1263, 1268, + 1257, 1251, 0, 1265, 1251, 1252, 1265, 1262, 1254, 1258, + 1256, 1259, 1264, 1254, 1259, 1260, 1263, 1261, 1262, 1266, + 1264, 1265, 1261, 1271, 1269, 1263, 1268, 1270, 1274, 1267, + 1265, 1269, 1271, 1265, 1262, 1272, 1273, 1266, 1276, 1264, + 1276, 1270, 1278, 1274, 1277, 1279, 1266, 1273, 1272, 1280, + + 1271, 1269, 1281, 1277, 1270, 1274, 1279, 1283, 1287, 1282, + 1283, 1284, 1272, 1273, 1289, 1276, 1290, 1280, 1278, 1278, + 1284, 1277, 1279, 1282, 1281, 1283, 1280, 1285, 1292, 1281, + 1288, 1291, 1285, 1297, 1283, 1282, 1282, 1283, 1284, 1288, + 1287, 1289, 1293, 1296, 1295, 1307, 0, 1298, 1290, 1299, + 1282, 1295, 1312, 1291, 1302, 1299, 1296, 1288, 1291, 1285, + 1292, 1298, 1302, 1293, 1303, 1297, 1304, 1306, 0, 1293, + 1296, 1295, 1303, 1299, 1298, 1305, 1299, 1307, 1308, 1309, + 1306, 1302, 1299, 1311, 1312, 1304, 1316, 1310, 1309, 1305, + 1313, 1303, 1308, 1304, 1306, 1310, 1317, 1311, 1314, 1318, + + 1322, 1313, 1305, 1317, 0, 1308, 1309, 1314, 1319, 1320, + 1311, 1321, 1323, 1316, 1310, 1326, 1323, 1313, 1322, 0, + 1325, 1327, 1318, 1317, 1328, 1314, 1318, 1322, 1330, 1327, + 1319, 1320, 1325, 1321, 1329, 1319, 1320, 1328, 1321, 1323, + 1334, 1331, 1326, 1330, 1332, 0, 1333, 1325, 1327, 1335, + 1336, 1328, 1332, 1333, 1329, 1330, 1331, 1337, 1338, 1336, + 1340, 1329, 1339, 1343, 1335, 1344, 1342, 1345, 1331, 0, + 1346, 1332, 1334, 1333, 1347, 1349, 1335, 1336, 1337, 0, + 1349, 1343, 1345, 1352, 1337, 1338, 1339, 1340, 1342, 1339, + 1343, 1350, 1344, 1342, 1345, 1346, 1348, 1346, 1347, 1351, + + 1350, 1347, 1349, 1348, 1353, 1352, 1354, 1355, 1351, 1358, + 1352, 1357, 1360, 1356, 1361, 1359, 1358, 1363, 1350, 1355, + 1365, 1354, 1353, 1348, 1357, 1363, 1351, 1359, 1366, 1357, + 1367, 1353, 1368, 1354, 1355, 1356, 1358, 1362, 1357, 1360, + 1356, 1364, 1359, 1362, 1363, 1365, 1361, 1365, 1364, 1369, + 1370, 1357, 1371, 1373, 1366, 1366, 1369, 1367, 1371, 1368, + 1372, 1374, 1375, 1378, 1362, 1376, 1372, 1380, 1364, 1379, + 1381, 1385, 1381, 1383, 1382, 1387, 1369, 1370, 1379, 1371, + 1373, 1384, 1387, 1388, 1374, 1389, 1390, 1372, 1374, 1376, + 1388, 1394, 1376, 1390, 1375, 1378, 1379, 1381, 1382, 1380, + + 1383, 1382, 1387, 1385, 1386, 1386, 1386, 1384, 1384, 1392, + 1388, 1386, 1393, 1390, 1392, 1396, 1394, 1389, 1394, 1386, + 1395, 1397, 1398, 1399, 1401, 1393, 0, 1396, 1400, 1407, + 1399, 1386, 1386, 1386, 1400, 1403, 1395, 1406, 1386, 1393, + 1398, 1392, 1396, 1402, 1402, 1404, 1412, 1395, 1410, 1398, + 1399, 1401, 1404, 1397, 1405, 1400, 1407, 1413, 1414, 1405, + 0, 1403, 1403, 1406, 1406, 1411, 1410, 1417, 1415, 1413, + 1402, 1411, 1404, 1412, 1421, 1410, 1416, 1416, 1414, 1418, + 1418, 1405, 1423, 1422, 1413, 1414, 1415, 1419, 1425, 1423, + 1424, 1426, 1411, 1417, 1417, 1415, 1421, 1427, 1419, 1428, + + 1429, 1421, 0, 1416, 1430, 1431, 1418, 1432, 0, 1423, + 1424, 1430, 1433, 1431, 1419, 1422, 1434, 1424, 1429, 1436, + 1425, 1428, 1432, 1426, 1427, 1434, 1428, 1429, 1435, 1435, + 1437, 1430, 1431, 1438, 1432, 1441, 1433, 1445, 1444, 1433, + 1440, 1446, 1437, 1434, 1443, 1436, 1436, 1441, 1440, 1438, + 1447, 1448, 1443, 1450, 0, 1435, 1438, 1437, 1445, 1446, + 1438, 1444, 1441, 1451, 1445, 1444, 1452, 1440, 1446, 1451, + 1449, 1443, 1455, 1456, 1448, 1449, 1438, 1447, 1448, 1452, + 1450, 1453, 1454, 1457, 1459, 1461, 1449, 1458, 1453, 1454, + 1451, 1460, 1458, 1452, 1462, 1465, 1460, 1449, 1463, 1463, + + 1456, 1464, 1449, 1458, 1455, 1467, 1457, 1468, 1453, 1454, + 1457, 1459, 1471, 1470, 1458, 1470, 1464, 1461, 1469, 1458, + 1467, 1473, 1474, 1460, 1472, 1463, 1462, 1465, 1464, 1472, + 1468, 1477, 1467, 1469, 1468, 1476, 1479, 1474, 1478, 1480, + 1470, 1481, 1482, 1486, 1471, 1469, 1483, 0, 1481, 1474, + 1484, 1472, 1490, 1473, 1485, 1477, 1488, 1476, 1477, 0, + 1495, 1486, 1476, 1479, 1478, 1478, 1480, 1483, 1481, 1491, + 1486, 1493, 1484, 1483, 1482, 1485, 1490, 1484, 1488, 1490, + 1494, 1485, 1495, 1488, 1491, 1496, 1493, 1495, 1497, 1498, + 1500, 1499, 1501, 1507, 1503, 1494, 1491, 1504, 1493, 1501, + + 1505, 1508, 1502, 1503, 1506, 1504, 1497, 1494, 1518, 1525, + 0, 1498, 1496, 1499, 1508, 1497, 1498, 1500, 1499, 1501, + 1502, 1503, 1510, 1505, 1504, 1507, 1506, 1505, 1508, 1502, + 1511, 1506, 1512, 1510, 1513, 1518, 1514, 1526, 0, 1511, + 1515, 1525, 1520, 1524, 1521, 1529, 1523, 1526, 1510, 1510, + 1512, 1514, 1513, 1520, 1515, 1521, 1524, 1511, 1523, 1512, + 1510, 1513, 1527, 1514, 1526, 1528, 1530, 1515, 1533, 1520, + 1524, 1521, 1529, 1523, 1532, 1533, 1534, 1536, 1535, 0, + 1540, 1540, 1537, 1536, 1538, 1530, 1541, 1542, 1527, 1527, + 1528, 1539, 1528, 1530, 1532, 1533, 1535, 1537, 1541, 1538, + + 1542, 1532, 1534, 1534, 1536, 1535, 1539, 1540, 1542, 1537, + 1544, 1538, 1546, 1541, 1542, 1545, 1547, 1544, 1539, 1548, + 1549, 1551, 1555, 1550, 0, 1547, 1548, 1542, 1551, 1553, + 1545, 1555, 1554, 1556, 1557, 1559, 0, 1544, 1560, 1546, + 1563, 0, 1545, 1547, 1549, 1550, 1548, 1549, 1551, 1555, + 1550, 1553, 1565, 1559, 1557, 1556, 1553, 1554, 1562, 1554, + 1556, 1557, 1559, 1560, 1566, 1560, 1567, 1563, 1564, 1564, + 1568, 1562, 1569, 1570, 1565, 1571, 1572, 1577, 1576, 1565, + 1570, 1569, 1573, 1574, 1578, 1562, 1576, 1579, 1567, 1566, + 1577, 1566, 1568, 1567, 1580, 1564, 1573, 1568, 1572, 1569, + + 1570, 1581, 1574, 1572, 1577, 1576, 1580, 1571, 1581, 1573, + 1574, 1578, 1582, 1579, 1579, 1583, 1584, 0, 1585, 0, + 1586, 1580, 1587, 0, 0, 1590, 1589, 1591, 1581, 0, + 0, 1590, 1588, 1585, 0, 1588, 1596, 1583, 1592, 1597, + 1593, 1584, 1583, 1584, 1582, 1585, 1586, 1586, 1587, 1587, + 1588, 1589, 1590, 1589, 1591, 1593, 1592, 1595, 1596, 1588, + 1599, 1597, 1588, 1596, 1600, 1592, 1597, 1593, 1601, 1602, + 1603, 1600, 1595, 1605, 1599, 1615, 1606, 1601, 1602, 1607, + 0, 1603, 1613, 1611, 1595, 1612, 1609, 1599, 1605, 1612, + 1614, 1600, 1614, 1615, 1613, 1601, 1602, 1603, 1606, 1609, + + 1605, 1607, 1615, 1606, 1611, 1616, 1607, 1609, 1618, 1613, + 1611, 1617, 1612, 1609, 1619, 1621, 1620, 1614, 1623, 1622, + 1624, 1625, 1619, 1623, 1626, 1629, 1609, 0, 1632, 1617, + 1633, 1626, 1616, 1622, 1634, 1618, 1631, 1621, 1617, 1620, + 1625, 1619, 1621, 1620, 1624, 1630, 1622, 1624, 1625, 1634, + 1623, 1626, 1629, 1635, 1631, 1632, 1633, 1633, 1636, 1630, + 1637, 1634, 1635, 1631, 1638, 0, 1639, 1640, 1643, 1642, + 1630, 1630, 1630, 0, 1646, 1643, 1646, 1644, 1652, 1648, + 1635, 1647, 1637, 1648, 0, 1650, 1630, 1637, 1639, 1652, + 1636, 1638, 1642, 1639, 1653, 1643, 1642, 1630, 1649, 1640, + + 1644, 1646, 1651, 1647, 1644, 1652, 1648, 1650, 1647, 1654, + 1649, 1651, 1650, 1656, 1655, 1657, 1657, 1659, 1660, 1658, + 1662, 1653, 1663, 1668, 0, 1649, 1655, 1658, 1662, 1651, + 1663, 1665, 1654, 1664, 1665, 1656, 1654, 1664, 1668, 1659, + 1656, 1655, 1657, 1666, 1659, 1660, 1658, 1662, 1667, 1663, + 1668, 1666, 1671, 1669, 1667, 1672, 1675, 1673, 1665, 1669, + 1664, 1677, 1674, 1676, 1671, 1678, 1679, 0, 1682, 1675, + 1666, 0, 1681, 1680, 0, 1667, 1674, 1676, 1684, 1671, + 1669, 1673, 1672, 1675, 1673, 1680, 1681, 1677, 1677, 1674, + 1676, 1685, 1678, 1679, 1682, 1682, 1688, 1687, 1683, 1681, + + 1680, 1683, 1689, 1688, 1691, 1684, 1690, 1692, 1694, 1689, + 1696, 1697, 1693, 1685, 1698, 1702, 1683, 1695, 1685, 1687, + 1693, 1690, 1699, 1688, 1687, 1683, 1695, 1698, 1683, 1689, + 1699, 1691, 1701, 1690, 1692, 1694, 1704, 1696, 1697, 1693, + 1703, 1698, 1702, 1705, 1695, 1706, 1709, 1707, 1703, 1699, + 1708, 0, 1705, 1710, 1701, 1713, 1711, 1715, 1716, 1701, + 1719, 1710, 1716, 1704, 1715, 1708, 1706, 1703, 1711, 1717, + 1705, 1707, 1706, 1709, 1707, 1718, 1708, 1708, 1712, 1721, + 1710, 1717, 1713, 1711, 1715, 1716, 1712, 1719, 1722, 1720, + 1723, 1726, 1708, 1724, 1724, 1722, 1717, 1720, 1718, 1725, + + 1730, 0, 1718, 1727, 1729, 1712, 1721, 1731, 0, 1726, + 1723, 1732, 0, 1732, 1735, 1722, 1720, 1723, 1726, 1729, + 1724, 1733, 1730, 1736, 1737, 1725, 1725, 1730, 1727, 1731, + 1727, 1729, 1738, 1734, 1731, 1733, 1735, 1742, 1732, 1734, + 1739, 1735, 1741, 1743, 1738, 1736, 1737, 1740, 1733, 1740, + 1736, 1737, 1746, 1744, 1745, 1742, 1741, 1747, 1752, 1738, + 1734, 1743, 1739, 1748, 1742, 1746, 1750, 1739, 1753, 1741, + 1743, 1744, 1745, 1750, 1740, 1754, 1752, 1758, 0, 1746, + 1744, 1745, 0, 1755, 1760, 1752, 1748, 1759, 1764, 1747, + 1748, 1755, 0, 1750, 1753, 1753, 1756, 1762, 1756, 1759, + + 1764, 1771, 1760, 1756, 1758, 1763, 1765, 1754, 1768, 1755, + 1755, 1760, 1762, 1767, 1759, 1764, 1763, 1773, 1755, 1769, + 1776, 1765, 1778, 1756, 1762, 1756, 1769, 1770, 1771, 1774, + 1768, 0, 1763, 1765, 1777, 1768, 1775, 1767, 1779, 0, + 1767, 1780, 1770, 1784, 1773, 1781, 1769, 1783, 1782, 1778, + 1786, 1779, 1776, 1774, 1770, 1783, 1774, 1787, 1775, 1788, + 1781, 1782, 1791, 1775, 1799, 1779, 1777, 1780, 1780, 1784, + 1784, 1789, 1781, 1786, 1783, 1782, 1790, 1786, 1795, 1796, + 1793, 1787, 1798, 1790, 1787, 1791, 1788, 1793, 1794, 1791, + 1797, 1795, 1800, 1789, 1804, 1794, 1799, 1797, 1789, 1801, + + 1803, 1805, 1796, 1790, 1798, 1795, 1796, 1793, 1801, 1798, + 1806, 1803, 1817, 1800, 1807, 1794, 1804, 1797, 1810, 1800, + 1811, 1804, 1813, 1813, 1812, 1818, 1801, 1803, 1814, 1806, + 1816, 1810, 1819, 1805, 1823, 1830, 1832, 1806, 1820, 1807, + 1818, 1807, 1828, 1834, 1817, 1810, 1811, 1811, 1812, 1813, + 1829, 1812, 1818, 1816, 1814, 1814, 1820, 1816, 1825, 1819, + 1835, 1823, 1830, 1832, 1828, 1820, 1837, 1825, 1836, 1828, + 1838, 1837, 1829, 1840, 1841, 1834, 1842, 1829, 1844, 1836, + 1845, 1840, 1846, 1849, 1852, 1825, 1835, 1835, 1851, 1841, + 1847, 1846, 1838, 1837, 1853, 1836, 1844, 1838, 1854, 0, + + 1840, 1841, 1847, 1842, 1857, 1844, 1855, 1856, 1858, 1846, + 1849, 1852, 1845, 1859, 1851, 1851, 1853, 1847, 1860, 1855, + 1856, 1853, 1861, 1854, 1862, 1854, 1857, 1863, 0, 1864, + 1867, 1857, 1865, 1855, 1856, 1858, 1863, 1866, 1868, 1862, + 1859, 1869, 1871, 1873, 1874, 1860, 1870, 1876, 1872, 1861, + 1873, 1862, 1866, 1875, 1863, 1864, 1864, 1867, 1865, 1865, + 1875, 1870, 1871, 1872, 1866, 1868, 1874, 1877, 1869, 1871, + 1873, 1874, 1879, 1870, 1876, 1872, 1878, 1878, 1880, 1879, + 1875, 1881, 1882, 1884, 1881, 1877, 1883, 1886, 1887, 1891, + 1893, 1890, 1880, 1887, 1877, 1882, 1886, 1889, 1888, 1879, + + 1892, 1884, 1888, 1878, 1890, 1880, 1894, 0, 1881, 1882, + 1884, 1891, 1883, 1883, 1886, 1887, 1891, 1893, 1890, 1895, + 1899, 1889, 1892, 1898, 1889, 1888, 1900, 1892, 1901, 1899, + 1903, 1904, 1912, 1894, 1905, 1914, 1901, 1903, 1907, 1905, + 1904, 1906, 1900, 1909, 1908, 1895, 1895, 1899, 1906, 1898, + 1898, 1908, 1909, 1900, 1910, 1901, 1907, 1903, 1904, 1912, + 1913, 1905, 1914, 1915, 1916, 1907, 1917, 1918, 1906, 1923, + 1909, 1908, 1915, 1916, 1919, 1920, 1924, 1921, 1913, 1918, + 1910, 1910, 1925, 1919, 1920, 0, 1917, 1913, 1921, 1922, + 1915, 1916, 1928, 1917, 1918, 1929, 1923, 1922, 1926, 1927, + + 1928, 1919, 1920, 1924, 1921, 1930, 1931, 1926, 1932, 1933, + 1934, 1927, 1930, 1931, 1925, 1935, 1922, 1929, 1936, 1928, + 1938, 1940, 1929, 0, 1941, 1926, 1927, 1947, 1938, 1946, + 1932, 1941, 1930, 1931, 1933, 1932, 1933, 1934, 1942, 1940, + 1935, 1950, 1935, 1945, 1951, 1936, 1942, 1938, 1940, 1948, + 1945, 1941, 1954, 1946, 1947, 1949, 1946, 1953, 1955, 1956, + 1958, 1948, 1960, 1962, 1949, 1942, 1961, 1951, 1950, 1953, + 1945, 1951, 1963, 1956, 1961, 1954, 1948, 1964, 1970, 1954, + 1969, 1971, 1949, 1970, 1953, 1955, 1956, 1958, 1972, 1960, + 1962, 1973, 1977, 1961, 1963, 1971, 0, 1978, 1979, 1963, + + 0, 0, 1972, 1980, 1964, 1970, 1969, 1969, 1971, 1973, + 1978, 1984, 1982, 1981, 1977, 1972, 1987, 1988, 1973, 1977, + 1979, 1981, 1980, 1984, 1978, 1979, 1985, 1986, 1987, 1989, + 1980, 1982, 1990, 1991, 1992, 1993, 0, 1994, 1984, 1982, + 1981, 1997, 1998, 1987, 1988, 1996, 1995, 2001, 1985, 1986, + 2006, 2002, 1990, 1985, 1986, 1991, 1989, 1993, 1995, 1990, + 1991, 2001, 1993, 1994, 1994, 2003, 1992, 1996, 1997, 1998, + 2003, 2004, 1996, 1995, 2001, 2002, 0, 2005, 2002, 2007, + 2010, 2008, 2006, 2009, 0, 2013, 2011, 2012, 0, 2017, + 0, 2015, 2010, 2004, 0, 2018, 0, 2003, 2004, 2005, + + 2013, 2009, 2007, 2008, 2005, 2011, 2007, 2010, 2008, 2012, + 2009, 2017, 2013, 2011, 2012, 2015, 2017, 2018, 2015, 2019, + 2020, 2021, 2018, 2022, 0, 2023, 2024, 2027, 2019, 2028, + 2029, 2030, 2031, 2033, 2020, 2027, 2028, 2032, 2029, 2021, + 2031, 2022, 2034, 2041, 2024, 2033, 2019, 2020, 2021, 2037, + 2022, 2023, 2023, 2024, 2027, 2032, 2028, 2029, 2030, 2031, + 2033, 2037, 2035, 2040, 2032, 2039, 2042, 2046, 2043, 2034, + 2035, 2050, 2039, 0, 2044, 2041, 2037, 2047, 2056, 2049, + 0, 2053, 0, 0, 2050, 2046, 2040, 2043, 2051, 2035, + 2040, 2047, 2039, 2042, 2046, 2043, 2044, 2061, 2050, 2062, + + 2051, 2044, 2049, 2058, 2047, 2056, 2049, 2053, 2053, 2060, + 2058, 2063, 2065, 2064, 2067, 2051, 2060, 2066, 2069, 2068, + 2070, 2071, 2072, 2061, 2061, 2073, 2062, 2077, 2074, 2070, + 2058, 2068, 2077, 2080, 2071, 2079, 2060, 2064, 2063, 2065, + 2064, 2067, 2083, 2066, 2066, 2069, 2068, 2070, 2071, 2078, + 2082, 2074, 2073, 2078, 2072, 2074, 2079, 2086, 2081, 2077, + 2081, 2087, 2079, 2088, 2090, 2080, 2090, 2093, 2091, 2083, + 2097, 2092, 2092, 2082, 2094, 2095, 2078, 2082, 2098, 2086, + 2087, 2092, 2095, 2094, 2086, 2081, 2098, 2088, 2087, 2093, + 2088, 2090, 2091, 2096, 2093, 2091, 2099, 2097, 2092, 2092, + + 2100, 2094, 2095, 2101, 2106, 2098, 2096, 2102, 2100, 2103, + 0, 2104, 2107, 2105, 2109, 2099, 2108, 2108, 2110, 2107, + 2096, 2111, 2113, 2099, 2105, 2110, 2106, 2100, 2111, 2101, + 2101, 2106, 2109, 2102, 2102, 2103, 2103, 2104, 2104, 2107, + 2105, 2109, 2114, 2108, 2115, 2110, 2117, 2118, 2111, 2113, + 2119, 2123, 2121, 2115, 2120, 2124, 2128, 2125, 2129, 0, + 2123, 2128, 2132, 2127, 0, 2126, 2114, 2118, 2130, 2114, + 2121, 2115, 2129, 2117, 2118, 2127, 2120, 2119, 2123, 2121, + 2125, 2120, 2124, 2126, 2125, 2129, 2130, 2133, 2128, 2132, + 2127, 2134, 2126, 2139, 2137, 2130, 2137, 2141, 0, 2144, + + 2143, 2145, 0, 2141, 2150, 2133, 2134, 2147, 2139, 2148, + 2152, 2156, 2148, 0, 2133, 2151, 2164, 2152, 2134, 2145, + 2139, 2137, 2143, 2154, 2141, 2144, 2144, 2143, 2145, 2147, + 2153, 2150, 2157, 2151, 2147, 2148, 2148, 2152, 2153, 2148, + 2158, 2159, 2151, 2156, 2160, 2154, 2161, 2162, 2164, 2163, + 2154, 2166, 2161, 2160, 2157, 2170, 2168, 2153, 2163, 2157, + 2169, 2165, 2158, 2165, 2168, 2171, 2172, 2158, 2159, 2162, + 2175, 2160, 2169, 2161, 2162, 2173, 2163, 2174, 2166, 2171, + 2172, 2175, 2170, 2168, 2177, 2178, 2176, 2169, 2165, 2179, + 2179, 2180, 2171, 2172, 2176, 2174, 2183, 2175, 2173, 2184, + + 2181, 2188, 2173, 2177, 2174, 0, 2189, 2178, 2181, 2186, + 2190, 2177, 2178, 2176, 2192, 2186, 2179, 2189, 2180, 2197, + 2194, 2198, 2193, 2183, 2194, 2201, 2184, 2181, 2188, 2193, + 2195, 2202, 2190, 2189, 2198, 2200, 2186, 2190, 2195, 2206, + 2200, 2192, 2203, 2204, 2208, 2197, 2197, 2194, 2198, 2193, + 2204, 2205, 2201, 2209, 2206, 2210, 2207, 2195, 2202, 2205, + 2203, 2212, 2200, 2207, 2214, 2213, 2206, 2215, 2220, 2203, + 2204, 2208, 2213, 2216, 2217, 2218, 2212, 2209, 2205, 2223, + 2209, 2210, 2210, 2207, 2218, 2221, 0, 2225, 2212, 2227, + 2220, 2222, 2213, 2228, 2215, 2220, 2214, 2216, 2230, 2222, + + 2216, 2228, 2218, 2224, 2224, 2231, 2217, 2221, 2233, 2235, + 0, 2223, 2221, 2224, 2225, 2232, 2227, 2234, 2222, 2236, + 2228, 2233, 2237, 2238, 2240, 2230, 2243, 2248, 2245, 2257, + 2224, 2224, 2231, 2245, 2243, 2233, 2235, 2232, 2246, 2234, + 2250, 2251, 2232, 2249, 2234, 2238, 2236, 2250, 2252, 2237, + 2238, 2240, 2253, 2243, 2248, 2245, 2249, 2258, 2256, 2251, + 2259, 2257, 2262, 2265, 2246, 2246, 2260, 2250, 2251, 2262, + 2249, 2256, 2264, 2263, 2253, 2252, 2258, 2266, 2265, 2253, + 2263, 2273, 2268, 2269, 2258, 2256, 0, 2259, 2260, 2262, + 2265, 2269, 2273, 2260, 2264, 2270, 2271, 2272, 2266, 2264, + + 2263, 2268, 2270, 2271, 2266, 2276, 2272, 2275, 2273, 2268, + 2269, 2274, 2274, 2275, 2282, 2283, 2288, 2284, 2279, 2290, + 2294, 2274, 2270, 2271, 2272, 2279, 2292, 2276, 2291, 2291, + 0, 2298, 2276, 0, 2275, 2296, 2299, 2300, 2274, 2274, + 2284, 2282, 2283, 2288, 2284, 2279, 2290, 2294, 2296, 2292, + 2295, 2304, 2303, 2292, 2301, 2306, 2299, 2291, 2298, 2295, + 2300, 2303, 2296, 2299, 2300, 2305, 2301, 2307, 2308, 2304, + 2310, 2309, 2312, 2310, 2313, 2314, 2313, 2295, 2304, 2303, + 2308, 2301, 2306, 2316, 2311, 2317, 2319, 2314, 2310, 2311, + 2315, 2305, 2305, 2309, 2307, 2308, 2315, 2310, 2309, 2322, + + 2310, 2313, 2314, 2318, 2312, 2316, 2325, 2317, 2326, 2327, + 2316, 2318, 2317, 2319, 2329, 2330, 2311, 2315, 2332, 2333, + 0, 2335, 2334, 2337, 0, 2340, 2322, 2336, 0, 2341, + 2318, 2333, 2329, 2325, 2340, 2326, 2327, 2334, 2343, 2336, + 2347, 2329, 2330, 2342, 2342, 2332, 2333, 2335, 2335, 2334, + 2337, 2344, 2340, 2341, 2336, 2346, 2341, 2351, 2348, 2349, + 2344, 2350, 2352, 2358, 2343, 2343, 2351, 2363, 2362, 2350, + 2342, 2348, 2347, 2352, 2363, 2369, 2361, 2368, 2344, 2346, + 2361, 2349, 2346, 2364, 2351, 2348, 2349, 2358, 2350, 2352, + 2358, 2362, 2367, 2366, 2363, 2362, 2364, 2366, 2371, 2368, + + 2369, 2370, 2369, 2361, 2368, 2375, 2373, 2372, 2367, 2374, + 2364, 2377, 0, 2370, 2373, 2376, 2375, 2376, 2374, 2367, + 2366, 2372, 2378, 2377, 2371, 2371, 2379, 2380, 2370, 2378, + 2381, 2382, 2375, 2373, 2372, 2383, 2374, 2384, 2377, 2379, + 2385, 2388, 2376, 2386, 2389, 2387, 2393, 2390, 2381, 2378, + 2394, 2386, 2387, 2379, 2380, 2395, 2403, 2381, 2382, 2404, + 0, 2383, 2383, 2394, 2384, 2388, 2389, 2385, 2388, 2390, + 2386, 2389, 2387, 2391, 2390, 2391, 2392, 2394, 2393, 2396, + 2398, 2400, 2395, 2403, 2410, 2404, 2404, 2396, 2392, 2406, + 2400, 2405, 2398, 2407, 2408, 2413, 2409, 2406, 2410, 0, + + 2391, 2414, 2413, 2392, 2411, 2418, 2396, 2398, 2400, 2409, + 2405, 2410, 2411, 2415, 2414, 2423, 2406, 2417, 2405, 2420, + 2421, 2419, 2413, 2409, 2417, 2407, 2408, 2418, 2414, 2419, + 2422, 2411, 2418, 2420, 2421, 2426, 2415, 2423, 2422, 2424, + 2415, 2425, 2423, 2426, 2417, 2427, 2420, 2421, 2419, 2428, + 2425, 2429, 2430, 2431, 0, 2432, 2435, 2422, 0, 2433, + 2437, 2424, 2426, 2436, 0, 2434, 2424, 0, 2425, 2441, + 2439, 2428, 2427, 2434, 2444, 2431, 2428, 2432, 2430, 2430, + 2431, 2433, 2432, 2429, 2446, 2436, 2433, 2437, 2435, 2441, + 2436, 2440, 2434, 2439, 2442, 2443, 2441, 2439, 2446, 2440, + + 2445, 2449, 2442, 2443, 2447, 2454, 2444, 2450, 2445, 2452, + 2450, 2446, 2453, 2451, 0, 2455, 2456, 2452, 2440, 2454, + 2453, 2442, 2443, 2459, 2459, 2450, 2460, 2445, 2449, 2462, + 2447, 2447, 2454, 2457, 2450, 2451, 2452, 2450, 2456, 2453, + 2451, 2455, 2455, 2456, 2463, 2464, 2461, 2457, 2465, 2466, + 2459, 2467, 2460, 2460, 2461, 2462, 2462, 2466, 2468, 2469, + 2457, 2470, 2471, 2472, 2477, 2474, 2473, 2464, 2465, 2475, + 2463, 2463, 2464, 2461, 2473, 2465, 2466, 2475, 2467, 2480, + 2468, 2481, 2471, 2472, 2469, 2468, 2469, 2474, 2470, 2471, + 2472, 2477, 2474, 2473, 2478, 2486, 2475, 2482, 2490, 2483, + + 2491, 2480, 2478, 2481, 2484, 2482, 2480, 2483, 2481, 2487, + 2488, 0, 2489, 2493, 2494, 2495, 2503, 2487, 2488, 0, + 2491, 2478, 2486, 2497, 2482, 2490, 2483, 2491, 2504, 2500, + 2484, 2484, 0, 0, 0, 2495, 2487, 2488, 2489, 2489, + 2493, 2494, 2495, 2503, 2501, 2497, 2502, 0, 0, 0, + 2497, 2500, 2501, 0, 2502, 2504, 2500, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2501, 0, 2502, 2508, 2508, 2508, 2508, 2508, 2508, + 2508, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2510, 2510, + 2510, 2510, 2510, 2510, 2510, 2511, 2511, 2511, 2511, 2511, + + 2511, 2511, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2514, + 2514, 0, 2514, 2514, 2514, 2514, 2515, 2515, 0, 0, + 0, 2515, 2515, 2516, 2516, 0, 0, 2516, 0, 2516, + 2517, 0, 0, 0, 0, 0, 2517, 2518, 2518, 0, + 0, 0, 2518, 2518, 2519, 0, 0, 0, 0, 0, + 2519, 2520, 2520, 0, 2520, 2520, 2520, 2520, 2521, 2521, + 0, 2521, 2521, 2521, 2521, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, 2507, + 2507, 2507 } ; static yy_state_type yy_last_accepting_state; @@ -2739,7 +2892,6 @@ char *yytext; #endif #include <ctype.h> -#include <string.h> #include <strings.h> #ifdef HAVE_GLOB_H # include <glob.h> @@ -2906,7 +3058,7 @@ static void config_end_include(void) #endif #define YY_NO_INPUT 1 -#line 187 "util/configlexer.lex" +#line 186 "util/configlexer.lex" #ifndef YY_NO_UNPUT #define YY_NO_UNPUT 1 #endif @@ -2914,7 +3066,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2916 "<stdout>" +#line 3068 "<stdout>" #define INITIAL 0 #define quotedstring 1 @@ -3135,9 +3287,9 @@ YY_DECL } { -#line 207 "util/configlexer.lex" +#line 206 "util/configlexer.lex" -#line 3139 "<stdout>" +#line 3291 "<stdout>" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3170,13 +3322,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 >= 2341 ) + if ( yy_current_state >= 2508 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6728 ); + while ( yy_base[yy_current_state] != 7166 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3202,1131 +3354,1216 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 208 "util/configlexer.lex" +#line 207 "util/configlexer.lex" { LEXOUT(("SP ")); /* ignore */ } YY_BREAK case 2: YY_RULE_SETUP -#line 210 "util/configlexer.lex" +#line 209 "util/configlexer.lex" { /* note that flex makes the longest match and '.' is any but not nl */ LEXOUT(("comment(%s) ", yytext)); /* ignore */ } YY_BREAK case 3: YY_RULE_SETUP -#line 213 "util/configlexer.lex" +#line 212 "util/configlexer.lex" { YDVAR(0, VAR_SERVER) } YY_BREAK case 4: YY_RULE_SETUP -#line 214 "util/configlexer.lex" +#line 213 "util/configlexer.lex" { YDVAR(1, VAR_QNAME_MINIMISATION) } YY_BREAK case 5: YY_RULE_SETUP -#line 215 "util/configlexer.lex" +#line 214 "util/configlexer.lex" { YDVAR(1, VAR_QNAME_MINIMISATION_STRICT) } YY_BREAK case 6: YY_RULE_SETUP -#line 216 "util/configlexer.lex" +#line 215 "util/configlexer.lex" { YDVAR(1, VAR_NUM_THREADS) } YY_BREAK case 7: YY_RULE_SETUP -#line 217 "util/configlexer.lex" +#line 216 "util/configlexer.lex" { YDVAR(1, VAR_VERBOSITY) } YY_BREAK case 8: YY_RULE_SETUP -#line 218 "util/configlexer.lex" +#line 217 "util/configlexer.lex" { YDVAR(1, VAR_PORT) } YY_BREAK case 9: YY_RULE_SETUP -#line 219 "util/configlexer.lex" +#line 218 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_RANGE) } YY_BREAK case 10: YY_RULE_SETUP -#line 220 "util/configlexer.lex" +#line 219 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_PORT_PERMIT) } YY_BREAK case 11: YY_RULE_SETUP -#line 221 "util/configlexer.lex" +#line 220 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_PORT_AVOID) } YY_BREAK case 12: YY_RULE_SETUP -#line 222 "util/configlexer.lex" +#line 221 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_NUM_TCP) } YY_BREAK case 13: YY_RULE_SETUP -#line 223 "util/configlexer.lex" +#line 222 "util/configlexer.lex" { YDVAR(1, VAR_INCOMING_NUM_TCP) } YY_BREAK case 14: YY_RULE_SETUP -#line 224 "util/configlexer.lex" +#line 223 "util/configlexer.lex" { YDVAR(1, VAR_DO_IP4) } YY_BREAK case 15: YY_RULE_SETUP -#line 225 "util/configlexer.lex" +#line 224 "util/configlexer.lex" { YDVAR(1, VAR_DO_IP6) } YY_BREAK case 16: YY_RULE_SETUP -#line 226 "util/configlexer.lex" +#line 225 "util/configlexer.lex" { YDVAR(1, VAR_PREFER_IP6) } YY_BREAK case 17: YY_RULE_SETUP -#line 227 "util/configlexer.lex" +#line 226 "util/configlexer.lex" { YDVAR(1, VAR_DO_UDP) } YY_BREAK case 18: YY_RULE_SETUP -#line 228 "util/configlexer.lex" +#line 227 "util/configlexer.lex" { YDVAR(1, VAR_DO_TCP) } YY_BREAK case 19: YY_RULE_SETUP -#line 229 "util/configlexer.lex" +#line 228 "util/configlexer.lex" { YDVAR(1, VAR_TCP_UPSTREAM) } YY_BREAK case 20: YY_RULE_SETUP -#line 230 "util/configlexer.lex" +#line 229 "util/configlexer.lex" { YDVAR(1, VAR_TCP_MSS) } YY_BREAK case 21: YY_RULE_SETUP -#line 231 "util/configlexer.lex" +#line 230 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_TCP_MSS) } YY_BREAK case 22: YY_RULE_SETUP -#line 232 "util/configlexer.lex" +#line 231 "util/configlexer.lex" { YDVAR(1, VAR_SSL_UPSTREAM) } YY_BREAK case 23: YY_RULE_SETUP +#line 232 "util/configlexer.lex" +{ YDVAR(1, VAR_SSL_UPSTREAM) } + YY_BREAK +case 24: +YY_RULE_SETUP #line 233 "util/configlexer.lex" { YDVAR(1, VAR_SSL_SERVICE_KEY) } YY_BREAK -case 24: +case 25: YY_RULE_SETUP #line 234 "util/configlexer.lex" -{ YDVAR(1, VAR_SSL_SERVICE_PEM) } +{ YDVAR(1, VAR_SSL_SERVICE_KEY) } YY_BREAK -case 25: +case 26: YY_RULE_SETUP #line 235 "util/configlexer.lex" -{ YDVAR(1, VAR_SSL_PORT) } +{ YDVAR(1, VAR_SSL_SERVICE_PEM) } YY_BREAK -case 26: +case 27: YY_RULE_SETUP #line 236 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_SSL_SERVICE_PEM) } YY_BREAK -case 27: +case 28: YY_RULE_SETUP #line 237 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_SSL_PORT) } YY_BREAK -case 28: +case 29: YY_RULE_SETUP #line 238 "util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_SSL_PORT) } YY_BREAK -case 29: +case 30: YY_RULE_SETUP #line 239 "util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_TLS_CERT_BUNDLE) } YY_BREAK -case 30: +case 31: YY_RULE_SETUP #line 240 "util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_TLS_CERT_BUNDLE) } YY_BREAK -case 31: +case 32: YY_RULE_SETUP #line 241 "util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK -case 32: +case 33: YY_RULE_SETUP #line 242 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK -case 33: +case 34: YY_RULE_SETUP #line 243 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK -case 34: +case 35: YY_RULE_SETUP #line 244 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK -case 35: +case 36: YY_RULE_SETUP #line 245 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK -case 36: +case 37: YY_RULE_SETUP #line 246 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK -case 37: +case 38: YY_RULE_SETUP #line 247 "util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK -case 38: +case 39: YY_RULE_SETUP #line 248 "util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK -case 39: +case 40: YY_RULE_SETUP #line 249 "util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK -case 40: +case 41: YY_RULE_SETUP #line 250 "util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK -case 41: +case 42: YY_RULE_SETUP #line 251 "util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK -case 42: +case 43: YY_RULE_SETUP #line 252 "util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK -case 43: +case 44: YY_RULE_SETUP #line 253 "util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK -case 44: +case 45: YY_RULE_SETUP #line 254 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK -case 45: +case 46: YY_RULE_SETUP #line 255 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK -case 46: +case 47: YY_RULE_SETUP #line 256 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK -case 47: +case 48: YY_RULE_SETUP #line 257 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK -case 48: +case 49: YY_RULE_SETUP #line 258 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK -case 49: +case 50: YY_RULE_SETUP #line 259 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK -case 50: +case 51: YY_RULE_SETUP #line 260 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK -case 51: +case 52: YY_RULE_SETUP #line 261 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK -case 52: +case 53: YY_RULE_SETUP #line 262 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK -case 53: +case 54: YY_RULE_SETUP #line 263 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK -case 54: +case 55: YY_RULE_SETUP #line 264 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK -case 55: +case 56: YY_RULE_SETUP #line 265 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK -case 56: +case 57: YY_RULE_SETUP #line 266 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK -case 57: +case 58: YY_RULE_SETUP #line 267 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK -case 58: +case 59: YY_RULE_SETUP #line 268 "util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK -case 59: +case 60: YY_RULE_SETUP #line 269 "util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK -case 60: +case 61: YY_RULE_SETUP #line 270 "util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK -case 61: +case 62: YY_RULE_SETUP #line 271 "util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK -case 62: +case 63: YY_RULE_SETUP #line 272 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK -case 63: +case 64: YY_RULE_SETUP #line 273 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK -case 64: +case 65: YY_RULE_SETUP #line 274 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK -case 65: +case 66: YY_RULE_SETUP #line 275 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK -case 66: +case 67: YY_RULE_SETUP #line 276 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK -case 67: +case 68: YY_RULE_SETUP #line 277 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK -case 68: +case 69: YY_RULE_SETUP #line 278 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK -case 69: +case 70: YY_RULE_SETUP #line 279 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK -case 70: +case 71: YY_RULE_SETUP #line 280 "util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK -case 71: +case 72: YY_RULE_SETUP #line 281 "util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK -case 72: +case 73: YY_RULE_SETUP #line 282 "util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK -case 73: +case 74: YY_RULE_SETUP #line 283 "util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK -case 74: +case 75: YY_RULE_SETUP #line 284 "util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK -case 75: +case 76: YY_RULE_SETUP #line 285 "util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK -case 76: +case 77: YY_RULE_SETUP #line 286 "util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK -case 77: +case 78: YY_RULE_SETUP #line 287 "util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK -case 78: +case 79: YY_RULE_SETUP #line 288 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK -case 79: +case 80: YY_RULE_SETUP #line 289 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK -case 80: +case 81: YY_RULE_SETUP #line 290 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK -case 81: +case 82: YY_RULE_SETUP #line 291 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK -case 82: +case 83: YY_RULE_SETUP #line 292 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_NAME) } YY_BREAK -case 83: +case 84: YY_RULE_SETUP #line 293 "util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK -case 84: +case 85: YY_RULE_SETUP #line 294 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK -case 85: +case 86: YY_RULE_SETUP #line 295 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK -case 86: +case 87: YY_RULE_SETUP #line 296 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK -case 87: +case 88: YY_RULE_SETUP #line 297 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK -case 88: +case 89: YY_RULE_SETUP #line 298 "util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK -case 89: +case 90: YY_RULE_SETUP #line 299 "util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK -case 90: +case 91: YY_RULE_SETUP #line 300 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK -case 91: +case 92: YY_RULE_SETUP #line 301 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK -case 92: +case 93: YY_RULE_SETUP #line 302 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK -case 93: +case 94: YY_RULE_SETUP #line 303 "util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK -case 94: +case 95: YY_RULE_SETUP #line 304 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK -case 95: +case 96: YY_RULE_SETUP #line 305 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK -case 96: +case 97: YY_RULE_SETUP #line 306 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK -case 97: +case 98: YY_RULE_SETUP #line 307 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK -case 98: +case 99: YY_RULE_SETUP #line 308 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_URL) } YY_BREAK -case 99: +case 100: YY_RULE_SETUP #line 309 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK -case 100: +case 101: YY_RULE_SETUP #line 310 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK -case 101: +case 102: YY_RULE_SETUP #line 311 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK -case 102: +case 103: YY_RULE_SETUP #line 312 "util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK -case 103: +case 104: YY_RULE_SETUP #line 313 "util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK -case 104: +case 105: YY_RULE_SETUP #line 314 "util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK -case 105: +case 106: YY_RULE_SETUP #line 315 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK -case 106: +case 107: YY_RULE_SETUP #line 316 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK -case 107: +case 108: YY_RULE_SETUP #line 317 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK -case 108: +case 109: YY_RULE_SETUP #line 318 "util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK -case 109: +case 110: YY_RULE_SETUP #line 319 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK -case 110: +case 111: YY_RULE_SETUP #line 320 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK -case 111: +case 112: YY_RULE_SETUP #line 321 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK -case 112: +case 113: YY_RULE_SETUP #line 322 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK -case 113: +case 114: YY_RULE_SETUP #line 323 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK -case 114: +case 115: YY_RULE_SETUP #line 324 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK -case 115: +case 116: YY_RULE_SETUP #line 325 "util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK -case 116: +case 117: YY_RULE_SETUP #line 326 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK -case 117: +case 118: YY_RULE_SETUP #line 327 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK -case 118: +case 119: YY_RULE_SETUP #line 328 "util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK -case 119: +case 120: YY_RULE_SETUP #line 329 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK -case 120: +case 121: YY_RULE_SETUP #line 330 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK -case 121: +case 122: YY_RULE_SETUP #line 331 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK -case 122: +case 123: YY_RULE_SETUP #line 332 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK -case 123: +case 124: YY_RULE_SETUP #line 333 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK -case 124: +case 125: YY_RULE_SETUP #line 334 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK -case 125: +case 126: YY_RULE_SETUP #line 335 "util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK -case 126: +case 127: YY_RULE_SETUP #line 336 "util/configlexer.lex" +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } + YY_BREAK +case 128: +YY_RULE_SETUP +#line 337 "util/configlexer.lex" +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } + YY_BREAK +case 129: +YY_RULE_SETUP +#line 338 "util/configlexer.lex" +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } + YY_BREAK +case 130: +YY_RULE_SETUP +#line 339 "util/configlexer.lex" +{ YDVAR(1, VAR_BOGUS_TTL) } + YY_BREAK +case 131: +YY_RULE_SETUP +#line 340 "util/configlexer.lex" +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } + YY_BREAK +case 132: +YY_RULE_SETUP +#line 341 "util/configlexer.lex" +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } + YY_BREAK +case 133: +YY_RULE_SETUP +#line 342 "util/configlexer.lex" +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } + YY_BREAK +case 134: +YY_RULE_SETUP +#line 343 "util/configlexer.lex" +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } + YY_BREAK +case 135: +YY_RULE_SETUP +#line 344 "util/configlexer.lex" +{ YDVAR(1, VAR_SERVE_EXPIRED) } + YY_BREAK +case 136: +YY_RULE_SETUP +#line 345 "util/configlexer.lex" +{ YDVAR(1, VAR_FAKE_DSA) } + YY_BREAK +case 137: +YY_RULE_SETUP +#line 346 "util/configlexer.lex" +{ YDVAR(1, VAR_FAKE_SHA1) } + YY_BREAK +case 138: +YY_RULE_SETUP +#line 347 "util/configlexer.lex" +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } + YY_BREAK +case 139: +YY_RULE_SETUP +#line 348 "util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } + YY_BREAK +case 140: +YY_RULE_SETUP +#line 349 "util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } + YY_BREAK +case 141: +YY_RULE_SETUP +#line 350 "util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } + YY_BREAK +case 142: +YY_RULE_SETUP +#line 351 "util/configlexer.lex" { YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK -case 127: +case 143: YY_RULE_SETUP -#line 338 "util/configlexer.lex" +#line 353 "util/configlexer.lex" { YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK -case 128: +case 144: YY_RULE_SETUP -#line 339 "util/configlexer.lex" +#line 354 "util/configlexer.lex" { YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK -case 129: +case 145: YY_RULE_SETUP -#line 340 "util/configlexer.lex" +#line 355 "util/configlexer.lex" { YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK -case 130: +case 146: YY_RULE_SETUP -#line 341 "util/configlexer.lex" +#line 356 "util/configlexer.lex" { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK -case 131: +case 147: YY_RULE_SETUP -#line 342 "util/configlexer.lex" +#line 357 "util/configlexer.lex" { YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK -case 132: +case 148: YY_RULE_SETUP -#line 343 "util/configlexer.lex" +#line 358 "util/configlexer.lex" { YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK -case 133: +case 149: YY_RULE_SETUP -#line 344 "util/configlexer.lex" +#line 359 "util/configlexer.lex" { YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK -case 134: +case 150: YY_RULE_SETUP -#line 345 "util/configlexer.lex" +#line 360 "util/configlexer.lex" { YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK -case 135: +case 151: YY_RULE_SETUP -#line 346 "util/configlexer.lex" +#line 361 "util/configlexer.lex" { YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK -case 136: +case 152: YY_RULE_SETUP -#line 347 "util/configlexer.lex" +#line 362 "util/configlexer.lex" { YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK -case 137: +case 153: YY_RULE_SETUP -#line 348 "util/configlexer.lex" +#line 363 "util/configlexer.lex" { YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK -case 138: +case 154: YY_RULE_SETUP -#line 349 "util/configlexer.lex" +#line 364 "util/configlexer.lex" { YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK -case 139: +case 155: YY_RULE_SETUP -#line 350 "util/configlexer.lex" +#line 365 "util/configlexer.lex" { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK -case 140: +case 156: YY_RULE_SETUP -#line 351 "util/configlexer.lex" +#line 366 "util/configlexer.lex" { YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK -case 141: +case 157: YY_RULE_SETUP -#line 352 "util/configlexer.lex" +#line 367 "util/configlexer.lex" { YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK -case 142: +case 158: YY_RULE_SETUP -#line 353 "util/configlexer.lex" +#line 368 "util/configlexer.lex" { YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK -case 143: +case 159: YY_RULE_SETUP -#line 354 "util/configlexer.lex" +#line 369 "util/configlexer.lex" { YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK -case 144: +case 160: YY_RULE_SETUP -#line 355 "util/configlexer.lex" +#line 370 "util/configlexer.lex" { YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK -case 145: +case 161: YY_RULE_SETUP -#line 356 "util/configlexer.lex" +#line 371 "util/configlexer.lex" { YDVAR(1, VAR_SHM_KEY) } YY_BREAK -case 146: +case 162: YY_RULE_SETUP -#line 357 "util/configlexer.lex" +#line 372 "util/configlexer.lex" { YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK -case 147: +case 163: YY_RULE_SETUP -#line 358 "util/configlexer.lex" +#line 373 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK -case 148: +case 164: YY_RULE_SETUP -#line 359 "util/configlexer.lex" +#line 374 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK -case 149: +case 165: YY_RULE_SETUP -#line 360 "util/configlexer.lex" +#line 375 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK -case 150: +case 166: YY_RULE_SETUP -#line 361 "util/configlexer.lex" +#line 376 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK -case 151: +case 167: YY_RULE_SETUP -#line 362 "util/configlexer.lex" +#line 377 "util/configlexer.lex" { YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK -case 152: +case 168: YY_RULE_SETUP -#line 363 "util/configlexer.lex" +#line 378 "util/configlexer.lex" { YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK -case 153: +case 169: YY_RULE_SETUP -#line 364 "util/configlexer.lex" +#line 379 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK -case 154: +case 170: YY_RULE_SETUP -#line 365 "util/configlexer.lex" +#line 380 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK -case 155: +case 171: YY_RULE_SETUP -#line 366 "util/configlexer.lex" +#line 381 "util/configlexer.lex" { YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK -case 156: +case 172: YY_RULE_SETUP -#line 367 "util/configlexer.lex" +#line 382 "util/configlexer.lex" { YDVAR(0, VAR_PYTHON) } YY_BREAK -case 157: +case 173: YY_RULE_SETUP -#line 368 "util/configlexer.lex" +#line 383 "util/configlexer.lex" { YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK -case 158: +case 174: YY_RULE_SETUP -#line 369 "util/configlexer.lex" +#line 384 "util/configlexer.lex" { YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK -case 159: +case 175: YY_RULE_SETUP -#line 370 "util/configlexer.lex" +#line 385 "util/configlexer.lex" { YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK -case 160: +case 176: YY_RULE_SETUP -#line 371 "util/configlexer.lex" +#line 386 "util/configlexer.lex" { YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK -case 161: +case 177: YY_RULE_SETUP -#line 372 "util/configlexer.lex" +#line 387 "util/configlexer.lex" { YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK -case 162: +case 178: YY_RULE_SETUP -#line 373 "util/configlexer.lex" +#line 388 "util/configlexer.lex" { YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK -case 163: +case 179: YY_RULE_SETUP -#line 374 "util/configlexer.lex" +#line 389 "util/configlexer.lex" { YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK -case 164: +case 180: YY_RULE_SETUP -#line 375 "util/configlexer.lex" +#line 390 "util/configlexer.lex" { YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK -case 165: +case 181: YY_RULE_SETUP -#line 376 "util/configlexer.lex" +#line 391 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK -case 166: +case 182: YY_RULE_SETUP -#line 377 "util/configlexer.lex" +#line 392 "util/configlexer.lex" { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK -case 167: +case 183: YY_RULE_SETUP -#line 378 "util/configlexer.lex" +#line 393 "util/configlexer.lex" { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK -case 168: +case 184: YY_RULE_SETUP -#line 379 "util/configlexer.lex" +#line 394 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK -case 169: +case 185: YY_RULE_SETUP -#line 380 "util/configlexer.lex" +#line 395 "util/configlexer.lex" { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK -case 170: +case 186: YY_RULE_SETUP -#line 381 "util/configlexer.lex" +#line 396 "util/configlexer.lex" { YDVAR(0, VAR_DNSTAP) } YY_BREAK -case 171: +case 187: YY_RULE_SETUP -#line 382 "util/configlexer.lex" +#line 397 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK -case 172: +case 188: YY_RULE_SETUP -#line 383 "util/configlexer.lex" +#line 398 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK -case 173: +case 189: YY_RULE_SETUP -#line 384 "util/configlexer.lex" +#line 399 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK -case 174: +case 190: YY_RULE_SETUP -#line 385 "util/configlexer.lex" +#line 400 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK -case 175: +case 191: YY_RULE_SETUP -#line 386 "util/configlexer.lex" +#line 401 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK -case 176: +case 192: YY_RULE_SETUP -#line 387 "util/configlexer.lex" +#line 402 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK -case 177: +case 193: YY_RULE_SETUP -#line 388 "util/configlexer.lex" +#line 403 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK -case 178: +case 194: YY_RULE_SETUP -#line 390 "util/configlexer.lex" +#line 405 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK -case 179: +case 195: YY_RULE_SETUP -#line 392 "util/configlexer.lex" +#line 407 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK -case 180: +case 196: YY_RULE_SETUP -#line 394 "util/configlexer.lex" +#line 409 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK -case 181: +case 197: YY_RULE_SETUP -#line 396 "util/configlexer.lex" +#line 411 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK -case 182: +case 198: YY_RULE_SETUP -#line 398 "util/configlexer.lex" +#line 413 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK -case 183: +case 199: YY_RULE_SETUP -#line 400 "util/configlexer.lex" +#line 415 "util/configlexer.lex" { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK -case 184: +case 200: YY_RULE_SETUP -#line 401 "util/configlexer.lex" +#line 416 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK -case 185: +case 201: YY_RULE_SETUP -#line 402 "util/configlexer.lex" +#line 417 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT) } YY_BREAK -case 186: +case 202: YY_RULE_SETUP -#line 403 "util/configlexer.lex" +#line 418 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK -case 187: +case 203: YY_RULE_SETUP -#line 404 "util/configlexer.lex" +#line 419 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK -case 188: +case 204: YY_RULE_SETUP -#line 405 "util/configlexer.lex" +#line 420 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK -case 189: +case 205: YY_RULE_SETUP -#line 406 "util/configlexer.lex" +#line 421 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK -case 190: +case 206: YY_RULE_SETUP -#line 407 "util/configlexer.lex" +#line 422 "util/configlexer.lex" { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK -case 191: +case 207: YY_RULE_SETUP -#line 408 "util/configlexer.lex" +#line 423 "util/configlexer.lex" { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK -case 192: +case 208: YY_RULE_SETUP -#line 409 "util/configlexer.lex" +#line 424 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK -case 193: +case 209: YY_RULE_SETUP -#line 410 "util/configlexer.lex" +#line 425 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK -case 194: +case 210: YY_RULE_SETUP -#line 411 "util/configlexer.lex" +#line 426 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK -case 195: +case 211: YY_RULE_SETUP -#line 412 "util/configlexer.lex" +#line 427 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK -case 196: +case 212: YY_RULE_SETUP -#line 413 "util/configlexer.lex" +#line 428 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK -case 197: +case 213: YY_RULE_SETUP -#line 414 "util/configlexer.lex" +#line 429 "util/configlexer.lex" { YDVAR(0, VAR_DNSCRYPT) } YY_BREAK -case 198: +case 214: YY_RULE_SETUP -#line 415 "util/configlexer.lex" +#line 430 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK -case 199: +case 215: YY_RULE_SETUP -#line 416 "util/configlexer.lex" +#line 431 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK -case 200: +case 216: YY_RULE_SETUP -#line 417 "util/configlexer.lex" +#line 432 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK -case 201: +case 217: YY_RULE_SETUP -#line 418 "util/configlexer.lex" +#line 433 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK -case 202: +case 218: YY_RULE_SETUP -#line 419 "util/configlexer.lex" +#line 434 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK -case 203: +case 219: YY_RULE_SETUP -#line 420 "util/configlexer.lex" +#line 435 "util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } + YY_BREAK +case 220: +YY_RULE_SETUP +#line 436 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK -case 204: +case 221: YY_RULE_SETUP -#line 422 "util/configlexer.lex" +#line 438 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK -case 205: +case 222: YY_RULE_SETUP -#line 424 "util/configlexer.lex" +#line 440 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK -case 206: +case 223: YY_RULE_SETUP -#line 425 "util/configlexer.lex" +#line 441 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK -case 207: +case 224: YY_RULE_SETUP -#line 426 "util/configlexer.lex" +#line 442 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK -case 208: +case 225: YY_RULE_SETUP -#line 427 "util/configlexer.lex" +#line 443 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK -case 209: +case 226: YY_RULE_SETUP -#line 428 "util/configlexer.lex" +#line 444 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK -case 210: +case 227: YY_RULE_SETUP -#line 429 "util/configlexer.lex" +#line 445 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK -case 211: +case 228: YY_RULE_SETUP -#line 430 "util/configlexer.lex" +#line 446 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK -case 212: +case 229: YY_RULE_SETUP -#line 431 "util/configlexer.lex" +#line 447 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK -case 213: +case 230: YY_RULE_SETUP -#line 432 "util/configlexer.lex" +#line 448 "util/configlexer.lex" { YDVAR(0, VAR_CACHEDB) } YY_BREAK -case 214: +case 231: YY_RULE_SETUP -#line 433 "util/configlexer.lex" +#line 449 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK -case 215: +case 232: YY_RULE_SETUP -#line 434 "util/configlexer.lex" +#line 450 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK -case 216: +case 233: YY_RULE_SETUP -#line 435 "util/configlexer.lex" +#line 451 "util/configlexer.lex" { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK -case 217: -/* rule 217 can match eol */ +case 234: +/* rule 234 can match eol */ YY_RULE_SETUP -#line 436 "util/configlexer.lex" +#line 452 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 218: +case 235: YY_RULE_SETUP -#line 439 "util/configlexer.lex" +#line 455 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 440 "util/configlexer.lex" +#line 456 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 219: +case 236: YY_RULE_SETUP -#line 445 "util/configlexer.lex" +#line 461 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 220: -/* rule 220 can match eol */ +case 237: +/* rule 237 can match eol */ YY_RULE_SETUP -#line 446 "util/configlexer.lex" +#line 462 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 221: +case 238: YY_RULE_SETUP -#line 448 "util/configlexer.lex" +#line 464 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4339,34 +4576,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 222: +case 239: YY_RULE_SETUP -#line 460 "util/configlexer.lex" +#line 476 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 461 "util/configlexer.lex" +#line 477 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 223: +case 240: YY_RULE_SETUP -#line 466 "util/configlexer.lex" +#line 482 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 224: -/* rule 224 can match eol */ +case 241: +/* rule 241 can match eol */ YY_RULE_SETUP -#line 467 "util/configlexer.lex" +#line 483 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 225: +case 242: YY_RULE_SETUP -#line 469 "util/configlexer.lex" +#line 485 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4379,38 +4616,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 226: +case 243: YY_RULE_SETUP -#line 481 "util/configlexer.lex" +#line 497 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 483 "util/configlexer.lex" +#line 499 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 227: +case 244: YY_RULE_SETUP -#line 487 "util/configlexer.lex" +#line 503 "util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 228: -/* rule 228 can match eol */ +case 245: +/* rule 245 can match eol */ YY_RULE_SETUP -#line 488 "util/configlexer.lex" +#line 504 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 229: +case 246: YY_RULE_SETUP -#line 489 "util/configlexer.lex" +#line 505 "util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 230: +case 247: YY_RULE_SETUP -#line 490 "util/configlexer.lex" +#line 506 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4418,27 +4655,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 495 "util/configlexer.lex" +#line 511 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 231: +case 248: YY_RULE_SETUP -#line 499 "util/configlexer.lex" +#line 515 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 232: -/* rule 232 can match eol */ +case 249: +/* rule 249 can match eol */ YY_RULE_SETUP -#line 500 "util/configlexer.lex" +#line 516 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 233: +case 250: YY_RULE_SETUP -#line 502 "util/configlexer.lex" +#line 518 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4448,7 +4685,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 508 "util/configlexer.lex" +#line 524 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4460,33 +4697,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 234: +case 251: YY_RULE_SETUP -#line 519 "util/configlexer.lex" +#line 535 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 235: +case 252: YY_RULE_SETUP -#line 523 "util/configlexer.lex" +#line 539 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 236: +case 253: YY_RULE_SETUP -#line 527 "util/configlexer.lex" +#line 543 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 237: +case 254: YY_RULE_SETUP -#line 531 "util/configlexer.lex" +#line 547 "util/configlexer.lex" ECHO; YY_BREAK -#line 4488 "<stdout>" +#line 4725 "<stdout>" case YY_END_OF_BUFFER: { @@ -4777,7 +5014,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 >= 2341 ) + if ( yy_current_state >= 2508 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -4805,11 +5042,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 >= 2341 ) + if ( yy_current_state >= 2508 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2340); + yy_is_jam = (yy_current_state == 2507); return yy_is_jam ? 0 : yy_current_state; } @@ -5448,7 +5685,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 531 "util/configlexer.lex" +#line 547 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index b7b1ae5e89bb..0e158d1610a0 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -14,7 +14,6 @@ #endif #include <ctype.h> -#include <string.h> #include <strings.h> #ifdef HAVE_GLOB_H # include <glob.h> @@ -230,9 +229,15 @@ tcp-upstream{COLON} { YDVAR(1, VAR_TCP_UPSTREAM) } tcp-mss{COLON} { YDVAR(1, VAR_TCP_MSS) } outgoing-tcp-mss{COLON} { YDVAR(1, VAR_OUTGOING_TCP_MSS) } ssl-upstream{COLON} { YDVAR(1, VAR_SSL_UPSTREAM) } +tls-upstream{COLON} { YDVAR(1, VAR_SSL_UPSTREAM) } ssl-service-key{COLON} { YDVAR(1, VAR_SSL_SERVICE_KEY) } +tls-service-key{COLON} { YDVAR(1, VAR_SSL_SERVICE_KEY) } ssl-service-pem{COLON} { YDVAR(1, VAR_SSL_SERVICE_PEM) } +tls-service-pem{COLON} { YDVAR(1, VAR_SSL_SERVICE_PEM) } ssl-port{COLON} { YDVAR(1, VAR_SSL_PORT) } +tls-port{COLON} { YDVAR(1, VAR_SSL_PORT) } +ssl-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } +tls-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } @@ -290,11 +295,20 @@ stub-host{COLON} { YDVAR(1, VAR_STUB_HOST) } stub-prime{COLON} { YDVAR(1, VAR_STUB_PRIME) } stub-first{COLON} { YDVAR(1, VAR_STUB_FIRST) } stub-ssl-upstream{COLON} { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +stub-tls-upstream{COLON} { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } forward-zone{COLON} { YDVAR(0, VAR_FORWARD_ZONE) } forward-addr{COLON} { YDVAR(1, VAR_FORWARD_ADDR) } forward-host{COLON} { YDVAR(1, VAR_FORWARD_HOST) } forward-first{COLON} { YDVAR(1, VAR_FORWARD_FIRST) } forward-ssl-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +forward-tls-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +auth-zone{COLON} { YDVAR(0, VAR_AUTH_ZONE) } +zonefile{COLON} { YDVAR(1, VAR_ZONEFILE) } +master{COLON} { YDVAR(1, VAR_MASTER) } +url{COLON} { YDVAR(1, VAR_URL) } +for-downstream{COLON} { YDVAR(1, VAR_FOR_DOWNSTREAM) } +for-upstream{COLON} { YDVAR(1, VAR_FOR_UPSTREAM) } +fallback-enabled{COLON} { YDVAR(1, VAR_FALLBACK_ENABLED) } view{COLON} { YDVAR(0, VAR_VIEW) } view-first{COLON} { YDVAR(1, VAR_VIEW_FIRST) } do-not-query-address{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } @@ -325,6 +339,7 @@ val-sig-skew-max{COLON} { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } val-bogus-ttl{COLON} { YDVAR(1, VAR_BOGUS_TTL) } val-clean-additional{COLON} { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } val-permissive-mode{COLON} { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +aggressive-nsec{COLON} { YDVAR(1, VAR_AGGRESSIVE_NSEC) } ignore-cd-flag{COLON} { YDVAR(1, VAR_IGNORE_CD_FLAG) } serve-expired{COLON} { YDVAR(1, VAR_SERVE_EXPIRED) } fake-dsa{COLON} { YDVAR(1, VAR_FAKE_DSA) } @@ -417,6 +432,7 @@ 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) } +dnscrypt-provider-cert-rotated{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } dnscrypt-shared-secret-cache-size{COLON} { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } dnscrypt-shared-secret-cache-slabs{COLON} { diff --git a/util/configparser.c b/util/configparser.c index 268949e4a143..421339fe9754 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -258,95 +258,105 @@ extern int yydebug; VAR_FORWARD_FIRST = 387, VAR_STUB_SSL_UPSTREAM = 388, VAR_FORWARD_SSL_UPSTREAM = 389, - VAR_STUB_FIRST = 390, - VAR_MINIMAL_RESPONSES = 391, - VAR_RRSET_ROUNDROBIN = 392, - VAR_MAX_UDP_SIZE = 393, - VAR_DELAY_CLOSE = 394, - VAR_UNBLOCK_LAN_ZONES = 395, - VAR_INSECURE_LAN_ZONES = 396, - VAR_INFRA_CACHE_MIN_RTT = 397, - VAR_DNS64_PREFIX = 398, - VAR_DNS64_SYNTHALL = 399, - VAR_DNSTAP = 400, - VAR_DNSTAP_ENABLE = 401, - VAR_DNSTAP_SOCKET_PATH = 402, - VAR_DNSTAP_SEND_IDENTITY = 403, - VAR_DNSTAP_SEND_VERSION = 404, - VAR_DNSTAP_IDENTITY = 405, - VAR_DNSTAP_VERSION = 406, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 407, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 408, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 409, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 410, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 411, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 412, - VAR_RESPONSE_IP_TAG = 413, - VAR_RESPONSE_IP = 414, - VAR_RESPONSE_IP_DATA = 415, - VAR_HARDEN_ALGO_DOWNGRADE = 416, - VAR_IP_TRANSPARENT = 417, - VAR_DISABLE_DNSSEC_LAME_CHECK = 418, - VAR_IP_RATELIMIT = 419, - VAR_IP_RATELIMIT_SLABS = 420, - VAR_IP_RATELIMIT_SIZE = 421, - VAR_RATELIMIT = 422, - VAR_RATELIMIT_SLABS = 423, - VAR_RATELIMIT_SIZE = 424, - VAR_RATELIMIT_FOR_DOMAIN = 425, - VAR_RATELIMIT_BELOW_DOMAIN = 426, - VAR_IP_RATELIMIT_FACTOR = 427, - VAR_RATELIMIT_FACTOR = 428, - VAR_SEND_CLIENT_SUBNET = 429, - 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_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 467, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 468, - VAR_IPSECMOD_ENABLED = 469, - VAR_IPSECMOD_HOOK = 470, - VAR_IPSECMOD_IGNORE_BOGUS = 471, - VAR_IPSECMOD_MAX_TTL = 472, - VAR_IPSECMOD_WHITELIST = 473, - VAR_IPSECMOD_STRICT = 474, - VAR_CACHEDB = 475, - VAR_CACHEDB_BACKEND = 476, - VAR_CACHEDB_SECRETSEED = 477, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 478 + VAR_TLS_CERT_BUNDLE = 390, + VAR_STUB_FIRST = 391, + VAR_MINIMAL_RESPONSES = 392, + VAR_RRSET_ROUNDROBIN = 393, + VAR_MAX_UDP_SIZE = 394, + VAR_DELAY_CLOSE = 395, + VAR_UNBLOCK_LAN_ZONES = 396, + VAR_INSECURE_LAN_ZONES = 397, + VAR_INFRA_CACHE_MIN_RTT = 398, + VAR_DNS64_PREFIX = 399, + VAR_DNS64_SYNTHALL = 400, + VAR_DNSTAP = 401, + VAR_DNSTAP_ENABLE = 402, + VAR_DNSTAP_SOCKET_PATH = 403, + VAR_DNSTAP_SEND_IDENTITY = 404, + VAR_DNSTAP_SEND_VERSION = 405, + VAR_DNSTAP_IDENTITY = 406, + VAR_DNSTAP_VERSION = 407, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 408, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 409, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 410, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 411, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 412, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 413, + VAR_RESPONSE_IP_TAG = 414, + VAR_RESPONSE_IP = 415, + VAR_RESPONSE_IP_DATA = 416, + VAR_HARDEN_ALGO_DOWNGRADE = 417, + VAR_IP_TRANSPARENT = 418, + VAR_DISABLE_DNSSEC_LAME_CHECK = 419, + VAR_IP_RATELIMIT = 420, + VAR_IP_RATELIMIT_SLABS = 421, + VAR_IP_RATELIMIT_SIZE = 422, + VAR_RATELIMIT = 423, + VAR_RATELIMIT_SLABS = 424, + VAR_RATELIMIT_SIZE = 425, + VAR_RATELIMIT_FOR_DOMAIN = 426, + VAR_RATELIMIT_BELOW_DOMAIN = 427, + VAR_IP_RATELIMIT_FACTOR = 428, + VAR_RATELIMIT_FACTOR = 429, + VAR_SEND_CLIENT_SUBNET = 430, + VAR_CLIENT_SUBNET_ZONE = 431, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 432, + VAR_CLIENT_SUBNET_OPCODE = 433, + VAR_MAX_CLIENT_SUBNET_IPV4 = 434, + VAR_MAX_CLIENT_SUBNET_IPV6 = 435, + VAR_CAPS_WHITELIST = 436, + VAR_CACHE_MAX_NEGATIVE_TTL = 437, + VAR_PERMIT_SMALL_HOLDDOWN = 438, + VAR_QNAME_MINIMISATION = 439, + VAR_QNAME_MINIMISATION_STRICT = 440, + VAR_IP_FREEBIND = 441, + VAR_DEFINE_TAG = 442, + VAR_LOCAL_ZONE_TAG = 443, + VAR_ACCESS_CONTROL_TAG = 444, + VAR_LOCAL_ZONE_OVERRIDE = 445, + VAR_ACCESS_CONTROL_TAG_ACTION = 446, + VAR_ACCESS_CONTROL_TAG_DATA = 447, + VAR_VIEW = 448, + VAR_ACCESS_CONTROL_VIEW = 449, + VAR_VIEW_FIRST = 450, + VAR_SERVE_EXPIRED = 451, + VAR_FAKE_DSA = 452, + VAR_FAKE_SHA1 = 453, + VAR_LOG_IDENTITY = 454, + VAR_HIDE_TRUSTANCHOR = 455, + VAR_TRUST_ANCHOR_SIGNALING = 456, + VAR_AGGRESSIVE_NSEC = 457, + VAR_USE_SYSTEMD = 458, + VAR_SHM_ENABLE = 459, + VAR_SHM_KEY = 460, + VAR_DNSCRYPT = 461, + VAR_DNSCRYPT_ENABLE = 462, + VAR_DNSCRYPT_PORT = 463, + VAR_DNSCRYPT_PROVIDER = 464, + VAR_DNSCRYPT_SECRET_KEY = 465, + VAR_DNSCRYPT_PROVIDER_CERT = 466, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 467, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 468, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 469, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 470, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 471, + VAR_IPSECMOD_ENABLED = 472, + VAR_IPSECMOD_HOOK = 473, + VAR_IPSECMOD_IGNORE_BOGUS = 474, + VAR_IPSECMOD_MAX_TTL = 475, + VAR_IPSECMOD_WHITELIST = 476, + VAR_IPSECMOD_STRICT = 477, + VAR_CACHEDB = 478, + VAR_CACHEDB_BACKEND = 479, + VAR_CACHEDB_SECRETSEED = 480, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 481, + VAR_FOR_UPSTREAM = 482, + VAR_AUTH_ZONE = 483, + VAR_ZONEFILE = 484, + VAR_MASTER = 485, + VAR_URL = 486, + VAR_FOR_DOWNSTREAM = 487, + VAR_FALLBACK_ENABLED = 488 }; #endif /* Tokens. */ @@ -482,95 +492,105 @@ extern int yydebug; #define VAR_FORWARD_FIRST 387 #define VAR_STUB_SSL_UPSTREAM 388 #define VAR_FORWARD_SSL_UPSTREAM 389 -#define VAR_STUB_FIRST 390 -#define VAR_MINIMAL_RESPONSES 391 -#define VAR_RRSET_ROUNDROBIN 392 -#define VAR_MAX_UDP_SIZE 393 -#define VAR_DELAY_CLOSE 394 -#define VAR_UNBLOCK_LAN_ZONES 395 -#define VAR_INSECURE_LAN_ZONES 396 -#define VAR_INFRA_CACHE_MIN_RTT 397 -#define VAR_DNS64_PREFIX 398 -#define VAR_DNS64_SYNTHALL 399 -#define VAR_DNSTAP 400 -#define VAR_DNSTAP_ENABLE 401 -#define VAR_DNSTAP_SOCKET_PATH 402 -#define VAR_DNSTAP_SEND_IDENTITY 403 -#define VAR_DNSTAP_SEND_VERSION 404 -#define VAR_DNSTAP_IDENTITY 405 -#define VAR_DNSTAP_VERSION 406 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 407 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 408 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 409 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 410 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 411 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 412 -#define VAR_RESPONSE_IP_TAG 413 -#define VAR_RESPONSE_IP 414 -#define VAR_RESPONSE_IP_DATA 415 -#define VAR_HARDEN_ALGO_DOWNGRADE 416 -#define VAR_IP_TRANSPARENT 417 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 418 -#define VAR_IP_RATELIMIT 419 -#define VAR_IP_RATELIMIT_SLABS 420 -#define VAR_IP_RATELIMIT_SIZE 421 -#define VAR_RATELIMIT 422 -#define VAR_RATELIMIT_SLABS 423 -#define VAR_RATELIMIT_SIZE 424 -#define VAR_RATELIMIT_FOR_DOMAIN 425 -#define VAR_RATELIMIT_BELOW_DOMAIN 426 -#define VAR_IP_RATELIMIT_FACTOR 427 -#define VAR_RATELIMIT_FACTOR 428 -#define VAR_SEND_CLIENT_SUBNET 429 -#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_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 467 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 468 -#define VAR_IPSECMOD_ENABLED 469 -#define VAR_IPSECMOD_HOOK 470 -#define VAR_IPSECMOD_IGNORE_BOGUS 471 -#define VAR_IPSECMOD_MAX_TTL 472 -#define VAR_IPSECMOD_WHITELIST 473 -#define VAR_IPSECMOD_STRICT 474 -#define VAR_CACHEDB 475 -#define VAR_CACHEDB_BACKEND 476 -#define VAR_CACHEDB_SECRETSEED 477 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 478 +#define VAR_TLS_CERT_BUNDLE 390 +#define VAR_STUB_FIRST 391 +#define VAR_MINIMAL_RESPONSES 392 +#define VAR_RRSET_ROUNDROBIN 393 +#define VAR_MAX_UDP_SIZE 394 +#define VAR_DELAY_CLOSE 395 +#define VAR_UNBLOCK_LAN_ZONES 396 +#define VAR_INSECURE_LAN_ZONES 397 +#define VAR_INFRA_CACHE_MIN_RTT 398 +#define VAR_DNS64_PREFIX 399 +#define VAR_DNS64_SYNTHALL 400 +#define VAR_DNSTAP 401 +#define VAR_DNSTAP_ENABLE 402 +#define VAR_DNSTAP_SOCKET_PATH 403 +#define VAR_DNSTAP_SEND_IDENTITY 404 +#define VAR_DNSTAP_SEND_VERSION 405 +#define VAR_DNSTAP_IDENTITY 406 +#define VAR_DNSTAP_VERSION 407 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 408 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 409 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 410 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 411 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 412 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 413 +#define VAR_RESPONSE_IP_TAG 414 +#define VAR_RESPONSE_IP 415 +#define VAR_RESPONSE_IP_DATA 416 +#define VAR_HARDEN_ALGO_DOWNGRADE 417 +#define VAR_IP_TRANSPARENT 418 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 419 +#define VAR_IP_RATELIMIT 420 +#define VAR_IP_RATELIMIT_SLABS 421 +#define VAR_IP_RATELIMIT_SIZE 422 +#define VAR_RATELIMIT 423 +#define VAR_RATELIMIT_SLABS 424 +#define VAR_RATELIMIT_SIZE 425 +#define VAR_RATELIMIT_FOR_DOMAIN 426 +#define VAR_RATELIMIT_BELOW_DOMAIN 427 +#define VAR_IP_RATELIMIT_FACTOR 428 +#define VAR_RATELIMIT_FACTOR 429 +#define VAR_SEND_CLIENT_SUBNET 430 +#define VAR_CLIENT_SUBNET_ZONE 431 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 432 +#define VAR_CLIENT_SUBNET_OPCODE 433 +#define VAR_MAX_CLIENT_SUBNET_IPV4 434 +#define VAR_MAX_CLIENT_SUBNET_IPV6 435 +#define VAR_CAPS_WHITELIST 436 +#define VAR_CACHE_MAX_NEGATIVE_TTL 437 +#define VAR_PERMIT_SMALL_HOLDDOWN 438 +#define VAR_QNAME_MINIMISATION 439 +#define VAR_QNAME_MINIMISATION_STRICT 440 +#define VAR_IP_FREEBIND 441 +#define VAR_DEFINE_TAG 442 +#define VAR_LOCAL_ZONE_TAG 443 +#define VAR_ACCESS_CONTROL_TAG 444 +#define VAR_LOCAL_ZONE_OVERRIDE 445 +#define VAR_ACCESS_CONTROL_TAG_ACTION 446 +#define VAR_ACCESS_CONTROL_TAG_DATA 447 +#define VAR_VIEW 448 +#define VAR_ACCESS_CONTROL_VIEW 449 +#define VAR_VIEW_FIRST 450 +#define VAR_SERVE_EXPIRED 451 +#define VAR_FAKE_DSA 452 +#define VAR_FAKE_SHA1 453 +#define VAR_LOG_IDENTITY 454 +#define VAR_HIDE_TRUSTANCHOR 455 +#define VAR_TRUST_ANCHOR_SIGNALING 456 +#define VAR_AGGRESSIVE_NSEC 457 +#define VAR_USE_SYSTEMD 458 +#define VAR_SHM_ENABLE 459 +#define VAR_SHM_KEY 460 +#define VAR_DNSCRYPT 461 +#define VAR_DNSCRYPT_ENABLE 462 +#define VAR_DNSCRYPT_PORT 463 +#define VAR_DNSCRYPT_PROVIDER 464 +#define VAR_DNSCRYPT_SECRET_KEY 465 +#define VAR_DNSCRYPT_PROVIDER_CERT 466 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 467 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 468 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 469 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 470 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 471 +#define VAR_IPSECMOD_ENABLED 472 +#define VAR_IPSECMOD_HOOK 473 +#define VAR_IPSECMOD_IGNORE_BOGUS 474 +#define VAR_IPSECMOD_MAX_TTL 475 +#define VAR_IPSECMOD_WHITELIST 476 +#define VAR_IPSECMOD_STRICT 477 +#define VAR_CACHEDB 478 +#define VAR_CACHEDB_BACKEND 479 +#define VAR_CACHEDB_SECRETSEED 480 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 481 +#define VAR_FOR_UPSTREAM 482 +#define VAR_AUTH_ZONE 483 +#define VAR_ZONEFILE 484 +#define VAR_MASTER 485 +#define VAR_URL 486 +#define VAR_FOR_DOWNSTREAM 487 +#define VAR_FALLBACK_ENABLED 488 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -581,7 +601,7 @@ union YYSTYPE char* str; -#line 585 "util/configparser.c" /* yacc.c:355 */ +#line 605 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -598,7 +618,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 602 "util/configparser.c" /* yacc.c:358 */ +#line 622 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -840,21 +860,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 452 +#define YYLAST 473 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 224 +#define YYNTOKENS 234 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 241 +#define YYNNTS 254 /* YYNRULES -- Number of rules. */ -#define YYNRULES 461 +#define YYNRULES 485 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 692 +#define YYNSTATES 726 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 478 +#define YYMAXUTOK 488 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -910,60 +930,63 @@ static const yytype_uint8 yytranslate[] = 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 + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 157, 157, 157, 158, 158, 159, 159, 160, 160, - 160, 162, 163, 167, 172, 173, 174, 174, 174, 175, - 175, 176, 176, 177, 177, 178, 178, 179, 179, 179, - 180, 180, 180, 181, 181, 182, 182, 183, 183, 184, - 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, - 189, 189, 190, 190, 190, 191, 191, 191, 192, 192, - 193, 193, 194, 194, 195, 195, 196, 196, 196, 197, - 197, 198, 198, 199, 199, 199, 200, 200, 201, 201, - 202, 202, 203, 203, 203, 204, 204, 205, 205, 206, - 206, 207, 207, 208, 208, 209, 209, 209, 210, 210, - 211, 211, 211, 212, 212, 212, 213, 213, 213, 214, - 214, 214, 214, 215, 215, 215, 216, 216, 216, 217, - 217, 218, 218, 219, 219, 220, 220, 221, 221, 221, - 222, 222, 223, 223, 224, 225, 225, 226, 226, 227, - 227, 228, 229, 229, 230, 230, 231, 231, 232, 232, - 232, 233, 233, 234, 234, 235, 235, 236, 236, 237, - 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, - 241, 241, 242, 242, 243, 243, 244, 246, 258, 259, - 260, 260, 260, 260, 260, 261, 263, 275, 276, 277, - 277, 277, 277, 278, 280, 294, 295, 296, 296, 296, - 296, 297, 297, 297, 299, 308, 317, 328, 337, 346, - 355, 366, 375, 386, 399, 414, 425, 442, 459, 472, - 487, 496, 505, 514, 523, 532, 541, 550, 559, 568, - 577, 586, 595, 604, 613, 622, 631, 638, 645, 654, - 663, 672, 686, 695, 704, 713, 720, 727, 753, 761, - 768, 775, 782, 789, 797, 805, 813, 820, 831, 838, - 847, 856, 865, 872, 879, 887, 895, 905, 915, 925, - 938, 949, 957, 970, 979, 988, 997, 1007, 1017, 1025, - 1038, 1047, 1055, 1064, 1072, 1085, 1094, 1101, 1111, 1121, - 1131, 1141, 1151, 1161, 1171, 1181, 1188, 1195, 1202, 1211, - 1220, 1229, 1236, 1246, 1263, 1270, 1288, 1301, 1314, 1323, - 1332, 1341, 1350, 1360, 1370, 1379, 1388, 1401, 1414, 1423, - 1430, 1439, 1448, 1457, 1466, 1474, 1487, 1495, 1523, 1530, - 1545, 1555, 1565, 1572, 1579, 1588, 1602, 1621, 1640, 1652, - 1664, 1676, 1687, 1706, 1716, 1725, 1733, 1741, 1754, 1767, - 1780, 1793, 1802, 1811, 1821, 1831, 1844, 1857, 1868, 1881, - 1892, 1905, 1915, 1922, 1929, 1938, 1948, 1958, 1968, 1975, - 1982, 1991, 2001, 2011, 2040, 2050, 2058, 2067, 2082, 2091, - 2096, 2097, 2098, 2098, 2098, 2099, 2099, 2099, 2100, 2100, - 2102, 2112, 2121, 2128, 2138, 2145, 2152, 2159, 2166, 2171, - 2172, 2173, 2173, 2174, 2174, 2175, 2175, 2176, 2177, 2178, - 2179, 2180, 2181, 2183, 2191, 2198, 2206, 2214, 2221, 2228, - 2237, 2246, 2255, 2264, 2273, 2282, 2287, 2288, 2289, 2291, - 2297, 2307, 2314, 2323, 2331, 2337, 2338, 2340, 2340, 2340, - 2341, 2341, 2342, 2343, 2344, 2345, 2347, 2357, 2367, 2374, - 2381, 2388, 2396, 2409, 2417, 2430, 2435, 2436, 2437, 2437, - 2439, 2453 + 0, 160, 160, 160, 161, 161, 162, 162, 163, 163, + 163, 164, 164, 165, 169, 174, 175, 176, 176, 176, + 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, + 181, 182, 182, 182, 183, 183, 184, 184, 185, 185, + 186, 186, 187, 187, 188, 188, 189, 189, 190, 190, + 191, 191, 191, 192, 192, 192, 193, 193, 193, 194, + 194, 195, 195, 196, 196, 197, 197, 198, 198, 198, + 199, 199, 200, 200, 201, 201, 201, 202, 202, 203, + 203, 204, 204, 205, 205, 205, 206, 206, 207, 207, + 208, 208, 209, 209, 210, 210, 211, 211, 211, 212, + 212, 213, 213, 213, 214, 214, 214, 215, 215, 215, + 216, 216, 216, 216, 217, 217, 217, 218, 218, 218, + 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, + 223, 224, 224, 225, 225, 226, 227, 227, 228, 228, + 229, 229, 230, 231, 231, 232, 232, 233, 233, 234, + 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, + 239, 239, 239, 240, 240, 240, 241, 241, 241, 242, + 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, + 249, 261, 262, 263, 263, 263, 263, 263, 264, 266, + 278, 279, 280, 280, 280, 280, 281, 283, 297, 298, + 299, 299, 299, 299, 300, 300, 300, 302, 318, 319, + 320, 320, 320, 320, 321, 321, 321, 323, 332, 341, + 352, 361, 370, 379, 390, 399, 410, 423, 438, 449, + 466, 483, 496, 511, 520, 529, 538, 547, 556, 565, + 574, 583, 592, 601, 610, 619, 628, 637, 646, 655, + 662, 669, 678, 685, 694, 703, 717, 726, 735, 744, + 751, 758, 784, 792, 799, 806, 813, 820, 828, 836, + 844, 851, 862, 869, 878, 887, 896, 903, 910, 918, + 926, 936, 946, 956, 969, 980, 988, 1001, 1010, 1019, + 1028, 1038, 1048, 1056, 1069, 1078, 1086, 1095, 1103, 1116, + 1125, 1132, 1142, 1152, 1162, 1172, 1182, 1192, 1202, 1212, + 1219, 1226, 1233, 1242, 1251, 1260, 1267, 1277, 1294, 1301, + 1319, 1332, 1345, 1354, 1363, 1372, 1381, 1391, 1401, 1412, + 1421, 1430, 1443, 1456, 1465, 1472, 1481, 1490, 1499, 1508, + 1516, 1529, 1537, 1566, 1573, 1588, 1598, 1608, 1615, 1622, + 1631, 1645, 1664, 1683, 1695, 1707, 1719, 1730, 1749, 1759, + 1768, 1776, 1784, 1797, 1810, 1823, 1836, 1845, 1854, 1864, + 1874, 1887, 1900, 1911, 1924, 1935, 1948, 1958, 1965, 1972, + 1981, 1991, 2001, 2011, 2018, 2025, 2034, 2044, 2054, 2061, + 2068, 2075, 2085, 2095, 2105, 2115, 2145, 2155, 2163, 2172, + 2187, 2196, 2201, 2202, 2203, 2203, 2203, 2204, 2204, 2204, + 2205, 2205, 2207, 2217, 2226, 2233, 2243, 2250, 2257, 2264, + 2271, 2276, 2277, 2278, 2278, 2279, 2279, 2280, 2280, 2281, + 2282, 2283, 2284, 2285, 2286, 2288, 2296, 2303, 2311, 2319, + 2326, 2333, 2342, 2351, 2360, 2369, 2378, 2387, 2392, 2393, + 2394, 2396, 2402, 2412, 2419, 2428, 2436, 2442, 2443, 2445, + 2445, 2445, 2446, 2446, 2447, 2448, 2449, 2450, 2451, 2453, + 2463, 2473, 2480, 2489, 2496, 2505, 2513, 2526, 2534, 2547, + 2552, 2553, 2554, 2554, 2556, 2570 }; #endif @@ -1014,12 +1037,13 @@ static const char *const yytname[] = "VAR_LOG_REPLIES", "VAR_TCP_UPSTREAM", "VAR_SSL_UPSTREAM", "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST", "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM", - "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", - "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", - "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", - "VAR_DNS64_SYNTHALL", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", - "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_SEND_IDENTITY", - "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", + "VAR_TLS_CERT_BUNDLE", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", + "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", + "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES", + "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL", + "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", + "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION", + "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", @@ -1043,23 +1067,27 @@ static const char *const yytname[] = "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_AGGRESSIVE_NSEC", "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_DNSCRYPT_PROVIDER_CERT_ROTATED", "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE", "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS", "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS", "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", - "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "$accept", "toplevelvars", + "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM", + "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL", + "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "$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_zone", + "content_view", "authstart", "contents_auth", "content_auth", + "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_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", @@ -1070,17 +1098,18 @@ static const char *const yytname[] = "server_outgoing_tcp_mss", "server_tcp_upstream", "server_udp_upstream_without_downstream", "server_ssl_upstream", "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port", - "server_use_systemd", "server_do_daemonize", "server_use_syslog", - "server_log_time_ascii", "server_log_queries", "server_log_replies", - "server_chroot", "server_username", "server_directory", "server_logfile", - "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_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_tls_cert_bundle", "server_use_systemd", "server_do_daemonize", + "server_use_syslog", "server_log_time_ascii", "server_log_queries", + "server_log_replies", "server_chroot", "server_username", + "server_directory", "server_logfile", "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_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", @@ -1102,10 +1131,11 @@ static const char *const yytname[] = "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_val_permissive_mode", "server_aggressive_nsec", + "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", @@ -1125,6 +1155,8 @@ static const char *const yytname[] = "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", + "auth_name", "auth_zonefile", "auth_master", "auth_url", + "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled", "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", @@ -1145,8 +1177,8 @@ static const char *const yytname[] = "server_response_ip", "server_response_ip_data", "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider", - "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_secret_key", - "dnsc_dnscrypt_shared_secret_cache_size", + "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated", + "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size", "dnsc_dnscrypt_shared_secret_cache_slabs", "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", "cachedbstart", "contents_cachedb", "content_cachedb", @@ -1181,14 +1213,15 @@ static const yytype_uint16 yytoknum[] = 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478 + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488 }; # endif -#define YYPACT_NINF -215 +#define YYPACT_NINF -223 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-215))) + (!!((Yystate) == (-223))) #define YYTABLE_NINF -1 @@ -1199,76 +1232,79 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -215, 0, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, 209, -38, -34, -39, -44, -130, -105, -177, - -214, -1, 2, 3, 29, 30, 32, 33, 34, 35, - 36, 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, 144, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 239, 240, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, 241, 242, 246, 247, 248, 290, - -215, -215, -215, -215, -215, -215, -215, 291, 292, 293, - 294, 295, -215, -215, -215, -215, -215, -215, 296, 297, - 298, 302, 306, 307, 331, -215, -215, -215, -215, -215, - -215, -215, -215, 332, 333, 334, 344, 345, 346, 347, - 348, -215, -215, -215, -215, -215, -215, -215, -215, -215, - 349, 350, 351, 352, 353, 354, 355, 356, 391, 393, - 403, 404, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, 405, -215, -215, 406, 407, - 408, 409, 410, 411, 412, 419, 420, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, 421, 423, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, 424, 425, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, 426, 427, 428, -215, -215, -215, -215, -215, - -215, -215, -215, -215, 429, 430, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, 431, 432, 433, 434, 435, 436, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, 437, -215, -215, 438, 439, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, 440, 441, 442, -215, -215, -215, -215, -215, - -215, -215 + -223, 0, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, 217, -36, -31, -39, -35, -24, + -128, -100, -159, -222, 2, 3, 4, 5, 6, 21, + 22, 23, 24, 25, 26, 29, 30, 32, 33, 34, + 35, 36, 48, 49, 50, 51, 53, 54, 55, 56, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, + 88, 89, 92, 94, 95, 96, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 189, 190, 191, 192, + 193, 194, 195, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 214, + 215, 216, 247, 248, 249, 250, 254, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, 255, 256, 298, 299, 300, 301, -223, -223, -223, + -223, -223, -223, -223, 302, 303, 304, 305, 306, -223, + -223, -223, -223, -223, -223, 310, 314, 315, 339, 340, + 341, 343, -223, -223, -223, -223, -223, -223, -223, -223, + 353, 354, 355, 356, 357, 358, 359, -223, -223, -223, + -223, -223, -223, -223, -223, 360, 361, 362, 363, 364, + 365, 400, 402, -223, -223, -223, -223, -223, -223, -223, + -223, -223, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 430, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, 431, -223, -223, + 432, 434, 435, 436, 437, 438, 439, 440, 441, 442, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, 443, 444, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, 445, 446, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, 447, 448, 449, + -223, -223, -223, -223, -223, -223, -223, -223, -223, 450, + 451, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, 452, 453, 454, 455, + 456, 457, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, 458, -223, -223, 459, 460, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, 461, 462, 463, -223, + -223, -223, -223, -223, -223, -223 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1276,10 +1312,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 13, 177, 186, 379, 425, 398, 194, - 434, 455, 3, 15, 179, 188, 196, 381, 400, 427, - 436, 457, 4, 5, 6, 10, 8, 9, 7, 11, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 1, 14, 180, 189, 401, 447, 420, 197, + 456, 479, 207, 3, 16, 182, 191, 199, 209, 403, + 422, 449, 458, 481, 4, 5, 6, 10, 13, 8, + 9, 7, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1295,117 +1331,122 @@ 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, - 0, 0, 14, 16, 17, 76, 79, 88, 165, 166, - 18, 138, 139, 140, 141, 142, 143, 27, 67, 19, - 80, 81, 38, 60, 75, 20, 21, 23, 24, 22, - 25, 26, 111, 176, 112, 113, 114, 115, 161, 77, - 66, 92, 109, 110, 28, 29, 30, 31, 32, 68, - 82, 83, 98, 54, 64, 55, 169, 93, 48, 49, - 168, 50, 51, 102, 106, 119, 127, 148, 103, 61, - 33, 34, 35, 90, 120, 121, 122, 36, 37, 39, - 40, 42, 43, 41, 125, 44, 45, 46, 52, 71, - 107, 85, 126, 78, 144, 86, 87, 104, 105, 91, - 47, 69, 72, 53, 56, 94, 95, 70, 145, 96, - 57, 58, 59, 108, 158, 159, 167, 97, 65, 99, - 100, 101, 146, 62, 63, 84, 73, 74, 89, 116, - 117, 118, 123, 124, 149, 150, 152, 154, 155, 153, - 156, 162, 128, 129, 132, 133, 130, 131, 134, 135, - 137, 136, 147, 157, 170, 172, 171, 173, 174, 175, - 151, 160, 163, 164, 0, 0, 0, 0, 0, 0, - 178, 180, 181, 182, 184, 185, 183, 0, 0, 0, - 0, 0, 187, 189, 190, 191, 192, 193, 0, 0, - 0, 0, 0, 0, 0, 195, 197, 198, 201, 202, - 199, 203, 200, 0, 0, 0, 0, 0, 0, 0, - 0, 380, 382, 384, 383, 389, 385, 386, 387, 388, + 0, 0, 0, 0, 0, 0, 0, 15, 17, 18, + 77, 80, 89, 166, 167, 19, 139, 140, 141, 142, + 143, 144, 28, 68, 20, 81, 82, 39, 61, 76, + 21, 22, 24, 25, 23, 26, 27, 112, 177, 113, + 114, 115, 116, 179, 162, 78, 67, 93, 110, 111, + 29, 30, 31, 32, 33, 69, 83, 84, 99, 55, + 65, 56, 170, 94, 49, 50, 169, 51, 52, 103, + 107, 120, 128, 149, 104, 62, 34, 35, 36, 91, + 121, 122, 123, 37, 38, 40, 41, 43, 44, 42, + 126, 45, 46, 47, 53, 72, 108, 86, 127, 79, + 145, 87, 88, 105, 106, 92, 48, 70, 73, 54, + 57, 95, 96, 71, 146, 97, 58, 59, 60, 178, + 109, 159, 160, 168, 98, 66, 100, 101, 102, 147, + 63, 64, 85, 74, 75, 90, 117, 118, 119, 124, + 125, 150, 151, 153, 155, 156, 154, 157, 163, 129, + 130, 133, 134, 131, 132, 135, 136, 138, 137, 148, + 158, 171, 173, 172, 174, 175, 176, 152, 161, 164, + 165, 0, 0, 0, 0, 0, 0, 181, 183, 184, + 185, 187, 188, 186, 0, 0, 0, 0, 0, 190, + 192, 193, 194, 195, 196, 0, 0, 0, 0, 0, + 0, 0, 198, 200, 201, 204, 205, 202, 206, 203, + 0, 0, 0, 0, 0, 0, 0, 208, 210, 211, + 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, + 0, 0, 0, 402, 404, 406, 405, 411, 407, 408, + 409, 410, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 421, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 0, 448, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 399, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 0, 426, 428, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 435, 437, 438, - 439, 441, 440, 442, 443, 444, 445, 0, 0, 456, - 458, 459, 205, 204, 211, 220, 218, 226, 227, 230, - 228, 229, 231, 232, 245, 246, 247, 248, 249, 271, - 272, 273, 278, 279, 223, 280, 281, 284, 282, 283, - 286, 287, 288, 301, 259, 260, 262, 263, 289, 304, - 254, 256, 305, 311, 312, 313, 224, 270, 324, 325, - 255, 319, 241, 219, 250, 302, 308, 290, 0, 0, - 328, 225, 206, 240, 294, 207, 221, 222, 251, 252, - 326, 292, 296, 297, 208, 329, 274, 300, 242, 258, - 306, 307, 310, 318, 253, 322, 320, 321, 264, 269, - 298, 299, 265, 266, 291, 314, 243, 244, 233, 235, - 236, 237, 238, 330, 331, 332, 275, 276, 277, 285, - 333, 334, 0, 0, 0, 293, 267, 430, 343, 347, - 345, 344, 348, 346, 0, 0, 351, 352, 212, 213, - 214, 215, 216, 217, 295, 309, 323, 353, 354, 268, - 335, 0, 0, 0, 0, 0, 0, 315, 316, 317, - 431, 261, 257, 239, 209, 210, 355, 357, 356, 358, - 359, 360, 234, 361, 362, 363, 366, 365, 364, 367, - 368, 369, 370, 371, 372, 0, 376, 377, 0, 0, - 378, 390, 392, 391, 394, 395, 396, 397, 393, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 429, 446, 447, 448, 450, 449, 451, 452, 453, - 454, 460, 461, 303, 327, 342, 432, 433, 349, 350, - 336, 337, 0, 0, 0, 341, 373, 374, 375, 340, - 338, 339 + 457, 459, 460, 461, 463, 464, 462, 465, 466, 467, + 468, 0, 0, 480, 482, 483, 218, 217, 224, 233, + 231, 239, 240, 243, 241, 242, 244, 245, 259, 260, + 261, 262, 263, 285, 286, 287, 292, 293, 236, 294, + 295, 298, 296, 297, 300, 301, 302, 315, 273, 274, + 276, 277, 303, 318, 268, 270, 319, 325, 326, 327, + 237, 284, 339, 340, 269, 334, 255, 232, 264, 316, + 322, 304, 0, 0, 343, 238, 219, 254, 308, 220, + 234, 235, 265, 266, 341, 306, 310, 311, 221, 344, + 288, 314, 256, 272, 320, 321, 324, 333, 267, 337, + 335, 336, 278, 283, 312, 313, 279, 280, 305, 329, + 257, 258, 246, 248, 249, 250, 251, 252, 345, 346, + 347, 289, 290, 291, 299, 348, 349, 0, 0, 0, + 307, 281, 452, 358, 362, 360, 359, 363, 361, 0, + 0, 366, 367, 225, 226, 227, 228, 229, 230, 309, + 323, 338, 368, 369, 282, 350, 0, 0, 0, 0, + 0, 0, 330, 331, 332, 453, 275, 271, 328, 253, + 222, 223, 370, 372, 371, 373, 374, 375, 247, 376, + 377, 378, 381, 380, 379, 382, 383, 384, 385, 386, + 394, 0, 398, 399, 0, 0, 400, 387, 392, 388, + 389, 390, 391, 393, 412, 414, 413, 416, 417, 418, + 419, 415, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 451, 469, 470, 471, 474, 472, + 473, 475, 476, 477, 478, 484, 485, 317, 342, 357, + 454, 455, 364, 365, 351, 352, 0, 0, 0, 356, + 395, 396, 397, 355, 353, 354 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, - -215 + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 12, 13, 22, 192, 14, 23, 360, 15, - 24, 372, 16, 25, 385, 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, 345, 346, 347, - 348, 349, 361, 362, 363, 364, 365, 366, 373, 374, - 375, 376, 377, 386, 387, 388, 389, 390, 391, 392, - 17, 26, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 18, 27, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 19, 28, 436, 437, - 350, 351, 352, 353, 20, 29, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 21, 30, 459, 460, - 461 + -1, 1, 13, 14, 24, 197, 15, 25, 367, 16, + 26, 379, 17, 27, 392, 18, 28, 407, 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, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 368, 369, 370, + 371, 372, 373, 380, 381, 382, 383, 384, 408, 409, + 410, 411, 412, 413, 414, 393, 394, 395, 396, 397, + 398, 399, 19, 29, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 20, 30, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 21, 31, + 458, 459, 357, 358, 359, 360, 22, 32, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 23, + 33, 483, 484, 485 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1413,155 +1454,162 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 378, 354, 435, 355, 356, 367, 457, 458, 462, - 0, 3, 463, 464, 368, 369, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 379, 380, 465, - 466, 4, 467, 468, 469, 470, 471, 5, 393, 394, - 395, 396, 397, 398, 399, 400, 472, 473, 474, 475, - 476, 477, 381, 478, 479, 357, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 6, 505, 506, 507, 358, 508, 359, 370, 509, - 371, 510, 511, 512, 513, 514, 515, 7, 516, 517, - 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, - 382, 383, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 8, 551, 552, 553, 554, - 555, 556, 557, 558, 559, 384, 560, 561, 562, 563, - 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, - 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, - 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, - 594, 595, 9, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 10, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 0, - 11, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 621, - 622, 623, 624, 59, 60, 61, 625, 626, 627, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 103, - 104, 105, 637, 106, 107, 108, 638, 639, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 640, 641, 642, 643, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 654, 655, 656, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 657, 175, 658, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 659, 660, 661, 662, 663, 664, 665, - 666, 667, 668, 185, 186, 187, 188, 189, 190, 669, - 670, 671, 191, 672, 673, 674, 675, 676, 677, 678, - 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, - 689, 690, 691 + 2, 385, 481, 482, 361, 400, 362, 363, 457, 374, + 0, 3, 486, 487, 488, 489, 490, 375, 376, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 491, 492, 493, 494, 495, 496, 386, 387, 497, + 498, 4, 499, 500, 501, 502, 503, 5, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 504, 505, + 506, 507, 388, 508, 509, 510, 511, 364, 415, 416, + 417, 418, 419, 420, 421, 422, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 6, 527, 528, 529, 530, 531, 365, 532, 533, + 366, 377, 534, 378, 535, 536, 537, 7, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, + 550, 389, 390, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 569, 570, 571, 572, 573, 8, 574, 575, 576, + 577, 578, 579, 580, 581, 582, 391, 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, 401, 9, 402, 403, 404, 405, 406, 618, + 619, 620, 621, 622, 623, 624, 10, 625, 626, 627, + 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 11, 641, 642, 643, 0, 12, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 644, 645, 646, + 647, 62, 63, 64, 648, 649, 650, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 651, 652, + 653, 654, 655, 656, 657, 658, 659, 106, 107, 108, + 660, 109, 110, 111, 661, 662, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 663, + 664, 665, 135, 666, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 667, 668, 669, 670, 671, 672, 673, + 674, 675, 676, 677, 678, 679, 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, + 680, 179, 681, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 692, 190, 191, 192, 193, 194, 195, + 693, 694, 695, 196, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, + 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, + 722, 723, 724, 725 }; static const yytype_int16 yycheck[] = { - 0, 40, 40, 108, 42, 43, 40, 221, 222, 10, - -1, 11, 10, 10, 48, 49, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 76, 77, 10, - 10, 41, 10, 10, 10, 10, 10, 47, 92, 93, + 0, 40, 224, 225, 40, 40, 42, 43, 108, 40, + -1, 11, 10, 10, 10, 10, 10, 48, 49, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 10, 10, 10, 10, 10, 10, 76, 77, 10, + 10, 41, 10, 10, 10, 10, 10, 47, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 10, 10, + 10, 10, 101, 10, 10, 10, 10, 103, 92, 93, 94, 95, 96, 97, 98, 99, 10, 10, 10, 10, - 10, 10, 101, 10, 10, 103, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 91, 10, 10, 10, 10, 10, 133, 10, 10, + 136, 132, 10, 134, 10, 10, 10, 107, 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, 160, 161, 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, 146, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 195, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 145, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 194, 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, 227, 193, 229, 230, 231, 232, 233, 10, + 10, 10, 10, 10, 10, 10, 206, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 192, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 204, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, - 220, 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, - 191, 10, 193, 10, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 214, 215, 216, 217, 218, 219, 10, - 10, 10, 223, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 223, 10, 10, 10, -1, 228, 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, 135, 10, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 10, 194, 10, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 217, 218, 219, 220, 221, 222, + 10, 10, 10, 226, 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 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 225, 0, 11, 41, 47, 91, 107, 145, 192, - 204, 220, 226, 227, 230, 233, 236, 414, 425, 440, - 448, 460, 228, 231, 234, 237, 415, 426, 441, 449, - 461, 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, 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, 100, 101, 102, 104, 105, 106, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 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, 193, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 214, 215, 216, 217, 218, - 219, 223, 229, 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, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 444, 445, 446, 447, 40, 42, 43, 103, 133, 135, - 232, 396, 397, 398, 399, 400, 401, 40, 48, 49, - 132, 134, 235, 402, 403, 404, 405, 406, 40, 76, - 77, 101, 159, 160, 194, 238, 407, 408, 409, 410, - 411, 412, 413, 92, 93, 94, 95, 96, 97, 98, - 99, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 108, 442, 443, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 450, 451, 452, - 453, 454, 455, 456, 457, 458, 459, 221, 222, 462, - 463, 464, 10, 10, 10, 10, 10, 10, 10, 10, + 0, 235, 0, 11, 41, 47, 91, 107, 146, 193, + 206, 223, 228, 236, 237, 240, 243, 246, 249, 436, + 447, 462, 470, 483, 238, 241, 244, 247, 250, 437, + 448, 463, 471, 484, 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, 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, 100, 101, 102, 104, + 105, 106, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 135, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 194, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 217, 218, 219, 220, 221, 222, 226, 239, 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, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 466, 467, 468, + 469, 40, 42, 43, 103, 133, 136, 242, 411, 412, + 413, 414, 415, 416, 40, 48, 49, 132, 134, 245, + 417, 418, 419, 420, 421, 40, 76, 77, 101, 160, + 161, 195, 248, 429, 430, 431, 432, 433, 434, 435, + 40, 227, 229, 230, 231, 232, 233, 251, 422, 423, + 424, 425, 426, 427, 428, 92, 93, 94, 95, 96, + 97, 98, 99, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 108, 464, 465, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 224, 225, 485, 486, 487, 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, 10, 10, 10, 10, @@ -1584,34 +1632,34 @@ 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 224, 225, 225, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 227, 228, 228, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 230, 231, 231, - 232, 232, 232, 232, 232, 232, 233, 234, 234, 235, - 235, 235, 235, 235, 236, 237, 237, 238, 238, 238, - 238, 238, 238, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 0, 234, 235, 235, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 237, 238, 238, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 240, 241, 241, 242, 242, 242, 242, 242, 242, 243, + 244, 244, 245, 245, 245, 245, 245, 246, 247, 247, + 248, 248, 248, 248, 248, 248, 248, 249, 250, 250, + 251, 251, 251, 251, 251, 251, 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, @@ -1628,22 +1676,25 @@ static const yytype_uint16 yyr1[] = 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 415, 416, 416, 416, 416, 416, 416, 416, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 426, 427, 427, 427, 427, 427, 427, 427, 427, 427, - 427, 427, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 449, 450, 450, 450, - 450, 450, 450, 450, 450, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 461, 462, 462, - 463, 464 + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 437, 438, 438, 438, 438, 438, 438, + 438, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 448, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 449, 449, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 471, 472, + 472, 472, 472, 472, 472, 472, 472, 472, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 484, 485, 485, 486, 487 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1659,10 +1710,10 @@ 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, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 2, 0, 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, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 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, @@ -1672,23 +1723,24 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, - 2, 2, 2, 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, 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, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, - 2, 2 + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 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, 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, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 1, 2, 2 }; @@ -2364,16 +2416,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 13: -#line 168 "util/configparser.y" /* yacc.c:1646 */ + case 14: +#line 170 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2373 "util/configparser.c" /* yacc.c:1646 */ +#line 2425 "util/configparser.c" /* yacc.c:1646 */ break; - case 177: -#line 247 "util/configparser.y" /* yacc.c:1646 */ + case 180: +#line 250 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2384,11 +2436,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2388 "util/configparser.c" /* yacc.c:1646 */ +#line 2440 "util/configparser.c" /* yacc.c:1646 */ break; - case 186: -#line 264 "util/configparser.y" /* yacc.c:1646 */ + case 189: +#line 267 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2399,11 +2451,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2403 "util/configparser.c" /* yacc.c:1646 */ +#line 2455 "util/configparser.c" /* yacc.c:1646 */ break; - case 194: -#line 281 "util/configparser.y" /* yacc.c:1646 */ + case 197: +#line 284 "util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2416,11 +2468,30 @@ yyreduce: } else yyerror("out of memory"); } -#line 2420 "util/configparser.c" /* yacc.c:1646 */ +#line 2472 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 207: +#line 303 "util/configparser.y" /* yacc.c:1646 */ + { + struct config_auth* s; + OUTYY(("\nP(auth_zone:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for auth zone */ + s->for_downstream = 1; + s->for_upstream = 1; + s->fallback_enabled = 0; + } else + yyerror("out of memory"); + } +#line 2491 "util/configparser.c" /* yacc.c:1646 */ break; - case 204: -#line 300 "util/configparser.y" /* yacc.c:1646 */ + case 217: +#line 324 "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) @@ -2428,11 +2499,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2432 "util/configparser.c" /* yacc.c:1646 */ +#line 2503 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: -#line 309 "util/configparser.y" /* yacc.c:1646 */ + case 218: +#line 333 "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) @@ -2440,11 +2511,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2444 "util/configparser.c" /* yacc.c:1646 */ +#line 2515 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: -#line 318 "util/configparser.y" /* yacc.c:1646 */ + case 219: +#line 342 "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) @@ -2454,11 +2525,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2458 "util/configparser.c" /* yacc.c:1646 */ +#line 2529 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: -#line 329 "util/configparser.y" /* yacc.c:1646 */ + case 220: +#line 353 "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) @@ -2466,11 +2537,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2470 "util/configparser.c" /* yacc.c:1646 */ +#line 2541 "util/configparser.c" /* yacc.c:1646 */ break; - case 208: -#line 338 "util/configparser.y" /* yacc.c:1646 */ + case 221: +#line 362 "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) @@ -2478,11 +2549,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2482 "util/configparser.c" /* yacc.c:1646 */ +#line 2553 "util/configparser.c" /* yacc.c:1646 */ break; - case 209: -#line 347 "util/configparser.y" /* yacc.c:1646 */ + case 222: +#line 371 "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) @@ -2490,11 +2561,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2494 "util/configparser.c" /* yacc.c:1646 */ +#line 2565 "util/configparser.c" /* yacc.c:1646 */ break; - case 210: -#line 356 "util/configparser.y" /* yacc.c:1646 */ + case 223: +#line 380 "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) @@ -2504,11 +2575,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2508 "util/configparser.c" /* yacc.c:1646 */ +#line 2579 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: -#line 367 "util/configparser.y" /* yacc.c:1646 */ + case 224: +#line 391 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2516,11 +2587,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2520 "util/configparser.c" /* yacc.c:1646 */ +#line 2591 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 376 "util/configparser.y" /* yacc.c:1646 */ + case 225: +#line 400 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2530,11 +2601,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2534 "util/configparser.c" /* yacc.c:1646 */ +#line 2605 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: -#line 387 "util/configparser.y" /* yacc.c:1646 */ + case 226: +#line 411 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2545,11 +2616,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2549 "util/configparser.c" /* yacc.c:1646 */ +#line 2620 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: -#line 400 "util/configparser.y" /* yacc.c:1646 */ + case 227: +#line 424 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2563,11 +2634,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2567 "util/configparser.c" /* yacc.c:1646 */ +#line 2638 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: -#line 415 "util/configparser.y" /* yacc.c:1646 */ + case 228: +#line 439 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2577,11 +2648,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2581 "util/configparser.c" /* yacc.c:1646 */ +#line 2652 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: -#line 426 "util/configparser.y" /* yacc.c:1646 */ + case 229: +#line 450 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2597,11 +2668,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2601 "util/configparser.c" /* yacc.c:1646 */ +#line 2672 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: -#line 443 "util/configparser.y" /* yacc.c:1646 */ + case 230: +#line 467 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2617,11 +2688,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2621 "util/configparser.c" /* yacc.c:1646 */ +#line 2692 "util/configparser.c" /* yacc.c:1646 */ break; - case 218: -#line 460 "util/configparser.y" /* yacc.c:1646 */ + case 231: +#line 484 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2633,11 +2704,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2637 "util/configparser.c" /* yacc.c:1646 */ +#line 2708 "util/configparser.c" /* yacc.c:1646 */ break; - case 219: -#line 473 "util/configparser.y" /* yacc.c:1646 */ + case 232: +#line 497 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2651,11 +2722,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2655 "util/configparser.c" /* yacc.c:1646 */ +#line 2726 "util/configparser.c" /* yacc.c:1646 */ break; - case 220: -#line 488 "util/configparser.y" /* yacc.c:1646 */ + case 233: +#line 512 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2663,11 +2734,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2667 "util/configparser.c" /* yacc.c:1646 */ +#line 2738 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 497 "util/configparser.y" /* yacc.c:1646 */ + case 234: +#line 521 "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, @@ -2675,11 +2746,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2679 "util/configparser.c" /* yacc.c:1646 */ +#line 2750 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: -#line 506 "util/configparser.y" /* yacc.c:1646 */ + case 235: +#line 530 "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, @@ -2687,11 +2758,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2691 "util/configparser.c" /* yacc.c:1646 */ +#line 2762 "util/configparser.c" /* yacc.c:1646 */ break; - case 223: -#line 515 "util/configparser.y" /* yacc.c:1646 */ + case 236: +#line 539 "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) @@ -2699,11 +2770,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2703 "util/configparser.c" /* yacc.c:1646 */ +#line 2774 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 524 "util/configparser.y" /* yacc.c:1646 */ + case 237: +#line 548 "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) @@ -2711,11 +2782,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2715 "util/configparser.c" /* yacc.c:1646 */ +#line 2786 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: -#line 533 "util/configparser.y" /* yacc.c:1646 */ + case 238: +#line 557 "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) @@ -2723,11 +2794,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2727 "util/configparser.c" /* yacc.c:1646 */ +#line 2798 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: -#line 542 "util/configparser.y" /* yacc.c:1646 */ + case 239: +#line 566 "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) @@ -2735,11 +2806,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2739 "util/configparser.c" /* yacc.c:1646 */ +#line 2810 "util/configparser.c" /* yacc.c:1646 */ break; - case 227: -#line 551 "util/configparser.y" /* yacc.c:1646 */ + case 240: +#line 575 "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) @@ -2747,11 +2818,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2751 "util/configparser.c" /* yacc.c:1646 */ +#line 2822 "util/configparser.c" /* yacc.c:1646 */ break; - case 228: -#line 560 "util/configparser.y" /* yacc.c:1646 */ + case 241: +#line 584 "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) @@ -2759,11 +2830,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2763 "util/configparser.c" /* yacc.c:1646 */ +#line 2834 "util/configparser.c" /* yacc.c:1646 */ break; - case 229: -#line 569 "util/configparser.y" /* yacc.c:1646 */ + case 242: +#line 593 "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) @@ -2771,11 +2842,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2775 "util/configparser.c" /* yacc.c:1646 */ +#line 2846 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: -#line 578 "util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 602 "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) @@ -2783,11 +2854,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2787 "util/configparser.c" /* yacc.c:1646 */ +#line 2858 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 587 "util/configparser.y" /* yacc.c:1646 */ + case 244: +#line 611 "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) @@ -2795,11 +2866,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2799 "util/configparser.c" /* yacc.c:1646 */ +#line 2870 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: -#line 596 "util/configparser.y" /* yacc.c:1646 */ + case 245: +#line 620 "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) @@ -2807,11 +2878,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2811 "util/configparser.c" /* yacc.c:1646 */ +#line 2882 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: -#line 605 "util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 629 "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) @@ -2819,11 +2890,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2823 "util/configparser.c" /* yacc.c:1646 */ +#line 2894 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: -#line 614 "util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 638 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2831,11 +2902,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2835 "util/configparser.c" /* yacc.c:1646 */ +#line 2906 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: -#line 623 "util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 647 "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) @@ -2843,31 +2914,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2847 "util/configparser.c" /* yacc.c:1646 */ +#line 2918 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: -#line 632 "util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 656 "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 2857 "util/configparser.c" /* yacc.c:1646 */ +#line 2928 "util/configparser.c" /* yacc.c:1646 */ break; - case 237: -#line 639 "util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 663 "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 2867 "util/configparser.c" /* yacc.c:1646 */ +#line 2938 "util/configparser.c" /* yacc.c:1646 */ break; - case 238: -#line 646 "util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 670 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2875,11 +2946,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2879 "util/configparser.c" /* yacc.c:1646 */ +#line 2950 "util/configparser.c" /* yacc.c:1646 */ break; - case 239: -#line 655 "util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 679 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); + free(cfg_parser->cfg->tls_cert_bundle); + cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); + } +#line 2960 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 253: +#line 686 "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) @@ -2887,11 +2968,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2891 "util/configparser.c" /* yacc.c:1646 */ +#line 2972 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: -#line 664 "util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 695 "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) @@ -2899,11 +2980,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2903 "util/configparser.c" /* yacc.c:1646 */ +#line 2984 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: -#line 673 "util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 704 "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) @@ -2916,11 +2997,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2920 "util/configparser.c" /* yacc.c:1646 */ +#line 3001 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: -#line 687 "util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 718 "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) @@ -2928,11 +3009,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2932 "util/configparser.c" /* yacc.c:1646 */ +#line 3013 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 696 "util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 727 "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) @@ -2940,11 +3021,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2944 "util/configparser.c" /* yacc.c:1646 */ +#line 3025 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: -#line 705 "util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 736 "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) @@ -2952,31 +3033,31 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2956 "util/configparser.c" /* yacc.c:1646 */ +#line 3037 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 714 "util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 745 "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 2966 "util/configparser.c" /* yacc.c:1646 */ +#line 3047 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 721 "util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 752 "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 2976 "util/configparser.c" /* yacc.c:1646 */ +#line 3057 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 728 "util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 759 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3001,105 +3082,105 @@ yyreduce: } } } -#line 3005 "util/configparser.c" /* yacc.c:1646 */ +#line 3086 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 754 "util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 785 "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 3016 "util/configparser.c" /* yacc.c:1646 */ +#line 3097 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 762 "util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 793 "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 3026 "util/configparser.c" /* yacc.c:1646 */ +#line 3107 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 769 "util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 800 "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 3036 "util/configparser.c" /* yacc.c:1646 */ +#line 3117 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 776 "util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 807 "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 3046 "util/configparser.c" /* yacc.c:1646 */ +#line 3127 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 783 "util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 814 "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 3056 "util/configparser.c" /* yacc.c:1646 */ +#line 3137 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 790 "util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 821 "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 3067 "util/configparser.c" /* yacc.c:1646 */ +#line 3148 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 798 "util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 829 "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 3078 "util/configparser.c" /* yacc.c:1646 */ +#line 3159 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 806 "util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 837 "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 3089 "util/configparser.c" /* yacc.c:1646 */ +#line 3170 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 814 "util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 845 "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 3099 "util/configparser.c" /* yacc.c:1646 */ +#line 3180 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 821 "util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 852 "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) @@ -3109,21 +3190,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3113 "util/configparser.c" /* yacc.c:1646 */ +#line 3194 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 832 "util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 863 "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 3123 "util/configparser.c" /* yacc.c:1646 */ +#line 3204 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 839 "util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 870 "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) @@ -3131,11 +3212,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3135 "util/configparser.c" /* yacc.c:1646 */ +#line 3216 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 848 "util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 879 "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) @@ -3143,11 +3224,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3147 "util/configparser.c" /* yacc.c:1646 */ +#line 3228 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 857 "util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 888 "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) @@ -3155,53 +3236,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3159 "util/configparser.c" /* yacc.c:1646 */ +#line 3240 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 866 "util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 897 "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 3169 "util/configparser.c" /* yacc.c:1646 */ +#line 3250 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 873 "util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 904 "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 3179 "util/configparser.c" /* yacc.c:1646 */ +#line 3260 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 880 "util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 911 "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 3190 "util/configparser.c" /* yacc.c:1646 */ +#line 3271 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 888 "util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 919 "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 3201 "util/configparser.c" /* yacc.c:1646 */ +#line 3282 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 896 "util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 927 "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) @@ -3210,11 +3291,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3214 "util/configparser.c" /* yacc.c:1646 */ +#line 3295 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 906 "util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 937 "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) @@ -3223,11 +3304,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3227 "util/configparser.c" /* yacc.c:1646 */ +#line 3308 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 916 "util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 947 "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) @@ -3236,11 +3317,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3240 "util/configparser.c" /* yacc.c:1646 */ +#line 3321 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 926 "util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 957 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3252,11 +3333,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3256 "util/configparser.c" /* yacc.c:1646 */ +#line 3337 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 939 "util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 970 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3266,22 +3347,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3270 "util/configparser.c" /* yacc.c:1646 */ +#line 3351 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 950 "util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 981 "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 3281 "util/configparser.c" /* yacc.c:1646 */ +#line 3362 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 958 "util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 989 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3293,11 +3374,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3297 "util/configparser.c" /* yacc.c:1646 */ +#line 3378 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 971 "util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 1002 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3305,11 +3386,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3309 "util/configparser.c" /* yacc.c:1646 */ +#line 3390 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 980 "util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 1011 "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) @@ -3317,11 +3398,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3321 "util/configparser.c" /* yacc.c:1646 */ +#line 3402 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 989 "util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 1020 "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) @@ -3329,11 +3410,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3333 "util/configparser.c" /* yacc.c:1646 */ +#line 3414 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 998 "util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 1029 "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) @@ -3342,11 +3423,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3346 "util/configparser.c" /* yacc.c:1646 */ +#line 3427 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 1008 "util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 1039 "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) @@ -3355,22 +3436,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3359 "util/configparser.c" /* yacc.c:1646 */ +#line 3440 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 1018 "util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 1049 "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 3370 "util/configparser.c" /* yacc.c:1646 */ +#line 3451 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 1026 "util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 1057 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3382,11 +3463,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3386 "util/configparser.c" /* yacc.c:1646 */ +#line 3467 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 1039 "util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 1070 "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) @@ -3394,22 +3475,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3398 "util/configparser.c" /* yacc.c:1646 */ +#line 3479 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 1048 "util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 1079 "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 3409 "util/configparser.c" /* yacc.c:1646 */ +#line 3490 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 1056 "util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 1087 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3417,22 +3498,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3421 "util/configparser.c" /* yacc.c:1646 */ +#line 3502 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 1065 "util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 1096 "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 3432 "util/configparser.c" /* yacc.c:1646 */ +#line 3513 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 1073 "util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 1104 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3444,11 +3525,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3448 "util/configparser.c" /* yacc.c:1646 */ +#line 3529 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 1086 "util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 1117 "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) @@ -3456,21 +3537,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3460 "util/configparser.c" /* yacc.c:1646 */ +#line 3541 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 1095 "util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 1126 "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 3470 "util/configparser.c" /* yacc.c:1646 */ +#line 3551 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 1102 "util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 1133 "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) @@ -3479,11 +3560,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3483 "util/configparser.c" /* yacc.c:1646 */ +#line 3564 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 1112 "util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 1143 "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) @@ -3492,11 +3573,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3496 "util/configparser.c" /* yacc.c:1646 */ +#line 3577 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 1122 "util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 1153 "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) @@ -3505,11 +3586,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3509 "util/configparser.c" /* yacc.c:1646 */ +#line 3590 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 1132 "util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 1163 "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) @@ -3518,11 +3599,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3522 "util/configparser.c" /* yacc.c:1646 */ +#line 3603 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 1142 "util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 1173 "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) @@ -3531,11 +3612,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3535 "util/configparser.c" /* yacc.c:1646 */ +#line 3616 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 1152 "util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 1183 "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) @@ -3544,11 +3625,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3548 "util/configparser.c" /* yacc.c:1646 */ +#line 3629 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 1162 "util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 1193 "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) @@ -3557,11 +3638,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3561 "util/configparser.c" /* yacc.c:1646 */ +#line 3642 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 1172 "util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 1203 "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) @@ -3570,41 +3651,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3574 "util/configparser.c" /* yacc.c:1646 */ +#line 3655 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 1182 "util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1213 "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 3584 "util/configparser.c" /* yacc.c:1646 */ +#line 3665 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 1189 "util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1220 "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 3594 "util/configparser.c" /* yacc.c:1646 */ +#line 3675 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 1196 "util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1227 "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 3604 "util/configparser.c" /* yacc.c:1646 */ +#line 3685 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 1203 "util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1234 "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) @@ -3612,11 +3693,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3616 "util/configparser.c" /* yacc.c:1646 */ +#line 3697 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 1212 "util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1243 "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) @@ -3624,11 +3705,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3628 "util/configparser.c" /* yacc.c:1646 */ +#line 3709 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 1221 "util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1252 "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) @@ -3636,21 +3717,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3640 "util/configparser.c" /* yacc.c:1646 */ +#line 3721 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 1230 "util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1261 "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 3650 "util/configparser.c" /* yacc.c:1646 */ +#line 3731 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 1237 "util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1268 "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) @@ -3659,11 +3740,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3663 "util/configparser.c" /* yacc.c:1646 */ +#line 3744 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 1247 "util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1278 "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 && @@ -3679,21 +3760,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 3683 "util/configparser.c" /* yacc.c:1646 */ +#line 3764 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 1264 "util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1295 "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 3693 "util/configparser.c" /* yacc.c:1646 */ +#line 3774 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 1271 "util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1302 "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) { @@ -3710,11 +3791,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3714 "util/configparser.c" /* yacc.c:1646 */ +#line 3795 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 1289 "util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1320 "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) { @@ -3726,11 +3807,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3730 "util/configparser.c" /* yacc.c:1646 */ +#line 3811 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1302 "util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1333 "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) { @@ -3742,11 +3823,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3746 "util/configparser.c" /* yacc.c:1646 */ +#line 3827 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1315 "util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1346 "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) @@ -3754,11 +3835,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3758 "util/configparser.c" /* yacc.c:1646 */ +#line 3839 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1324 "util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1355 "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) @@ -3766,11 +3847,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3770 "util/configparser.c" /* yacc.c:1646 */ +#line 3851 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1333 "util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1364 "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) @@ -3778,11 +3859,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3782 "util/configparser.c" /* yacc.c:1646 */ +#line 3863 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1342 "util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1373 "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) @@ -3790,11 +3871,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3794 "util/configparser.c" /* yacc.c:1646 */ +#line 3875 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1351 "util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1382 "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) @@ -3803,11 +3884,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3807 "util/configparser.c" /* yacc.c:1646 */ +#line 3888 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1361 "util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1392 "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) @@ -3816,11 +3897,25 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3820 "util/configparser.c" /* yacc.c:1646 */ +#line 3901 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1371 "util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1402 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_aggressive_nsec:%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->aggressive_nsec = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 3915 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 329: +#line 1413 "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) @@ -3828,11 +3923,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3832 "util/configparser.c" /* yacc.c:1646 */ +#line 3927 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1380 "util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1422 "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) @@ -3840,11 +3935,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3844 "util/configparser.c" /* yacc.c:1646 */ +#line 3939 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1389 "util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1431 "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) @@ -3856,11 +3951,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3860 "util/configparser.c" /* yacc.c:1646 */ +#line 3955 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1402 "util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1444 "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) @@ -3872,11 +3967,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3876 "util/configparser.c" /* yacc.c:1646 */ +#line 3971 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1415 "util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1457 "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) @@ -3884,21 +3979,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3888 "util/configparser.c" /* yacc.c:1646 */ +#line 3983 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1424 "util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1466 "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 3898 "util/configparser.c" /* yacc.c:1646 */ +#line 3993 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1431 "util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1473 "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) @@ -3906,11 +4001,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3910 "util/configparser.c" /* yacc.c:1646 */ +#line 4005 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1440 "util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1482 "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) @@ -3918,11 +4013,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3922 "util/configparser.c" /* yacc.c:1646 */ +#line 4017 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1449 "util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1491 "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) @@ -3930,11 +4025,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3934 "util/configparser.c" /* yacc.c:1646 */ +#line 4029 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1458 "util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1500 "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) @@ -3943,22 +4038,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3947 "util/configparser.c" /* yacc.c:1646 */ +#line 4042 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1467 "util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1509 "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 3958 "util/configparser.c" /* yacc.c:1646 */ +#line 4053 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1475 "util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1517 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3970,22 +4065,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3974 "util/configparser.c" /* yacc.c:1646 */ +#line 4069 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1488 "util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1530 "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 3985 "util/configparser.c" /* yacc.c:1646 */ +#line 4080 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1496 "util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1538 "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 && @@ -3995,12 +4090,13 @@ yyreduce: && strcmp((yyvsp[0].str), "always_transparent")!=0 && strcmp((yyvsp[0].str), "always_refuse")!=0 && strcmp((yyvsp[0].str), "always_nxdomain")!=0 + && strcmp((yyvsp[0].str), "noview")!=0 && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " - "always_nxdomain or nodefault"); + "always_nxdomain, noview or nodefault"); else if(strcmp((yyvsp[0].str), "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_nodefault, (yyvsp[-1].str))) @@ -4012,21 +4108,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4016 "util/configparser.c" /* yacc.c:1646 */ +#line 4112 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1524 "util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1567 "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 4026 "util/configparser.c" /* yacc.c:1646 */ +#line 4122 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1531 "util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1574 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4040,11 +4136,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4044 "util/configparser.c" /* yacc.c:1646 */ +#line 4140 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1546 "util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1589 "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) @@ -4053,11 +4149,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4057 "util/configparser.c" /* yacc.c:1646 */ +#line 4153 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1556 "util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1599 "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) @@ -4066,31 +4162,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4070 "util/configparser.c" /* yacc.c:1646 */ +#line 4166 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1566 "util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1609 "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 4080 "util/configparser.c" /* yacc.c:1646 */ +#line 4176 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1573 "util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1616 "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 4090 "util/configparser.c" /* yacc.c:1646 */ +#line 4186 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1580 "util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1623 "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) @@ -4098,11 +4194,11 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4102 "util/configparser.c" /* yacc.c:1646 */ +#line 4198 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1589 "util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1632 "util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4115,11 +4211,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4119 "util/configparser.c" /* yacc.c:1646 */ +#line 4215 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1603 "util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1646 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4137,11 +4233,11 @@ yyreduce: } } } -#line 4141 "util/configparser.c" /* yacc.c:1646 */ +#line 4237 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1622 "util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1665 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4159,11 +4255,11 @@ yyreduce: } } } -#line 4163 "util/configparser.c" /* yacc.c:1646 */ +#line 4259 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1641 "util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1684 "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, @@ -4174,11 +4270,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4178 "util/configparser.c" /* yacc.c:1646 */ +#line 4274 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1653 "util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1696 "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, @@ -4189,11 +4285,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4193 "util/configparser.c" /* yacc.c:1646 */ +#line 4289 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1665 "util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1708 "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, @@ -4204,11 +4300,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4208 "util/configparser.c" /* yacc.c:1646 */ +#line 4304 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1677 "util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1720 "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, @@ -4218,11 +4314,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4222 "util/configparser.c" /* yacc.c:1646 */ +#line 4318 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1688 "util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1731 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4240,11 +4336,11 @@ yyreduce: } } } -#line 4244 "util/configparser.c" /* yacc.c:1646 */ +#line 4340 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1707 "util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1750 "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) @@ -4252,11 +4348,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4256 "util/configparser.c" /* yacc.c:1646 */ +#line 4352 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1717 "util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1760 "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) @@ -4264,33 +4360,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4268 "util/configparser.c" /* yacc.c:1646 */ +#line 4364 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1726 "util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1769 "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 4279 "util/configparser.c" /* yacc.c:1646 */ +#line 4375 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1734 "util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1777 "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 4290 "util/configparser.c" /* yacc.c:1646 */ +#line 4386 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1742 "util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1785 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4302,11 +4398,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4306 "util/configparser.c" /* yacc.c:1646 */ +#line 4402 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1755 "util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1798 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4318,11 +4414,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4322 "util/configparser.c" /* yacc.c:1646 */ +#line 4418 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1768 "util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1811 "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) { @@ -4334,11 +4430,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4338 "util/configparser.c" /* yacc.c:1646 */ +#line 4434 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1781 "util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1824 "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) { @@ -4350,11 +4446,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4354 "util/configparser.c" /* yacc.c:1646 */ +#line 4450 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1794 "util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1837 "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) @@ -4362,11 +4458,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4366 "util/configparser.c" /* yacc.c:1646 */ +#line 4462 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1803 "util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1846 "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) @@ -4374,11 +4470,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4378 "util/configparser.c" /* yacc.c:1646 */ +#line 4474 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1812 "util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1855 "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) @@ -4387,11 +4483,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4391 "util/configparser.c" /* yacc.c:1646 */ +#line 4487 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1822 "util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1865 "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) @@ -4400,11 +4496,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4404 "util/configparser.c" /* yacc.c:1646 */ +#line 4500 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1832 "util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1875 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -4416,11 +4512,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4420 "util/configparser.c" /* yacc.c:1646 */ +#line 4516 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1845 "util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1888 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -4432,11 +4528,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4436 "util/configparser.c" /* yacc.c:1646 */ +#line 4532 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1858 "util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1901 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -4446,11 +4542,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4450 "util/configparser.c" /* yacc.c:1646 */ +#line 4546 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1869 "util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1912 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -4462,11 +4558,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4466 "util/configparser.c" /* yacc.c:1646 */ +#line 4562 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1882 "util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1925 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -4476,11 +4572,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4480 "util/configparser.c" /* yacc.c:1646 */ +#line 4576 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1893 "util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1936 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -4492,11 +4588,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4496 "util/configparser.c" /* yacc.c:1646 */ +#line 4592 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1906 "util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1949 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -4505,31 +4601,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 4509 "util/configparser.c" /* yacc.c:1646 */ +#line 4605 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1916 "util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1959 "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 4519 "util/configparser.c" /* yacc.c:1646 */ +#line 4615 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1923 "util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1966 "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 4529 "util/configparser.c" /* yacc.c:1646 */ +#line 4625 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1930 "util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1973 "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) @@ -4537,11 +4633,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4541 "util/configparser.c" /* yacc.c:1646 */ +#line 4637 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1939 "util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1982 "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) @@ -4550,11 +4646,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4554 "util/configparser.c" /* yacc.c:1646 */ +#line 4650 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1949 "util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1992 "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) @@ -4563,11 +4659,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4567 "util/configparser.c" /* yacc.c:1646 */ +#line 4663 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1959 "util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 2002 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -4576,31 +4672,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 4580 "util/configparser.c" /* yacc.c:1646 */ +#line 4676 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1969 "util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 2012 "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 4590 "util/configparser.c" /* yacc.c:1646 */ +#line 4686 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1976 "util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 2019 "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 4600 "util/configparser.c" /* yacc.c:1646 */ +#line 4696 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1983 "util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 2026 "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) @@ -4608,11 +4704,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4612 "util/configparser.c" /* yacc.c:1646 */ +#line 4708 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1992 "util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 2035 "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) @@ -4621,11 +4717,93 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4625 "util/configparser.c" /* yacc.c:1646 */ +#line 4721 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 2002 "util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 2045 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(name:%s)\n", (yyvsp[0].str))); + if(cfg_parser->cfg->auths->name) + yyerror("auth name override, there must be one name " + "for one auth-zone"); + free(cfg_parser->cfg->auths->name); + cfg_parser->cfg->auths->name = (yyvsp[0].str); + } +#line 4734 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 388: +#line 2055 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); + free(cfg_parser->cfg->auths->zonefile); + cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); + } +#line 4744 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 389: +#line 2062 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(master:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) + yyerror("out of memory"); + } +#line 4754 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 390: +#line 2069 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(url:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) + yyerror("out of memory"); + } +#line 4764 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 391: +#line 2076 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(for-downstream:%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->auths->for_downstream = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 4777 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 392: +#line 2086 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(for-upstream:%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->auths->for_upstream = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 4790 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 393: +#line 2096 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(fallback-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->auths->fallback_enabled = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 4803 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 394: +#line 2106 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -4634,11 +4812,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 4638 "util/configparser.c" /* yacc.c:1646 */ +#line 4816 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 2012 "util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 2116 "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 && @@ -4648,12 +4826,13 @@ yyreduce: && strcmp((yyvsp[0].str), "always_transparent")!=0 && strcmp((yyvsp[0].str), "always_refuse")!=0 && strcmp((yyvsp[0].str), "always_nxdomain")!=0 + && strcmp((yyvsp[0].str), "noview")!=0 && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " - "always_nxdomain or nodefault"); + "always_nxdomain, noview or nodefault"); else if(strcmp((yyvsp[0].str), "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_zones_nodefault, (yyvsp[-1].str))) @@ -4666,11 +4845,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4670 "util/configparser.c" /* yacc.c:1646 */ +#line 4849 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 2041 "util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 2146 "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)); @@ -4679,22 +4858,22 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 4683 "util/configparser.c" /* yacc.c:1646 */ +#line 4862 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 2051 "util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 2156 "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 4694 "util/configparser.c" /* yacc.c:1646 */ +#line 4873 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 2059 "util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 2164 "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))) { @@ -4702,11 +4881,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4706 "util/configparser.c" /* yacc.c:1646 */ +#line 4885 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 2068 "util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 2173 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4720,11 +4899,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4724 "util/configparser.c" /* yacc.c:1646 */ +#line 4903 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 2083 "util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 2188 "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) @@ -4732,19 +4911,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4736 "util/configparser.c" /* yacc.c:1646 */ +#line 4915 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 2092 "util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 2197 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 4744 "util/configparser.c" /* yacc.c:1646 */ +#line 4923 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 2103 "util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 2208 "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) @@ -4753,11 +4932,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4757 "util/configparser.c" /* yacc.c:1646 */ +#line 4936 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 2113 "util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2218 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4765,21 +4944,21 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4769 "util/configparser.c" /* yacc.c:1646 */ +#line 4948 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 2122 "util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 2227 "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 4779 "util/configparser.c" /* yacc.c:1646 */ +#line 4958 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 2129 "util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 2234 "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) @@ -4788,122 +4967,122 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4792 "util/configparser.c" /* yacc.c:1646 */ +#line 4971 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 2139 "util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2244 "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 4802 "util/configparser.c" /* yacc.c:1646 */ +#line 4981 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 2146 "util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2251 "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 4812 "util/configparser.c" /* yacc.c:1646 */ +#line 4991 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 2153 "util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2258 "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 4822 "util/configparser.c" /* yacc.c:1646 */ +#line 5001 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 2160 "util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2265 "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 4832 "util/configparser.c" /* yacc.c:1646 */ +#line 5011 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 2167 "util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2272 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 4840 "util/configparser.c" /* yacc.c:1646 */ +#line 5019 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2184 "util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2289 "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 4851 "util/configparser.c" /* yacc.c:1646 */ +#line 5030 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2192 "util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2297 "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 4861 "util/configparser.c" /* yacc.c:1646 */ +#line 5040 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2199 "util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2304 "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 4872 "util/configparser.c" /* yacc.c:1646 */ +#line 5051 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2207 "util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2312 "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 4883 "util/configparser.c" /* yacc.c:1646 */ +#line 5062 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2215 "util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2320 "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 4893 "util/configparser.c" /* yacc.c:1646 */ +#line 5072 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2222 "util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2327 "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 4903 "util/configparser.c" /* yacc.c:1646 */ +#line 5082 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2229 "util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2334 "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) @@ -4911,11 +5090,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4915 "util/configparser.c" /* yacc.c:1646 */ +#line 5094 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2238 "util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2343 "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) @@ -4923,11 +5102,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4927 "util/configparser.c" /* yacc.c:1646 */ +#line 5106 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2247 "util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2352 "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) @@ -4935,11 +5114,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4939 "util/configparser.c" /* yacc.c:1646 */ +#line 5118 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2256 "util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2361 "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) @@ -4947,11 +5126,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4951 "util/configparser.c" /* yacc.c:1646 */ +#line 5130 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 2265 "util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2370 "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) @@ -4959,11 +5138,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4963 "util/configparser.c" /* yacc.c:1646 */ +#line 5142 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 2274 "util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2379 "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) @@ -4971,29 +5150,29 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4975 "util/configparser.c" /* yacc.c:1646 */ +#line 5154 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2283 "util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2388 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 4983 "util/configparser.c" /* yacc.c:1646 */ +#line 5162 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2292 "util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2397 "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 4993 "util/configparser.c" /* yacc.c:1646 */ +#line 5172 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2298 "util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2403 "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) @@ -5002,21 +5181,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5006 "util/configparser.c" /* yacc.c:1646 */ +#line 5185 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2308 "util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2413 "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 5016 "util/configparser.c" /* yacc.c:1646 */ +#line 5195 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2315 "util/configparser.y" /* yacc.c:1646 */ + case 454: +#line 2420 "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)); @@ -5024,31 +5203,31 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5028 "util/configparser.c" /* yacc.c:1646 */ +#line 5207 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2324 "util/configparser.y" /* yacc.c:1646 */ + case 455: +#line 2429 "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 5039 "util/configparser.c" /* yacc.c:1646 */ +#line 5218 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2332 "util/configparser.y" /* yacc.c:1646 */ + case 456: +#line 2437 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n")); } -#line 5048 "util/configparser.c" /* yacc.c:1646 */ +#line 5227 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2348 "util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2454 "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) @@ -5056,11 +5235,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5060 "util/configparser.c" /* yacc.c:1646 */ +#line 5239 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2358 "util/configparser.y" /* yacc.c:1646 */ + case 470: +#line 2464 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); @@ -5069,52 +5248,66 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5073 "util/configparser.c" /* yacc.c:1646 */ +#line 5252 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2368 "util/configparser.y" /* yacc.c:1646 */ + case 471: +#line 2474 "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 5083 "util/configparser.c" /* yacc.c:1646 */ +#line 5262 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2375 "util/configparser.y" /* yacc.c:1646 */ + case 472: +#line 2481 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) + log_warn("dnscrypt-provider-cert %s is a duplicate", (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 5093 "util/configparser.c" /* yacc.c:1646 */ +#line 5274 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 473: +#line 2490 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) + fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); + } +#line 5284 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2382 "util/configparser.y" /* yacc.c:1646 */ + case 474: +#line 2497 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) + log_warn("dnscrypt-secret-key: %s is a duplicate", (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 5103 "util/configparser.c" /* yacc.c:1646 */ +#line 5296 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2389 "util/configparser.y" /* yacc.c:1646 */ + case 475: +#line 2506 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5114 "util/configparser.c" /* yacc.c:1646 */ +#line 5307 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2397 "util/configparser.y" /* yacc.c:1646 */ + case 476: +#line 2514 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5126,22 +5319,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5130 "util/configparser.c" /* yacc.c:1646 */ +#line 5323 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2410 "util/configparser.y" /* yacc.c:1646 */ + case 477: +#line 2527 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5141 "util/configparser.c" /* yacc.c:1646 */ +#line 5334 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2418 "util/configparser.y" /* yacc.c:1646 */ + case 478: +#line 2535 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5153,19 +5346,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5157 "util/configparser.c" /* yacc.c:1646 */ +#line 5350 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2431 "util/configparser.y" /* yacc.c:1646 */ + case 479: +#line 2548 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5165 "util/configparser.c" /* yacc.c:1646 */ +#line 5358 "util/configparser.c" /* yacc.c:1646 */ break; - case 460: -#line 2440 "util/configparser.y" /* yacc.c:1646 */ + case 484: +#line 2557 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5178,11 +5371,11 @@ yyreduce: OUTYY(("P(Compiled without cachedb, ignoring)\n")); #endif } -#line 5182 "util/configparser.c" /* yacc.c:1646 */ +#line 5375 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2454 "util/configparser.y" /* yacc.c:1646 */ + case 485: +#line 2571 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5196,11 +5389,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5200 "util/configparser.c" /* yacc.c:1646 */ +#line 5393 "util/configparser.c" /* yacc.c:1646 */ break; -#line 5204 "util/configparser.c" /* yacc.c:1646 */ +#line 5397 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5428,7 +5621,7 @@ yyreturn: #endif return yyresult; } -#line 2468 "util/configparser.y" /* yacc.c:1906 */ +#line 2585 "util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index b2cf94c3865c..21e14670541f 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -177,95 +177,105 @@ extern int yydebug; VAR_FORWARD_FIRST = 387, VAR_STUB_SSL_UPSTREAM = 388, VAR_FORWARD_SSL_UPSTREAM = 389, - VAR_STUB_FIRST = 390, - VAR_MINIMAL_RESPONSES = 391, - VAR_RRSET_ROUNDROBIN = 392, - VAR_MAX_UDP_SIZE = 393, - VAR_DELAY_CLOSE = 394, - VAR_UNBLOCK_LAN_ZONES = 395, - VAR_INSECURE_LAN_ZONES = 396, - VAR_INFRA_CACHE_MIN_RTT = 397, - VAR_DNS64_PREFIX = 398, - VAR_DNS64_SYNTHALL = 399, - VAR_DNSTAP = 400, - VAR_DNSTAP_ENABLE = 401, - VAR_DNSTAP_SOCKET_PATH = 402, - VAR_DNSTAP_SEND_IDENTITY = 403, - VAR_DNSTAP_SEND_VERSION = 404, - VAR_DNSTAP_IDENTITY = 405, - VAR_DNSTAP_VERSION = 406, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 407, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 408, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 409, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 410, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 411, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 412, - VAR_RESPONSE_IP_TAG = 413, - VAR_RESPONSE_IP = 414, - VAR_RESPONSE_IP_DATA = 415, - VAR_HARDEN_ALGO_DOWNGRADE = 416, - VAR_IP_TRANSPARENT = 417, - VAR_DISABLE_DNSSEC_LAME_CHECK = 418, - VAR_IP_RATELIMIT = 419, - VAR_IP_RATELIMIT_SLABS = 420, - VAR_IP_RATELIMIT_SIZE = 421, - VAR_RATELIMIT = 422, - VAR_RATELIMIT_SLABS = 423, - VAR_RATELIMIT_SIZE = 424, - VAR_RATELIMIT_FOR_DOMAIN = 425, - VAR_RATELIMIT_BELOW_DOMAIN = 426, - VAR_IP_RATELIMIT_FACTOR = 427, - VAR_RATELIMIT_FACTOR = 428, - VAR_SEND_CLIENT_SUBNET = 429, - 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_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 467, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 468, - VAR_IPSECMOD_ENABLED = 469, - VAR_IPSECMOD_HOOK = 470, - VAR_IPSECMOD_IGNORE_BOGUS = 471, - VAR_IPSECMOD_MAX_TTL = 472, - VAR_IPSECMOD_WHITELIST = 473, - VAR_IPSECMOD_STRICT = 474, - VAR_CACHEDB = 475, - VAR_CACHEDB_BACKEND = 476, - VAR_CACHEDB_SECRETSEED = 477, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 478 + VAR_TLS_CERT_BUNDLE = 390, + VAR_STUB_FIRST = 391, + VAR_MINIMAL_RESPONSES = 392, + VAR_RRSET_ROUNDROBIN = 393, + VAR_MAX_UDP_SIZE = 394, + VAR_DELAY_CLOSE = 395, + VAR_UNBLOCK_LAN_ZONES = 396, + VAR_INSECURE_LAN_ZONES = 397, + VAR_INFRA_CACHE_MIN_RTT = 398, + VAR_DNS64_PREFIX = 399, + VAR_DNS64_SYNTHALL = 400, + VAR_DNSTAP = 401, + VAR_DNSTAP_ENABLE = 402, + VAR_DNSTAP_SOCKET_PATH = 403, + VAR_DNSTAP_SEND_IDENTITY = 404, + VAR_DNSTAP_SEND_VERSION = 405, + VAR_DNSTAP_IDENTITY = 406, + VAR_DNSTAP_VERSION = 407, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 408, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 409, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 410, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 411, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 412, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 413, + VAR_RESPONSE_IP_TAG = 414, + VAR_RESPONSE_IP = 415, + VAR_RESPONSE_IP_DATA = 416, + VAR_HARDEN_ALGO_DOWNGRADE = 417, + VAR_IP_TRANSPARENT = 418, + VAR_DISABLE_DNSSEC_LAME_CHECK = 419, + VAR_IP_RATELIMIT = 420, + VAR_IP_RATELIMIT_SLABS = 421, + VAR_IP_RATELIMIT_SIZE = 422, + VAR_RATELIMIT = 423, + VAR_RATELIMIT_SLABS = 424, + VAR_RATELIMIT_SIZE = 425, + VAR_RATELIMIT_FOR_DOMAIN = 426, + VAR_RATELIMIT_BELOW_DOMAIN = 427, + VAR_IP_RATELIMIT_FACTOR = 428, + VAR_RATELIMIT_FACTOR = 429, + VAR_SEND_CLIENT_SUBNET = 430, + VAR_CLIENT_SUBNET_ZONE = 431, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 432, + VAR_CLIENT_SUBNET_OPCODE = 433, + VAR_MAX_CLIENT_SUBNET_IPV4 = 434, + VAR_MAX_CLIENT_SUBNET_IPV6 = 435, + VAR_CAPS_WHITELIST = 436, + VAR_CACHE_MAX_NEGATIVE_TTL = 437, + VAR_PERMIT_SMALL_HOLDDOWN = 438, + VAR_QNAME_MINIMISATION = 439, + VAR_QNAME_MINIMISATION_STRICT = 440, + VAR_IP_FREEBIND = 441, + VAR_DEFINE_TAG = 442, + VAR_LOCAL_ZONE_TAG = 443, + VAR_ACCESS_CONTROL_TAG = 444, + VAR_LOCAL_ZONE_OVERRIDE = 445, + VAR_ACCESS_CONTROL_TAG_ACTION = 446, + VAR_ACCESS_CONTROL_TAG_DATA = 447, + VAR_VIEW = 448, + VAR_ACCESS_CONTROL_VIEW = 449, + VAR_VIEW_FIRST = 450, + VAR_SERVE_EXPIRED = 451, + VAR_FAKE_DSA = 452, + VAR_FAKE_SHA1 = 453, + VAR_LOG_IDENTITY = 454, + VAR_HIDE_TRUSTANCHOR = 455, + VAR_TRUST_ANCHOR_SIGNALING = 456, + VAR_AGGRESSIVE_NSEC = 457, + VAR_USE_SYSTEMD = 458, + VAR_SHM_ENABLE = 459, + VAR_SHM_KEY = 460, + VAR_DNSCRYPT = 461, + VAR_DNSCRYPT_ENABLE = 462, + VAR_DNSCRYPT_PORT = 463, + VAR_DNSCRYPT_PROVIDER = 464, + VAR_DNSCRYPT_SECRET_KEY = 465, + VAR_DNSCRYPT_PROVIDER_CERT = 466, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 467, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 468, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 469, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 470, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 471, + VAR_IPSECMOD_ENABLED = 472, + VAR_IPSECMOD_HOOK = 473, + VAR_IPSECMOD_IGNORE_BOGUS = 474, + VAR_IPSECMOD_MAX_TTL = 475, + VAR_IPSECMOD_WHITELIST = 476, + VAR_IPSECMOD_STRICT = 477, + VAR_CACHEDB = 478, + VAR_CACHEDB_BACKEND = 479, + VAR_CACHEDB_SECRETSEED = 480, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 481, + VAR_FOR_UPSTREAM = 482, + VAR_AUTH_ZONE = 483, + VAR_ZONEFILE = 484, + VAR_MASTER = 485, + VAR_URL = 486, + VAR_FOR_DOWNSTREAM = 487, + VAR_FALLBACK_ENABLED = 488 }; #endif /* Tokens. */ @@ -401,95 +411,105 @@ extern int yydebug; #define VAR_FORWARD_FIRST 387 #define VAR_STUB_SSL_UPSTREAM 388 #define VAR_FORWARD_SSL_UPSTREAM 389 -#define VAR_STUB_FIRST 390 -#define VAR_MINIMAL_RESPONSES 391 -#define VAR_RRSET_ROUNDROBIN 392 -#define VAR_MAX_UDP_SIZE 393 -#define VAR_DELAY_CLOSE 394 -#define VAR_UNBLOCK_LAN_ZONES 395 -#define VAR_INSECURE_LAN_ZONES 396 -#define VAR_INFRA_CACHE_MIN_RTT 397 -#define VAR_DNS64_PREFIX 398 -#define VAR_DNS64_SYNTHALL 399 -#define VAR_DNSTAP 400 -#define VAR_DNSTAP_ENABLE 401 -#define VAR_DNSTAP_SOCKET_PATH 402 -#define VAR_DNSTAP_SEND_IDENTITY 403 -#define VAR_DNSTAP_SEND_VERSION 404 -#define VAR_DNSTAP_IDENTITY 405 -#define VAR_DNSTAP_VERSION 406 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 407 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 408 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 409 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 410 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 411 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 412 -#define VAR_RESPONSE_IP_TAG 413 -#define VAR_RESPONSE_IP 414 -#define VAR_RESPONSE_IP_DATA 415 -#define VAR_HARDEN_ALGO_DOWNGRADE 416 -#define VAR_IP_TRANSPARENT 417 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 418 -#define VAR_IP_RATELIMIT 419 -#define VAR_IP_RATELIMIT_SLABS 420 -#define VAR_IP_RATELIMIT_SIZE 421 -#define VAR_RATELIMIT 422 -#define VAR_RATELIMIT_SLABS 423 -#define VAR_RATELIMIT_SIZE 424 -#define VAR_RATELIMIT_FOR_DOMAIN 425 -#define VAR_RATELIMIT_BELOW_DOMAIN 426 -#define VAR_IP_RATELIMIT_FACTOR 427 -#define VAR_RATELIMIT_FACTOR 428 -#define VAR_SEND_CLIENT_SUBNET 429 -#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_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 467 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 468 -#define VAR_IPSECMOD_ENABLED 469 -#define VAR_IPSECMOD_HOOK 470 -#define VAR_IPSECMOD_IGNORE_BOGUS 471 -#define VAR_IPSECMOD_MAX_TTL 472 -#define VAR_IPSECMOD_WHITELIST 473 -#define VAR_IPSECMOD_STRICT 474 -#define VAR_CACHEDB 475 -#define VAR_CACHEDB_BACKEND 476 -#define VAR_CACHEDB_SECRETSEED 477 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 478 +#define VAR_TLS_CERT_BUNDLE 390 +#define VAR_STUB_FIRST 391 +#define VAR_MINIMAL_RESPONSES 392 +#define VAR_RRSET_ROUNDROBIN 393 +#define VAR_MAX_UDP_SIZE 394 +#define VAR_DELAY_CLOSE 395 +#define VAR_UNBLOCK_LAN_ZONES 396 +#define VAR_INSECURE_LAN_ZONES 397 +#define VAR_INFRA_CACHE_MIN_RTT 398 +#define VAR_DNS64_PREFIX 399 +#define VAR_DNS64_SYNTHALL 400 +#define VAR_DNSTAP 401 +#define VAR_DNSTAP_ENABLE 402 +#define VAR_DNSTAP_SOCKET_PATH 403 +#define VAR_DNSTAP_SEND_IDENTITY 404 +#define VAR_DNSTAP_SEND_VERSION 405 +#define VAR_DNSTAP_IDENTITY 406 +#define VAR_DNSTAP_VERSION 407 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 408 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 409 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 410 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 411 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 412 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 413 +#define VAR_RESPONSE_IP_TAG 414 +#define VAR_RESPONSE_IP 415 +#define VAR_RESPONSE_IP_DATA 416 +#define VAR_HARDEN_ALGO_DOWNGRADE 417 +#define VAR_IP_TRANSPARENT 418 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 419 +#define VAR_IP_RATELIMIT 420 +#define VAR_IP_RATELIMIT_SLABS 421 +#define VAR_IP_RATELIMIT_SIZE 422 +#define VAR_RATELIMIT 423 +#define VAR_RATELIMIT_SLABS 424 +#define VAR_RATELIMIT_SIZE 425 +#define VAR_RATELIMIT_FOR_DOMAIN 426 +#define VAR_RATELIMIT_BELOW_DOMAIN 427 +#define VAR_IP_RATELIMIT_FACTOR 428 +#define VAR_RATELIMIT_FACTOR 429 +#define VAR_SEND_CLIENT_SUBNET 430 +#define VAR_CLIENT_SUBNET_ZONE 431 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 432 +#define VAR_CLIENT_SUBNET_OPCODE 433 +#define VAR_MAX_CLIENT_SUBNET_IPV4 434 +#define VAR_MAX_CLIENT_SUBNET_IPV6 435 +#define VAR_CAPS_WHITELIST 436 +#define VAR_CACHE_MAX_NEGATIVE_TTL 437 +#define VAR_PERMIT_SMALL_HOLDDOWN 438 +#define VAR_QNAME_MINIMISATION 439 +#define VAR_QNAME_MINIMISATION_STRICT 440 +#define VAR_IP_FREEBIND 441 +#define VAR_DEFINE_TAG 442 +#define VAR_LOCAL_ZONE_TAG 443 +#define VAR_ACCESS_CONTROL_TAG 444 +#define VAR_LOCAL_ZONE_OVERRIDE 445 +#define VAR_ACCESS_CONTROL_TAG_ACTION 446 +#define VAR_ACCESS_CONTROL_TAG_DATA 447 +#define VAR_VIEW 448 +#define VAR_ACCESS_CONTROL_VIEW 449 +#define VAR_VIEW_FIRST 450 +#define VAR_SERVE_EXPIRED 451 +#define VAR_FAKE_DSA 452 +#define VAR_FAKE_SHA1 453 +#define VAR_LOG_IDENTITY 454 +#define VAR_HIDE_TRUSTANCHOR 455 +#define VAR_TRUST_ANCHOR_SIGNALING 456 +#define VAR_AGGRESSIVE_NSEC 457 +#define VAR_USE_SYSTEMD 458 +#define VAR_SHM_ENABLE 459 +#define VAR_SHM_KEY 460 +#define VAR_DNSCRYPT 461 +#define VAR_DNSCRYPT_ENABLE 462 +#define VAR_DNSCRYPT_PORT 463 +#define VAR_DNSCRYPT_PROVIDER 464 +#define VAR_DNSCRYPT_SECRET_KEY 465 +#define VAR_DNSCRYPT_PROVIDER_CERT 466 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 467 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 468 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 469 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 470 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 471 +#define VAR_IPSECMOD_ENABLED 472 +#define VAR_IPSECMOD_HOOK 473 +#define VAR_IPSECMOD_IGNORE_BOGUS 474 +#define VAR_IPSECMOD_MAX_TTL 475 +#define VAR_IPSECMOD_WHITELIST 476 +#define VAR_IPSECMOD_STRICT 477 +#define VAR_CACHEDB 478 +#define VAR_CACHEDB_BACKEND 479 +#define VAR_CACHEDB_SECRETSEED 480 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 481 +#define VAR_FOR_UPSTREAM 482 +#define VAR_AUTH_ZONE 483 +#define VAR_ZONEFILE 484 +#define VAR_MASTER 485 +#define VAR_URL 486 +#define VAR_FOR_DOWNSTREAM 487 +#define VAR_FALLBACK_ENABLED 488 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -500,7 +520,7 @@ union YYSTYPE char* str; -#line 504 "util/configparser.h" /* yacc.c:1909 */ +#line 524 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 1f72c73b08d8..7e23fca16823 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -109,7 +109,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_LOG_REPLIES %token VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM %token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST -%token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM +%token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES @@ -141,9 +141,10 @@ extern struct config_parser_state* cfg_parser; %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 VAR_TRUST_ANCHOR_SIGNALING -%token VAR_USE_SYSTEMD VAR_SHM_ENABLE VAR_SHM_KEY +%token VAR_AGGRESSIVE_NSEC 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_DNSCRYPT_PROVIDER_CERT_ROTATED %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS %token VAR_DNSCRYPT_NONCE_CACHE_SIZE @@ -151,16 +152,17 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED -%token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM +%token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM +%token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM +%token VAR_FALLBACK_ENABLED %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | - rcstart contents_rc | dtstart contents_dt | viewstart - contents_view | - dnscstart contents_dnsc | - cachedbstart contents_cachedb + rcstart contents_rc | dtstart contents_dt | viewstart contents_view | + dnscstart contents_dnsc | cachedbstart contents_cachedb | + authstart contents_auth ; /* server: declaration */ @@ -241,7 +243,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_ipsecmod_enabled | server_ipsecmod_hook | server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | server_ipsecmod_whitelist | server_ipsecmod_strict | - server_udp_upstream_without_downstream + server_udp_upstream_without_downstream | server_aggressive_nsec | + server_tls_cert_bundle ; stubstart: VAR_STUB_ZONE { @@ -296,6 +299,27 @@ contents_view: contents_view content_view content_view: view_name | view_local_zone | view_local_data | view_first | view_response_ip | view_response_ip_data | view_local_data_ptr ; +authstart: VAR_AUTH_ZONE + { + struct config_auth* s; + OUTYY(("\nP(auth_zone:)\n")); + s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); + if(s) { + s->next = cfg_parser->cfg->auths; + cfg_parser->cfg->auths = s; + /* defaults for auth zone */ + s->for_downstream = 1; + s->for_upstream = 1; + s->fallback_enabled = 0; + } else + yyerror("out of memory"); + } + ; +contents_auth: contents_auth content_auth + | ; +content_auth: auth_name | auth_zonefile | auth_master | auth_url | + auth_for_downstream | auth_for_upstream | auth_fallback_enabled + ; server_num_threads: VAR_NUM_THREADS STRING_ARG { OUTYY(("P(server_num_threads:%s)\n", $2)); @@ -651,6 +675,13 @@ server_ssl_port: VAR_SSL_PORT STRING_ARG free($2); } ; +server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG + { + OUTYY(("P(server_tls_cert_bundle:%s)\n", $2)); + free(cfg_parser->cfg->tls_cert_bundle); + cfg_parser->cfg->tls_cert_bundle = $2; + } + ; server_use_systemd: VAR_USE_SYSTEMD STRING_ARG { OUTYY(("P(server_use_systemd:%s)\n", $2)); @@ -1367,6 +1398,17 @@ server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG free($2); } ; +server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG + { + OUTYY(("P(server_aggressive_nsec:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else + cfg_parser->cfg->aggressive_nsec = + (strcmp($2, "yes")==0); + free($2); + } + ; server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG { OUTYY(("P(server_ignore_cd_flag:%s)\n", $2)); @@ -1502,12 +1544,13 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG && strcmp($3, "always_transparent")!=0 && strcmp($3, "always_refuse")!=0 && strcmp($3, "always_nxdomain")!=0 + && strcmp($3, "noview")!=0 && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " - "always_nxdomain or nodefault"); + "always_nxdomain, noview or nodefault"); else if(strcmp($3, "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_nodefault, $2)) @@ -1998,6 +2041,67 @@ forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG free($2); } ; +auth_name: VAR_NAME STRING_ARG + { + OUTYY(("P(name:%s)\n", $2)); + if(cfg_parser->cfg->auths->name) + yyerror("auth name override, there must be one name " + "for one auth-zone"); + free(cfg_parser->cfg->auths->name); + cfg_parser->cfg->auths->name = $2; + } + ; +auth_zonefile: VAR_ZONEFILE STRING_ARG + { + OUTYY(("P(zonefile:%s)\n", $2)); + free(cfg_parser->cfg->auths->zonefile); + cfg_parser->cfg->auths->zonefile = $2; + } + ; +auth_master: VAR_MASTER STRING_ARG + { + OUTYY(("P(master:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, $2)) + yyerror("out of memory"); + } + ; +auth_url: VAR_URL STRING_ARG + { + OUTYY(("P(url:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, $2)) + yyerror("out of memory"); + } + ; +auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG + { + OUTYY(("P(for-downstream:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->for_downstream = + (strcmp($2, "yes")==0); + free($2); + } + ; +auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG + { + OUTYY(("P(for-upstream:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->for_upstream = + (strcmp($2, "yes")==0); + free($2); + } + ; +auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG + { + OUTYY(("P(fallback-enabled:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->fallback_enabled = + (strcmp($2, "yes")==0); + free($2); + } + ; view_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); @@ -2018,12 +2122,13 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG && strcmp($3, "always_transparent")!=0 && strcmp($3, "always_refuse")!=0 && strcmp($3, "always_nxdomain")!=0 + && strcmp($3, "noview")!=0 && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " - "always_nxdomain or nodefault"); + "always_nxdomain, noview or nodefault"); else if(strcmp($3, "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_zones_nodefault, $2)) @@ -2339,6 +2444,7 @@ contents_dnsc: contents_dnsc content_dnsc content_dnsc: dnsc_dnscrypt_enable | dnsc_dnscrypt_port | dnsc_dnscrypt_provider | dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert | + dnsc_dnscrypt_provider_cert_rotated | dnsc_dnscrypt_shared_secret_cache_size | dnsc_dnscrypt_shared_secret_cache_slabs | dnsc_dnscrypt_nonce_cache_size | @@ -2374,13 +2480,24 @@ dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", $2)); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, $2)) + log_warn("dnscrypt-provider-cert %s is a duplicate", $2); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, $2)) fatal_exit("out of memory adding dnscrypt-provider-cert"); } ; +dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG + { + OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, $2)) + fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); + } + ; dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", $2)); + if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, $2)) + log_warn("dnscrypt-secret-key: %s is a duplicate", $2); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, $2)) fatal_exit("out of memory adding dnscrypt-secret-key"); } diff --git a/util/data/msgreply.c b/util/data/msgreply.c index ae2fe02b6d7c..e25b42cc257a 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -631,9 +631,14 @@ query_info_entrysetup(struct query_info* q, struct reply_info* r, e->entry.key = e; e->entry.data = r; lock_rw_init(&e->entry.lock); - lock_protect(&e->entry.lock, &e->key, sizeof(e->key)); - lock_protect(&e->entry.lock, &e->entry.hash, sizeof(e->entry.hash) + - sizeof(e->entry.key) + sizeof(e->entry.data)); + lock_protect(&e->entry.lock, &e->key.qname, sizeof(e->key.qname)); + lock_protect(&e->entry.lock, &e->key.qname_len, sizeof(e->key.qname_len)); + lock_protect(&e->entry.lock, &e->key.qtype, sizeof(e->key.qtype)); + lock_protect(&e->entry.lock, &e->key.qclass, sizeof(e->key.qclass)); + lock_protect(&e->entry.lock, &e->key.local_alias, sizeof(e->key.local_alias)); + lock_protect(&e->entry.lock, &e->entry.hash, sizeof(e->entry.hash)); + lock_protect(&e->entry.lock, &e->entry.key, sizeof(e->entry.key)); + lock_protect(&e->entry.lock, &e->entry.data, sizeof(e->entry.data)); lock_protect(&e->entry.lock, e->key.qname, e->key.qname_len); q->qname = NULL; return e; @@ -896,6 +901,25 @@ reply_all_rrsets_secure(struct reply_info* rep) return 1; } +struct reply_info* +parse_reply_in_temp_region(sldns_buffer* pkt, struct regional* region, + struct query_info* qi) +{ + struct reply_info* rep; + struct msg_parse* msg; + if(!(msg = regional_alloc(region, sizeof(*msg)))) { + return NULL; + } + memset(msg, 0, sizeof(*msg)); + sldns_buffer_set_position(pkt, 0); + if(parse_packet(pkt, msg, region) != 0) + return 0; + if(!parse_create_msg(pkt, msg, NULL, qi, &rep, region)) { + return 0; + } + return rep; +} + int edns_opt_append(struct edns_data* edns, struct regional* region, uint16_t code, size_t len, uint8_t* data) { diff --git a/util/data/msgreply.h b/util/data/msgreply.h index b66f344e1521..60e6438a84ab 100644 --- a/util/data/msgreply.h +++ b/util/data/msgreply.h @@ -285,6 +285,10 @@ int parse_create_msg(struct sldns_buffer* pkt, struct msg_parse* msg, struct alloc_cache* alloc, struct query_info* qinf, struct reply_info** rep, struct regional* region); +/** get msg reply struct (in temp region) */ +struct reply_info* parse_reply_in_temp_region(struct sldns_buffer* pkt, + struct regional* region, struct query_info* qi); + /** * Sorts the ref array. * @param rep: reply info. rrsets must be filled in. diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index d3c1a0c06b24..400a15de2ebb 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -98,6 +98,9 @@ fptr_whitelist_comm_point(comm_point_callback_type *fptr) else if(fptr == &outnet_udp_cb) return 1; else if(fptr == &outnet_tcp_cb) return 1; else if(fptr == &tube_handle_listen) return 1; + else if(fptr == &auth_xfer_probe_udp_callback) return 1; + else if(fptr == &auth_xfer_transfer_tcp_callback) return 1; + else if(fptr == &auth_xfer_transfer_http_callback) return 1; return 0; } @@ -122,6 +125,8 @@ fptr_whitelist_comm_timer(void (*fptr)(void*)) #ifdef UB_ON_WINDOWS else if(fptr == &wsvc_cron_cb) return 1; #endif + else if(fptr == &auth_xfer_timer) return 1; + else if(fptr == &auth_xfer_probe_timer_callback) return 1; return 0; } @@ -157,6 +162,7 @@ fptr_whitelist_event(void (*fptr)(int, short, void *)) else if(fptr == &comm_point_raw_handle_callback) return 1; else if(fptr == &tube_handle_signal) return 1; else if(fptr == &comm_base_handle_slow_accept) return 1; + else if(fptr == &comm_point_http_handle_callback) return 1; #ifdef UB_ON_WINDOWS else if(fptr == &worker_win_stop_cb) return 1; #endif @@ -215,6 +221,7 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) else if(fptr == &view_cmp) return 1; else if(fptr == &auth_zone_cmp) return 1; else if(fptr == &auth_data_cmp) return 1; + else if(fptr == &auth_xfer_cmp) return 1; return 0; } @@ -509,6 +516,8 @@ int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr) else if(fptr == &libworker_bg_done_cb) return 1; else if(fptr == &libworker_event_done_cb) return 1; else if(fptr == &probe_answer_cb) return 1; + else if(fptr == &auth_xfer_probe_lookup_callback) return 1; + else if(fptr == &auth_xfer_transfer_lookup_callback) return 1; return 0; } diff --git a/util/iana_ports.inc b/util/iana_ports.inc index 58c69fd1c1a7..e44a796dc4ad 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -4584,6 +4584,7 @@ 7040, 7070, 7071, +7072, 7080, 7088, 7095, @@ -4634,6 +4635,7 @@ 7402, 7410, 7411, +7420, 7421, 7426, 7427, @@ -4670,6 +4672,7 @@ 7629, 7633, 7648, +7663, 7674, 7675, 7676, @@ -4896,6 +4899,7 @@ 9026, 9060, 9080, +9081, 9084, 9085, 9086, @@ -5390,6 +5394,7 @@ 33331, 33334, 33434, +33435, 33656, 34249, 34378, @@ -5431,6 +5436,7 @@ 43189, 43190, 43210, +43438, 43439, 43440, 43441, diff --git a/util/log.c b/util/log.c index c14b45834add..75a58f9de3db 100644 --- a/util/log.c +++ b/util/log.c @@ -191,6 +191,17 @@ void log_set_time_asc(int use_asc) log_time_asc = use_asc; } +void* log_get_lock(void) +{ + if(!key_created) + return NULL; +#ifndef THREADS_DISABLED + return (void*)&log_lock; +#else + return NULL; +#endif +} + void log_vmsg(int pri, const char* type, const char *format, va_list args) diff --git a/util/log.h b/util/log.h index 8e85ee620b18..7bc3d9e76152 100644 --- a/util/log.h +++ b/util/log.h @@ -127,6 +127,9 @@ void log_set_time(time_t* t); */ void log_set_time_asc(int use_asc); +/** get log lock */ +void* log_get_lock(void); + /** * Log informational message. * Pass printf formatted arguments. No trailing newline is needed. @@ -186,11 +189,17 @@ void log_vmsg(int pri, const char* type, const char* format, va_list args); * an assertion that is thrown to the logfile. */ #ifdef UNBOUND_DEBUG +#ifdef __clang_analyzer__ +/* clang analyzer needs to know that log_assert is an assertion, otherwise + * it could complain about the nullptr the assert is guarding against. */ +#define log_assert(x) assert(x) +#else # define log_assert(x) \ do { if(!(x)) \ fatal_exit("%s:%d: %s: assertion %s failed", \ __FILE__, __LINE__, __func__, #x); \ } while(0); +#endif #else # define log_assert(x) /*nothing*/ #endif diff --git a/util/module.h b/util/module.h index 415865c3d8b6..73db994bd7a3 100644 --- a/util/module.h +++ b/util/module.h @@ -166,6 +166,9 @@ struct query_info; struct edns_data; struct regional; struct worker; +struct comm_base; +struct auth_zones; +struct outside_network; struct module_qstate; struct ub_randstate; struct mesh_area; @@ -445,6 +448,10 @@ struct module_env { struct sldns_buffer* scratch_buffer; /** internal data for daemon - worker thread. */ struct worker* worker; + /** the worker event base */ + struct comm_base* worker_base; + /** the outside network */ + struct outside_network* outnet; /** mesh area with query state dependencies */ struct mesh_area* mesh; /** allocation service */ @@ -468,6 +475,8 @@ struct module_env { struct val_neg_cache* neg_cache; /** the 5011-probe timer (if any) */ struct comm_timer* probe_timer; + /** auth zones */ + struct auth_zones* auth_zones; /** Mapping of forwarding zones to targets. * iterator forwarder information. per-thread, created by worker */ struct iter_forwards* fwds; diff --git a/util/net_help.c b/util/net_help.c index ce136a337cff..fdc8b0558af0 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -271,6 +271,19 @@ int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr, return 1; } +/** store port number into sockaddr structure */ +void +sockaddr_store_port(struct sockaddr_storage* addr, socklen_t addrlen, int port) +{ + if(addr_is_ip6(addr, addrlen)) { + struct sockaddr_in6* sa = (struct sockaddr_in6*)addr; + sa->sin6_port = (in_port_t)htons((uint16_t)port); + } else { + struct sockaddr_in* sa = (struct sockaddr_in*)addr; + sa->sin_port = (in_port_t)htons((uint16_t)port); + } +} + void log_nametypeclass(enum verbosity_value v, const char* str, uint8_t* name, uint16_t type, uint16_t dclass) @@ -645,7 +658,7 @@ listen_sslctx_setup(void* ctxt) #endif #if defined(SHA256_DIGEST_LENGTH) && defined(USE_ECDSA) /* if we have sha256, set the cipher list to have no known vulns */ - if(!SSL_CTX_set_cipher_list(ctx, "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256")) + if(!SSL_CTX_set_cipher_list(ctx, "TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256")) log_crypto_err("could not set cipher list with SSL_CTX_set_cipher_list"); #endif diff --git a/util/net_help.h b/util/net_help.h index f0236e5335df..2d6fce91db6e 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -202,6 +202,15 @@ int netblockstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, socklen_t* addrlen, int* net); /** + * Store port number into sockaddr structure + * @param addr: sockaddr structure, ip4 or ip6. + * @param addrlen: length of addr. + * @param port: port number to put into the addr. + */ +void sockaddr_store_port(struct sockaddr_storage* addr, socklen_t addrlen, + int port); + +/** * Print string with neat domain name, type and class. * @param v: at what verbosity level to print this. * @param str: string of message. diff --git a/util/netevent.c b/util/netevent.c index 5965a2d9aba6..fc6f6a9ea8b5 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -299,6 +299,12 @@ udp_send_errno_needs_log(struct sockaddr* addr, socklen_t addrlen) # endif ) && verbosity < VERB_DETAIL) return 0; +# ifdef EADDRINUSE + /* If SO_REUSEADDR is set, we could try to connect to the same server + * from the same source port twice. */ + if(errno == EADDRINUSE && verbosity < VERB_DETAIL) + return 0; +# endif /* squelch errors where people deploy AAAA ::ffff:bla for * authority servers, which we try for intranets. */ if(errno == EINVAL && addr_is_ip4mapped( @@ -648,7 +654,7 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) (void)comm_point_send_udp_msg_if(rep.c, rep.c->buffer, (struct sockaddr*)&rep.addr, rep.addrlen, &rep); } - if(rep.c->fd == -1) /* commpoint closed */ + if(!rep.c || rep.c->fd == -1) /* commpoint closed */ break; } #else @@ -711,7 +717,7 @@ comm_point_udp_callback(int fd, short event, void* arg) (void)comm_point_send_udp_msg(rep.c, buffer, (struct sockaddr*)&rep.addr, rep.addrlen); } - if(rep.c->fd != fd) /* commpoint closed to -1 or reused for + if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for another UDP port. Note rep.c cannot be reused with TCP fd. */ break; } @@ -964,6 +970,32 @@ tcp_callback_reader(struct comm_point* c) } } +#ifdef HAVE_SSL +/** log certificate details */ +static void +log_cert(unsigned level, const char* str, X509* cert) +{ + BIO* bio; + char nul = 0; + char* pp = NULL; + long len; + if(verbosity < level) return; + bio = BIO_new(BIO_s_mem()); + if(!bio) return; + X509_print_ex(bio, cert, 0, (unsigned long)-1 + ^(X509_FLAG_NO_SUBJECT + |X509_FLAG_NO_ISSUER|X509_FLAG_NO_VALIDITY + |X509_FLAG_NO_EXTENSIONS|X509_FLAG_NO_AUX + |X509_FLAG_NO_ATTRIBUTES)); + BIO_write(bio, &nul, (int)sizeof(nul)); + len = BIO_get_mem_data(bio, &pp); + if(len != 0 && pp) { + verbose(level, "%s: \n%s", str, pp); + } + BIO_free(bio); +} +#endif /* HAVE_SSL */ + /** continue ssl handshake */ #ifdef HAVE_SSL static int @@ -1015,8 +1047,51 @@ ssl_handshake(struct comm_point* c) } } /* this is where peer verification could take place */ - log_addr(VERB_ALGO, "SSL DNS connection", &c->repinfo.addr, - c->repinfo.addrlen); + if((SSL_get_verify_mode(c->ssl)&SSL_VERIFY_PEER)) { + /* verification */ + if(SSL_get_verify_result(c->ssl) == X509_V_OK) { + X509* x = SSL_get_peer_certificate(c->ssl); + if(!x) { + log_addr(VERB_ALGO, "SSL connection failed: " + "no certificate", + &c->repinfo.addr, c->repinfo.addrlen); + return 0; + } + log_cert(VERB_ALGO, "peer certificate", x); +#ifdef HAVE_SSL_GET0_PEERNAME + if(SSL_get0_peername(c->ssl)) { + char buf[255]; + snprintf(buf, sizeof(buf), "SSL connection " + "to %s authenticated", + SSL_get0_peername(c->ssl)); + log_addr(VERB_ALGO, buf, &c->repinfo.addr, + c->repinfo.addrlen); + } else { +#endif + log_addr(VERB_ALGO, "SSL connection " + "authenticated", &c->repinfo.addr, + c->repinfo.addrlen); +#ifdef HAVE_SSL_GET0_PEERNAME + } +#endif + X509_free(x); + } else { + X509* x = SSL_get_peer_certificate(c->ssl); + if(x) { + log_cert(VERB_ALGO, "peer certificate", x); + X509_free(x); + } + log_addr(VERB_ALGO, "SSL connection failed: " + "failed to authenticate", + &c->repinfo.addr, c->repinfo.addrlen); + return 0; + } + } else { + /* unauthenticated, the verify peer flag was not set + * in c->ssl when the ssl object was created from ssl_ctx */ + log_addr(VERB_ALGO, "SSL connection", &c->repinfo.addr, + c->repinfo.addrlen); + } /* setup listen rw correctly */ if(c->tcp_is_reading) { @@ -1600,6 +1675,644 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) log_err("Ignored event %d for tcphdl.", event); } +/** Make http handler free for next assignment */ +static void +reclaim_http_handler(struct comm_point* c) +{ + log_assert(c->type == comm_http); + if(c->ssl) { +#ifdef HAVE_SSL + SSL_shutdown(c->ssl); + SSL_free(c->ssl); + c->ssl = NULL; +#endif + } + comm_point_close(c); + if(c->tcp_parent) { + c->tcp_parent->cur_tcp_count--; + c->tcp_free = c->tcp_parent->tcp_free; + c->tcp_parent->tcp_free = c; + if(!c->tcp_free) { + /* re-enable listening on accept socket */ + comm_point_start_listening(c->tcp_parent, -1, -1); + } + } +} + +/** read more data for http (with ssl) */ +static int +ssl_http_read_more(struct comm_point* c) +{ +#ifdef HAVE_SSL + int r; + log_assert(sldns_buffer_remaining(c->buffer) > 0); + ERR_clear_error(); + r = SSL_read(c->ssl, (void*)sldns_buffer_current(c->buffer), + (int)sldns_buffer_remaining(c->buffer)); + if(r <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return 0; /* shutdown, closed */ + } else if(want == SSL_ERROR_WANT_READ) { + return 1; /* read more later */ + } else if(want == SSL_ERROR_WANT_WRITE) { + c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(c, 0, 1); + return 1; + } else if(want == SSL_ERROR_SYSCALL) { + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_read"); + return 0; + } + sldns_buffer_skip(c->buffer, (ssize_t)r); + return 1; +#else + (void)c; + return 0; +#endif /* HAVE_SSL */ +} + +/** read more data for http */ +static int +http_read_more(int fd, struct comm_point* c) +{ + ssize_t r; + log_assert(sldns_buffer_remaining(c->buffer) > 0); + r = recv(fd, (void*)sldns_buffer_current(c->buffer), + sldns_buffer_remaining(c->buffer), 0); + if(r == 0) { + return 0; + } else if(r == -1) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + return 1; + log_err_addr("read (in http r)", strerror(errno), + &c->repinfo.addr, c->repinfo.addrlen); +#else /* USE_WINSOCK */ + if(WSAGetLastError() == WSAECONNRESET) + return 0; + if(WSAGetLastError() == WSAEINPROGRESS) + return 1; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); + return 1; + } + log_err_addr("read (in http r)", + wsa_strerror(WSAGetLastError()), + &c->repinfo.addr, c->repinfo.addrlen); +#endif + return 0; + } + sldns_buffer_skip(c->buffer, r); + return 1; +} + +/** return true if http header has been read (one line complete) */ +static int +http_header_done(sldns_buffer* buf) +{ + size_t i; + for(i=sldns_buffer_position(buf); i<sldns_buffer_limit(buf); i++) { + /* there was a \r before the \n, but we ignore that */ + if((char)sldns_buffer_read_u8_at(buf, i) == '\n') + return 1; + } + return 0; +} + +/** return character string into buffer for header line, moves buffer + * past that line and puts zero terminator into linefeed-newline */ +static char* +http_header_line(sldns_buffer* buf) +{ + char* result = (char*)sldns_buffer_current(buf); + size_t i; + for(i=sldns_buffer_position(buf); i<sldns_buffer_limit(buf); i++) { + /* terminate the string on the \r */ + if((char)sldns_buffer_read_u8_at(buf, i) == '\r') + sldns_buffer_write_u8_at(buf, i, 0); + /* terminate on the \n and skip past the it and done */ + if((char)sldns_buffer_read_u8_at(buf, i) == '\n') { + sldns_buffer_write_u8_at(buf, i, 0); + sldns_buffer_set_position(buf, i+1); + return result; + } + } + return NULL; +} + +/** move unread buffer to start and clear rest for putting the rest into it */ +static void +http_moveover_buffer(sldns_buffer* buf) +{ + size_t pos = sldns_buffer_position(buf); + size_t len = sldns_buffer_remaining(buf); + sldns_buffer_clear(buf); + memmove(sldns_buffer_begin(buf), sldns_buffer_at(buf, pos), len); + sldns_buffer_set_position(buf, len); +} + +/** a http header is complete, process it */ +static int +http_process_initial_header(struct comm_point* c) +{ + char* line = http_header_line(c->buffer); + if(!line) return 1; + verbose(VERB_ALGO, "http header: %s", line); + if(strncasecmp(line, "HTTP/1.1 ", 9) == 0) { + /* check returncode */ + if(line[9] != '2') { + verbose(VERB_ALGO, "http bad status %s", line+9); + return 0; + } + } else if(strncasecmp(line, "Content-Length: ", 16) == 0) { + if(!c->http_is_chunked) + c->tcp_byte_count = (size_t)atoi(line+16); + } else if(strncasecmp(line, "Transfer-Encoding: chunked", 19+7) == 0) { + c->tcp_byte_count = 0; + c->http_is_chunked = 1; + } else if(line[0] == 0) { + /* end of initial headers */ + c->http_in_headers = 0; + if(c->http_is_chunked) + c->http_in_chunk_headers = 1; + /* remove header text from front of buffer + * the buffer is going to be used to return the data segment + * itself and we don't want the header to get returned + * prepended with it */ + http_moveover_buffer(c->buffer); + sldns_buffer_flip(c->buffer); + return 1; + } + /* ignore other headers */ + return 1; +} + +/** a chunk header is complete, process it, return 0=fail, 1=continue next + * header line, 2=done with chunked transfer*/ +static int +http_process_chunk_header(struct comm_point* c) +{ + char* line = http_header_line(c->buffer); + if(!line) return 1; + if(c->http_in_chunk_headers == 3) { + verbose(VERB_ALGO, "http chunk trailer: %s", line); + /* are we done ? */ + if(line[0] == 0 && c->tcp_byte_count == 0) { + /* callback of http reader when NETEVENT_DONE, + * end of data, with no data in buffer */ + sldns_buffer_set_position(c->buffer, 0); + sldns_buffer_set_limit(c->buffer, 0); + fptr_ok(fptr_whitelist_comm_point(c->callback)); + (void)(*c->callback)(c, c->cb_arg, NETEVENT_DONE, NULL); + /* return that we are done */ + return 2; + } + if(line[0] == 0) { + /* continue with header of the next chunk */ + c->http_in_chunk_headers = 1; + /* remove header text from front of buffer */ + http_moveover_buffer(c->buffer); + sldns_buffer_flip(c->buffer); + return 1; + } + /* ignore further trail headers */ + return 1; + } + verbose(VERB_ALGO, "http chunk header: %s", line); + if(c->http_in_chunk_headers == 1) { + /* read chunked start line */ + char* end = NULL; + c->tcp_byte_count = (size_t)strtol(line, &end, 16); + if(end == line) + return 0; + c->http_in_chunk_headers = 0; + /* remove header text from front of buffer */ + http_moveover_buffer(c->buffer); + sldns_buffer_flip(c->buffer); + if(c->tcp_byte_count == 0) { + /* done with chunks, process chunk_trailer lines */ + c->http_in_chunk_headers = 3; + } + return 1; + } + /* ignore other headers */ + return 1; +} + +/** handle nonchunked data segment */ +static int +http_nonchunk_segment(struct comm_point* c) +{ + /* c->buffer at position..limit has new data we read in. + * the buffer itself is full of nonchunked data. + * we are looking to read tcp_byte_count more data + * and then the transfer is done. */ + size_t remainbufferlen; + size_t got_now = sldns_buffer_limit(c->buffer) - c->http_stored; + if(c->tcp_byte_count <= got_now) { + /* done, this is the last data fragment */ + c->http_stored = 0; + sldns_buffer_set_position(c->buffer, 0); + fptr_ok(fptr_whitelist_comm_point(c->callback)); + (void)(*c->callback)(c, c->cb_arg, NETEVENT_DONE, NULL); + return 1; + } + c->tcp_byte_count -= got_now; + /* if we have the buffer space, + * read more data collected into the buffer */ + remainbufferlen = sldns_buffer_capacity(c->buffer) - + sldns_buffer_limit(c->buffer); + if(remainbufferlen >= c->tcp_byte_count || + remainbufferlen >= 2048) { + size_t total = sldns_buffer_limit(c->buffer); + sldns_buffer_clear(c->buffer); + sldns_buffer_set_position(c->buffer, total); + c->http_stored = total; + /* return and wait to read more */ + return 1; + } + /* call callback with this data amount, then + * wait for more */ + c->http_stored = 0; + sldns_buffer_set_position(c->buffer, 0); + fptr_ok(fptr_whitelist_comm_point(c->callback)); + (void)(*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, NULL); + /* c->callback has to buffer_clear(c->buffer). */ + /* return and wait to read more */ + return 1; +} + +/** handle nonchunked data segment, return 0=fail, 1=wait, 2=process more */ +static int +http_chunked_segment(struct comm_point* c) +{ + /* the c->buffer has from position..limit new data we read. */ + /* the current chunk has length tcp_byte_count. + * once we read that read more chunk headers. + */ + size_t remainbufferlen; + size_t got_now = sldns_buffer_limit(c->buffer) - c->http_stored; + if(c->tcp_byte_count <= got_now) { + /* the chunk has completed (with perhaps some extra data + * from next chunk header and next chunk) */ + /* save too much info into temp buffer */ + size_t fraglen; + struct comm_reply repinfo; + c->http_stored = 0; + sldns_buffer_skip(c->buffer, (ssize_t)c->tcp_byte_count); + sldns_buffer_clear(c->http_temp); + sldns_buffer_write(c->http_temp, + sldns_buffer_current(c->buffer), + sldns_buffer_remaining(c->buffer)); + sldns_buffer_flip(c->http_temp); + + /* callback with this fragment */ + fraglen = sldns_buffer_position(c->buffer); + sldns_buffer_set_position(c->buffer, 0); + sldns_buffer_set_limit(c->buffer, fraglen); + repinfo = c->repinfo; + fptr_ok(fptr_whitelist_comm_point(c->callback)); + (void)(*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &repinfo); + /* c->callback has to buffer_clear(). */ + + /* is commpoint deleted? */ + if(!repinfo.c) { + return 1; + } + /* copy waiting info */ + sldns_buffer_clear(c->buffer); + sldns_buffer_write(c->buffer, + sldns_buffer_begin(c->http_temp), + sldns_buffer_remaining(c->http_temp)); + sldns_buffer_flip(c->buffer); + /* process end of chunk trailer header lines, until + * an empty line */ + c->http_in_chunk_headers = 3; + /* process more data in buffer (if any) */ + return 2; + } + c->tcp_byte_count -= got_now; + + /* if we have the buffer space, + * read more data collected into the buffer */ + remainbufferlen = sldns_buffer_capacity(c->buffer) - + sldns_buffer_limit(c->buffer); + if(remainbufferlen >= c->tcp_byte_count || + remainbufferlen >= 2048) { + size_t total = sldns_buffer_limit(c->buffer); + sldns_buffer_clear(c->buffer); + sldns_buffer_set_position(c->buffer, total); + c->http_stored = total; + /* return and wait to read more */ + return 1; + } + + /* callback of http reader for a new part of the data */ + c->http_stored = 0; + sldns_buffer_set_position(c->buffer, 0); + fptr_ok(fptr_whitelist_comm_point(c->callback)); + (void)(*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, NULL); + /* c->callback has to buffer_clear(c->buffer). */ + /* return and wait to read more */ + return 1; +} + +/** + * Handle http reading callback. + * @param fd: file descriptor of socket. + * @param c: comm point to read from into buffer. + * @return: 0 on error + */ +static int +comm_point_http_handle_read(int fd, struct comm_point* c) +{ + log_assert(c->type == comm_http); + log_assert(fd != -1); + + /* if we are in ssl handshake, handle SSL handshake */ +#ifdef HAVE_SSL + if(c->ssl && c->ssl_shake_state != comm_ssl_shake_none) { + if(!ssl_handshake(c)) + return 0; + if(c->ssl_shake_state != comm_ssl_shake_none) + return 1; + } +#endif /* HAVE_SSL */ + + if(!c->tcp_is_reading) + return 1; + /* read more data */ + if(c->ssl) { + if(!ssl_http_read_more(c)) + return 0; + } else { + if(!http_read_more(fd, c)) + return 0; + } + + sldns_buffer_flip(c->buffer); + while(sldns_buffer_remaining(c->buffer) > 0) { + /* if we are reading headers, read more headers */ + if(c->http_in_headers || c->http_in_chunk_headers) { + /* if header is done, process the header */ + if(!http_header_done(c->buffer)) { + /* copy remaining data to front of buffer + * and set rest for writing into it */ + http_moveover_buffer(c->buffer); + /* return and wait to read more */ + return 1; + } + if(!c->http_in_chunk_headers) { + /* process initial headers */ + if(!http_process_initial_header(c)) + return 0; + } else { + /* process chunk headers */ + int r = http_process_chunk_header(c); + if(r == 0) return 0; + if(r == 2) return 1; /* done */ + /* r == 1, continue */ + } + /* see if we have more to process */ + continue; + } + + if(!c->http_is_chunked) { + /* if we are reading nonchunks, process that*/ + return http_nonchunk_segment(c); + } else { + /* if we are reading chunks, read the chunk */ + int r = http_chunked_segment(c); + if(r == 0) return 0; + if(r == 1) return 1; + continue; + } + } + /* broke out of the loop; could not process header instead need + * to read more */ + /* moveover any remaining data and read more data */ + http_moveover_buffer(c->buffer); + /* return and wait to read more */ + return 1; +} + +/** check pending connect for http */ +static int +http_check_connect(int fd, struct comm_point* c) +{ + /* check for pending error from nonblocking connect */ + /* from Stevens, unix network programming, vol1, 3rd ed, p450*/ + int error = 0; + socklen_t len = (socklen_t)sizeof(error); + if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error, + &len) < 0){ +#ifndef USE_WINSOCK + error = errno; /* on solaris errno is error */ +#else /* USE_WINSOCK */ + error = WSAGetLastError(); +#endif + } +#ifndef USE_WINSOCK +#if defined(EINPROGRESS) && defined(EWOULDBLOCK) + if(error == EINPROGRESS || error == EWOULDBLOCK) + return 1; /* try again later */ + else +#endif + if(error != 0 && verbosity < 2) + return 0; /* silence lots of chatter in the logs */ + else if(error != 0) { + log_err_addr("http connect", strerror(error), + &c->repinfo.addr, c->repinfo.addrlen); +#else /* USE_WINSOCK */ + /* examine error */ + if(error == WSAEINPROGRESS) + return 1; + else if(error == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); + return 1; + } else if(error != 0 && verbosity < 2) + return 0; + else if(error != 0) { + log_err_addr("http connect", wsa_strerror(error), + &c->repinfo.addr, c->repinfo.addrlen); +#endif /* USE_WINSOCK */ + return 0; + } + /* keep on processing this socket */ + return 2; +} + +/** write more data for http (with ssl) */ +static int +ssl_http_write_more(struct comm_point* c) +{ +#ifdef HAVE_SSL + int r; + log_assert(sldns_buffer_remaining(c->buffer) > 0); + ERR_clear_error(); + r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer), + (int)sldns_buffer_remaining(c->buffer)); + if(r <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return 0; /* closed */ + } else if(want == SSL_ERROR_WANT_READ) { + c->ssl_shake_state = comm_ssl_shake_read; + comm_point_listen_for_rw(c, 1, 0); + return 1; /* wait for read condition */ + } else if(want == SSL_ERROR_WANT_WRITE) { + return 1; /* write more later */ + } else if(want == SSL_ERROR_SYSCALL) { + if(errno != 0) + log_err("SSL_write syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_write"); + return 0; + } + sldns_buffer_skip(c->buffer, (ssize_t)r); + return 1; +#else + (void)c; + return 0; +#endif /* HAVE_SSL */ +} + +/** write more data for http */ +static int +http_write_more(int fd, struct comm_point* c) +{ + ssize_t r; + log_assert(sldns_buffer_remaining(c->buffer) > 0); + r = send(fd, (void*)sldns_buffer_current(c->buffer), + sldns_buffer_remaining(c->buffer), 0); + if(r == -1) { +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + return 1; + log_err_addr("http send r", strerror(errno), + &c->repinfo.addr, c->repinfo.addrlen); +#else + if(WSAGetLastError() == WSAEINPROGRESS) + return 1; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); + return 1; + } + log_err_addr("http send r", wsa_strerror(WSAGetLastError()), + &c->repinfo.addr, c->repinfo.addrlen); +#endif + return 0; + } + sldns_buffer_skip(c->buffer, r); + return 1; +} + +/** + * Handle http writing callback. + * @param fd: file descriptor of socket. + * @param c: comm point to write buffer out of. + * @return: 0 on error + */ +static int +comm_point_http_handle_write(int fd, struct comm_point* c) +{ + log_assert(c->type == comm_http); + log_assert(fd != -1); + + /* check pending connect errors, if that fails, we wait for more, + * or we can continue to write contents */ + if(c->tcp_check_nb_connect) { + int r = http_check_connect(fd, c); + if(r == 0) return 0; + if(r == 1) return 1; + c->tcp_check_nb_connect = 0; + } + /* if we are in ssl handshake, handle SSL handshake */ +#ifdef HAVE_SSL + if(c->ssl && c->ssl_shake_state != comm_ssl_shake_none) { + if(!ssl_handshake(c)) + return 0; + if(c->ssl_shake_state != comm_ssl_shake_none) + return 1; + } +#endif /* HAVE_SSL */ + if(c->tcp_is_reading) + return 1; + /* if we are writing, write more */ + if(c->ssl) { + if(!ssl_http_write_more(c)) + return 0; + } else { + if(!http_write_more(fd, c)) + return 0; + } + + /* we write a single buffer contents, that can contain + * the http request, and then flip to read the results */ + /* see if write is done */ + if(sldns_buffer_remaining(c->buffer) == 0) { + sldns_buffer_clear(c->buffer); + if(c->tcp_do_toggle_rw) + c->tcp_is_reading = 1; + c->tcp_byte_count = 0; + /* switch from listening(write) to listening(read) */ + comm_point_stop_listening(c); + comm_point_start_listening(c, -1, -1); + } + return 1; +} + +void +comm_point_http_handle_callback(int fd, short event, void* arg) +{ + struct comm_point* c = (struct comm_point*)arg; + log_assert(c->type == comm_http); + ub_comm_base_now(c->ev->base); + + if(event&UB_EV_READ) { + if(!comm_point_http_handle_read(fd, c)) { + reclaim_http_handler(c); + if(!c->tcp_do_close) { + fptr_ok(fptr_whitelist_comm_point( + c->callback)); + (void)(*c->callback)(c, c->cb_arg, + NETEVENT_CLOSED, NULL); + } + } + return; + } + if(event&UB_EV_WRITE) { + if(!comm_point_http_handle_write(fd, c)) { + reclaim_http_handler(c); + if(!c->tcp_do_close) { + fptr_ok(fptr_whitelist_comm_point( + c->callback)); + (void)(*c->callback)(c, c->cb_arg, + NETEVENT_CLOSED, NULL); + } + } + return; + } + if(event&UB_EV_TIMEOUT) { + verbose(VERB_QUERY, "http took too long, dropped"); + reclaim_http_handler(c); + if(!c->tcp_do_close) { + fptr_ok(fptr_whitelist_comm_point(c->callback)); + (void)(*c->callback)(c, c->cb_arg, + NETEVENT_TIMEOUT, NULL); + } + return; + } + log_err("Ignored event %d for httphdl.", event); +} + void comm_point_local_handle_callback(int fd, short event, void* arg) { struct comm_point* c = (struct comm_point*)arg; @@ -1958,6 +2671,75 @@ comm_point_create_tcp_out(struct comm_base *base, size_t bufsize, } struct comm_point* +comm_point_create_http_out(struct comm_base *base, size_t bufsize, + comm_point_callback_type* callback, void* callback_arg, + sldns_buffer* temp) +{ + struct comm_point* c = (struct comm_point*)calloc(1, + sizeof(struct comm_point)); + short evbits; + if(!c) + return NULL; + c->ev = (struct internal_event*)calloc(1, + sizeof(struct internal_event)); + if(!c->ev) { + free(c); + return NULL; + } + c->ev->base = base; + c->fd = -1; + c->buffer = sldns_buffer_new(bufsize); + if(!c->buffer) { + free(c->ev); + free(c); + return NULL; + } + c->timeout = NULL; + c->tcp_is_reading = 0; + c->tcp_byte_count = 0; + c->tcp_parent = NULL; + c->max_tcp_count = 0; + c->cur_tcp_count = 0; + c->tcp_handlers = NULL; + c->tcp_free = NULL; + c->type = comm_http; + c->tcp_do_close = 0; + c->do_not_close = 0; + c->tcp_do_toggle_rw = 1; + c->tcp_check_nb_connect = 1; + c->http_in_headers = 1; + c->http_in_chunk_headers = 0; + c->http_is_chunked = 0; + c->http_temp = temp; +#ifdef USE_MSG_FASTOPEN + c->tcp_do_fastopen = 1; +#endif +#ifdef USE_DNSCRYPT + c->dnscrypt = 0; + c->dnscrypt_buffer = c->buffer; +#endif + c->repinfo.c = c; + c->callback = callback; + c->cb_arg = callback_arg; + evbits = UB_EV_PERSIST | UB_EV_WRITE; + c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, + comm_point_http_handle_callback, c); + if(c->ev->ev == NULL) + { + log_err("could not baseset tcpout event"); +#ifdef HAVE_SSL + SSL_free(c->ssl); +#endif + sldns_buffer_free(c->buffer); + free(c->ev); + free(c); + return NULL; + } + + return c; +} + +struct comm_point* comm_point_create_local(struct comm_base *base, int fd, size_t bufsize, comm_point_callback_type* callback, void* callback_arg) { @@ -2110,7 +2892,7 @@ comm_point_delete(struct comm_point* c) { if(!c) return; - if(c->type == comm_tcp && c->ssl) { + if((c->type == comm_tcp || c->type == comm_http) && c->ssl) { #ifdef HAVE_SSL SSL_shutdown(c->ssl); SSL_free(c->ssl); @@ -2124,7 +2906,7 @@ comm_point_delete(struct comm_point* c) free(c->tcp_handlers); } free(c->timeout); - if(c->type == comm_tcp || c->type == comm_local) { + if(c->type == comm_tcp || c->type == comm_local || c->type == comm_http) { sldns_buffer_free(c->buffer); #ifdef USE_DNSCRYPT if(c->dnscrypt && c->dnscrypt_buffer != c->buffer) { @@ -2221,7 +3003,7 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec) c->timeout->tv_usec = (msec%1000)*1000; #endif /* S_SPLINT_S */ } - if(c->type == comm_tcp) { + if(c->type == comm_tcp || c->type == comm_http) { ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); if(c->tcp_is_reading) ub_event_add_bits(c->ev->ev, UB_EV_READ); diff --git a/util/netevent.h b/util/netevent.h index 54740266d0a4..6819f57f8d9e 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -84,6 +84,8 @@ typedef int comm_point_callback_type(struct comm_point*, void*, int, #define NETEVENT_TIMEOUT -2 /** to pass fallback from capsforID to callback function; 0x20 failed */ #define NETEVENT_CAPSFAIL -3 +/** to pass done transfer to callback function; http file is complete */ +#define NETEVENT_DONE -4 /** timeout to slow accept calls when not possible, in msec. */ #define NETEVENT_SLOW_ACCEPT_TIME 2000 @@ -201,6 +203,19 @@ struct comm_point { comm_ssl_shake_hs_write } ssl_shake_state; + /* -------- HTTP ------- */ + /** Currently reading in http headers */ + int http_in_headers; + /** Currently reading in chunk headers, 0=not, 1=firstline, 2=unused + * (more lines), 3=trailer headers after chunk */ + int http_in_chunk_headers; + /** chunked transfer */ + int http_is_chunked; + /** http temp buffer (shared buffer for temporary work) */ + struct sldns_buffer* http_temp; + /** http stored content in buffer */ + size_t http_stored; + /* -------- dnstap ------- */ /** the dnstap environment */ struct dt_env* dtenv; @@ -213,6 +228,8 @@ struct comm_point { comm_tcp_accept, /** TCP handler socket - handle byteperbyte readwrite. */ comm_tcp, + /** HTTP handler socket */ + comm_http, /** AF_UNIX socket - for internal commands. */ comm_local, /** raw - not DNS format - for pipe readers and writers */ @@ -450,6 +467,20 @@ struct comm_point* comm_point_create_tcp_out(struct comm_base* base, size_t bufsize, comm_point_callback_type* callback, void* callback_arg); /** + * Create an outgoing HTTP commpoint. No file descriptor is opened, left at -1. + * @param base: in which base to alloc the commpoint. + * @param bufsize: size of buffer to create for handlers. + * @param callback: callback function pointer for the handler. + * @param callback_arg: will be passed to your callback function. + * @param temp: sldns buffer, shared between other http_out commpoints, for + * temporary data when performing callbacks. + * @return: the commpoint or NULL on error. + */ +struct comm_point* comm_point_create_http_out(struct comm_base* base, + size_t bufsize, comm_point_callback_type* callback, + void* callback_arg, struct sldns_buffer* temp); + +/** * Create commpoint to listen to a local domain file descriptor. * @param base: in which base to alloc the commpoint. * @param fd: file descriptor of open AF_UNIX socket set to listen nonblocking. @@ -667,6 +698,16 @@ void comm_point_tcp_handle_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. + * handle libevent callback for tcp data comm point + * @param fd: file descriptor. + * @param event: event bits from libevent: + * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. + * @param arg: the comm_point structure. + */ +void comm_point_http_handle_callback(int fd, short event, void* arg); + +/** + * This routine is published for checks and tests, and is only used internally. * handle libevent callback for timer comm. * @param fd: file descriptor (always -1). * @param event: event bits from libevent: diff --git a/util/ub_event.c b/util/ub_event.c index 3b92be1a3025..fba2f2488296 100644 --- a/util/ub_event.c +++ b/util/ub_event.c @@ -427,7 +427,7 @@ ub_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits) void ub_comm_base_now(struct comm_base* cb) { - #ifdef USE_MINI_EVENT +#ifdef USE_MINI_EVENT /** minievent updates the time when it blocks. */ (void)cb; /* nothing to do */ #else /* !USE_MINI_EVENT */ |