From cae9809e113433bc57560d9914618379fe61cc75 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 7 Mar 2017 14:58:51 +0000 Subject: [PATCH] - Response actions based on IP address from Jinmei Tatuya (Infoblox). git-svn-id: file:///svn/unbound/trunk@4035 be551aaa-1e26-0410-a405-d3ace91eadb9 --- Makefile.in | 5 +- daemon/daemon.c | 23 + daemon/daemon.h | 5 + daemon/remote.c | 12 +- daemon/worker.c | 172 +- dns64/dns64.c | 27 +- doc/Changelog | 1 + doc/IP-BasedActions.pdf | Bin 0 -> 247560 bytes respip/respip.c | 1176 ++++++++++++++ respip/respip.h | 230 +++ services/localzone.c | 54 +- services/localzone.h | 108 ++ services/mesh.c | 125 +- services/mesh.h | 22 +- services/modstack.c | 3 + services/view.c | 5 + services/view.h | 3 + smallapp/unbound-checkconf.c | 32 +- testcode/unitmain.c | 262 ++++ util/config_file.c | 2 + util/config_file.h | 10 + util/configlexer.c | 2867 +++++++++++++++++----------------- util/configlexer.lex | 3 + util/configparser.c | 1945 ++++++++++++----------- util/configparser.h | 146 +- util/configparser.y | 77 +- util/data/msgencode.c | 4 + util/data/msgreply.c | 9 +- util/data/msgreply.h | 15 + util/data/packed_rrset.h | 5 + util/fptr_wlist.c | 7 + util/module.h | 18 + 32 files changed, 4878 insertions(+), 2495 deletions(-) create mode 100644 doc/IP-BasedActions.pdf create mode 100644 respip/respip.c create mode 100644 respip/respip.h diff --git a/Makefile.in b/Makefile.in index 480a35125..4eb677363 100644 --- a/Makefile.in +++ b/Makefile.in @@ -113,7 +113,8 @@ util/ub_event.c util/ub_event_pluggable.c util/winsock_event.c \ validator/autotrust.c validator/val_anchor.c validator/validator.c \ validator/val_kcache.c validator/val_kentry.c validator/val_neg.c \ validator/val_nsec3.c validator/val_nsec.c validator/val_secalgo.c \ -validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c cachedb/cachedb.c $(CHECKLOCK_SRC) \ +validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \ +cachedb/cachedb.c respip/respip.c $(CHECKLOCK_SRC) \ $(DNSTAP_SRC) COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \ as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \ @@ -126,6 +127,7 @@ slabhash.lo timehist.lo tube.lo winsock_event.lo autotrust.lo val_anchor.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo \ $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) +COMMON_OBJ_WITHOUT_NETCALL+=respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo @@ -1294,3 +1296,4 @@ sha512.lo sha512.o: $(srcdir)/compat/sha512.c config.h reallocarray.lo reallocarray.o: $(srcdir)/compat/reallocarray.c config.h isblank.lo isblank.o: $(srcdir)/compat/isblank.c config.h strsep.lo strsep.o: $(srcdir)/compat/strsep.c config.h +respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/respip/respip.h $(srcdir)/util/module.h $(srcdir)/services/outbound_list.h diff --git a/daemon/daemon.c b/daemon/daemon.c index 11a887c40..af65b47ac 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -87,6 +87,7 @@ #include "util/tube.h" #include "util/net_help.h" #include "sldns/keyraw.h" +#include "respip/respip.h" #include #ifdef HAVE_SYSTEMD @@ -562,6 +563,8 @@ daemon_stop_others(struct daemon* daemon) void daemon_fork(struct daemon* daemon) { + int have_view_respip_cfg = 0; + log_assert(daemon); if(!(daemon->views = views_create())) fatal_exit("Could not create views: out of memory"); @@ -577,9 +580,27 @@ daemon_fork(struct daemon* daemon) if(!local_zones_apply_cfg(daemon->local_zones, daemon->cfg)) fatal_exit("Could not set up local zones"); + /* process raw response-ip configuration data */ + if(!(daemon->respip_set = respip_set_create())) + fatal_exit("Could not create response IP set"); + if(!respip_global_apply_cfg(daemon->respip_set, daemon->cfg)) + fatal_exit("Could not set up response IP set"); + if(!respip_views_apply_cfg(daemon->views, daemon->cfg, + &have_view_respip_cfg)) + fatal_exit("Could not set up per-view response IP sets"); + daemon->use_response_ip = !respip_set_is_empty(daemon->respip_set) || + have_view_respip_cfg; + /* setup modules */ daemon_setup_modules(daemon); + /* response-ip-xxx options don't work as expected without the respip + * module. To avoid run-time operational surprise we reject such + * configuration. */ + if(daemon->use_response_ip && + modstack_find(&daemon->mods, "respip") < 0) + fatal_exit("response-ip options require respip module"); + /* first create all the worker structures, so we can pass * them to the newly created threads. */ @@ -645,6 +666,8 @@ daemon_cleanup(struct daemon* daemon) slabhash_clear(daemon->env->msg_cache); local_zones_delete(daemon->local_zones); daemon->local_zones = NULL; + respip_set_delete(daemon->respip_set); + daemon->respip_set = NULL; views_delete(daemon->views); daemon->views = NULL; /* key cache is cleared by module desetup during next daemon_fork() */ diff --git a/daemon/daemon.h b/daemon/daemon.h index dc39a9cbd..2e70e4e52 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -56,6 +56,7 @@ struct local_zones; struct views; struct ub_randstate; struct daemon_remote; +struct respip_set; struct shm_main_info; #include "dnstap/dnstap_config.h" @@ -120,6 +121,10 @@ struct daemon { struct dt_env* dtenv; #endif struct shm_main_info* shm_info; + /** response-ip set with associated actions and tags. */ + struct respip_set* respip_set; + /** some response-ip tags or actions are configured if true */ + int use_response_ip; }; /** diff --git a/daemon/remote.c b/daemon/remote.c index b61dfaf1d..3b6777a88 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -853,11 +853,12 @@ static int print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) { int m; - size_t msg, rrset, val, iter; + size_t msg, rrset, val, iter, respip; msg = slabhash_get_mem(daemon->env->msg_cache); rrset = slabhash_get_mem(&daemon->env->rrset_cache->table); val=0; iter=0; + respip=0; m = modstack_find(&worker->env.mesh->mods, "validator"); if(m != -1) { fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh-> @@ -872,6 +873,13 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) iter = (*worker->env.mesh->mods.mod[m]->get_mem) (&worker->env, m); } + m = modstack_find(&worker->env.mesh->mods, "respip"); + if(m != -1) { + fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh-> + mods.mod[m]->get_mem)); + respip = (*worker->env.mesh->mods.mod[m]->get_mem) + (&worker->env, m); + } if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset)) return 0; @@ -881,6 +889,8 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) return 0; if(!print_longnum(ssl, "mem.mod.validator"SQ, val)) return 0; + if(!print_longnum(ssl, "mem.mod.respip"SQ, respip)) + return 0; return 1; } diff --git a/daemon/worker.c b/daemon/worker.c index a6d5f1a37..2a274a1b5 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -69,6 +69,7 @@ #include "iterator/iter_hints.h" #include "validator/autotrust.h" #include "validator/val_anchor.h" +#include "respip/respip.h" #include "libunbound/context.h" #include "libunbound/libworker.h" #include "sldns/sbuffer.h" @@ -511,17 +512,70 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, return 1; } -/** answer query from the cache */ +/** Apply, if applicable, a response IP action to a cached answer. + * If the answer is rewritten as a result of an action, '*encode_repp' will + * point to the reply info containing the modified answer. '*encode_repp' will + * be intact otherwise. + * It returns 1 on success, 0 otherwise. */ +static int +apply_respip_action(struct worker* worker, const struct query_info* qinfo, + struct respip_client_info* cinfo, struct reply_info* rep, + struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset, + struct reply_info** encode_repp) +{ + struct respip_action_info actinfo = {respip_none, NULL}; + + if(qinfo->qtype != LDNS_RR_TYPE_A && + qinfo->qtype != LDNS_RR_TYPE_AAAA && + qinfo->qtype != LDNS_RR_TYPE_ANY) + return 1; + + if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, &actinfo, + alias_rrset, 0, worker->scratchpad)) + return 0; + + /* xxx_deny actions mean dropping the reply, unless the original reply + * was redirected to response-ip data. */ + if((actinfo.action == respip_deny || + actinfo.action == respip_inform_deny) && + *encode_repp == rep) + *encode_repp = NULL; + + /* If address info is returned, it means the action should be an + * 'inform' variant and the information should be logged. */ + if(actinfo.addrinfo) { + respip_inform_print(actinfo.addrinfo, qinfo->qname, + qinfo->qtype, qinfo->qclass, qinfo->local_alias, + repinfo); + } + + return 1; +} + +/** answer query from the cache. + * Normally, the answer message will be built in repinfo->c->buffer; if the + * answer is supposed to be suppressed or the answer is supposed to be an + * incomplete CNAME chain, the buffer is explicitly cleared to signal the + * caller as such. In the latter case *partial_rep will point to the incomplete + * reply, and this function is (possibly) supposed to be called again with that + * *partial_rep value to complete the chain. In addition, if the query should + * be completely dropped, '*need_drop' will be set to 1. */ static int answer_from_cache(struct worker* worker, struct query_info* qinfo, + struct respip_client_info* cinfo, int* need_drop, + struct ub_packed_rrset_key** alias_rrset, + struct reply_info** partial_repp, struct reply_info* rep, uint16_t id, uint16_t flags, struct comm_reply* repinfo, struct edns_data* edns) { time_t timenow = *worker->env.now; uint16_t udpsize = edns->udp_size; + struct reply_info* encode_rep = rep; + struct reply_info* partial_rep = *partial_repp; int secure; int must_validate = (!(flags&BIT_CD) || worker->env.cfg->ignore_cd) && worker->env.need_to_validate; + *partial_repp = NULL; /* avoid accidental further pass */ if(worker->env.cfg->serve_expired) { /* always lock rrsets, rep->ttl is ignored */ if(!rrset_array_lock(rep->ref, rep->rrset_count, 0)) @@ -601,7 +655,33 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, if(!inplace_cb_reply_cache_call(&worker->env, qinfo, NULL, rep, (int)(flags&LDNS_RCODE_MASK), edns, worker->scratchpad)) goto bail_out; - if(!reply_info_answer_encode(qinfo, rep, id, flags, + *alias_rrset = NULL; /* avoid confusion if caller set it to non-NULL */ + if(worker->daemon->use_response_ip && !partial_rep && + !apply_respip_action(worker, qinfo, cinfo, rep, repinfo, alias_rrset, + &encode_rep)) { + goto bail_out; + } else if(partial_rep && + !respip_merge_cname(partial_rep, qinfo, rep, cinfo, + must_validate, &encode_rep, worker->scratchpad)) { + goto bail_out; + } + if(encode_rep != rep) + secure = 0; /* if rewritten, it can't be considered "secure" */ + if(!encode_rep || *alias_rrset) { + sldns_buffer_clear(repinfo->c->buffer); + sldns_buffer_flip(repinfo->c->buffer); + if(!encode_rep) + *need_drop = 1; + else { + /* If a partial CNAME chain is found, we first need to + * make a copy of the reply in the scratchpad so we + * can release the locks and lookup the cache again. */ + *partial_repp = reply_info_copy(encode_rep, NULL, + worker->scratchpad); + if(!*partial_repp) + goto bail_out; + } + } else if(!reply_info_answer_encode(qinfo, encode_rep, id, flags, repinfo->c->buffer, timenow, 1, worker->scratchpad, udpsize, edns, (int)(edns->bits & EDNS_DO), secure)) { if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL, @@ -622,14 +702,18 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, return 1; } -/** Reply to client and perform prefetch to keep cache up to date */ +/** Reply to client and perform prefetch to keep cache up to date. + * If the buffer for the reply is empty, it indicates that only prefetch is + * necessary and the reply should be suppressed (because it's dropped or + * being deferred). */ static void reply_and_prefetch(struct worker* worker, struct query_info* qinfo, uint16_t flags, struct comm_reply* repinfo, time_t leeway) { /* first send answer to client to keep its latency * as small as a cachereply */ - comm_point_send_reply(repinfo); + if(sldns_buffer_limit(repinfo->c->buffer) != 0) + comm_point_send_reply(repinfo); server_stats_prefetch(&worker->stats, worker); /* create the prefetch in the mesh as a normal lookup without @@ -795,6 +879,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error, enum acl_access acl; struct acl_addr* acladdr; int rc = 0; + int need_drop = 0; + /* We might have to chase a CNAME chain internally, in which case + * we'll have up to two replies and combine them to build a complete + * answer. These variables control this case. */ + struct ub_packed_rrset_key* alias_rrset = NULL; + struct reply_info* partial_rep = NULL; + struct query_info* lookup_qinfo = &qinfo; + struct query_info qinfo_tmp; /* placeholdoer for lookup_qinfo */ + struct respip_client_info* cinfo = NULL, cinfo_tmp; if(error != NETEVENT_NOERROR) { /* some bad tcp query DNS formats give these error calls */ @@ -1037,16 +1130,43 @@ worker_handle_request(struct comm_point* c, void* arg, int error, qinfo.qname_len = d->rr_len[0] - 2; } + /* If we may apply IP-based actions to the answer, build the client + * information. As this can be expensive, skip it if there is + * absolutely no possibility of it. */ + if(worker->daemon->use_response_ip && + (qinfo.qtype == LDNS_RR_TYPE_A || + qinfo.qtype == LDNS_RR_TYPE_AAAA || + qinfo.qtype == LDNS_RR_TYPE_ANY)) { + cinfo_tmp.taglist = acladdr->taglist; + cinfo_tmp.taglen = acladdr->taglen; + cinfo_tmp.tag_actions = acladdr->tag_actions; + cinfo_tmp.tag_actions_size = acladdr->tag_actions_size; + cinfo_tmp.tag_datas = acladdr->tag_datas; + cinfo_tmp.tag_datas_size = acladdr->tag_datas_size; + cinfo_tmp.view = acladdr->view; + cinfo_tmp.respip_set = worker->daemon->respip_set; + cinfo = &cinfo_tmp; + } + +lookup_cache: + /* Lookup the cache. In case we chase an intermediate CNAME chain + * this is a two-pass operation, and lookup_qinfo is different for + * each pass. We should still pass the original qinfo to + * answer_from_cache(), however, since it's used to build the reply. */ if(!edns_bypass_cache_stage(edns.opt_list, &worker->env)) { - h = query_info_hash(&qinfo, sldns_buffer_read_u16_at(c->buffer, 2)); - if((e=slabhash_lookup(worker->env.msg_cache, h, &qinfo, 0))) { + h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2)); + if((e=slabhash_lookup(worker->env.msg_cache, h, lookup_qinfo, 0))) { /* answer from cache - we have acquired a readlock on it */ if(answer_from_cache(worker, &qinfo, + cinfo, &need_drop, &alias_rrset, &partial_rep, (struct reply_info*)e->data, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), repinfo, &edns)) { - /* prefetch it if the prefetch TTL expired */ + /* prefetch it if the prefetch TTL expired. + * Note that if there is more than one pass + * its qname must be that used for cache + * lookup. */ if((worker->env.cfg->prefetch || worker->env.cfg->serve_expired) && *worker->env.now >= ((struct reply_info*)e->data)->prefetch_ttl) { @@ -1056,16 +1176,38 @@ worker_handle_request(struct comm_point* c, void* arg, int error, < *worker->env.now) leeway = 0; lock_rw_unlock(&e->lock); - reply_and_prefetch(worker, &qinfo, + reply_and_prefetch(worker, lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2), repinfo, leeway); - rc = 0; + if(!partial_rep) { + rc = 0; + regional_free_all(worker->scratchpad); + goto send_reply_rc; + } + } else if(!partial_rep) { + lock_rw_unlock(&e->lock); regional_free_all(worker->scratchpad); - goto send_reply_rc; + goto send_reply; } + /* We've found a partial reply ending with an + * alias. Replace the lookup qinfo for the + * alias target and lookup the cache again to + * (possibly) complete the reply. As we're + * passing the "base" reply, there will be no + * more alias chasing. */ lock_rw_unlock(&e->lock); - regional_free_all(worker->scratchpad); - goto send_reply; + memset(&qinfo_tmp, 0, sizeof(qinfo_tmp)); + get_cname_target(alias_rrset, &qinfo_tmp.qname, + &qinfo_tmp.qname_len); + if(!qinfo_tmp.qname) { + log_err("unexpected: invalid answer alias"); + regional_free_all(worker->scratchpad); + return 0; /* drop query */ + } + qinfo_tmp.qtype = qinfo.qtype; + qinfo_tmp.qclass = qinfo.qclass; + lookup_qinfo = &qinfo_tmp; + goto lookup_cache; } verbose(VERB_ALGO, "answer from the cache failed"); lock_rw_unlock(&e->lock); @@ -1094,7 +1236,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, } /* grab a work request structure for this new request */ - mesh_new_client(worker->env.mesh, &qinfo, + mesh_new_client(worker->env.mesh, &qinfo, cinfo, sldns_buffer_read_u16_at(c->buffer, 2), &edns, repinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer)); regional_free_all(worker->scratchpad); @@ -1104,6 +1246,10 @@ worker_handle_request(struct comm_point* c, void* arg, int error, send_reply: rc = 1; send_reply_rc: + if(need_drop) { + comm_point_drop_reply(repinfo); + return 0; + } #ifdef USE_DNSTAP if(worker->dtenv.log_client_response_messages) dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, diff --git a/dns64/dns64.c b/dns64/dns64.c index befec864d..b3e3ab852 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -411,31 +411,6 @@ handle_ipv6_ptr(struct module_qstate* qstate, int id) return module_wait_subquery; } -/** allocate (special) rrset keys, return 0 on error */ -static int -repinfo_alloc_rrset_keys(struct reply_info* rep, - struct regional* region) -{ - size_t i; - for(i=0; irrset_count; i++) { - if(region) { - rep->rrsets[i] = (struct ub_packed_rrset_key*) - regional_alloc(region, - sizeof(struct ub_packed_rrset_key)); - if(rep->rrsets[i]) { - memset(rep->rrsets[i], 0, - sizeof(struct ub_packed_rrset_key)); - rep->rrsets[i]->entry.key = rep->rrsets[i]; - } - } - else return 0;/* rep->rrsets[i] = alloc_special_obtain(alloc);*/ - if(!rep->rrsets[i]) - return 0; - rep->rrsets[i]->entry.data = NULL; - } - return 1; -} - static enum module_ext_state generate_type_A_query(struct module_qstate* qstate, int id) { @@ -707,7 +682,7 @@ dns64_adjust_a(int id, struct module_qstate* super, struct module_qstate* qstate return; /* allocate ub_key structures special or not */ - if(!repinfo_alloc_rrset_keys(cp, super->region)) { + if(!reply_info_alloc_rrset_keys(cp, NULL, super->region)) { return; } diff --git a/doc/Changelog b/doc/Changelog index db75d0f25..4c1c3dffc 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 7 March 2017: Wouter - Fix #1230: swig version 2.0.0 is required for pythonmod, with 1.3.40 it crashes when running repeatly unbound-control reload. + - Response actions based on IP address from Jinmei Tatuya (Infoblox). 6 March 2017: Wouter - Fix #1229: Systemd service sandboxing in contrib/unbound.service. diff --git a/doc/IP-BasedActions.pdf b/doc/IP-BasedActions.pdf new file mode 100644 index 0000000000000000000000000000000000000000..07cec0fa62810e47aa9c7bdbf6016fb6d1d5dc7f GIT binary patch literal 247560 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�E#+mV&k%xXMU>fvc!&quRuB{a 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 z

l=2712cO4fjl2@#lGJ@e1}1`~n24L7`LLn{xN76tMOPaxH6x4AvBp!xuFbdg)s zcl!*mzX3`z6NgJ#y`K)gamEr5MzSk##p0Y!Mu@BNwoX>>GJlk|x5Kx3~^zazGB?9g2Li}oC^)?}1Nf!;2CGSg0Z-6fE) zZc&wd0(a6jCdeHNW93_MF~EH@8@V*xdRg#fA`kv*9KY9!Q0;38wtzNF{^HarVD=a7 z_3oF!L*ww_&%Y45x`mdpC<==xcT=C!zPw)t_sYtegK>_}EFypUzpevwI;WNggdAav zV^tTt3-pbTyVjsk#h`=x&WD1{fd403dD@uMwaxaNeZo=^Tl}|0=WkD_X3q(!OlQ%w zon*8<+FyPJa}~?=jwZZHOS$^NhM)=Jd?hx($C-A>olaIICTQdYHZ-bUE z^MPm6BNPJ@PVo=WNp|Ey4Fs-r|2o3;dnoNJWmE4*>+8_T+MapJ-t`X`8bHj+Sc=dr z!59L+Iz^fzyN~G_cWKCrp`mbbtQGsl-cOd@0qjLOeI(yS!>51Ly3;yF3|2?XsZjcy z2NWIt2d_Wi+o6XaW*}qwyJw7Bt)c19`QvY^M~e;JHKBY&i&BZ!tuy>5syD3Jihv4V zySHe7*D7U&AJkA^YV0#nS5%3e4DgON1-Uu-il98dwzQVTcHk0rktCz0lz%u6&-eKV z^T@P+11o_-D)++czg_ry!5WVuP8j6Xq*yvw&u8gQyVTsdNW<|JrKHZ^SlGGC-;=`n zHK3f+k8is?#{BaO*^RnX2sOaNI>s4tF%!Pv-|p&@aq3*H7~9{SKbhKpl8jsl=+OuJph^PiQJqZ)hN{hHrY(&(Y@m5r7=sO|TsPTbD$__Y%ych;c7 zWNz&ZdpkLXQmGq-z*-w>Eaia=k8D86(+ed_8|vGghxpdop(!`pRT*TLSFV7qw55mF z#ZFMgkO za8cB{qEfCPni3U2X*OXWbvW-haDOagwuBG8tjg+r`qyijlL!WZX_PJY4tf($U=lO^ z3mhXDZId|6g{q|xG+Y|#c6;^qZ7HWDk1 zc6{`~(RKt?t;U)C!MJ~`85Po``7b4mx7wtf3ld3kgzgXCPNiwl!+z3P&NaTDWVsW0 zi8?493#fHO_!tsH%VNlndiI^qq|T9A(@OF}@u&kkD!&l$O`1E7yps->j|-*W^{`%5 zSNJbRyoGi*^Ock$pT`8xzYsdHxPn6-LSd`H9S+6ME5T)|eg;pl&jyYl3Fesps3{Vu%9RBZsS55ifyE{^4kKq|dzaT{SkOcPq};XgDB8$o+k4L4a?!@2h25nN_M} z74T$1yMTI-zhbaGiq!n9ftl>-eF$ehbDI8*rmw8_+GHA~w-icGf_R2o|GWT6newX1 zZpTXp>M&cYoz^dT?Sj=dZzoirttbamC%V`54=Y8pACSwfry!-A%Gt}}b$cHwO}!@7 z_K3-)t_b_)1!;_szP&9PYlI>#N19sa>q{Pb87nfhpDYoA+6>`k@)N%+{VGi4V6q9szebJ%0Do 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°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 literal 0 HcmV?d00001 diff --git a/respip/respip.c b/respip/respip.c new file mode 100644 index 000000000..ff7c448f8 --- /dev/null +++ b/respip/respip.c @@ -0,0 +1,1176 @@ +/* + * respip/respip.c - filtering response IP module + */ + +/** + * \file + * + * This file contains a module that inspects a result of recursive resolution + * to see if any IP address record should trigger a special action. + * If applicable these actions can modify the original response. + */ +#include "config.h" + +#include "services/localzone.h" +#include "services/cache/dns.h" +#include "sldns/str2wire.h" +#include "util/config_file.h" +#include "util/fptr_wlist.h" +#include "util/module.h" +#include "util/net_help.h" +#include "util/regional.h" +#include "util/data/msgreply.h" +#include "util/storage/dnstree.h" +#include "respip/respip.h" +#include "services/view.h" +#include "sldns/rrdef.h" + +/** + * Conceptual set of IP addresses for response AAAA or A records that should + * trigger special actions. + */ +struct respip_set { + struct regional* region; + struct rbtree_type ip_tree; + char* const* tagname; /* shallow copy of tag names, for logging */ + int num_tags; /* number of tagname entries */ +}; + +/** An address span with response control information */ +struct resp_addr { + /** node in address tree */ + struct addr_tree_node node; + /** tag bitlist */ + uint8_t* taglist; + /** length of the taglist (in bytes) */ + size_t taglen; + /** action for this address span */ + enum respip_action action; + /** "local data" for this node */ + struct ub_packed_rrset_key* data; +}; + +/** Subset of resp_addr.node, used for inform-variant logging */ +struct respip_addr_info { + struct sockaddr_storage addr; + socklen_t addrlen; + int net; +}; + +/** Query state regarding the response-ip module. */ +enum respip_state { + /** + * The general state. Unless CNAME chasing takes place, all processing + * is completed in this state without any other asynchronous event. + */ + RESPIP_INIT = 0, + + /** + * A subquery for CNAME chasing is completed. + */ + RESPIP_SUBQUERY_FINISHED +}; + +/** Per query state for the response-ip module. */ +struct respip_qstate { + enum respip_state state; +}; + +struct respip_set* +respip_set_create(void) +{ + struct respip_set* set = calloc(1, sizeof(*set)); + if(!set) + return NULL; + set->region = regional_create(); + if(!set->region) { + free(set); + return NULL; + } + addr_tree_init(&set->ip_tree); + return set; +} + +void +respip_set_delete(struct respip_set* set) +{ + if(!set) + return; + regional_destroy(set->region); + free(set); +} + +struct rbtree_type* +respip_set_get_tree(struct respip_set* set) +{ + if(!set) + return NULL; + return &set->ip_tree; +} + +/** returns the node in the address tree for the specified netblock string; + * non-existent node will be created if 'create' is true */ +static struct resp_addr* +respip_find_or_create(struct respip_set* set, const char* ipstr, int create) +{ + struct resp_addr* node; + struct sockaddr_storage addr; + int net; + socklen_t addrlen; + + if(!netblockstrtoaddr(ipstr, 0, &addr, &addrlen, &net)) { + log_err("cannot parse netblock: '%s'", ipstr); + return NULL; + } + node = (struct resp_addr*)addr_tree_find(&set->ip_tree, &addr, addrlen, net); + if(!node && create) { + node = regional_alloc_zero(set->region, sizeof(*node)); + node->action = respip_none; + if(!node) { + log_err("out of memory"); + return NULL; + } + if(!addr_tree_insert(&set->ip_tree, &node->node, &addr, + addrlen, net)) { + /* We know we didn't find it, so this should be + * impossible. */ + log_warn("unexpected: duplicate address: %s", ipstr); + } + } + return node; +} + +static int +respip_tag_cfg(struct respip_set* set, const char* ipstr, + const uint8_t* taglist, size_t taglen) +{ + struct resp_addr* node; + + if(!(node=respip_find_or_create(set, ipstr, 1))) + return 0; + if(node->taglist) { + log_warn("duplicate response-address-tag for '%s', overridden.", + ipstr); + } + node->taglist = regional_alloc_init(set->region, taglist, taglen); + if(!node->taglist) { + log_err("out of memory"); + return 0; + } + node->taglen = taglen; + return 1; +} + +/** set action for the node specified by the netblock string */ +static int +respip_action_cfg(struct respip_set* set, const char* ipstr, + const char* actnstr) +{ + struct resp_addr* node; + enum respip_action action; + + if(!(node=respip_find_or_create(set, ipstr, 1))) + return 0; + if(node->action != respip_none) { + log_warn("duplicate response-ip action for '%s', overridden.", + ipstr); + } + if(strcmp(actnstr, "deny") == 0) + action = respip_deny; + else if(strcmp(actnstr, "redirect") == 0) + action = respip_redirect; + else if(strcmp(actnstr, "inform") == 0) + action = respip_inform; + else if(strcmp(actnstr, "inform_deny") == 0) + action = respip_inform_deny; + else if(strcmp(actnstr, "always_transparent") == 0) + action = respip_always_transparent; + else if(strcmp(actnstr, "always_refuse") == 0) + action = respip_always_refuse; + else if(strcmp(actnstr, "always_nxdomain") == 0) + action = respip_always_nxdomain; + else { + log_err("unknown response-ip action %s", actnstr); + return 0; + } + node->action = action; + return 1; +} + +/** allocate and initialize an rrset structure; this function is based + * on new_local_rrset() from the localzone.c module */ +static struct ub_packed_rrset_key* +new_rrset(struct regional* region, uint16_t rrtype, uint16_t rrclass) +{ + struct packed_rrset_data* pd; + struct ub_packed_rrset_key* rrset = regional_alloc_zero( + region, sizeof(*rrset)); + if(!rrset) { + log_err("out of memory"); + return NULL; + } + rrset->entry.key = rrset; + pd = regional_alloc_zero(region, sizeof(*pd)); + if(!pd) { + log_err("out of memory"); + return NULL; + } + pd->trust = rrset_trust_prim_noglue; + pd->security = sec_status_insecure; + rrset->entry.data = pd; + rrset->rk.dname = regional_alloc_zero(region, 1); + if(!rrset->rk.dname) { + log_err("out of memory"); + return NULL; + } + rrset->rk.dname_len = 1; + rrset->rk.type = htons(rrtype); + rrset->rk.rrset_class = htons(rrclass); + return rrset; +} + +/** enter local data as resource records into a response-ip node */ +static int +respip_enter_rr(struct regional* region, struct resp_addr* raddr, + const char* rrstr, const char* netblock) +{ + uint8_t* nm; + uint16_t rrtype = 0, rrclass = 0; + time_t ttl = 0; + uint8_t rr[LDNS_RR_BUF_SIZE]; + uint8_t* rdata = NULL; + size_t rdata_len = 0; + char buf[65536]; + char bufshort[64]; + struct packed_rrset_data* pd; + struct sockaddr* sa; + int ret; + if(raddr->action != respip_redirect) { + log_err("cannot parse response-ip-data %s: response-ip " + "action for %s is not redirect", rrstr, netblock); + return 0; + } + ret = snprintf(buf, sizeof(buf), ". %s", rrstr); + if(ret < 0 || ret >= (int)sizeof(buf)) { + strlcpy(bufshort, rrstr, sizeof(bufshort)); + log_err("bad response-ip-data: %s...", bufshort); + return 0; + } + if(!rrstr_get_rr_content(buf, &nm, &rrtype, &rrclass, &ttl, rr, sizeof(rr), + &rdata, &rdata_len)) { + log_err("bad response-ip-data: %s", rrstr); + return 0; + } + sa = (struct sockaddr*)&raddr->node.addr; + if (rrtype == LDNS_RR_TYPE_CNAME && raddr->data) { + log_err("CNAME response-ip data (%s) can not co-exist with other " + "response-ip data for netblock %s", rrstr, netblock); + return 0; + } else if (raddr->data && + raddr->data->rk.type == htons(LDNS_RR_TYPE_CNAME)) { + log_err("response-ip data (%s) can not be added; CNAME response-ip " + "data already in place for netblock %s", rrstr, netblock); + return 0; + } else if((rrtype != LDNS_RR_TYPE_CNAME) && + ((sa->sa_family == AF_INET && rrtype != LDNS_RR_TYPE_A) || + (sa->sa_family == AF_INET6 && rrtype != LDNS_RR_TYPE_AAAA))) { + log_err("response-ip data %s record type does not correspond " + "to netblock %s address family", rrstr, netblock); + return 0; + } + + if(!raddr->data) { + raddr->data = new_rrset(region, rrtype, rrclass); + if(!raddr->data) + return 0; + } + pd = raddr->data->entry.data; + return rrset_insert_rr(region, pd, rdata, rdata_len, ttl, rrstr); +} + +static int +respip_data_cfg(struct respip_set* set, const char* ipstr, const char* rrstr) +{ + struct resp_addr* node; + + node=respip_find_or_create(set, ipstr, 0); + if(!node || node->action == respip_none) { + log_err("cannot parse response-ip-data %s: " + "response-ip node for %s not found", rrstr, ipstr); + return 0; + } + return respip_enter_rr(set->region, node, rrstr, ipstr); +} + +static int +respip_set_apply_cfg(struct respip_set* set, char* const* tagname, int num_tags, + struct config_strbytelist* respip_tags, + struct config_str2list* respip_actions, + struct config_str2list* respip_data) +{ + struct config_strbytelist* p; + struct config_str2list* pa; + struct config_str2list* pd; + + set->tagname = tagname; + set->num_tags = num_tags; + + p = respip_tags; + while(p) { + struct config_strbytelist* np = p->next; + + log_assert(p->str && p->str2); + if(!respip_tag_cfg(set, p->str, p->str2, p->str2len)) { + config_del_strbytelist(p); + return 0; + } + free(p->str); + free(p->str2); + free(p); + p = np; + } + + pa = respip_actions; + while(pa) { + struct config_str2list* np = pa->next; + log_assert(pa->str && pa->str2); + if(!respip_action_cfg(set, pa->str, pa->str2)) { + config_deldblstrlist(pa); + return 0; + } + free(pa->str); + free(pa->str2); + free(pa); + pa = np; + } + + pd = respip_data; + while(pd) { + struct config_str2list* np = pd->next; + log_assert(pd->str && pd->str2); + if(!respip_data_cfg(set, pd->str, pd->str2)) { + config_deldblstrlist(pd); + return 0; + } + free(pd->str); + free(pd->str2); + free(pd); + pd = np; + } + + return 1; +} + +int +respip_global_apply_cfg(struct respip_set* set, struct config_file* cfg) +{ + int ret = respip_set_apply_cfg(set, cfg->tagname, cfg->num_tags, + cfg->respip_tags, cfg->respip_actions, cfg->respip_data); + cfg->respip_data = NULL; + cfg->respip_actions = NULL; + cfg->respip_tags = NULL; + return ret; +} + +/** Iterate through raw view data and apply the view-specific respip + * configuration; at this point we should have already seen all the views, + * so if any of the views that respip data refer to does not exist, that's + * an error. This additional iteration through view configuration data + * is expected to not have significant performance impact (or rather, its + * performance impact is not expected to be prohibitive in the configuration + * processing phase). + */ +int +respip_views_apply_cfg(struct views* vs, struct config_file* cfg, + int* have_view_respip_cfg) +{ + struct config_view* cv; + struct view* v; + int ret; + + for(cv = cfg->views; cv; cv = cv->next) { + + /** if no respip config for this view then there's + * nothing to do; note that even though respip data must go + * with respip action, we're checking for both here because + * we want to catch the case where the respip action is missing + * while the data is present */ + if(!cv->respip_actions && !cv->respip_data) + continue; + + if(!(v = views_find_view(vs, cv->name, 1))) { + log_err("view '%s' unexpectedly missing", cv->name); + return 0; + } + if(!v->respip_set) { + v->respip_set = respip_set_create(); + if(!v->respip_set) { + log_err("out of memory"); + lock_rw_unlock(&v->lock); + return 0; + } + } + ret = respip_set_apply_cfg(v->respip_set, NULL, 0, NULL, + cv->respip_actions, cv->respip_data); + lock_rw_unlock(&v->lock); + if(!ret) { + log_err("Error while applying respip configuration " + "for view '%s'", cv->name); + return 0; + } + *have_view_respip_cfg = (*have_view_respip_cfg || + v->respip_set->ip_tree.count); + cv->respip_actions = NULL; + cv->respip_data = NULL; + } + return 1; +} + +/** + * make a deep copy of 'key' in 'region'. + * This is largely derived from packed_rrset_copy_region() and + * packed_rrset_ptr_fixup(), but differs in the following points: + * + * - It doesn't assume all data in 'key' are in a contiguous memory region. + * Although that would be the case in most cases, 'key' can be passed from + * a lower-level module and it might not build the rrset to meet the + * assumption. In fact, an rrset specified as response-ip-data or generated + * in local_data_find_tag_datas() breaks the assumption. So it would be + * safer not to naively rely on the assumption. On the other hand, this + * function ensures the copied rrset data are in a contiguous region so + * that it won't cause a disruption even if an upper layer module naively + * assumes the memory layout. + * - It doesn't copy RRSIGs (if any) in 'key'. The rrset will be used in + * a reply that was already faked, so it doesn't make much sense to provide + * partial sigs even if they are valid themselves. + * - It doesn't adjust TTLs as it basically has to be a verbatim copy of 'key' + * just allocated in 'region' (the assumption is necessary TTL adjustment + * has been already done in 'key'). + * + * This function returns the copied rrset key on success, and NULL on memory + * allocation failure. + */ +struct ub_packed_rrset_key* +copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region) +{ + struct ub_packed_rrset_key* ck = regional_alloc(region, + sizeof(struct ub_packed_rrset_key)); + struct packed_rrset_data* d; + struct packed_rrset_data* data = key->entry.data; + size_t dsize, i; + uint8_t* nextrdata; + + /* derived from packed_rrset_copy_region(), but don't use + * packed_rrset_sizeof() and do exclude RRSIGs */ + if(!ck) + return NULL; + ck->id = key->id; + memset(&ck->entry, 0, sizeof(ck->entry)); + ck->entry.hash = key->entry.hash; + ck->entry.key = ck; + ck->rk = key->rk; + ck->rk.dname = regional_alloc_init(region, key->rk.dname, + key->rk.dname_len); + if(!ck->rk.dname) + return NULL; + + dsize = sizeof(struct packed_rrset_data) + data->count * + (sizeof(size_t)+sizeof(uint8_t*)+sizeof(time_t)); + for(i=0; icount; i++) + dsize += data->rr_len[i]; + d = regional_alloc(region, dsize); + if(!d) + return NULL; + *d = *data; + d->rrsig_count = 0; + ck->entry.data = d; + + /* derived from packed_rrset_ptr_fixup() with copying the data */ + d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); + d->rr_data = (uint8_t**)&(d->rr_len[d->count]); + d->rr_ttl = (time_t*)&(d->rr_data[d->count]); + nextrdata = (uint8_t*)&(d->rr_ttl[d->count]); + for(i=0; icount; i++) { + d->rr_len[i] = data->rr_len[i]; + d->rr_ttl[i] = data->rr_ttl[i]; + d->rr_data[i] = nextrdata; + memcpy(d->rr_data[i], data->rr_data[i], data->rr_len[i]); + nextrdata += d->rr_len[i]; + } + + return ck; +} + +int +respip_init(struct module_env* env, int id) +{ + (void)env; + (void)id; + return 1; +} + +void +respip_deinit(struct module_env* env, int id) +{ + (void)env; + (void)id; +} + +/** Convert a packed AAAA or A RRset to sockaddr. */ +static int +rdata2sockaddr(const struct packed_rrset_data* rd, uint16_t rtype, size_t i, + struct sockaddr_storage* ss, socklen_t* addrlenp) +{ + /* unbound can accept and cache odd-length AAAA/A records, so we have + * to validate the length. */ + if(rtype == LDNS_RR_TYPE_A && rd->rr_len[i] == 6) { + struct sockaddr_in* sa4 = (struct sockaddr_in*)ss; + + memset(sa4, 0, sizeof(*sa4)); + sa4->sin_family = AF_INET; + memcpy(&sa4->sin_addr, rd->rr_data[i] + 2, + sizeof(sa4->sin_addr)); + *addrlenp = sizeof(*sa4); + return 1; + } else if(rtype == LDNS_RR_TYPE_AAAA && rd->rr_len[i] == 18) { + struct sockaddr_in6* sa6 = (struct sockaddr_in6*)ss; + + memset(sa6, 0, sizeof(*sa6)); + sa6->sin6_family = AF_INET6; + memcpy(&sa6->sin6_addr, rd->rr_data[i] + 2, + sizeof(sa6->sin6_addr)); + *addrlenp = sizeof(*sa6); + return 1; + } + return 0; +} + +/** + * Search the given 'iptree' for response address information that matches + * any of the IP addresses in an AAAA or A in the answer section of the + * response (stored in 'rep'). If found, a pointer to the matched resp_addr + * structure will be returned, and '*rrset_id' is set to the index in + * rep->rrsets for the RRset that contains the matching IP address record + * (the index is normally 0, but can be larger than that if this is a CNAME + * chain or type-ANY response). + */ +static const struct resp_addr* +respip_addr_lookup(const struct reply_info *rep, struct rbtree_type* iptree, + size_t* rrset_id) +{ + size_t i; + struct resp_addr* ra; + struct sockaddr_storage ss; + socklen_t addrlen; + + for(i=0; ian_numrrsets; i++) { + size_t j; + const struct packed_rrset_data* rd; + uint16_t rtype = ntohs(rep->rrsets[i]->rk.type); + + if(rtype != LDNS_RR_TYPE_A && rtype != LDNS_RR_TYPE_AAAA) + continue; + rd = rep->rrsets[i]->entry.data; + for(j = 0; j < rd->count; j++) { + if(!rdata2sockaddr(rd, rtype, j, &ss, &addrlen)) + continue; + ra = (struct resp_addr*)addr_tree_lookup(iptree, &ss, + addrlen); + if(ra) { + *rrset_id = i; + return ra; + } + } + } + + return NULL; +} + +/* + * Create a new reply_info based on 'rep'. The new info is based on + * the passed 'rep', but ignores any rrsets except for the first 'an_numrrsets' + * RRsets in the answer section. These answer rrsets are copied to the + * new info, up to 'copy_rrsets' rrsets (which must not be larger than + * 'an_numrrsets'). If an_numrrsets > copy_rrsets, the remaining rrsets array + * entries will be kept empty so the caller can fill them later. When rrsets + * are copied, they are shallow copied. The caller must ensure that the + * copied rrsets are valid throughout its lifetime and must provide appropriate + * mutex if it can be shared by multiple threads. + */ +static struct reply_info * +make_new_reply_info(const struct reply_info* rep, struct regional* region, + size_t an_numrrsets, size_t copy_rrsets) +{ + struct reply_info* new_rep; + size_t i; + + /* create a base struct. we specify 'insecure' security status as + * the modified response won't be DNSSEC-valid. In our faked response + * the authority and additional sections will be empty (except possible + * EDNS0 OPT RR in the additional section appended on sending it out), + * so the total number of RRsets is an_numrrsets. */ + new_rep = construct_reply_info_base(region, rep->flags, + rep->qdcount, rep->ttl, rep->prefetch_ttl, an_numrrsets, + 0, 0, an_numrrsets, sec_status_insecure); + if(!new_rep) + return NULL; + if(!reply_info_alloc_rrset_keys(new_rep, NULL, region)) + return NULL; + for(i=0; irrsets[i] = rep->rrsets[i]; + + return new_rep; +} + +/** + * See if response-ip or tag data should override the original answer rrset + * (which is rep->rrsets[rrset_id]) and if so override it. + * This is (mostly) equivalent to localzone.c:local_data_answer() but for + * response-ip actions. + * Note that this function distinguishes error conditions from "success but + * not overridden". This is because we want to avoid accidentally applying + * the "no data" action in case of error. + * @param raddr: address span that requires an action + * @param action: action to apply + * @apram qtype: original query type + * @param rep: original reply message + * @param rrset_id: the rrset ID in 'rep' to which the action should apply + * @param new_repp: see respip_rewrite_reply + * @tag: if >= 0 the tag ID used to determine the action and data + * @tag_datas: data corresponding to 'tag'. + * @tag_datas_size: size of 'tag_datas' + * @tagname: array of tag names, used for logging + * @num_tags: size of 'tagname', used for logging + * @redirect_rrsetp: ptr to redirect record + * @param region: region for building new reply + * @return 1 if overridden, 0 if not overridden, -1 on error. + */ +static int +respip_data_answer(const struct resp_addr* raddr, enum respip_action action, + uint16_t qtype, const struct reply_info* rep, + size_t rrset_id, struct reply_info** new_repp, int tag, + struct config_strlist** tag_datas, size_t tag_datas_size, + char* const* tagname, int num_tags, + struct ub_packed_rrset_key** redirect_rrsetp, struct regional* region) +{ + struct ub_packed_rrset_key* rp = raddr->data; + struct reply_info* new_rep; + *redirect_rrsetp = NULL; + + if(action == respip_redirect && tag != -1 && + (size_t)tagrrsets[rrset_id]->rk.dname; + dataqinfo.qname_len = rep->rrsets[rrset_id]->rk.dname_len; + dataqinfo.qtype = ntohs(rep->rrsets[rrset_id]->rk.type); + dataqinfo.qclass = ntohs(rep->rrsets[rrset_id]->rk.rrset_class); + + memset(&r, 0, sizeof(r)); + if(local_data_find_tag_datas(&dataqinfo, tag_datas[tag], &r, + region)) { + verbose(VERB_ALGO, + "response-ip redirect with tag data [%d] %s", + tag, (tagdata) { + rp = copy_rrset(rp, region); + if(!rp) + return -1; + rp->rk.dname = rep->rrsets[rrset_id]->rk.dname; + rp->rk.dname_len = rep->rrsets[rrset_id]->rk.dname_len; + } + + /* Build a new reply with redirect rrset. We keep any preceding CNAMEs + * and replace the address rrset that triggers the action. If it's + * type ANY query, however, no other answer records should be kept + * (note that it can't be a CNAME chain in this case due to + * sanitizing). */ + if(qtype == LDNS_RR_TYPE_ANY) + rrset_id = 0; + new_rep = make_new_reply_info(rep, region, rrset_id + 1, rrset_id); + if(!new_rep) + return -1; + rp->rk.flags |= PACKED_RRSET_FIXEDTTL; /* avoid adjusting TTL */ + new_rep->rrsets[rrset_id] = rp; + + *redirect_rrsetp = rp; + *new_repp = new_rep; + return 1; +} + +/** + * apply response ip action in case where no action data is provided. + * this is similar to localzone.c:lz_zone_answer() but simplified due to + * the characteristics of response ip: + * - 'deny' variants will be handled at the caller side + * - no specific processing for 'transparent' variants: unlike local zones, + * there is no such a case of 'no data but name existing'. so all variants + * just mean 'transparent if no data'. + * @param qtype: query type + * @param action: found action + * @param rep: + * @param new_repp + * @param region: region for building new reply + * @return 1 on success, 0 on error. + */ +static int +respip_nodata_answer(uint16_t qtype, enum respip_action action, + const struct reply_info *rep, size_t rrset_id, + struct reply_info** new_repp, struct regional* region) +{ + struct reply_info* new_rep; + + if(action == respip_refuse || action == respip_always_refuse) { + new_rep = make_new_reply_info(rep, region, 0, 0); + if(!new_rep) + return 0; + FLAGS_SET_RCODE(new_rep->flags, LDNS_RCODE_REFUSED); + *new_repp = new_rep; + return 1; + } else if(action == respip_static || action == respip_redirect || + action == respip_always_nxdomain) { + /* Since we don't know about other types of the owner name, + * we generally return NOERROR/NODATA unless an NXDOMAIN action + * is explicitly specified. */ + int rcode = (action == respip_always_nxdomain)? + LDNS_RCODE_NXDOMAIN:LDNS_RCODE_NOERROR; + + /* We should empty the answer section except for any preceding + * CNAMEs (in that case rrset_id > 0). Type-ANY case is + * special as noted in respip_data_answer(). */ + if(qtype == LDNS_RR_TYPE_ANY) + rrset_id = 0; + new_rep = make_new_reply_info(rep, region, rrset_id, rrset_id); + if(!new_rep) + return 0; + FLAGS_SET_RCODE(new_rep->flags, rcode); + *new_repp = new_rep; + return 1; + } + + return 1; +} + +/** Populate action info structure with the results of response-ip action + * processing, iff as the result of response-ip processing we are actually + * taking some action. Only action is set if action_only is true. + * Returns true on success, false on failure. + */ +static int +populate_action_info(struct respip_action_info* actinfo, + enum respip_action action, const struct resp_addr* raddr, + const struct ub_packed_rrset_key* ATTR_UNUSED(rrset), + int ATTR_UNUSED(tag), const struct respip_set* ATTR_UNUSED(ipset), + int ATTR_UNUSED(action_only), struct regional* region) +{ + if(action == respip_none || !raddr) + return 1; + actinfo->action = action; + + /* for inform variants, make a copy of the matched address block for + * later logging. We make a copy to proactively avoid disruption if + * and when we allow a dynamic update to the respip tree. */ + if(action == respip_inform || action == respip_inform_deny) { + struct respip_addr_info* a = + regional_alloc_zero(region, sizeof(*a)); + if(!a) { + log_err("out of memory"); + return 0; + } + a->addr = raddr->node.addr; + a->addrlen = raddr->node.addrlen; + a->net = raddr->node.net; + actinfo->addrinfo = a; + } + + return 1; +} + +int +respip_rewrite_reply(const struct query_info* qinfo, + const struct respip_client_info* cinfo, const struct reply_info* rep, + struct reply_info** new_repp, struct respip_action_info* actinfo, + struct ub_packed_rrset_key** alias_rrset, int search_only, + struct regional* region) +{ + const uint8_t* ctaglist; + size_t ctaglen; + const uint8_t* tag_actions; + size_t tag_actions_size; + struct config_strlist** tag_datas; + size_t tag_datas_size; + struct view* view = NULL; + struct respip_set* ipset = NULL; + size_t rrset_id = 0; + enum respip_action action = respip_none; + int tag = -1; + const struct resp_addr* raddr = NULL; + int ret = 1; + struct ub_packed_rrset_key* redirect_rrset = NULL; + + if(!cinfo) + goto done; + ctaglist = cinfo->taglist; + ctaglen = cinfo->taglen; + tag_actions = cinfo->tag_actions; + tag_actions_size = cinfo->tag_actions_size; + tag_datas = cinfo->tag_datas; + tag_datas_size = cinfo->tag_datas_size; + view = cinfo->view; + ipset = cinfo->respip_set; + + /** Try to use response-ip config from the view first; use + * global response-ip config if we don't have the view or we don't + * have the matching per-view config (and the view allows the use + * of global data in this case). + * Note that we lock the view even if we only use view members that + * currently don't change after creation. This is for safety for + * future possible changes as the view documentation seems to expect + * any of its member can change in the view's lifetime. + * Note also that we assume 'view' is valid in this function, which + * should be safe (see unbound bug #1191) */ + if(view) { + lock_rw_rdlock(&view->lock); + if(view->respip_set) { + if((raddr = respip_addr_lookup(rep, + &view->respip_set->ip_tree, &rrset_id))) { + /** for per-view respip directives the action + * can only be direct (i.e. not tag-based) */ + action = raddr->action; + } + } + if(!raddr && !view->isfirst) + goto done; + } + if(!raddr && ipset && (raddr = respip_addr_lookup(rep, &ipset->ip_tree, + &rrset_id))) { + action = local_data_find_tag_action(raddr->taglist, + raddr->taglen, ctaglist, ctaglen, tag_actions, + tag_actions_size, raddr->action, &tag, + ipset->tagname, ipset->num_tags); + } + if(raddr && !search_only) { + int result = 0; + + /* first, see if we have response-ip or tag action for the + * action except for 'always' variants. */ + if(action != respip_always_refuse + && action != respip_always_transparent + && action != respip_always_nxdomain + && (result = respip_data_answer(raddr, action, + qinfo->qtype, rep, rrset_id, new_repp, tag, tag_datas, + tag_datas_size, ipset->tagname, ipset->num_tags, + &redirect_rrset, region)) < 0) { + ret = 0; + goto done; + } + + /* if no action data applied, take action specific to the + * action without data. */ + if(!result && !respip_nodata_answer(qinfo->qtype, action, rep, + rrset_id, new_repp, region)) { + ret = 0; + goto done; + } + } + done: + if(view) + lock_rw_unlock(&view->lock); + if(ret) { + /* If we're redirecting the original answer to a + * CNAME, record the CNAME rrset so the caller can take + * the appropriate action. Note that we don't check the + * action type; it should normally be 'redirect', but it + * can be of other type when a data-dependent tag action + * uses redirect response-ip data. + */ + if(redirect_rrset && + redirect_rrset->rk.type == ntohs(LDNS_RR_TYPE_CNAME) && + qinfo->qtype != LDNS_RR_TYPE_ANY) + *alias_rrset = redirect_rrset; + /* on success, populate respip result structure */ + ret = populate_action_info(actinfo, action, raddr, + redirect_rrset, tag, ipset, search_only, region); + } + return ret; +} + +static int +generate_cname_request(struct module_qstate* qstate, + struct ub_packed_rrset_key* alias_rrset) +{ + struct module_qstate* subq = NULL; + struct query_info subqi; + + memset(&subqi, 0, sizeof(subqi)); + get_cname_target(alias_rrset, &subqi.qname, &subqi.qname_len); + if(!subqi.qname) + return 0; /* unexpected: not a valid CNAME RDATA */ + subqi.qtype = qstate->qinfo.qtype; + subqi.qclass = qstate->qinfo.qclass; + fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); + return (*qstate->env->attach_sub)(qstate, &subqi, BIT_RD, 0, 0, &subq); +} + +void +respip_operate(struct module_qstate* qstate, enum module_ev event, int id, + struct outbound_entry* outbound) +{ + struct respip_qstate* rq = (struct respip_qstate*)qstate->minfo[id]; + + log_query_info(VERB_QUERY, "respip operate: query", &qstate->qinfo); + (void)outbound; + + if(event == module_event_new || event == module_event_pass) { + if(!rq) { + rq = regional_alloc_zero(qstate->region, sizeof(*rq)); + if(!rq) + goto servfail; + rq->state = RESPIP_INIT; + qstate->minfo[id] = rq; + } + if(rq->state == RESPIP_SUBQUERY_FINISHED) { + qstate->ext_state[id] = module_finished; + return; + } + verbose(VERB_ALGO, "respip: pass to next module"); + qstate->ext_state[id] = module_wait_module; + } else if(event == module_event_moddone) { + /* If the reply may be subject to response-ip rewriting + * according to the query type, check the actions. If a + * rewrite is necessary, we'll replace the reply in qstate + * with the new one. */ + enum module_ext_state next_state = module_finished; + + if((qstate->qinfo.qtype == LDNS_RR_TYPE_A || + qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA || + qstate->qinfo.qtype == LDNS_RR_TYPE_ANY) && + qstate->return_msg && qstate->return_msg->rep) { + struct respip_action_info actinfo = {respip_none, NULL}; + struct reply_info* new_rep = qstate->return_msg->rep; + struct ub_packed_rrset_key* alias_rrset = NULL; + + if(!respip_rewrite_reply(&qstate->qinfo, + qstate->client_info, qstate->return_msg->rep, + &new_rep, &actinfo, &alias_rrset, 0, + qstate->region)) { + goto servfail; + } + if(actinfo.action != respip_none) { + /* save action info for logging on a + * per-front-end-query basis */ + if(!(qstate->respip_action_info = + regional_alloc_init(qstate->region, + &actinfo, sizeof(actinfo)))) + { + log_err("out of memory"); + goto servfail; + } + } else { + qstate->respip_action_info = NULL; + } + if (new_rep == qstate->return_msg->rep && + (actinfo.action == respip_deny || + actinfo.action == respip_inform_deny)) { + /* for deny-variant actions (unless response-ip + * data is applied), mark the query state so + * the response will be dropped for all + * clients. */ + qstate->is_drop = 1; + } else if(alias_rrset) { + if(!generate_cname_request(qstate, alias_rrset)) + goto servfail; + next_state = module_wait_subquery; + } + qstate->return_msg->rep = new_rep; + } + qstate->ext_state[id] = next_state; + } else + qstate->ext_state[id] = module_finished; + + return; + + servfail: + qstate->return_rcode = LDNS_RCODE_SERVFAIL; + qstate->return_msg = NULL; +} + +int +respip_merge_cname(struct reply_info* base_rep, + const struct query_info* qinfo, const struct reply_info* tgt_rep, + const struct respip_client_info* cinfo, int must_validate, + struct reply_info** new_repp, struct regional* region) +{ + struct reply_info* new_rep; + struct reply_info* tmp_rep = NULL; /* just a placeholder */ + struct ub_packed_rrset_key* alias_rrset = NULL; /* ditto */ + int tgt_rcode; + size_t i, j; + struct respip_action_info actinfo = {respip_none, NULL}; + + /* If the query for the CNAME target would result in an unusual rcode, + * we generally translate it as a failure for the base query + * (which would then be translated into SERVFAIL). The only exception + * is NXDOMAIN and YXDOMAIN, which are passed to the end client(s). + * The YXDOMAIN case would be rare but still possible (when + * DNSSEC-validated DNAME has been cached but synthesizing CNAME + * can't be generated due to length limitation) */ + tgt_rcode = FLAGS_GET_RCODE(tgt_rep->flags); + if((tgt_rcode != LDNS_RCODE_NOERROR && + tgt_rcode != LDNS_RCODE_NXDOMAIN && + tgt_rcode != LDNS_RCODE_YXDOMAIN) || + (must_validate && tgt_rep->security <= sec_status_bogus)) { + return 0; + } + + /* see if the target reply would be subject to a response-ip action. */ + if(!respip_rewrite_reply(qinfo, cinfo, tgt_rep, &tmp_rep, &actinfo, + &alias_rrset, 1, region)) + return 0; + if(actinfo.action != respip_none) { + log_info("CNAME target of redirect response-ip action would " + "be subject to response-ip action, too; stripped"); + *new_repp = base_rep; + return 1; + } + + /* Append target reply to the base. Since we cannot assume + * tgt_rep->rrsets is valid throughout the lifetime of new_rep + * or it can be safely shared by multiple threads, we need to make a + * deep copy. */ + new_rep = make_new_reply_info(base_rep, region, + base_rep->an_numrrsets + tgt_rep->an_numrrsets, + base_rep->an_numrrsets); + if(!new_rep) + return 0; + for(i=0,j=base_rep->an_numrrsets; ian_numrrsets; i++,j++) { + new_rep->rrsets[j] = copy_rrset(tgt_rep->rrsets[i], region); + if(!new_rep->rrsets[j]) + return 0; + } + + FLAGS_SET_RCODE(new_rep->flags, tgt_rcode); + *new_repp = new_rep; + return 1; +} + +void +respip_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super) +{ + struct respip_qstate* rq = (struct respip_qstate*)super->minfo[id]; + struct reply_info* new_rep = NULL; + + rq->state = RESPIP_SUBQUERY_FINISHED; + + /* respip subquery should have always been created with a valid reply + * in super. */ + log_assert(super->return_msg && super->return_msg->rep); + + /* return_msg can be NULL when, e.g., the sub query resulted in + * SERVFAIL, in which case we regard it as a failure of the original + * query. Other checks are probably redundant, but we check them + * for safety. */ + if(!qstate->return_msg || !qstate->return_msg->rep || + qstate->return_rcode != LDNS_RCODE_NOERROR) + goto fail; + + if(!respip_merge_cname(super->return_msg->rep, &qstate->qinfo, + qstate->return_msg->rep, super->client_info, + super->env->need_to_validate, &new_rep, super->region)) + goto fail; + super->return_msg->rep = new_rep; + return; + + fail: + super->return_rcode = LDNS_RCODE_SERVFAIL; + super->return_msg = NULL; + return; +} + +void +respip_clear(struct module_qstate* qstate, int id) +{ + qstate->minfo[id] = NULL; +} + +size_t +respip_get_mem(struct module_env* env, int id) +{ + (void)env; + (void)id; + return 0; +} + +/** + * The response-ip function block + */ +static struct module_func_block respip_block = { + "respip", + &respip_init, &respip_deinit, &respip_operate, &respip_inform_super, + &respip_clear, &respip_get_mem +}; + +struct module_func_block* +respip_get_funcblock(void) +{ + return &respip_block; +} + +enum respip_action +resp_addr_get_action(const struct resp_addr* addr) +{ + return addr ? addr->action : respip_none; +} + +struct ub_packed_rrset_key* +resp_addr_get_rrset(struct resp_addr* addr) +{ + return addr ? addr->data : NULL; +} + +int +respip_set_is_empty(const struct respip_set* set) +{ + return set ? set->ip_tree.count == 0 : 1; +} + +void +respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, + uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, + struct comm_reply* repinfo) +{ + char srcip[128], respip[128], txt[512]; + unsigned port; + + if(local_alias) + qname = local_alias->rrset->rk.dname; + port = (repinfo->addr.ss_family == AF_INET) ? + ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port) : + ntohs(((struct sockaddr_in6*)&repinfo->addr)->sin6_port); + addr_to_str(&repinfo->addr, repinfo->addrlen, srcip, sizeof(srcip)); + addr_to_str(&respip_addr->addr, respip_addr->addrlen, + respip, sizeof(respip)); + snprintf(txt, sizeof(txt), "%s/%d inform %s@%u", respip, + respip_addr->net, srcip, port); + log_nametypeclass(0, txt, qname, qtype, qclass); +} diff --git a/respip/respip.h b/respip/respip.h new file mode 100644 index 000000000..94e0dfae7 --- /dev/null +++ b/respip/respip.h @@ -0,0 +1,230 @@ +/* + * respip/respip.h - IP-based response modification module + */ + +/** + * \file + * + * This file contains a module that selectively modifies query responses + * based on their AAAA/A IP addresses. + */ + +#ifndef RESPIP_RESPIP_H +#define RESPIP_RESPIP_H + +#include "util/module.h" +#include "services/localzone.h" + +/** + * Set of response IP addresses with associated actions and tags. + * Forward declaration only here. Actual definition is hidden within the + * module. + */ +struct respip_set; + +/** + * Forward declaration for the structure that represents a node in the + * respip_set address tree + */ +struct resp_addr; + +/** + * Forward declaration for the structure that represents a tree of view data. + */ +struct views; + +struct respip_addr_info; + +/** + * Client-specific attributes that can affect IP-based actions. + * This is essentially a subset of acl_addr (except for respip_set) but + * defined as a separate structure to avoid dependency on the daemon-specific + * structure. + * respip_set is supposed to refer to the response-ip set for the global view. + */ +struct respip_client_info { + uint8_t* taglist; + size_t taglen; + uint8_t* tag_actions; + size_t tag_actions_size; + struct config_strlist** tag_datas; + size_t tag_datas_size; + struct view* view; + struct respip_set* respip_set; +}; + +/** + * Data items representing the result of response-ip processing. + * Note: this structure currently only define a few members, but exists + * as a separate struct mainly for the convenience of custom extensions. + */ +struct respip_action_info { + enum respip_action action; + struct respip_addr_info* addrinfo; /* set only for inform variants */ +}; + +/** + * Forward declaration for the structure that represents a node in the + * respip_set address tree + */ +struct resp_addr; + +/** + * Create response IP set. + * @return new struct or NULL on error. + */ +struct respip_set* respip_set_create(void); + +/** + * Delete response IP set. + * @param set: to delete. + */ +void respip_set_delete(struct respip_set* set); + +/** + * Apply response-ip config settings to the global (default) view. + * It assumes exclusive access to set (no internal locks). + * @param set: processed global respip config data + * @param cfg: config data. + * @return 1 on success, 0 on error. + */ +int respip_global_apply_cfg(struct respip_set* set, struct config_file* cfg); + +/** + * Apply response-ip config settings in named views. + * @param vs: view structures with processed config data + * @param cfg: config data. + * @param have_view_respip_cfg: set to true if any named view has respip + * configuration; otherwise set to false + * @return 1 on success, 0 on error. + */ +int respip_views_apply_cfg(struct views* vs, struct config_file* cfg, + int* have_view_respip_cfg); + +/** + * Merge two replies to build a complete CNAME chain. + * It appends the content of 'tgt_rep' to 'base_rep', assuming (but not + * checking) the former ends with a CNAME and the latter resolves its target. + * A merged new reply will be built using 'region' and *new_repp will point + * to the new one on success. + * If the target reply would also be subject to a response-ip action for + * 'cinfo', this function uses 'base_rep' as the merged reply, ignoring + * 'tgt_rep'. This is for avoiding cases like a CNAME loop or failure of + * applying an action to an address. + * RRSIGs in 'tgt_rep' will be excluded in the merged reply, as the resulting + * reply is assumed to be faked due to a response-ip action and can't be + * considered secure in terms of DNSSEC. + * The caller must ensure that neither 'base_rep' nor 'tgt_rep' can be modified + * until this function returns. + * @param base_rep: the reply info containing an incomplete CNAME. + * @param qinfo: query info corresponding to 'base_rep'. + * @param tgt_rep: the reply info that completes the CNAME chain. + * @param cinfo: client info corresponding to 'base_rep'. + * @param must_validate: whether 'tgt_rep' must be DNSSEC-validated. + * @param new_repp: pointer placeholder for the merged reply. will be intact + * on error. + * @param region: allocator to build *new_repp. + * @return 1 on success, 0 on error. + */ +int respip_merge_cname(struct reply_info* base_rep, + const struct query_info* qinfo, const struct reply_info* tgt_rep, + const struct respip_client_info* cinfo, int must_validate, + struct reply_info** new_repp, struct regional* region); + +/** + * See if any IP-based action should apply to any IP address of AAAA/A answer + * record in the reply. If so, apply the action. In some cases it rewrites + * the reply rrsets, in which case *new_repp will point to the updated reply + * info. Depending on the action, some of the rrsets in 'rep' will be + * shallow-copied into '*new_repp'; the caller must ensure that the rrsets + * in 'rep' are valid throughout the lifetime of *new_repp, and it must + * provide appropriate mutex if the rrsets can be shared by multiple threads. + * @param qinfo: query info corresponding to the reply. + * @param cinfo: client-specific info to identify the best matching action. + * can be NULL. + * @param rep: original reply info. must not be NULL. + * @param new_repp: can be set to the rewritten reply info (intact on failure). + * @param actinfo: result of response-ip processing + * @param alias_rrset: must not be NULL. + * @param search_only: if true, only check if an action would apply. actionp + * will be set (or intact) accordingly but the modified reply won't be built. + * @param region: allocator to build *new_repp. + * @return 1 on success, 0 on error. + */ +int respip_rewrite_reply(const struct query_info* qinfo, + const struct respip_client_info* cinfo, + const struct reply_info *rep, struct reply_info** new_repp, + struct respip_action_info* actinfo, + struct ub_packed_rrset_key** alias_rrset, + int search_only, struct regional* region); + +/** + * Get the response-ip function block. + * @return: function block with function pointers to response-ip methods. + */ +struct module_func_block* respip_get_funcblock(void); + +/** response-ip init */ +int respip_init(struct module_env* env, int id); + +/** response-ip deinit */ +void respip_deinit(struct module_env* env, int id); + +/** response-ip operate on a query */ +void respip_operate(struct module_qstate* qstate, enum module_ev event, int id, + struct outbound_entry* outbound); + +/** inform response-ip super */ +void respip_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super); + +/** response-ip cleanup query state */ +void respip_clear(struct module_qstate* qstate, int id); + +/** + * returns address of the IP address tree of the specified respip set; + * returns NULL for NULL input; exists for test purposes only + */ +struct rbtree_type* respip_set_get_tree(struct respip_set* set); + +/** + * returns respip action for the specified node in the respip address + * returns respip_none for NULL input; exists for test purposes only + */ +enum respip_action resp_addr_get_action(const struct resp_addr* addr); + +/** + * returns rrset portion of the specified node in the respip address + * tree; returns NULL for NULL input; exists for test purposes only + */ +struct ub_packed_rrset_key* resp_addr_get_rrset(struct resp_addr* addr); + +/** response-ip alloc size routine */ +size_t respip_get_mem(struct module_env* env, int id); + +/** + * respip set emptiness test + * @param set respip set to test + * @return 0 if the specified set exists (non-NULL) and is non-empty; + * otherwise returns 1 + */ +int respip_set_is_empty(const struct respip_set* set); + +/** + * print log information for a query subject to an inform or inform-deny + * response-ip action. + * @param resp_addr response-ip information that causes the action + * @param qname query name in the context, will be ignored if local_alias is + * non-NULL. + * @param qtype query type, in host byte order. + * @param qclass query class, in host byte order. + * @param local_alias set to a local alias if the query matches an alias in + * a local zone. In this case its owner name will be considered the actual + * query name. + * @param repinfo reply info containing the client's source address and port. + */ +void respip_inform_print(struct respip_addr_info* respip_addr, uint8_t* qname, + uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, + struct comm_reply* repinfo); + +#endif /* RESPIP_RESPIP_H */ diff --git a/services/localzone.c b/services/localzone.c index d813ab586..54a8660b8 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -229,9 +229,8 @@ lz_enter_zone(struct local_zones* zones, const char* name, const char* type, return z; } -/** return name and class and rdata of rr; parses string */ -static int -get_rr_content(const char* str, uint8_t** nm, uint16_t* type, +int +rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type, uint16_t* dclass, time_t* ttl, uint8_t* rr, size_t len, uint8_t** rdata, size_t* rdata_len) { @@ -353,8 +352,8 @@ new_local_rrset(struct regional* region, struct local_data* node, } /** insert RR into RRset data structure; Wastes a couple of bytes */ -static int -insert_rr(struct regional* region, struct packed_rrset_data* pd, +int +rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr) { size_t* oldlen = pd->rr_len; @@ -456,8 +455,8 @@ lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) uint8_t rr[LDNS_RR_BUF_SIZE]; uint8_t* rdata; size_t rdata_len; - if(!get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, sizeof(rr), - &rdata, &rdata_len)) { + if(!rrstr_get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, + sizeof(rr), &rdata, &rdata_len)) { log_err("bad local-data: %s", rrstr); return 0; } @@ -513,7 +512,7 @@ lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) verbose(VERB_ALGO, "ignoring duplicate RR: %s", rrstr); return 1; } - return insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr); + return rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr); } /** enter a data RR into auth data; a zone for it must exist */ @@ -1233,9 +1232,10 @@ local_error_encode(struct query_info* qinfo, struct module_env* env, } /** find local data tag string match for the given type in the list */ -static int -find_tag_datas(struct query_info* qinfo, struct config_strlist* list, - struct ub_packed_rrset_key* r, struct regional* temp) +int +local_data_find_tag_datas(const struct query_info* qinfo, + struct config_strlist* list, struct ub_packed_rrset_key* r, + struct regional* temp) { struct config_strlist* p; char buf[65536]; @@ -1315,10 +1315,21 @@ find_tag_datas(struct query_info* qinfo, struct config_strlist* list, if(!d) return 0; /* out of memory */ d->count++; } + if(r->rk.dname) + return 1; + return 0; +} + +static int +find_tag_datas(struct query_info* qinfo, struct config_strlist* list, + struct ub_packed_rrset_key* r, struct regional* temp) +{ + int result = local_data_find_tag_datas(qinfo, list, r, temp); + /* If we've found a non-exact alias type of local data, make a shallow * copy of the RRset and remember it in qinfo to complete the alias * chain later. */ - if(r->rk.dname && qinfo->qtype != LDNS_RR_TYPE_CNAME && + if(result && qinfo->qtype != LDNS_RR_TYPE_CNAME && r->rk.type == htons(LDNS_RR_TYPE_CNAME)) { qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset)); @@ -1329,9 +1340,7 @@ find_tag_datas(struct query_info* qinfo, struct config_strlist* list, if(!qinfo->local_alias->rrset) return 0; /* out of memory */ } - if(r->rk.dname) - return 1; - return 0; + return result; } /** answer local data match */ @@ -1497,8 +1506,6 @@ lz_type(uint8_t *taglist, size_t taglen, uint8_t *taglist2, size_t taglen2, struct comm_reply* repinfo, struct rbtree_type* override_tree, int* tag, char** tagname, int num_tags) { - size_t i, j; - uint8_t tagmatch; struct local_zone_override* lzo; if(repinfo && override_tree) { lzo = (struct local_zone_override*)addr_tree_lookup( @@ -1511,6 +1518,19 @@ lz_type(uint8_t *taglist, size_t taglen, uint8_t *taglist2, size_t taglen2, } if(!taglist || !taglist2) return lzt; + return local_data_find_tag_action(taglist, taglen, taglist2, taglen2, + tagactions, tagactionssize, lzt, tag, tagname, num_tags); +} + +enum localzone_type +local_data_find_tag_action(const uint8_t* taglist, size_t taglen, + const uint8_t* taglist2, size_t taglen2, const uint8_t* tagactions, + size_t tagactionssize, enum localzone_type lzt, int* tag, + char* const* tagname, int num_tags) +{ + size_t i, j; + uint8_t tagmatch; + for(i=0; i0; j++) { diff --git a/services/localzone.h b/services/localzone.h index bf9c9bf48..658f28024 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -46,6 +46,7 @@ #include "util/storage/dnstree.h" #include "util/module.h" #include "services/view.h" +struct packed_rrset_data; struct ub_packed_rrset_key; struct regional; struct config_file; @@ -389,4 +390,111 @@ void local_zones_del_data(struct local_zones* zones, */ int parse_dname(const char* str, uint8_t** res, size_t* len, int* labs); +/** + * Find local data tag string match for the given type (in qinfo) in the list. + * If found, 'r' will be filled with corresponding rrset information. + * @param qinfo: contains name, type, and class for the data + * @param list: stores local tag data to be searched + * @param r: rrset key to be filled for matched data + * @param temp: region to allocate rrset in 'r' + * @return 1 if a match is found and rrset is built; otherwise 0 including + * errors. + */ +int local_data_find_tag_datas(const struct query_info* qinfo, + struct config_strlist* list, struct ub_packed_rrset_key* r, + struct regional* temp); + +/** + * See if two sets of tag lists (in the form of bitmap) have the same tag that + * has an action. If so, '*tag' will be set to the found tag index, and the + * corresponding action will be returned in the form of local zone type. + * Otherwise the passed type (lzt) will be returned as the default action. + * Pointers except tagactions must not be NULL. + * @param taglist: 1st list of tags + * @param taglen: size of taglist in bytes + * @param taglist2: 2nd list of tags + * @param taglen2: size of taglist2 in bytes + * @param tagactions: local data actions for tags. May be NULL. + * @param tagactionssize: length of the tagactions. + * @param lzt: default action (local zone type) if no tag action is found. + * @param tag: see above. + * @param tagname: array of tag name strings (for debug output). + * @param num_tags: number of items in tagname array. + * @return found tag action or the default action. + */ +enum localzone_type local_data_find_tag_action(const uint8_t* taglist, + size_t taglen, const uint8_t* taglist2, size_t taglen2, + const uint8_t* tagactions, size_t tagactionssize, + enum localzone_type lzt, int* tag, char* const* tagname, int num_tags); + +/** + * Parses resource record string into wire format, also returning its field values. + * @param str: input resource record + * @param nm: domain name field + * @param type: record type field + * @param dclass: record class field + * @param ttl: ttl field + * @param rr: buffer for the parsed rr in wire format + * @param len: buffer length + * @param rdata: rdata field + * @param rdata_len: rdata field length + * @return 1 on success; 0 otherwise. + */ +int rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type, + uint16_t* dclass, time_t* ttl, uint8_t* rr, size_t len, + uint8_t** rdata, size_t* rdata_len); + +/** + * Insert specified rdata into the specified resource record. + * @param region: allocator + * @param pd: data portion of the destination resource record + * @param rdata: source rdata + * @param rdata_len: source rdata length + * @param ttl: time to live + * @param rrstr: resource record in text form (for logging) + * @return 1 on success; 0 otherwise. + */ +int rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, + uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr); + +/** + * Valid response ip actions for the IP-response-driven-action feature; + * defined here instead of in the respip module to enable sharing of enum + * values with the localzone_type enum. + * Note that these values except 'none' are the same as localzone types of + * the 'same semantics'. It's intentional as we use these values via + * access-control-tags, which can be shared for both response ip actions and + * local zones. + */ +enum respip_action { + /** no respip action */ + respip_none = local_zone_unset, + /** don't answer */ + respip_deny = local_zone_deny, + /** redirect as per provided data */ + respip_redirect = local_zone_redirect, + /** log query source and answer query */ + respip_inform = local_zone_inform, + /** log query source and don't answer query */ + respip_inform_deny = local_zone_inform_deny, + /** resolve normally, even when there is response-ip data */ + respip_always_transparent = local_zone_always_transparent, + /** answer with 'refused' response */ + respip_always_refuse = local_zone_always_refuse, + /** answer with 'no such domain' response */ + respip_always_nxdomain = local_zone_always_nxdomain, + + /* The rest of the values are only possible as + * access-control-tag-action */ + + /** serves response data (if any), else, drops queries. */ + respip_refuse = local_zone_refuse, + /** serves response data, else, nodata answer. */ + respip_static = local_zone_static, + /** gives response data (if any), else nodata answer. */ + respip_transparent = local_zone_transparent, + /** gives response data (if any), else nodata answer. */ + respip_typetransparent = local_zone_typetransparent, +}; + #endif /* SERVICES_LOCALZONE_H */ diff --git a/services/mesh.c b/services/mesh.c index f5a193ac2..540f44f35 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -59,6 +59,7 @@ #include "sldns/wire2str.h" #include "services/localzone.h" #include "util/data/dname.h" +#include "respip/respip.h" /** subtract timers and the values do not overflow or become negative */ static void @@ -124,11 +125,64 @@ timeval_smaller(const struct timeval* x, const struct timeval* y) #endif } +/* + * Compare two response-ip client info entries for the purpose of mesh state + * compare. It returns 0 if ci_a and ci_b are considered equal; otherwise + * 1 or -1 (they mean 'ci_a is larger/smaller than ci_b', respectively, but + * in practice it should be only used to mean they are different). + * We cannot share the mesh state for two queries if different response-ip + * actions can apply in the end, even if those queries are otherwise identical. + * For this purpose we compare tag lists and tag action lists; they should be + * identical to share the same state. + * For tag data, we don't look into the data content, as it can be + * expensive; unless tag data are not defined for both or they point to the + * exact same data in memory (i.e., they come from the same ACL entry), we + * consider these data different. + * Likewise, if the client info is associated with views, we don't look into + * the views. They are considered different unless they are exactly the same + * even if the views only differ in the names. + */ +static int +client_info_compare(const struct respip_client_info* ci_a, + const struct respip_client_info* ci_b) +{ + int cmp; + + if(!ci_a && !ci_b) + return 0; + if(ci_a && !ci_b) + return -1; + if(!ci_a && ci_b) + return 1; + if(ci_a->taglen != ci_b->taglen) + return (ci_a->taglen < ci_b->taglen) ? -1 : 1; + cmp = memcmp(ci_a->taglist, ci_b->taglist, ci_a->taglen); + if(cmp != 0) + return cmp; + if(ci_a->tag_actions_size != ci_b->tag_actions_size) + return (ci_a->tag_actions_size < ci_b->tag_actions_size) ? + -1 : 1; + cmp = memcmp(ci_a->tag_actions, ci_b->tag_actions, + ci_a->tag_actions_size); + if(cmp != 0) + return cmp; + if(ci_a->tag_datas != ci_b->tag_datas) + return ci_a->tag_datas < ci_b->tag_datas ? -1 : 1; + if(ci_a->view != ci_b->view) + return ci_a->view < ci_b->view ? -1 : 1; + /* For the unbound daemon these should be non-NULL and identical, + * but we check that just in case. */ + if(ci_a->respip_set != ci_b->respip_set) + return ci_a->respip_set < ci_b->respip_set ? -1 : 1; + return 0; +} + int mesh_state_compare(const void* ap, const void* bp) { struct mesh_state* a = (struct mesh_state*)ap; struct mesh_state* b = (struct mesh_state*)bp; + int cmp; if(a->unique < b->unique) return -1; @@ -155,7 +209,10 @@ mesh_state_compare(const void* ap, const void* bp) if(!(a->s.query_flags&BIT_CD) && (b->s.query_flags&BIT_CD)) return 1; - return query_info_compare(&a->s.qinfo, &b->s.qinfo); + cmp = query_info_compare(&a->s.qinfo, &b->s.qinfo); + if(cmp != 0) + return cmp; + return client_info_compare(a->s.client_info, b->s.client_info); } int @@ -287,8 +344,8 @@ int mesh_make_new_space(struct mesh_area* mesh, sldns_buffer* qbuf) } void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, - uint16_t qflags, struct edns_data* edns, struct comm_reply* rep, - uint16_t qid) + struct respip_client_info* cinfo, uint16_t qflags, + struct edns_data* edns, struct comm_reply* rep, uint16_t qid) { struct mesh_state* s = NULL; int unique = edns_unique_mesh_state(edns->opt_list, mesh->env); @@ -296,7 +353,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, int was_noreply = 0; int added = 0; if(!unique) - s = mesh_area_find(mesh, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); + s = mesh_area_find(mesh, cinfo, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); /* does this create a new reply state? */ if(!s || s->list_select == mesh_no_list) { if(!mesh_make_new_space(mesh, rep->c->buffer)) { @@ -323,7 +380,8 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif - s = mesh_state_create(mesh->env, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); + s = mesh_state_create(mesh->env, qinfo, cinfo, + qflags&(BIT_RD|BIT_CD), 0, 0); if(!s) { log_err("mesh_state_create: out of memory; SERVFAIL"); if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, NULL, @@ -417,7 +475,8 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, int was_noreply = 0; int added = 0; if(!unique) - s = mesh_area_find(mesh, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); + s = mesh_area_find(mesh, NULL, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); + /* there are no limits on the number of callbacks */ /* see if it already exists, if not, create one */ @@ -425,7 +484,8 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif - s = mesh_state_create(mesh->env, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); + s = mesh_state_create(mesh->env, qinfo, NULL, + qflags&(BIT_RD|BIT_CD), 0, 0); if(!s) { return 0; } @@ -476,8 +536,8 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qflags, time_t leeway) { - struct mesh_state* s = mesh_area_find(mesh, qinfo, qflags&(BIT_RD|BIT_CD), - 0, 0); + struct mesh_state* s = mesh_area_find(mesh, NULL, qinfo, + qflags&(BIT_RD|BIT_CD), 0, 0); #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif @@ -497,7 +557,8 @@ void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo, return; } - s = mesh_state_create(mesh->env, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); + s = mesh_state_create(mesh->env, qinfo, NULL, + qflags&(BIT_RD|BIT_CD), 0, 0); if(!s) { log_err("prefetch mesh_state_create: out of memory"); return; @@ -546,7 +607,8 @@ void mesh_report_reply(struct mesh_area* mesh, struct outbound_entry* e, struct mesh_state* mesh_state_create(struct module_env* env, struct query_info* qinfo, - uint16_t qflags, int prime, int valrec) + struct respip_client_info* cinfo, uint16_t qflags, int prime, + int valrec) { struct regional* region = alloc_reg_obtain(env->alloc); struct mesh_state* mstate; @@ -582,6 +644,14 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo, alloc_reg_release(env->alloc, region); return NULL; } + if(cinfo) { + mstate->s.client_info = regional_alloc_init(region, cinfo, + sizeof(*cinfo)); + if(!mstate->s.client_info) { + alloc_reg_release(env->alloc, region); + return NULL; + } + } /* remove all weird bits from qflags */ mstate->s.query_flags = (qflags & (BIT_RD|BIT_CD)); mstate->s.is_priming = prime; @@ -756,7 +826,8 @@ int mesh_attach_sub(struct module_qstate* qstate, struct query_info* qinfo, { /* find it, if not, create it */ struct mesh_area* mesh = qstate->env->mesh; - struct mesh_state* sub = mesh_area_find(mesh, qinfo, qflags, prime, valrec); + struct mesh_state* sub = mesh_area_find(mesh, NULL, qinfo, qflags, + prime, valrec); int was_detached; if(mesh_detect_cycle_found(qstate, sub)) { verbose(VERB_ALGO, "attach failed, cycle detected"); @@ -767,7 +838,8 @@ int mesh_attach_sub(struct module_qstate* qstate, struct query_info* qinfo, struct rbnode_type* n; #endif /* create a new one */ - sub = mesh_state_create(qstate->env, qinfo, qflags, prime, valrec); + sub = mesh_state_create(qstate->env, qinfo, NULL, qflags, prime, + valrec); if(!sub) { log_err("mesh_attach_sub: out of memory"); return 0; @@ -1035,8 +1107,25 @@ void mesh_query_done(struct mesh_state* mstate) struct reply_info* rep = (mstate->s.return_msg? mstate->s.return_msg->rep:NULL); for(r = mstate->reply_list; r; r = r->next) { - mesh_send_reply(mstate, mstate->s.return_rcode, rep, r, prev); - prev = r; + /* if a response-ip address block has been stored the + * information should be logged for each client. */ + if(mstate->s.respip_action_info && + mstate->s.respip_action_info->addrinfo) { + respip_inform_print(mstate->s.respip_action_info->addrinfo, + r->qname, mstate->s.qinfo.qtype, + mstate->s.qinfo.qclass, r->local_alias, + &r->query_reply); + } + + /* if this query is determined to be dropped during the + * mesh processing, this is the point to take that action. */ + if(mstate->s.is_drop) + comm_point_drop_reply(&r->query_reply); + else { + mesh_send_reply(mstate, mstate->s.return_rcode, rep, + r, prev); + prev = r; + } } mstate->replies_sent = 1; for(c = mstate->cb_list; c; c = c->next) { @@ -1060,7 +1149,8 @@ void mesh_walk_supers(struct mesh_area* mesh, struct mesh_state* mstate) } struct mesh_state* mesh_area_find(struct mesh_area* mesh, - struct query_info* qinfo, uint16_t qflags, int prime, int valrec) + struct respip_client_info* cinfo, struct query_info* qinfo, + uint16_t qflags, int prime, int valrec) { struct mesh_state key; struct mesh_state* result; @@ -1074,6 +1164,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh, * aggregate the state. Thus unique is set to NULL. (default when we * desire aggregation).*/ key.unique = NULL; + key.s.client_info = cinfo; result = (struct mesh_state*)rbtree_search(&mesh->all, &key); return result; @@ -1378,7 +1469,7 @@ mesh_detect_cycle(struct module_qstate* qstate, struct query_info* qinfo, struct mesh_area* mesh = qstate->env->mesh; struct mesh_state* dep_m = NULL; if(!mesh_state_is_unique(qstate->mesh_info)) - dep_m = mesh_area_find(mesh, qinfo, flags, prime, valrec); + dep_m = mesh_area_find(mesh, NULL, qinfo, flags, prime, valrec); return mesh_detect_cycle_found(qstate, dep_m); } diff --git a/services/mesh.h b/services/mesh.h index 435f89c68..1c7794532 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -59,6 +59,7 @@ struct query_info; struct reply_info; struct outbound_entry; struct timehist; +struct respip_client_info; /** * Maximum number of mesh state activations. Any more is likely an @@ -274,14 +275,18 @@ void mesh_delete(struct mesh_area* mesh); * * @param mesh: the mesh. * @param qinfo: query from client. + * @param cinfo: additional information associated with the query client. + * 'cinfo' itself is ephemeral but data pointed to by its members + * can be assumed to be valid and unchanged until the query processing is + * completed. * @param qflags: flags from client query. * @param edns: edns data from client query. * @param rep: where to reply to. * @param qid: query id to reply with. */ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, - uint16_t qflags, struct edns_data* edns, struct comm_reply* rep, - uint16_t qid); + struct respip_client_info* cinfo, uint16_t qflags, + struct edns_data* edns, struct comm_reply* rep, uint16_t qid); /** * New query with callback. Create new query state if needed, and @@ -409,14 +414,16 @@ void mesh_state_delete(struct module_qstate* qstate); * Does not put the mesh state into rbtrees and so on. * @param env: module environment to set. * @param qinfo: query info that the mesh is for. + * @param cinfo: control info for the query client (can be NULL). * @param qflags: flags for query (RD / CD flag). * @param prime: if true, it is a priming query, set is_priming on mesh state. * @param valrec: if true, it is a validation recursion query, and sets * is_valrec on the mesh state. * @return: new mesh state or NULL on allocation error. */ -struct mesh_state* mesh_state_create(struct module_env* env, - struct query_info* qinfo, uint16_t qflags, int prime, int valrec); +struct mesh_state* mesh_state_create(struct module_env* env, + struct query_info* qinfo, struct respip_client_info* cinfo, + uint16_t qflags, int prime, int valrec); /** * Check if the mesh state is unique. @@ -451,14 +458,17 @@ void mesh_delete_all(struct mesh_area* mesh); * Find a mesh state in the mesh area. Pass relevant flags. * * @param mesh: the mesh area to look in. + * @param cinfo: if non-NULL client specific info that may affect IP-based + * actions that apply to the query result. * @param qinfo: what query * @param qflags: if RD / CD bit is set or not. * @param prime: if it is a priming query. * @param valrec: if it is a validation-recursion query. * @return: mesh state or NULL if not found. */ -struct mesh_state* mesh_area_find(struct mesh_area* mesh, - struct query_info* qinfo, uint16_t qflags, int prime, int valrec); +struct mesh_state* mesh_area_find(struct mesh_area* mesh, + struct respip_client_info* cinfo, struct query_info* qinfo, + uint16_t qflags, int prime, int valrec); /** * Setup attachment super/sub relation between super and sub mesh state. diff --git a/services/modstack.c b/services/modstack.c index 70e066670..97d67a1e1 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -46,6 +46,7 @@ #include "dns64/dns64.h" #include "iterator/iterator.h" #include "validator/validator.h" +#include "respip/respip.h" #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" @@ -127,6 +128,7 @@ module_list_avail(void) #ifdef USE_CACHEDB "cachedb", #endif + "respip", "validator", "iterator", NULL}; @@ -148,6 +150,7 @@ module_funcs_avail(void) #ifdef USE_CACHEDB &cachedb_get_funcblock, #endif + &respip_get_funcblock, &val_get_funcblock, &iter_get_funcblock, NULL}; diff --git a/services/view.c b/services/view.c index c9dfc3c87..5ea5ef02e 100644 --- a/services/view.c +++ b/services/view.c @@ -66,6 +66,10 @@ views_create(void) return v; } +/** This prototype is defined in in respip.h, but we want to avoid + * unnecessary dependencies */ +void respip_set_delete(struct respip_set *); + void view_delete(struct view* v) { @@ -73,6 +77,7 @@ view_delete(struct view* v) return; lock_rw_destroy(&v->lock); local_zones_delete(v->local_zones); + respip_set_delete(v->respip_set); free(v->name); free(v); } diff --git a/services/view.h b/services/view.h index ce4b69d6c..e0b346419 100644 --- a/services/view.h +++ b/services/view.h @@ -47,6 +47,7 @@ struct regional; struct config_file; struct config_view; +struct respip_set; /** @@ -71,6 +72,8 @@ struct view { char* name; /** view specific local authority zones */ struct local_zones* local_zones; + /** response-ip configuration data for this view */ + struct respip_set* respip_set; /** Fallback to global local_zones when there is no match in the view * specific tree. 1 for yes, 0 for no */ int isfirst; diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index eebc0e76e..b112a79fa 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -53,6 +53,8 @@ #include "iterator/iter_hints.h" #include "validator/validator.h" #include "services/localzone.h" +#include "services/view.h" +#include "respip/respip.h" #include "sldns/sbuffer.h" #ifdef HAVE_GETOPT_H #include @@ -141,6 +143,27 @@ localzonechecks(struct config_file* cfg) local_zones_delete(zs); } +/** check view and response-ip configuration */ +static void +view_and_respipchecks(struct config_file* cfg) +{ + struct views* views = NULL; + struct respip_set* respip = NULL; + int ignored = 0; + if(!(views = views_create())) + fatal_exit("Could not create views: out of memory"); + if(!(respip = respip_set_create())) + fatal_exit("Could not create respip set: out of memory"); + if(!views_apply_cfg(views, cfg)) + fatal_exit("Could not set up views"); + if(!respip_global_apply_cfg(respip, cfg)) + fatal_exit("Could not setup respip set"); + if(!respip_views_apply_cfg(views, cfg, &ignored)) + fatal_exit("Could not setup per-view respip sets"); + views_delete(views); + respip_set_delete(respip); +} + /** emit warnings for IP in hosts */ static void warn_hosts(const char* typ, struct config_stub* list) @@ -406,11 +429,17 @@ morechecks(struct config_file* cfg, const char* fname) /* remove chroot setting so that modules are not stripping pathnames*/ free(cfg->chrootdir); cfg->chrootdir = NULL; - + + /* There should be no reason for 'respip' module not to work with + * dns64, but it's not explicitly confirmed, so the combination is + * excluded below. It's simply unknown yet for the combination of + * respip and other modules. */ if(strcmp(cfg->module_conf, "iterator") != 0 && strcmp(cfg->module_conf, "validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 iterator") != 0 + && strcmp(cfg->module_conf, "respip iterator") != 0 + && strcmp(cfg->module_conf, "respip validator iterator") != 0 #ifdef WITH_PYTHONMODULE && strcmp(cfg->module_conf, "python iterator") != 0 && strcmp(cfg->module_conf, "python validator iterator") != 0 @@ -464,6 +493,7 @@ morechecks(struct config_file* cfg, const char* fname) } localzonechecks(cfg); + view_and_respipchecks(cfg); } /** check forwards */ diff --git a/testcode/unitmain.c b/testcode/unitmain.c index e3d7a59b4..89dbeb1d3 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -558,6 +558,267 @@ rnd_test(void) ub_randfree(r); } +#include "respip/respip.h" +#include "services/localzone.h" +#include "util/data/packed_rrset.h" +typedef struct addr_action {char* ip; char* sact; enum respip_action act;} + addr_action_t; + +/** Utility function that verifies that the respip set has actions as expected */ +static void +verify_respip_set_actions(struct respip_set* set, addr_action_t actions[], + int actions_len) +{ + int i = 0; + struct rbtree_type* tree = respip_set_get_tree(set); + for (i=0; icount); +} + +/** Global respip actions test; apply raw config data and verify that + * all the nodes in the respip set, looked up by address, have expected + * actions */ +static void +respip_conf_actions_test(void) +{ + addr_action_t config_response_ip[] = { + {"192.0.1.0/24", "deny", respip_deny}, + {"192.0.2.0/24", "redirect", respip_redirect}, + {"192.0.3.0/26", "inform", respip_inform}, + {"192.0.4.0/27", "inform_deny", respip_inform_deny}, + {"2001:db8:1::/48", "always_transparent", respip_always_transparent}, + {"2001:db8:2::/49", "always_refuse", respip_always_refuse}, + {"2001:db8:3::/50", "always_nxdomain", respip_always_nxdomain}, + }; + int i; + struct respip_set* set = respip_set_create(); + struct config_file cfg; + int clen = sizeof(config_response_ip) / sizeof(addr_action_t); + + unit_assert(set); + unit_show_feature("global respip config actions apply"); + memset(&cfg, 0, sizeof(cfg)); + for(i=0; iname = strdup("view1"); + cv2->name = strdup("view2"); + unit_assert(cv1->name && cv2->name); + cv1->next = cv2; + cfg.views = cv1; + + for(i=0; irespip_actions, ip, sact)) + unit_assert(0); + } + for(i=0; irespip_actions, ip, sact)) + unit_assert(0); + } + views = views_create(); + unit_assert(views); + unit_assert(views_apply_cfg(views, &cfg)); + unit_assert(respip_views_apply_cfg(views, &cfg, &have_respip_cfg)); + + /* now verify the respip sets in each view */ + v = views_find_view(views, "view1", 0); + unit_assert(v); + verify_respip_set_actions(v->respip_set, config_response_ip_view1, clen1); + v = views_find_view(views, "view2", 0); + unit_assert(v); + verify_respip_set_actions(v->respip_set, config_response_ip_view2, clen2); +} + +typedef struct addr_data {char* ip; char* data;} addr_data_t; + +/** find the respip address node in the specified tree (by address lookup) + * and verify type and address of the specified rdata (by index) in this + * node's rrset */ +static void +verify_rrset(struct respip_set* set, const char* ipstr, + const char* rdatastr, size_t rdi, uint16_t type) +{ + struct sockaddr_storage addr; + int net; + char buf[65536]; + socklen_t addrlen; + struct rbtree_type* tree; + struct resp_addr* node; + const struct ub_packed_rrset_key* rrs; + + netblockstrtoaddr(ipstr, UNBOUND_DNS_PORT, &addr, &addrlen, &net); + tree = respip_set_get_tree(set); + node = (struct resp_addr*)addr_tree_find(tree, &addr, addrlen, net); + unit_assert(node); + unit_assert((rrs = resp_addr_get_rrset(node))); + unit_assert(ntohs(rrs->rk.type) == type); + packed_rr_to_string((struct ub_packed_rrset_key*)rrs, + rdi, 0, buf, sizeof(buf)); + unit_assert(strstr(buf, rdatastr)); +} + +/** Dataset used to test redirect rrset initialization for both + * global and per-view respip redirect configuration */ +static addr_data_t config_response_ip_data[] = { + {"192.0.1.0/24", "A 1.2.3.4"}, + {"192.0.1.0/24", "A 11.12.13.14"}, + {"192.0.2.0/24", "CNAME www.example.com."}, + {"2001:db8:1::/48", "AAAA 2001:db8:1::2:1"}, +}; + +/** Populate raw respip redirect config data, used for both global and + * view-based respip redirect test case */ +static void +cfg_insert_respip_data(struct config_str2list** respip_actions, + struct config_str2list** respip_data) +{ + int clen = sizeof(config_response_ip_data) / sizeof(addr_data_t); + int i = 0; + + /* insert actions (duplicate netblocks don't matter) */ + for(i=0; iname = strdup("view1"); + unit_assert(cv->name); + cfg.views = cv; + cfg_insert_respip_data(&cv->respip_actions, &cv->respip_data); + views = views_create(); + unit_assert(views); + unit_assert(views_apply_cfg(views, &cfg)); + + /* apply configuration and verify rrsets */ + unit_assert(respip_views_apply_cfg(views, &cfg, &have_respip_cfg)); + v = views_find_view(views, "view1", 0); + unit_assert(v); + verify_rrset(v->respip_set, "192.0.1.0/24", "1.2.3.4", + 0, LDNS_RR_TYPE_A); + verify_rrset(v->respip_set, "192.0.1.0/24", "11.12.13.14", + 1, LDNS_RR_TYPE_A); + verify_rrset(v->respip_set, "192.0.2.0/24", "www.example.com", + 0, LDNS_RR_TYPE_CNAME); + verify_rrset(v->respip_set, "2001:db8:1::/48", "2001:db8:1::2:1", + 0, LDNS_RR_TYPE_AAAA); +} + +/** respip unit tests */ +static void respip_test(void) +{ + respip_view_conf_data_test(); + respip_conf_data_test(); + respip_view_conf_actions_test(); + respip_conf_actions_test(); +} + void unit_show_func(const char* file, const char* func) { printf("test %s:%s\n", file, func); @@ -604,6 +865,7 @@ main(int argc, char* argv[]) checklock_start(); neg_test(); rnd_test(); + respip_test(); verify_test(); net_test(); config_memsize_test(); diff --git a/util/config_file.c b/util/config_file.c index e126668c0..e51651c1b 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -832,6 +832,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_IFC(opt, "define-tag", num_tags, tagname) else O_LTG(opt, "local-zone-tag", local_zone_tags) else O_LTG(opt, "access-control-tag", acl_tags) + else O_LTG(opt, "response-ip-tag", respip_tags) else O_LS3(opt, "local-zone-override", local_zone_overrides) else O_LS3(opt, "access-control-tag-action", acl_tag_actions) else O_LS3(opt, "access-control-tag-data", acl_tag_datas) @@ -1112,6 +1113,7 @@ config_delete(struct config_file* cfg) config_del_strarray(cfg->tagname, cfg->num_tags); config_del_strbytelist(cfg->local_zone_tags); config_del_strbytelist(cfg->acl_tags); + config_del_strbytelist(cfg->respip_tags); config_deltrplstrlist(cfg->acl_tag_actions); config_deltrplstrlist(cfg->acl_tag_datas); config_delstrlist(cfg->control_ifs); diff --git a/util/config_file.h b/util/config_file.h index 8e21674d3..5560326a3 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -321,6 +321,12 @@ struct config_file { struct config_str3list* acl_tag_datas; /** list of aclname, view*/ struct config_str2list* acl_view; + /** list of IP-netblock, tagbitlist */ + struct config_strbytelist* respip_tags; + /** list of response-driven access control entries, linked list */ + struct config_str2list* respip_actions; + /** RRs configured for response-driven access controls */ + struct config_str2list* respip_data; /** tag list, array with tagname[i] is malloced string */ char** tagname; /** number of items in the taglist */ @@ -472,6 +478,10 @@ struct config_view { /** Fallback to global local_zones when there is no match in the view * view specific tree. 1 for yes, 0 for no */ int isfirst; + /** predefined actions for particular IP address responses */ + struct config_str2list* respip_actions; + /** data complementing the 'redirect' response IP actions */ + struct config_str2list* respip_data; }; /** diff --git a/util/configlexer.c b/util/configlexer.c index 165814a2f..8e9153421 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -378,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 205 -#define YY_END_OF_BUFFER 206 +#define YY_NUM_RULES 208 +#define YY_END_OF_BUFFER 209 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -387,229 +387,231 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2011] = +static yyconst flex_int16_t yy_accept[2031] = { 0, - 1, 1, 187, 187, 191, 191, 195, 195, 199, 199, - 1, 1, 206, 203, 1, 185, 185, 204, 2, 204, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 187, 188, 188, 189, 204, 191, 192, 192, 193, 204, - 198, 195, 196, 196, 197, 204, 199, 200, 200, 201, - 204, 202, 186, 2, 190, 204, 202, 203, 0, 1, - 2, 2, 2, 2, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 1, 1, 190, 190, 194, 194, 198, 198, 202, 202, + 1, 1, 209, 206, 1, 188, 188, 207, 2, 207, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 190, 191, 191, 192, 207, 194, 195, 195, 196, 207, + 201, 198, 199, 199, 200, 207, 202, 203, 203, 204, + 207, 205, 189, 2, 193, 207, 205, 206, 0, 1, + 2, 2, 2, 2, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 187, - 0, 191, 0, 198, 0, 195, 199, 0, 202, 0, - 2, 2, 202, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 190, + 0, 194, 0, 201, 0, 198, 202, 0, 205, 0, + 2, 2, 205, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 202, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 202, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 205, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 205, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 77, 203, 203, 203, 203, - 203, 203, 8, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 88, 202, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 77, 206, 206, + 206, 206, 206, 206, 8, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 88, 205, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 202, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 37, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 161, 203, 14, 15, - 203, 18, 17, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 147, - 203, 203, 203, 203, 203, 203, 203, 203, 3, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 205, 206, 206, 206, 206, 206, 37, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 161, 206, 14, 15, 206, 18, 17, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 147, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 3, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 202, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 194, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 40, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 41, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 136, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 205, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 197, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 40, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 41, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 20, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 96, 203, 194, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 112, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 95, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 136, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 20, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 96, 206, + 197, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 112, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 95, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 75, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 25, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 38, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 39, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 75, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 25, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 38, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 39, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 28, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 176, 203, 203, - 203, 203, 203, 203, 203, 203, 32, 203, 33, 203, - 203, 203, 78, 203, 79, 203, 203, 76, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 7, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 154, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 28, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 176, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 32, 206, 33, 206, 206, 206, + 78, 206, 79, 206, 206, 76, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 7, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 98, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 29, - 203, 203, 203, 203, 203, 203, 203, 128, 203, 127, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 16, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 42, 203, - 203, 203, 203, 203, 135, 203, 203, 203, 203, 81, - 80, 203, 203, 203, 203, 203, 203, 203, 203, 122, + 206, 206, 206, 206, 206, 206, 206, 154, 206, 206, + 206, 206, 98, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 29, 206, 206, + 206, 206, 206, 206, 206, 128, 206, 127, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 16, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 42, 206, 206, + 206, 206, 206, 135, 206, 206, 206, 206, 81, 80, - 203, 203, 203, 203, 203, 203, 203, 203, 89, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 60, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 64, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 36, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 125, 126, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 6, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 206, 206, 206, 122, 206, + 206, 206, 206, 206, 206, 206, 206, 89, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 60, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 64, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 36, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 125, 126, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 6, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 26, 203, 203, 203, 203, 203, 203, 203, 203, 118, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 140, - 203, 119, 203, 203, 152, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 27, 203, 203, 203, 203, - 84, 203, 85, 203, 83, 203, 203, 203, 203, 203, - 203, 203, 94, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 175, 203, 203, 120, 203, 203, - 203, 203, 203, 123, 203, 151, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 186, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 26, 206, 206, 206, 206, 206, 206, 206, 206, + 118, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 140, 206, 119, 206, 206, 152, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 27, 206, 206, 206, + 206, 84, 206, 85, 206, 83, 206, 206, 206, 206, + 206, 206, 206, 94, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 175, 206, 206, 120, 206, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 74, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 34, 203, 203, 22, 203, - 203, 203, 203, 19, 203, 103, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 49, 51, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 162, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 86, 203, 203, 203, 203, - 203, 203, 203, 93, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 123, 206, 151, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 74, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 34, 206, + 206, 22, 206, 206, 206, 206, 19, 206, 103, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 49, 51, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 162, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 86, 206, + 206, 206, 206, 206, 206, 206, 93, 206, 206, 206, - 203, 203, 203, 203, 203, 97, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 146, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 111, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 107, 203, 113, 203, 203, 203, - 203, 203, 92, 203, 203, 70, 203, 138, 203, 203, - 203, 203, 203, 153, 203, 203, 203, 203, 203, 203, - 203, 167, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 110, 203, 203, 203, 203, 203, - 52, 53, 203, 203, 203, 203, 203, 35, 59, 114, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 97, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 146, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 111, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 107, + 206, 113, 206, 206, 206, 206, 206, 92, 206, 206, + 70, 206, 138, 206, 206, 206, 206, 206, 153, 206, + 206, 206, 206, 206, 206, 206, 167, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 110, - 203, 129, 203, 155, 124, 203, 203, 45, 203, 116, - 203, 203, 203, 203, 203, 9, 203, 203, 203, 73, - 203, 203, 203, 203, 180, 203, 137, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 99, 166, - 203, 203, 203, 203, 203, 203, 203, 203, 148, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 115, 203, - 203, 44, 46, 203, 203, 203, 203, 203, 203, 203, + 206, 206, 206, 206, 206, 52, 53, 206, 206, 206, + 206, 206, 35, 59, 114, 206, 129, 206, 155, 124, + 206, 206, 45, 206, 116, 206, 206, 206, 206, 206, + 9, 206, 206, 206, 73, 206, 206, 206, 206, 180, + 206, 137, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 99, 166, 206, 206, 206, + 206, 206, 206, 206, 206, 148, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 72, 203, 203, 203, 203, 178, 203, 203, 203, 203, - 142, 23, 24, 203, 203, 203, 203, 203, 203, 203, - 203, 69, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 144, 141, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 43, 203, 203, 203, 203, - 203, 203, 203, 203, 13, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 12, 203, - 203, 21, 203, 203, 203, 184, 203, 47, 203, 150, - 143, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 106, 105, 203, 203, 203, 203, 145, + 206, 206, 206, 206, 206, 115, 206, 206, 44, 46, + 206, 206, 206, 206, 206, 206, 206, 72, 206, 206, + 206, 206, 178, 206, 185, 206, 206, 206, 206, 142, + 23, 24, 206, 206, 206, 206, 206, 206, 206, 206, + 69, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 144, 141, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 43, 206, 206, 206, 206, 206, + 206, 206, 206, 13, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 12, 206, 206, + 21, 206, 206, 206, 184, 206, 187, 47, 206, 150, - 139, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 54, 203, 203, 203, 179, 203, 203, 149, 203, - 203, 203, 203, 203, 203, 203, 203, 48, 203, 203, - 82, 203, 100, 102, 130, 203, 203, 203, 104, 203, - 203, 156, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 163, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 131, 203, 203, 177, - 203, 203, 30, 203, 203, 203, 203, 4, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 159, + 143, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 106, 105, 206, 206, 206, 206, 145, + 139, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 54, 206, 206, 206, 179, 206, 206, 149, 206, + 206, 206, 206, 206, 206, 206, 206, 48, 206, 206, + 82, 206, 100, 102, 130, 206, 206, 206, 104, 206, + 206, 156, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 163, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 131, 206, 206, 177, - 203, 203, 203, 203, 203, 203, 203, 203, 165, 203, - 203, 134, 203, 203, 203, 203, 203, 203, 203, 203, - 57, 203, 31, 183, 160, 203, 11, 203, 203, 203, - 203, 203, 203, 132, 61, 203, 203, 203, 109, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 164, - 90, 203, 87, 203, 203, 203, 63, 67, 62, 203, - 55, 203, 10, 203, 203, 203, 181, 203, 203, 108, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 68, 66, 203, 56, 203, 121, 203, - 203, 133, 203, 203, 203, 203, 101, 50, 203, 203, + 206, 206, 30, 206, 206, 206, 206, 4, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 159, + 206, 206, 206, 206, 206, 206, 206, 206, 165, 206, + 206, 134, 206, 206, 206, 206, 206, 206, 206, 206, + 57, 206, 31, 183, 160, 206, 11, 206, 206, 206, + 206, 206, 206, 132, 61, 206, 206, 206, 109, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 164, + 90, 206, 87, 206, 206, 206, 63, 67, 62, 206, + 55, 206, 10, 206, 206, 206, 181, 206, 206, 108, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 203, 203, 203, 203, 203, 91, 65, 58, 203, 182, - 203, 203, 203, 158, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 71, 203, 157, 174, 203, 203, 203, - 203, 203, 203, 5, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 117, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 170, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 168, 203, + 206, 206, 206, 68, 66, 206, 56, 206, 121, 206, + 206, 133, 206, 206, 206, 206, 101, 50, 206, 206, + 206, 206, 206, 206, 206, 91, 65, 58, 206, 182, + 206, 206, 206, 158, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 71, 206, 157, 174, 206, 206, 206, + 206, 206, 206, 5, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 117, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 171, 172, 203, 203, 203, 203, 203, 169, 173, 0 + 206, 206, 206, 206, 170, 206, 206, 206, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, 168, 206, + 171, 172, 206, 206, 206, 206, 206, 169, 173, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -652,461 +654,465 @@ static yyconst YY_CHAR yy_meta[40] = 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2025] = +static yyconst flex_uint16_t yy_base[2045] = { 0, 0, 0, 37, 40, 44, 51, 63, 75, 56, 68, - 87, 108, 1988, 1845, 50, 3970, 3970, 3970, 129, 94, + 87, 108, 1880, 1760, 50, 4002, 4002, 4002, 129, 94, 70, 104, 130, 90, 109, 106, 127, 111, 84, 122, 146, 148, 50, 170, 136, 158, 196, 171, 138, 177, - 1582, 3970, 3970, 3970, 70, 1472, 3970, 3970, 3970, 42, - 1346, 1295, 3970, 3970, 3970, 208, 1213, 3970, 3970, 3970, - 141, 1154, 3970, 214, 3970, 218, 140, 1064, 228, 167, + 1595, 4002, 4002, 4002, 70, 1555, 4002, 4002, 4002, 42, + 1167, 1027, 4002, 4002, 4002, 208, 899, 4002, 4002, 4002, + 141, 857, 4002, 214, 4002, 218, 140, 633, 228, 167, 0, 239, 0, 0, 92, 162, 164, 218, 180, 167, 223, 224, 103, 168, 237, 226, 193, 183, 236, 241, 244, 246, 247, 249, 258, 245, 257, 260, 256, 265, 266, 271, 272, 274, 273, 275, 276, 283, 284, 288, - 289, 190, 290, 291, 277, 296, 298, 299, 305, 301, - 306, 303, 308, 311, 317, 318, 314, 320, 325, 890, - 337, 587, 122, 513, 342, 346, 225, 350, 192, 354, - 358, 0, 351, 339, 360, 322, 353, 356, 357, 359, - 362, 368, 365, 366, 378, 376, 397, 380, 364, 377, - 384, 49, 386, 387, 385, 388, 393, 391, 395, 402, - 413, 404, 394, 420, 421, 428, 430, 426, 416, 432, - 436, 443, 444, 440, 429, 445, 446, 448, 449, 450, - 452, 455, 453, 456, 457, 459, 469, 461, 472, 463, + 289, 190, 290, 292, 291, 277, 298, 299, 308, 301, + 314, 300, 304, 307, 317, 321, 322, 323, 324, 515, + 339, 432, 122, 401, 353, 348, 225, 341, 192, 357, + 361, 0, 336, 338, 359, 356, 357, 358, 360, 362, + 363, 369, 368, 366, 379, 378, 399, 380, 383, 384, + 385, 49, 387, 388, 386, 392, 394, 396, 405, 411, + 417, 395, 412, 426, 424, 427, 434, 430, 431, 441, + 438, 445, 447, 397, 444, 448, 446, 449, 450, 451, + 456, 453, 460, 461, 462, 463, 464, 470, 471, 478, - 473, 470, 487, 474, 478, 484, 491, 494, 495, 488, - 492, 496, 498, 505, 502, 508, 501, 499, 398, 510, - 512, 519, 521, 524, 529, 527, 530, 520, 532, 535, - 539, 533, 545, 534, 546, 549, 551, 557, 544, 553, - 554, 555, 558, 560, 561, 562, 565, 569, 567, 572, - 578, 574, 576, 580, 581, 582, 586, 592, 591, 596, - 602, 601, 607, 606, 608, 610, 611, 612, 614, 619, - 620, 623, 630, 626, 628, 631, 634, 627, 635, 638, - 645, 644, 648, 650, 652, 657, 655, 659, 675, 653, - 663, 665, 662, 666, 680, 676, 684, 681, 682, 686, + 467, 325, 474, 484, 476, 480, 493, 488, 496, 497, + 485, 498, 500, 501, 507, 512, 518, 505, 503, 511, + 514, 504, 523, 528, 531, 527, 533, 535, 537, 539, + 538, 540, 542, 548, 545, 552, 549, 555, 561, 546, + 557, 558, 563, 564, 567, 562, 568, 569, 573, 571, + 578, 582, 581, 583, 585, 588, 586, 591, 596, 598, + 593, 606, 599, 610, 611, 612, 614, 617, 623, 615, + 626, 627, 618, 628, 634, 632, 635, 636, 645, 637, + 642, 644, 654, 655, 646, 656, 657, 664, 662, 666, + 682, 668, 670, 674, 671, 686, 675, 687, 693, 677, - 688, 692, 703, 697, 699, 700, 710, 706, 708, 718, - 709, 712, 719, 720, 721, 726, 727, 724, 725, 732, - 736, 733, 740, 737, 748, 747, 749, 752, 753, 750, - 759, 757, 751, 765, 772, 769, 761, 771, 774, 763, - 777, 778, 780, 784, 786, 3970, 788, 790, 791, 792, - 793, 794, 3970, 796, 795, 798, 802, 800, 803, 810, - 822, 824, 807, 820, 804, 823, 827, 828, 829, 830, - 832, 852, 835, 837, 833, 845, 836, 841, 847, 838, - 864, 854, 862, 857, 866, 859, 870, 867, 873, 879, - 877, 3970, 880, 887, 886, 888, 889, 891, 896, 893, + 689, 691, 699, 695, 708, 702, 711, 712, 718, 714, + 715, 719, 721, 724, 727, 725, 729, 728, 733, 734, + 735, 736, 738, 746, 744, 750, 760, 742, 756, 753, + 761, 754, 764, 767, 768, 769, 776, 773, 775, 778, + 779, 780, 782, 784, 789, 787, 790, 4002, 797, 793, + 795, 800, 799, 801, 4002, 802, 804, 807, 810, 806, + 811, 812, 817, 823, 832, 828, 829, 830, 833, 831, + 836, 838, 837, 839, 859, 841, 844, 840, 869, 845, + 846, 870, 847, 876, 868, 879, 873, 862, 880, 882, + 884, 886, 889, 849, 4002, 890, 897, 895, 896, 898, - 908, 897, 901, 900, 907, 910, 911, 919, 916, 921, - 923, 931, 925, 933, 939, 917, 935, 928, 937, 948, - 942, 944, 936, 950, 952, 951, 955, 953, 959, 954, - 961, 964, 962, 973, 970, 974, 978, 975, 981, 983, - 984, 985, 987, 988, 994, 992, 993, 1002, 1001, 991, - 1007, 1013, 1010, 1016, 1014, 1018, 1025, 1019, 1022, 1031, - 1027, 1030, 1029, 1042, 1038, 1028, 1043, 1040, 1044, 1047, - 1049, 1050, 1051, 1052, 1054, 1055, 1057, 1058, 1061, 1073, - 1060, 1062, 1082, 1074, 1080, 1084, 1072, 1066, 1086, 1087, - 1090, 1093, 1092, 1096, 1098, 1102, 1103, 1104, 1105, 1106, + 900, 910, 901, 917, 903, 916, 906, 918, 922, 920, + 929, 927, 931, 933, 942, 935, 944, 946, 926, 945, + 938, 948, 954, 951, 953, 956, 964, 960, 961, 966, + 962, 967, 963, 972, 979, 971, 987, 983, 970, 986, + 988, 989, 991, 995, 996, 997, 998, 1004, 1000, 1002, + 1011, 1015, 1003, 1009, 1022, 1019, 1030, 1026, 1027, 1036, + 1028, 1033, 1039, 1018, 1038, 1040, 1044, 1053, 1050, 1042, + 1054, 1045, 1055, 1059, 1060, 1061, 1062, 1065, 1063, 1066, + 1068, 1070, 1073, 1076, 1074, 1075, 1083, 1087, 1079, 1092, + 1085, 1095, 1096, 1098, 1099, 1100, 1103, 1106, 1102, 1110, - 1107, 1113, 1108, 1119, 1115, 3970, 1126, 1122, 1123, 1125, - 1130, 1136, 1132, 1133, 1134, 1160, 3970, 1135, 3970, 3970, - 995, 3970, 3970, 1138, 1139, 1149, 1143, 1146, 1183, 1152, - 1155, 1156, 1158, 1163, 1164, 1166, 1174, 1175, 1186, 1177, - 1188, 1168, 1192, 1178, 1194, 1196, 1198, 1199, 1203, 1205, - 1207, 1208, 1211, 1210, 1217, 1226, 1224, 1222, 1223, 1229, - 1230, 1233, 1232, 1234, 1236, 1240, 1242, 1246, 1243, 3970, - 1245, 1247, 1252, 1244, 1259, 1251, 1257, 1261, 3970, 1263, - 1268, 1269, 1270, 1271, 1273, 1274, 1277, 1276, 1278, 1280, - 1283, 1279, 1287, 1286, 1289, 1304, 1291, 1294, 1306, 1310, + 1112, 1113, 1115, 1118, 1116, 1122, 1125, 1128, 1130, 4002, + 1136, 1132, 1134, 1133, 1135, 1147, 1140, 1141, 1143, 1169, + 4002, 1149, 4002, 4002, 1144, 4002, 4002, 1151, 1150, 1154, + 1162, 1170, 1192, 1166, 1155, 1157, 1172, 1177, 1179, 1183, + 1180, 1189, 1197, 1198, 1200, 1185, 1203, 1206, 1207, 1209, + 1208, 1212, 1214, 1217, 1218, 1220, 1219, 1222, 1235, 1238, + 1223, 1234, 1237, 1239, 1241, 1243, 1242, 1244, 1251, 1246, + 1252, 1258, 1254, 4002, 1256, 1257, 1261, 1262, 1268, 1269, + 1271, 1272, 1274, 4002, 1276, 1280, 1281, 1283, 1284, 1275, + 1287, 1290, 1289, 1293, 1294, 1292, 1291, 1301, 1303, 1308, - 1309, 1307, 1312, 1314, 1315, 1316, 1323, 1322, 1320, 1321, - 1333, 1327, 1330, 1331, 1340, 1335, 1337, 1342, 1343, 1344, - 1345, 1368, 1351, 1353, 1348, 1355, 1356, 1354, 1359, 1362, - 1372, 1366, 1375, 1378, 1382, 1374, 1381, 1385, 1391, 1400, - 1404, 1405, 1396, 1407, 1401, 1398, 1416, 1409, 1418, 1419, - 1420, 1422, 1423, 3970, 1430, 1429, 1428, 1435, 1441, 1437, - 1434, 1440, 1443, 1438, 1446, 1444, 1445, 1451, 1456, 1457, - 1458, 1459, 1465, 3970, 1461, 1464, 1466, 1469, 1473, 1479, - 1476, 1486, 1488, 1462, 3970, 1489, 1495, 1492, 1497, 1498, - 1491, 1499, 1501, 1503, 1502, 1504, 1508, 1510, 1507, 3970, + 1307, 1299, 1304, 1320, 1321, 1322, 1323, 1324, 1325, 1327, + 1328, 1337, 1331, 1333, 1339, 1340, 1338, 1346, 1341, 1350, + 1347, 1353, 1354, 1343, 1355, 1356, 1377, 1360, 1364, 1363, + 1365, 1366, 1372, 1374, 1371, 1375, 1391, 1381, 1392, 1394, + 1400, 1383, 1401, 1402, 1410, 1412, 1416, 1406, 1420, 1409, + 1419, 1426, 1428, 1413, 1429, 1384, 1437, 1430, 4002, 1444, + 1438, 1432, 1440, 1450, 1447, 1446, 1448, 1449, 1454, 1455, + 1456, 1461, 1459, 1460, 1462, 1463, 1467, 1473, 4002, 1469, + 1471, 1477, 1478, 1480, 1481, 1484, 1490, 1499, 1487, 4002, + 1495, 1502, 1503, 1505, 1496, 1498, 1506, 1514, 1512, 1513, - 1516, 1509, 1518, 1527, 1528, 1517, 1529, 1530, 1531, 1533, - 1534, 1541, 1538, 1539, 3970, 1540, 1542, 1546, 1549, 1556, - 1559, 1552, 1555, 1563, 1564, 1565, 1566, 1572, 1569, 1571, - 1570, 1573, 3970, 1574, 151, 1576, 1577, 1575, 1586, 1596, - 1594, 1597, 1600, 1601, 1603, 1604, 1588, 1605, 1606, 1609, - 1585, 1610, 1611, 1616, 1613, 1617, 1620, 1623, 1626, 1631, - 1627, 1632, 1637, 1635, 1638, 1636, 3970, 1644, 1647, 1646, - 1639, 1649, 1650, 1651, 1652, 1653, 1659, 1660, 1665, 1662, - 1667, 3970, 1673, 1669, 1670, 1672, 1679, 1675, 1686, 1688, - 1689, 1691, 1693, 1695, 1690, 1701, 1697, 1700, 1702, 1709, + 1515, 1517, 1519, 1520, 1522, 4002, 1523, 1526, 1531, 1528, + 1530, 1535, 1538, 1540, 1543, 1544, 1546, 1550, 1547, 1549, + 4002, 1548, 1557, 1556, 1551, 1570, 1573, 1561, 1569, 1572, + 1575, 1577, 1578, 1583, 1580, 1584, 1581, 1582, 4002, 1585, + 151, 1587, 1588, 1586, 1597, 1610, 1608, 1609, 1602, 1611, + 1612, 1615, 1599, 1589, 1619, 1620, 1622, 1623, 1624, 1626, + 1627, 1628, 1631, 1633, 1635, 1638, 1643, 1644, 1645, 1646, + 1651, 1648, 4002, 1654, 1655, 1657, 1652, 1659, 1662, 1663, + 1660, 1666, 1668, 1670, 1673, 1677, 1680, 4002, 1683, 1681, + 1682, 1684, 1691, 1693, 1699, 1692, 1700, 1702, 1706, 1703, - 1710, 1712, 1716, 1717, 1706, 1718, 1724, 1726, 1723, 1727, - 1737, 1729, 1394, 1732, 3970, 1734, 1733, 1740, 1735, 1750, - 1742, 1741, 1739, 1752, 1754, 1759, 1761, 1762, 1765, 1768, - 1770, 3970, 1771, 1773, 1772, 1776, 1779, 1781, 1782, 1784, - 1789, 1790, 1792, 1785, 1795, 1801, 1794, 1798, 1796, 1806, - 3970, 1813, 1814, 1811, 1820, 1817, 1818, 1821, 1823, 1807, - 1824, 1825, 1833, 1829, 1830, 1834, 1835, 1838, 1831, 1836, - 1840, 1842, 1855, 1841, 1852, 3970, 1856, 1867, 1859, 1863, - 1870, 1860, 1878, 1865, 1876, 1877, 1879, 1880, 1881, 1882, - 1883, 1884, 1889, 1885, 1890, 1892, 1893, 1894, 1891, 1911, + 1701, 1713, 1717, 1719, 1712, 1720, 1722, 1728, 1723, 1726, + 1730, 1733, 1739, 1740, 1736, 1738, 1752, 1745, 1749, 1737, + 4002, 1750, 1743, 1753, 1755, 1774, 1762, 1756, 1759, 1767, + 1763, 1779, 1780, 1757, 1781, 1784, 1785, 1790, 4002, 1791, + 1787, 1793, 1796, 1797, 1802, 1799, 1803, 1806, 1807, 1808, + 1810, 1809, 1815, 1811, 1819, 1821, 1820, 4002, 1831, 1835, + 1832, 1839, 1836, 1822, 1838, 1843, 1840, 1844, 1823, 1852, + 1848, 1850, 1851, 1853, 1854, 1856, 1857, 1859, 1861, 1873, + 1858, 1869, 4002, 1865, 1880, 1878, 1883, 1886, 1885, 1894, + 1892, 1890, 1893, 1895, 1897, 1898, 1900, 1902, 1904, 1905, - 1912, 1913, 1897, 1914, 1917, 1895, 1899, 1921, 1927, 1929, - 1930, 1933, 3970, 1936, 1937, 1938, 1925, 1939, 1928, 1940, - 1950, 1953, 1946, 1951, 1954, 1955, 1956, 1957, 1958, 1965, - 1961, 1962, 1967, 1968, 1963, 1969, 1978, 1971, 1985, 1979, - 1984, 1989, 1992, 1995, 1997, 1998, 1999, 3970, 2000, 2003, - 2004, 2010, 2007, 2012, 2021, 2023, 3970, 2013, 3970, 2019, - 2026, 2033, 3970, 2030, 3970, 2035, 2036, 3970, 2037, 2038, - 2041, 2017, 2043, 2044, 2045, 2047, 2050, 2048, 2058, 2051, - 2053, 2061, 2055, 2062, 3970, 2070, 2063, 2066, 2071, 2077, - 2075, 2076, 2078, 2079, 2083, 2084, 2091, 2088, 2097, 3970, + 1906, 1907, 1910, 1911, 1913, 1914, 1927, 1909, 1929, 1917, + 1930, 1931, 1936, 1920, 1938, 1945, 1949, 1947, 1950, 4002, + 1953, 1954, 1955, 1956, 1957, 1959, 1960, 1966, 1968, 1969, + 1971, 1972, 1975, 1970, 1976, 1977, 1985, 1978, 1981, 1982, + 1984, 1988, 1986, 1993, 1998, 2006, 1992, 2011, 2012, 2014, + 2013, 2015, 2016, 2019, 4002, 2020, 2023, 2028, 2030, 2032, + 1987, 2022, 2046, 2034, 4002, 2031, 4002, 2043, 2044, 2052, + 4002, 2051, 4002, 2054, 2055, 4002, 2056, 2057, 2060, 2037, + 2063, 2061, 2064, 2068, 2065, 2070, 2072, 2074, 2076, 2078, + 2080, 2081, 4002, 2084, 2085, 2088, 2091, 2089, 2093, 2095, - 2090, 2094, 2098, 2100, 3970, 2101, 2102, 2107, 2109, 2110, - 2120, 2118, 2105, 2121, 2111, 2124, 2135, 2131, 2122, 2133, - 2134, 2142, 2138, 2144, 2141, 2145, 2147, 2148, 2149, 2151, - 2155, 2156, 2157, 2159, 2163, 2160, 2161, 2162, 2165, 3970, - 2174, 2168, 2177, 2178, 2183, 2185, 2179, 3970, 2184, 3970, - 2166, 2201, 2203, 2189, 2205, 2196, 2198, 2187, 2208, 2209, - 2216, 2214, 2215, 2219, 2221, 2222, 2224, 2225, 3970, 2223, - 2226, 2227, 2229, 2233, 2238, 2246, 2241, 2231, 3970, 2256, - 2234, 2254, 2260, 2257, 3970, 2258, 2267, 2264, 2265, 3970, - 3970, 2266, 2271, 2269, 2270, 2272, 2280, 2273, 2276, 3970, + 2097, 2098, 2105, 2104, 2116, 2100, 2117, 4002, 2108, 2124, + 2110, 2119, 4002, 1685, 2126, 2121, 2114, 2132, 2136, 2137, + 2130, 2140, 2128, 2141, 2148, 2146, 2149, 2151, 2152, 2159, + 2155, 2161, 2157, 2158, 2165, 2166, 2168, 2162, 2169, 2173, + 2176, 2177, 2179, 2175, 2178, 2183, 2181, 4002, 2185, 2191, + 2194, 2192, 2193, 2196, 2201, 4002, 2203, 4002, 2204, 2210, + 2213, 2216, 2215, 2206, 2221, 2214, 2225, 2226, 2232, 2239, + 2224, 2228, 2231, 2236, 2240, 2242, 4002, 2243, 2245, 2246, + 2248, 2251, 2252, 2258, 2253, 2261, 2271, 4002, 2272, 2269, + 2275, 2281, 2277, 4002, 2274, 2289, 2278, 2290, 4002, 4002, - 2284, 2281, 2286, 2287, 2293, 2295, 2296, 2297, 3970, 2299, - 2303, 2304, 2306, 2307, 2309, 2308, 2315, 2311, 2312, 2316, - 2325, 2326, 2332, 3970, 2328, 2334, 2336, 2337, 2339, 2338, - 2340, 2341, 2345, 2342, 2346, 2348, 2354, 2360, 2357, 2358, - 2359, 2362, 2365, 2368, 2369, 2371, 2372, 2380, 2381, 3970, - 2387, 2373, 2388, 2374, 2393, 2394, 2401, 2397, 2386, 2398, - 2405, 2402, 3970, 2408, 2412, 2404, 2414, 2389, 2419, 2417, - 2421, 2423, 2428, 3970, 3970, 2429, 2431, 2432, 2433, 2435, - 2434, 2441, 2436, 2439, 3970, 2445, 2451, 2448, 2449, 2457, - 2458, 2464, 2454, 2461, 2465, 2467, 2466, 2469, 2471, 2473, + 2282, 2288, 2285, 2286, 2292, 2300, 2297, 2302, 4002, 2306, + 2303, 2308, 2309, 2310, 2316, 2317, 2307, 4002, 2318, 2325, + 2322, 2327, 2319, 2328, 2329, 2337, 2335, 2338, 2339, 2342, + 2343, 2350, 4002, 2352, 2344, 2355, 2351, 2359, 2358, 2360, + 2361, 2365, 2362, 2366, 2368, 2374, 2380, 2369, 2377, 2378, + 2382, 2379, 2388, 2385, 2392, 2389, 2400, 2394, 4002, 2407, + 2401, 2408, 2404, 2410, 2411, 2418, 2414, 2405, 2415, 2421, + 2417, 4002, 2439, 2422, 2420, 2424, 2430, 2431, 2440, 2442, + 2443, 2446, 4002, 4002, 2448, 2450, 2447, 2451, 2452, 2453, + 2454, 2459, 2465, 4002, 2463, 2471, 2467, 2469, 2475, 2477, - 2474, 2476, 2477, 2479, 2480, 2481, 2483, 2498, 2490, 2503, - 2488, 2493, 2495, 2505, 2511, 2513, 2519, 2504, 2516, 2522, - 3970, 2520, 2521, 2523, 2518, 2529, 2526, 2536, 2527, 3970, - 2534, 2540, 2545, 2547, 2533, 2549, 2551, 2552, 2550, 3970, - 2557, 3970, 2560, 2542, 3970, 2561, 2565, 2566, 2567, 2569, - 2570, 2568, 2574, 2580, 2571, 3970, 2581, 2577, 2583, 2588, - 3970, 2591, 3970, 2578, 3970, 2584, 2596, 2603, 2600, 2601, - 2604, 2608, 3970, 2605, 2609, 2613, 2611, 2615, 2616, 2618, - 2619, 2621, 2622, 2626, 3970, 2623, 2624, 3970, 2633, 2625, - 2634, 2635, 2639, 3970, 2641, 3970, 2642, 2649, 2651, 2653, + 2474, 2478, 2480, 2482, 2484, 2486, 2488, 2490, 2492, 2493, + 2495, 2496, 4002, 2501, 2497, 2505, 2507, 2506, 2522, 2514, + 2524, 2511, 2517, 2499, 2533, 2527, 2539, 2540, 2529, 2536, + 2542, 4002, 2541, 2543, 2544, 2545, 2551, 2549, 2557, 2550, + 4002, 2558, 2559, 2564, 2566, 2554, 2567, 2572, 2569, 2576, + 4002, 2578, 4002, 2579, 2568, 4002, 2581, 2587, 2584, 2588, + 2589, 2590, 2591, 2594, 2601, 2592, 4002, 2602, 2598, 2608, + 2610, 4002, 2612, 4002, 2605, 4002, 2600, 2613, 2623, 2620, + 2624, 2626, 2630, 4002, 2631, 2622, 2632, 2634, 2635, 2636, + 2639, 2640, 2641, 2644, 2647, 4002, 2645, 2649, 4002, 2650, - 2655, 2654, 2660, 2661, 2662, 2668, 2664, 2667, 2666, 3970, - 2670, 2671, 2673, 2675, 2678, 2681, 2688, 2686, 2690, 2684, - 2694, 2695, 2699, 2700, 2702, 3970, 2705, 2707, 3970, 2704, - 2708, 2711, 2715, 3970, 2713, 3970, 2716, 2718, 2720, 2721, - 2724, 2725, 2727, 2732, 2735, 2736, 2737, 2743, 2740, 2744, - 3970, 3970, 2747, 2749, 2753, 2754, 2756, 2757, 2765, 2761, - 2763, 3970, 2759, 2767, 2769, 2770, 2771, 2773, 2774, 2778, - 2779, 2780, 2781, 2782, 2787, 3970, 2788, 2789, 2793, 2794, - 2797, 2798, 2799, 3970, 2801, 2802, 2796, 2811, 2803, 2814, - 2822, 2824, 2804, 2826, 2827, 2829, 2831, 2833, 2835, 2836, + 2658, 2646, 2657, 2654, 4002, 2663, 4002, 2668, 2671, 2673, + 2674, 2675, 2676, 2678, 2680, 2684, 2690, 2686, 2687, 2688, + 4002, 2689, 2692, 2694, 2701, 2695, 2697, 2712, 2709, 2703, + 2711, 2715, 2718, 2713, 2724, 2721, 2727, 2728, 4002, 2729, + 2730, 4002, 2731, 2732, 2733, 2737, 4002, 2739, 4002, 2741, + 2742, 2738, 2746, 2749, 2750, 2761, 2743, 2754, 2764, 2765, + 2771, 2767, 2756, 4002, 4002, 2773, 2768, 2780, 2781, 2774, + 2783, 2789, 2785, 2788, 4002, 2791, 2792, 2794, 2793, 2795, + 2796, 2799, 2803, 2805, 2798, 2806, 2804, 2807, 4002, 2810, + 2812, 2818, 2819, 2820, 2821, 2822, 4002, 2824, 2825, 2827, - 2843, 2840, 2845, 2847, 2837, 3970, 2848, 2850, 2851, 2860, - 2854, 2857, 2861, 2865, 2868, 2852, 2862, 2869, 2874, 3970, - 2875, 2876, 2878, 2879, 2885, 2882, 2887, 2880, 2889, 2891, - 3970, 2892, 2897, 2894, 2896, 2903, 2905, 2907, 2898, 2908, - 2911, 2914, 2921, 2918, 3970, 2915, 3970, 2923, 2925, 2934, - 2930, 2927, 3970, 2933, 2936, 3970, 2938, 3970, 2937, 2941, - 2942, 2943, 2952, 3970, 2954, 2944, 2956, 2959, 2960, 2961, - 2963, 3970, 2965, 2967, 2973, 2976, 2966, 2968, 2975, 2978, - 2977, 2979, 2990, 2987, 3970, 2983, 2991, 3000, 2994, 3001, - 3970, 3970, 2992, 3004, 3007, 2998, 3008, 3970, 3970, 3970, + 2831, 2834, 2836, 2849, 2851, 2839, 2844, 2852, 2846, 2860, + 2862, 2864, 2856, 2866, 2867, 2869, 2871, 2872, 4002, 2873, + 2877, 2874, 2880, 2881, 2882, 2883, 2889, 2895, 2884, 2887, + 2892, 2897, 4002, 2898, 2900, 2901, 2904, 2907, 2909, 2913, + 2910, 2914, 2915, 2919, 2917, 4002, 2922, 2924, 2925, 2927, + 2931, 2932, 2933, 2936, 2935, 2939, 2942, 2954, 2943, 4002, + 2945, 4002, 2946, 2957, 2964, 2960, 2953, 4002, 2962, 2963, + 4002, 2966, 4002, 2967, 2971, 2968, 2974, 2980, 4002, 2982, + 2983, 2984, 2987, 2989, 2990, 2991, 4002, 2994, 2993, 3001, + 3002, 2995, 3004, 3005, 3006, 3008, 3011, 3017, 3014, 4002, - 3012, 3970, 3013, 3970, 3970, 3014, 3016, 3970, 3018, 3970, - 3025, 3021, 3023, 3026, 3027, 3970, 3028, 3029, 3034, 3970, - 3035, 3042, 3036, 3030, 3970, 3050, 3970, 3038, 3051, 3046, - 3052, 3056, 3059, 3062, 3063, 3064, 3065, 3067, 3068, 3069, - 3071, 3070, 3073, 3074, 3077, 3078, 3084, 3085, 3086, 3087, - 3092, 3089, 3091, 3094, 3105, 3096, 3112, 3114, 3970, 3970, - 3102, 3106, 3104, 3108, 3116, 3117, 3118, 3119, 3970, 3130, - 3123, 3121, 3127, 3131, 3133, 3135, 3138, 3140, 3142, 3148, - 3144, 3145, 3147, 3150, 3149, 3152, 3156, 3163, 3970, 3158, - 3157, 3970, 3970, 3164, 3168, 3174, 3170, 3175, 3178, 3179, + 3013, 3018, 3026, 3022, 3025, 4002, 4002, 3031, 3032, 3034, + 3035, 3038, 4002, 4002, 4002, 3041, 4002, 3036, 4002, 4002, + 3042, 3044, 4002, 3049, 4002, 3051, 3052, 3050, 3055, 3057, + 4002, 3056, 3058, 3060, 4002, 3063, 3069, 3065, 3067, 4002, + 3074, 4002, 3078, 3081, 3071, 3084, 3085, 3087, 3089, 3091, + 3094, 3095, 3096, 3097, 3100, 3101, 3103, 3104, 3102, 3106, + 3108, 3110, 3111, 3116, 3118, 3119, 3120, 3123, 3125, 3124, + 3130, 3134, 3127, 3138, 3140, 4002, 4002, 3128, 3144, 3145, + 3149, 3147, 3150, 3153, 3151, 4002, 3155, 3157, 3158, 3161, + 3159, 3160, 3163, 3164, 3165, 3173, 3182, 3175, 3179, 3183, - 3970, 3180, 3182, 3188, 3181, 3970, 3190, 3191, 3197, 3199, - 3970, 3970, 3970, 3200, 3192, 3202, 3203, 3204, 3206, 3205, - 3208, 3970, 3207, 3213, 3220, 3217, 3227, 3229, 3223, 3231, - 3238, 3234, 3241, 3243, 3970, 3970, 3235, 3249, 3246, 3247, - 3245, 3251, 3253, 3255, 3256, 3970, 3259, 3258, 3219, 3257, - 3264, 3265, 3271, 3267, 3970, 3269, 3275, 3277, 3279, 3280, - 3281, 3282, 3284, 3285, 3287, 3293, 3286, 3298, 3970, 3300, - 3289, 3970, 3301, 3306, 3307, 3970, 3310, 3970, 3313, 3970, - 3970, 3308, 3314, 3317, 3318, 3324, 3326, 3330, 3319, 3327, - 3336, 3333, 3334, 3970, 3970, 3340, 3342, 3343, 3350, 3970, + 3185, 3186, 3187, 3191, 3195, 4002, 3189, 3192, 4002, 4002, + 3188, 3200, 3205, 3199, 3201, 3210, 3212, 4002, 3213, 3217, + 3223, 3218, 4002, 3225, 4002, 3227, 3215, 3230, 3233, 4002, + 4002, 4002, 3235, 3220, 3237, 3238, 3239, 3240, 3241, 3243, + 4002, 3246, 3248, 3249, 3252, 3256, 3258, 3259, 3263, 3269, + 3265, 3272, 3274, 4002, 4002, 3262, 3281, 3278, 3279, 3277, + 3280, 3283, 3285, 3287, 4002, 3289, 3288, 3294, 3296, 3297, + 3298, 3300, 3302, 4002, 3303, 3304, 3308, 3314, 3310, 3316, + 3305, 3318, 3315, 3319, 3331, 3328, 3321, 4002, 3332, 3333, + 4002, 3335, 3337, 3338, 4002, 3342, 4002, 4002, 3345, 4002, - 3970, 3346, 3344, 3347, 3348, 3353, 3354, 3356, 3357, 3359, - 3358, 3363, 3369, 3371, 3374, 3375, 3378, 3360, 3379, 3381, - 3382, 3970, 3384, 3389, 3385, 3970, 3394, 3391, 3970, 3387, - 3400, 3404, 3397, 3395, 3412, 3409, 3414, 3970, 3415, 3413, - 3970, 3416, 3970, 3970, 3970, 3421, 3417, 3419, 3970, 3427, - 3429, 3970, 3435, 3431, 3436, 3442, 3438, 3439, 3443, 3450, - 3446, 3448, 3970, 3449, 3451, 3453, 3454, 3458, 3455, 3457, - 3460, 3469, 3465, 3463, 3475, 3472, 3970, 3481, 3483, 3970, - 3485, 3487, 3970, 3494, 3476, 3478, 3486, 3970, 3497, 3488, - 3490, 3500, 3504, 3495, 3506, 3507, 3509, 3510, 3515, 3970, + 4002, 3340, 3347, 3350, 3352, 3357, 3359, 3362, 3354, 3363, + 3369, 3366, 3367, 4002, 4002, 3375, 3368, 3373, 3381, 4002, + 4002, 3378, 3380, 3382, 3384, 3385, 3386, 3389, 3390, 3393, + 3392, 3394, 3403, 3406, 3396, 3408, 3399, 3410, 3414, 3415, + 3417, 4002, 3421, 3422, 3416, 4002, 3427, 3424, 4002, 3428, + 3431, 3438, 3432, 3418, 3444, 3440, 3445, 4002, 3447, 3448, + 4002, 3449, 4002, 4002, 4002, 3450, 3451, 3457, 4002, 3458, + 3461, 4002, 3468, 3464, 3459, 3475, 3469, 3471, 3477, 3483, + 3472, 3481, 4002, 3482, 3484, 3486, 3487, 3488, 3489, 3491, + 3493, 3494, 3503, 3496, 3505, 3506, 4002, 3510, 3514, 4002, - 3511, 3517, 3519, 3520, 3521, 3529, 3526, 3531, 3970, 3533, - 3528, 3970, 3535, 3536, 3538, 3545, 3549, 3554, 3556, 3546, - 3970, 3558, 3970, 3970, 3970, 3559, 3970, 3562, 3563, 3564, - 3565, 3567, 3568, 3970, 3970, 3570, 3572, 3575, 3970, 3569, - 3576, 3581, 3579, 3582, 3583, 3587, 3588, 3592, 3593, 3970, - 3970, 3594, 3970, 3600, 3608, 3611, 3970, 3970, 3970, 3610, - 3970, 3612, 3970, 3618, 3602, 3619, 3970, 3622, 3623, 3970, - 3624, 3595, 3625, 3628, 3630, 3631, 3632, 3634, 3635, 3639, - 3640, 3641, 3647, 3970, 3970, 3651, 3970, 3653, 3970, 3654, - 3659, 3970, 3585, 3661, 3655, 3665, 3970, 3970, 3539, 3648, + 3516, 3518, 4002, 3520, 3511, 3517, 3524, 4002, 3526, 3521, + 3528, 3530, 3533, 3534, 3536, 3537, 3539, 3541, 3545, 4002, + 3542, 3547, 3549, 3551, 3555, 3563, 3559, 3561, 4002, 3565, + 3562, 4002, 3569, 3566, 3570, 3573, 3580, 3583, 3586, 3587, + 4002, 3589, 4002, 4002, 4002, 3590, 4002, 3594, 3595, 3596, + 3597, 3599, 3600, 4002, 4002, 3602, 3604, 3607, 4002, 3601, + 3608, 3613, 3611, 3614, 3615, 3619, 3620, 3624, 3625, 4002, + 4002, 3626, 4002, 3632, 3640, 3643, 4002, 4002, 4002, 3642, + 4002, 3644, 4002, 3650, 3634, 3651, 4002, 3654, 3655, 4002, + 3656, 3627, 3657, 3660, 3662, 3663, 3664, 3666, 3667, 3671, - 3666, 3667, 3668, 3671, 3669, 3970, 3970, 3970, 3673, 3970, - 3674, 3675, 3677, 3970, 3679, 3681, 3682, 3684, 3683, 3686, - 3688, 3692, 3697, 3698, 3705, 3709, 3710, 3713, 3700, 3706, - 3719, 3716, 3723, 3970, 3717, 3970, 3970, 3720, 3729, 3731, - 3727, 3733, 3728, 3970, 3734, 3735, 3736, 3737, 3738, 3740, - 3751, 3742, 3743, 3753, 3755, 3759, 3752, 3767, 3766, 3763, - 3768, 3769, 3777, 3773, 3776, 3970, 3774, 3775, 3778, 3780, - 3781, 3785, 3783, 3795, 3798, 3786, 3800, 3784, 3805, 3801, - 3806, 3809, 3810, 3811, 3970, 3812, 3814, 3816, 3818, 3820, - 3822, 3823, 3824, 3827, 3829, 3832, 3834, 3838, 3970, 3839, + 3672, 3673, 3679, 4002, 4002, 3683, 4002, 3685, 4002, 3686, + 3691, 4002, 3617, 3693, 3687, 3697, 4002, 4002, 3572, 3680, + 3698, 3699, 3700, 3703, 3701, 4002, 4002, 4002, 3705, 4002, + 3706, 3707, 3709, 4002, 3711, 3713, 3714, 3716, 3715, 3718, + 3720, 3724, 3729, 3730, 3737, 3741, 3742, 3745, 3732, 3738, + 3751, 3748, 3755, 4002, 3749, 4002, 4002, 3752, 3761, 3763, + 3759, 3765, 3760, 4002, 3766, 3767, 3768, 3769, 3770, 3772, + 3783, 3774, 3775, 3785, 3787, 3791, 3784, 3799, 3798, 3795, + 3800, 3801, 3809, 3805, 3808, 4002, 3806, 3807, 3810, 3812, + 3813, 3817, 3815, 3827, 3830, 3818, 3832, 3816, 3837, 3833, - 3970, 3970, 3843, 3840, 3846, 3850, 3852, 3970, 3970, 3970, - 3878, 3885, 3892, 3899, 3906, 94, 3913, 3920, 3927, 3934, - 3941, 3948, 3955, 3962 + 3838, 3841, 3842, 3843, 4002, 3844, 3846, 3848, 3850, 3852, + 3854, 3855, 3856, 3859, 3861, 3864, 3866, 3870, 4002, 3871, + 4002, 4002, 3875, 3872, 3878, 3882, 3884, 4002, 4002, 4002, + 3910, 3917, 3924, 3931, 3938, 94, 3945, 3952, 3959, 3966, + 3973, 3980, 3987, 3994 } ; -static yyconst flex_int16_t yy_def[2025] = +static yyconst flex_int16_t yy_def[2045] = { 0, - 2010, 1, 2011, 2011, 2012, 2012, 2013, 2013, 2014, 2014, - 2015, 2015, 2010, 2016, 2010, 2010, 2010, 2010, 2017, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2018, 2010, 2010, 2010, 2018, 2019, 2010, 2010, 2010, 2019, - 2020, 2010, 2010, 2010, 2010, 2020, 2021, 2010, 2010, 2010, - 2021, 2022, 2010, 2023, 2010, 2022, 2022, 2016, 2016, 2010, - 2024, 2017, 2024, 2017, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2030, 1, 2031, 2031, 2032, 2032, 2033, 2033, 2034, 2034, + 2035, 2035, 2030, 2036, 2030, 2030, 2030, 2030, 2037, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2038, 2030, 2030, 2030, 2038, 2039, 2030, 2030, 2030, 2039, + 2040, 2030, 2030, 2030, 2030, 2040, 2041, 2030, 2030, 2030, + 2041, 2042, 2030, 2043, 2030, 2042, 2042, 2036, 2036, 2030, + 2044, 2037, 2044, 2037, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2018, - 2018, 2019, 2019, 2020, 2020, 2010, 2021, 2021, 2022, 2022, - 2023, 2023, 2022, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2038, + 2038, 2039, 2039, 2040, 2040, 2030, 2041, 2041, 2042, 2042, + 2043, 2043, 2042, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2022, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2022, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2042, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2042, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2010, 2022, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2030, 2042, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2022, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2010, 2010, - 2016, 2010, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2042, 2036, 2036, 2036, 2036, 2036, 2030, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2030, 2030, 2036, 2030, 2030, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2022, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2042, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2010, 2016, 2022, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2042, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2010, 2016, - 2016, 2016, 2010, 2016, 2010, 2016, 2016, 2010, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2030, 2036, 2030, 2036, 2036, 2036, + 2030, 2036, 2030, 2036, 2036, 2030, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2010, - 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2030, 2030, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2030, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2016, 2010, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2010, 2016, 2010, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2010, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2010, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2030, 2036, 2036, 2030, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, + 2036, 2030, 2036, 2030, 2036, 2030, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2030, 2036, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2010, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2010, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2030, 2036, 2030, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2030, 2036, 2036, 2036, 2036, 2030, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2030, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2010, 2016, 2016, 2016, - 2016, 2016, 2010, 2016, 2016, 2010, 2016, 2010, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2010, 2010, 2016, 2016, 2016, 2016, 2016, 2010, 2010, 2010, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, + 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2030, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, - 2016, 2010, 2016, 2010, 2010, 2016, 2016, 2010, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2010, 2016, 2010, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2010, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2036, 2036, 2036, 2036, 2036, 2030, 2030, 2036, 2036, 2036, + 2036, 2036, 2030, 2030, 2030, 2036, 2030, 2036, 2030, 2030, + 2036, 2036, 2030, 2036, 2030, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2030, + 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2030, 2030, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2010, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2010, 2010, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2010, 2016, 2016, 2016, 2010, 2016, 2010, 2016, 2010, - 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2010, 2016, 2016, 2016, 2016, 2010, + 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2030, 2030, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2030, 2036, 2030, 2036, 2036, 2036, 2036, 2030, + 2030, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2030, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2030, 2036, 2036, 2036, 2030, 2036, 2030, 2030, 2036, 2030, - 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2010, 2016, 2016, 2016, 2010, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, - 2010, 2016, 2010, 2010, 2010, 2016, 2016, 2016, 2010, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2010, - 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2010, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, + 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2030, 2036, 2036, 2036, 2036, 2030, + 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2030, 2036, 2036, 2036, 2030, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2030, 2036, 2030, 2030, 2030, 2036, 2036, 2036, 2030, 2036, + 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2030, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2010, 2016, 2010, 2010, 2010, 2016, 2010, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2010, 2016, 2016, 2016, 2010, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, - 2010, 2016, 2010, 2016, 2016, 2016, 2010, 2010, 2010, 2016, - 2010, 2016, 2010, 2016, 2016, 2016, 2010, 2016, 2016, 2010, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2010, 2016, 2010, 2016, 2010, 2016, - 2016, 2010, 2016, 2016, 2016, 2016, 2010, 2010, 2016, 2016, + 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2030, 2036, 2030, 2030, 2030, 2036, 2030, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2030, 2036, 2036, 2036, 2030, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, + 2030, 2036, 2030, 2036, 2036, 2036, 2030, 2030, 2030, 2036, + 2030, 2036, 2030, 2036, 2036, 2036, 2030, 2036, 2036, 2030, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2016, 2016, 2016, 2016, 2016, 2010, 2010, 2010, 2016, 2010, - 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2010, 2010, 2016, 2016, 2016, - 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2010, 2016, 2016, 2016, 2016, 2016, - 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2010, 2016, + 2036, 2036, 2036, 2030, 2030, 2036, 2030, 2036, 2030, 2036, + 2036, 2030, 2036, 2036, 2036, 2036, 2030, 2030, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2030, 2030, 2030, 2036, 2030, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2030, 2030, 2036, 2036, 2036, + 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, - 2010, 2010, 2016, 2016, 2016, 2016, 2016, 2010, 2010, 0, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, - 2010, 2010, 2010, 2010 + 2036, 2036, 2036, 2036, 2030, 2036, 2036, 2036, 2036, 2036, + 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2030, 2036, + 2030, 2030, 2036, 2036, 2036, 2036, 2036, 2030, 2030, 0, + 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030, 2030, 2030, 2030 } ; -static yyconst flex_uint16_t yy_nxt[4010] = +static yyconst flex_uint16_t yy_nxt[4042] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 18, 20, 21, 14, 22, 23, 24, 25, 14, @@ -1116,7 +1122,7 @@ static yyconst flex_uint16_t yy_nxt[4010] = 49, 70, 45, 47, 48, 71, 50, 49, 58, 59, 60, 69, 69, 50, 52, 53, 54, 55, 61, 18, 58, 59, 60, 130, 130, 56, 52, 53, 54, 55, - 61, 18, 69, 106, 236, 75, 76, 56, 15, 16, + 61, 18, 69, 106, 237, 75, 76, 56, 15, 16, 17, 63, 64, 65, 68, 68, 69, 68, 68, 66, 68, 97, 69, 77, 69, 68, 86, 144, 67, 15, @@ -1141,417 +1147,421 @@ static yyconst flex_uint16_t yy_nxt[4010] = 169, 170, 179, 69, 69, 69, 69, 69, 69, 69, 180, 178, 177, 182, 174, 69, 69, 181, 183, 186, - 69, 69, 69, 69, 194, 188, 185, 184, 69, 189, - 69, 69, 198, 69, 187, 69, 193, 69, 69, 200, - 69, 190, 192, 69, 197, 199, 69, 195, 196, 69, - 69, 205, 69, 202, 69, 207, 203, 69, 208, 201, - 130, 130, 210, 134, 204, 134, 134, 136, 134, 214, - 209, 69, 206, 137, 137, 139, 212, 139, 139, 73, - 139, 73, 73, 140, 73, 69, 211, 213, 69, 69, - 142, 69, 69, 215, 69, 220, 69, 69, 69, 223, - 69, 221, 222, 219, 217, 224, 225, 216, 69, 69, - 69, 218, 69, 232, 234, 233, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 188, 185, 184, 196, 189, + 69, 69, 69, 69, 187, 199, 69, 193, 195, 69, + 69, 190, 192, 194, 198, 200, 69, 201, 197, 69, + 203, 206, 204, 69, 69, 69, 69, 69, 208, 283, + 205, 211, 130, 130, 137, 137, 209, 202, 140, 136, + 69, 212, 207, 210, 134, 213, 134, 134, 139, 134, + 139, 139, 73, 139, 73, 73, 214, 73, 69, 69, + 69, 69, 69, 142, 69, 69, 221, 216, 69, 224, + 69, 69, 222, 215, 220, 223, 225, 218, 226, 217, + 69, 69, 69, 233, 219, 69, 69, 69, 69, 69, - 69, 235, 237, 69, 238, 69, 69, 69, 226, 69, - 69, 239, 244, 227, 69, 240, 69, 241, 228, 245, - 242, 243, 251, 229, 301, 69, 246, 252, 69, 230, - 231, 247, 69, 69, 253, 254, 250, 256, 69, 259, - 69, 69, 69, 248, 69, 249, 255, 257, 69, 258, - 261, 262, 69, 260, 264, 69, 69, 69, 69, 263, - 69, 69, 69, 265, 69, 69, 267, 69, 69, 69, - 269, 69, 271, 69, 274, 69, 276, 270, 266, 279, - 272, 69, 69, 268, 69, 69, 69, 281, 273, 282, - 69, 277, 278, 275, 283, 280, 69, 286, 287, 69, + 69, 235, 236, 238, 69, 239, 69, 69, 69, 69, + 227, 69, 240, 135, 234, 228, 264, 69, 242, 241, + 229, 243, 245, 69, 69, 230, 244, 251, 246, 69, + 247, 231, 232, 253, 255, 248, 69, 254, 69, 69, + 252, 257, 69, 69, 133, 256, 69, 249, 260, 250, + 69, 258, 262, 69, 263, 261, 69, 69, 69, 69, + 69, 69, 69, 69, 259, 69, 266, 268, 69, 265, + 272, 270, 69, 69, 69, 69, 69, 278, 267, 69, + 276, 271, 69, 69, 269, 281, 69, 273, 69, 274, + 69, 285, 69, 284, 275, 289, 69, 69, 277, 282, - 69, 289, 285, 69, 140, 284, 69, 69, 69, 290, - 69, 69, 296, 69, 69, 298, 293, 69, 295, 297, - 69, 288, 69, 292, 69, 135, 291, 294, 299, 300, - 302, 69, 69, 69, 304, 305, 69, 306, 307, 69, - 308, 69, 69, 309, 69, 69, 69, 69, 310, 303, - 312, 69, 315, 317, 314, 313, 69, 69, 69, 311, - 316, 69, 318, 69, 320, 69, 69, 69, 319, 69, - 69, 325, 69, 69, 69, 326, 321, 69, 328, 69, - 324, 69, 330, 322, 69, 333, 69, 323, 69, 334, - 69, 327, 69, 69, 69, 329, 332, 331, 69, 133, + 69, 279, 280, 291, 287, 69, 288, 286, 69, 69, + 140, 292, 69, 69, 298, 69, 69, 69, 290, 69, + 294, 297, 295, 69, 69, 300, 69, 131, 293, 299, + 69, 296, 301, 302, 304, 69, 309, 303, 306, 69, + 69, 305, 307, 69, 308, 69, 310, 69, 311, 69, + 69, 69, 69, 314, 69, 317, 315, 69, 69, 319, + 69, 69, 320, 316, 69, 312, 313, 69, 322, 69, + 69, 318, 321, 69, 69, 69, 69, 327, 323, 69, + 69, 69, 328, 69, 330, 69, 332, 324, 326, 335, + 69, 325, 329, 69, 69, 69, 336, 69, 69, 331, - 335, 336, 340, 69, 69, 344, 345, 346, 69, 337, - 338, 342, 339, 69, 69, 341, 343, 347, 69, 69, - 69, 353, 69, 69, 69, 355, 69, 351, 354, 352, - 348, 69, 69, 349, 350, 69, 357, 360, 69, 69, - 69, 356, 69, 69, 358, 362, 69, 69, 363, 365, - 69, 366, 372, 367, 364, 359, 69, 69, 361, 371, - 69, 373, 69, 368, 69, 69, 369, 69, 370, 69, - 379, 69, 391, 374, 140, 69, 392, 69, 69, 377, - 389, 375, 376, 378, 390, 381, 380, 69, 69, 382, - 383, 397, 69, 69, 69, 393, 69, 394, 69, 384, + 69, 333, 334, 69, 348, 69, 338, 337, 69, 342, + 69, 69, 346, 347, 339, 340, 344, 341, 69, 343, + 345, 349, 69, 69, 69, 355, 69, 69, 350, 69, + 69, 351, 353, 354, 356, 69, 357, 352, 69, 69, + 69, 363, 358, 359, 69, 69, 69, 69, 69, 69, + 361, 360, 365, 366, 69, 362, 69, 69, 69, 367, + 368, 375, 369, 370, 364, 374, 69, 69, 69, 69, + 371, 377, 376, 372, 69, 373, 69, 382, 69, 378, + 69, 394, 69, 140, 380, 395, 69, 69, 379, 69, + 381, 393, 384, 383, 69, 392, 385, 386, 69, 69, - 69, 385, 386, 387, 69, 401, 388, 395, 396, 69, - 403, 69, 69, 400, 399, 69, 398, 407, 69, 402, - 69, 69, 69, 405, 69, 409, 406, 410, 411, 404, - 69, 69, 69, 69, 408, 416, 69, 69, 69, 69, - 413, 412, 417, 418, 69, 69, 415, 414, 69, 69, - 424, 420, 69, 421, 419, 427, 425, 423, 426, 69, - 69, 69, 69, 69, 69, 69, 422, 429, 430, 69, - 431, 69, 433, 69, 434, 69, 435, 69, 436, 437, - 428, 69, 432, 69, 69, 438, 69, 442, 440, 69, - 69, 444, 69, 443, 439, 441, 69, 445, 69, 447, + 400, 69, 398, 69, 396, 69, 387, 69, 388, 389, + 390, 69, 401, 391, 69, 406, 404, 397, 403, 399, + 69, 402, 405, 69, 69, 410, 69, 69, 413, 414, + 69, 69, 412, 69, 407, 408, 69, 69, 409, 69, + 69, 69, 411, 419, 420, 69, 69, 69, 69, 421, + 69, 418, 416, 415, 69, 417, 69, 424, 69, 426, + 428, 423, 69, 427, 422, 69, 69, 430, 69, 433, + 425, 429, 69, 69, 432, 431, 69, 436, 434, 69, + 69, 69, 439, 440, 437, 69, 435, 69, 69, 441, + 69, 69, 69, 438, 69, 443, 69, 447, 446, 69, - 69, 448, 69, 69, 69, 69, 69, 69, 69, 458, - 69, 450, 69, 451, 69, 69, 69, 446, 453, 69, - 460, 459, 69, 449, 457, 452, 454, 456, 455, 462, - 461, 463, 69, 465, 69, 69, 69, 466, 467, 69, - 69, 69, 69, 469, 69, 69, 471, 69, 69, 69, - 69, 485, 483, 69, 464, 470, 468, 69, 472, 69, - 487, 482, 484, 473, 69, 474, 69, 480, 481, 69, - 475, 69, 476, 486, 69, 488, 69, 489, 69, 69, - 477, 490, 69, 478, 492, 69, 491, 495, 496, 69, - 479, 69, 140, 494, 501, 499, 500, 493, 69, 69, + 444, 69, 69, 450, 445, 69, 448, 69, 442, 69, + 451, 69, 69, 69, 69, 453, 69, 461, 69, 69, + 449, 454, 69, 69, 69, 456, 452, 462, 463, 69, + 466, 455, 457, 460, 458, 69, 459, 465, 464, 467, + 69, 69, 69, 69, 69, 69, 470, 473, 69, 69, + 69, 69, 69, 69, 469, 475, 69, 69, 69, 69, + 489, 69, 468, 474, 471, 476, 472, 503, 486, 140, + 477, 69, 478, 484, 69, 485, 487, 479, 490, 480, + 69, 69, 69, 491, 492, 69, 488, 481, 69, 493, + 482, 69, 69, 497, 69, 494, 69, 483, 69, 499, - 69, 69, 131, 69, 497, 69, 498, 506, 69, 69, - 502, 505, 69, 69, 504, 508, 510, 507, 503, 69, - 69, 509, 69, 69, 512, 513, 516, 511, 69, 69, - 517, 69, 519, 69, 520, 69, 522, 69, 521, 514, - 69, 518, 515, 69, 523, 69, 524, 69, 69, 69, - 525, 69, 526, 528, 69, 529, 69, 533, 530, 527, - 69, 531, 69, 69, 69, 69, 69, 69, 532, 534, - 536, 69, 540, 69, 69, 537, 69, 535, 542, 538, - 545, 543, 69, 539, 541, 69, 69, 69, 544, 547, - 69, 546, 550, 69, 548, 69, 69, 69, 551, 69, + 496, 69, 140, 495, 505, 500, 504, 69, 69, 69, + 69, 138, 69, 69, 498, 69, 502, 501, 69, 506, + 509, 510, 69, 508, 512, 511, 507, 513, 69, 69, + 69, 514, 69, 515, 69, 516, 520, 517, 69, 69, + 521, 69, 523, 69, 524, 69, 526, 69, 518, 525, + 69, 519, 522, 528, 69, 527, 69, 69, 69, 529, + 69, 533, 530, 69, 532, 69, 69, 534, 69, 531, + 535, 537, 69, 69, 69, 69, 69, 538, 69, 69, + 544, 540, 69, 69, 69, 551, 541, 539, 536, 546, + 542, 69, 543, 545, 549, 69, 547, 548, 69, 69, - 69, 557, 554, 69, 69, 69, 69, 69, 559, 553, - 558, 552, 556, 69, 69, 555, 549, 560, 561, 69, - 564, 562, 69, 566, 637, 69, 69, 565, 69, 567, - 69, 69, 569, 563, 69, 568, 570, 69, 573, 69, - 69, 69, 69, 69, 571, 575, 577, 572, 574, 578, - 69, 580, 69, 579, 69, 69, 69, 582, 584, 69, - 576, 69, 69, 69, 69, 581, 69, 69, 589, 69, - 69, 583, 69, 69, 69, 590, 69, 585, 69, 586, - 595, 587, 591, 588, 69, 69, 69, 592, 594, 593, - 599, 596, 69, 597, 69, 598, 69, 603, 69, 69, + 69, 69, 552, 69, 550, 554, 555, 69, 69, 69, + 69, 561, 69, 558, 69, 69, 69, 563, 562, 556, + 557, 69, 560, 69, 553, 559, 564, 69, 136, 568, + 69, 69, 565, 566, 69, 567, 569, 570, 69, 69, + 69, 571, 69, 573, 572, 69, 577, 574, 69, 578, + 69, 69, 69, 575, 69, 580, 69, 69, 576, 579, + 583, 582, 69, 585, 584, 69, 69, 69, 587, 589, + 581, 69, 69, 69, 69, 69, 588, 69, 69, 586, + 69, 594, 69, 600, 595, 69, 69, 69, 69, 590, + 591, 69, 592, 596, 593, 69, 603, 69, 597, 69, - 602, 601, 69, 600, 69, 69, 605, 606, 69, 608, - 69, 604, 607, 609, 69, 69, 69, 69, 140, 69, - 69, 611, 616, 615, 612, 69, 614, 69, 610, 617, - 613, 69, 619, 622, 69, 69, 621, 69, 69, 624, - 620, 618, 69, 627, 69, 69, 69, 69, 69, 625, - 69, 69, 628, 642, 623, 69, 641, 639, 69, 638, - 626, 69, 636, 629, 69, 640, 140, 69, 69, 650, - 69, 630, 69, 653, 654, 69, 69, 631, 69, 656, - 69, 632, 662, 655, 633, 651, 69, 69, 658, 69, - 69, 634, 660, 652, 635, 69, 643, 644, 69, 645, + 599, 598, 605, 604, 69, 601, 602, 69, 69, 606, + 69, 69, 69, 607, 69, 69, 611, 610, 69, 612, + 613, 609, 69, 614, 69, 69, 608, 69, 69, 616, + 140, 621, 615, 617, 69, 620, 619, 69, 622, 618, + 69, 624, 69, 627, 69, 69, 69, 69, 69, 625, + 629, 626, 69, 69, 632, 69, 69, 630, 623, 69, + 633, 69, 69, 69, 628, 631, 69, 69, 644, 69, + 645, 634, 643, 642, 69, 646, 641, 647, 69, 135, + 635, 69, 69, 655, 69, 656, 636, 658, 659, 69, + 637, 69, 69, 638, 657, 69, 661, 69, 660, 667, - 69, 657, 646, 659, 69, 661, 69, 647, 69, 664, - 69, 69, 668, 648, 649, 69, 663, 69, 667, 69, - 69, 674, 69, 69, 675, 138, 665, 666, 673, 69, - 669, 670, 672, 676, 69, 69, 69, 671, 69, 677, - 678, 69, 69, 679, 69, 69, 69, 685, 69, 680, - 682, 683, 69, 688, 69, 69, 69, 69, 69, 69, - 681, 686, 687, 69, 69, 684, 690, 692, 691, 69, - 693, 69, 694, 69, 689, 69, 697, 699, 695, 700, - 69, 69, 69, 69, 698, 69, 69, 702, 69, 69, - 69, 69, 69, 696, 708, 69, 136, 707, 69, 69, + 639, 69, 663, 640, 69, 648, 649, 662, 650, 69, + 69, 651, 69, 665, 664, 69, 652, 666, 69, 69, + 69, 69, 653, 654, 69, 673, 69, 668, 672, 69, + 69, 69, 69, 679, 69, 69, 678, 669, 682, 670, + 671, 674, 680, 675, 677, 681, 69, 69, 676, 69, + 69, 69, 683, 69, 69, 69, 69, 684, 69, 685, + 687, 688, 690, 69, 69, 693, 69, 691, 69, 69, + 69, 686, 692, 69, 69, 689, 697, 695, 696, 698, + 69, 69, 700, 69, 69, 694, 69, 69, 69, 703, + 705, 706, 69, 69, 699, 69, 69, 704, 701, 69, - 711, 69, 701, 69, 703, 704, 69, 714, 705, 706, - 709, 712, 713, 718, 710, 715, 69, 719, 69, 69, - 717, 69, 69, 716, 69, 720, 69, 69, 69, 726, - 727, 724, 69, 69, 69, 69, 722, 728, 721, 69, - 731, 733, 69, 69, 723, 69, 730, 69, 725, 69, - 729, 735, 140, 737, 69, 69, 69, 69, 135, 732, - 69, 734, 736, 69, 748, 69, 69, 69, 69, 749, - 740, 69, 752, 738, 69, 750, 754, 741, 69, 739, - 69, 753, 757, 742, 69, 743, 69, 69, 755, 744, - 69, 745, 751, 69, 69, 759, 746, 69, 756, 761, + 708, 69, 69, 69, 69, 69, 69, 710, 702, 714, + 713, 69, 717, 69, 707, 69, 69, 709, 721, 69, + 69, 711, 712, 716, 715, 718, 720, 724, 725, 719, + 723, 722, 69, 69, 69, 69, 69, 69, 726, 69, + 69, 732, 730, 69, 733, 69, 734, 737, 728, 69, + 69, 69, 69, 69, 727, 69, 729, 739, 69, 69, + 731, 741, 140, 735, 736, 69, 69, 69, 69, 743, + 738, 740, 69, 754, 742, 69, 69, 69, 69, 745, + 755, 746, 758, 69, 69, 744, 69, 69, 747, 69, + 756, 760, 748, 69, 749, 69, 69, 761, 750, 759, - 762, 747, 758, 69, 941, 760, 69, 766, 69, 765, - 69, 764, 69, 69, 763, 767, 69, 69, 768, 69, - 773, 69, 776, 769, 774, 770, 778, 775, 69, 777, - 69, 69, 69, 782, 69, 69, 771, 784, 779, 783, - 69, 69, 69, 772, 785, 780, 69, 69, 788, 69, - 69, 781, 69, 69, 789, 69, 69, 69, 69, 786, - 787, 791, 796, 69, 792, 790, 793, 794, 69, 69, - 69, 69, 802, 69, 69, 795, 69, 69, 69, 800, - 801, 69, 798, 797, 133, 69, 806, 812, 69, 799, - 807, 69, 803, 805, 804, 811, 808, 809, 69, 810, + 751, 762, 757, 69, 69, 752, 69, 763, 764, 765, + 753, 767, 69, 69, 69, 787, 769, 772, 69, 766, + 771, 69, 69, 773, 69, 69, 768, 770, 69, 774, + 779, 69, 69, 785, 775, 781, 776, 780, 69, 783, + 69, 69, 69, 782, 69, 784, 789, 777, 788, 69, + 69, 790, 69, 791, 778, 786, 69, 794, 69, 69, + 69, 69, 69, 792, 795, 793, 69, 69, 69, 797, + 798, 69, 69, 69, 69, 69, 800, 796, 802, 69, + 808, 69, 799, 69, 806, 69, 804, 801, 807, 69, + 69, 803, 69, 69, 805, 812, 69, 813, 814, 69, - 69, 69, 814, 69, 69, 816, 815, 69, 817, 69, - 69, 69, 818, 69, 69, 69, 69, 813, 823, 69, - 69, 69, 69, 820, 819, 826, 821, 827, 69, 69, - 69, 828, 825, 822, 829, 824, 831, 830, 832, 69, - 69, 69, 69, 69, 835, 69, 69, 834, 840, 833, - 69, 69, 69, 69, 69, 841, 842, 844, 69, 839, - 836, 69, 837, 847, 69, 838, 848, 69, 69, 845, - 843, 69, 850, 846, 851, 69, 69, 69, 69, 849, - 855, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 854, 853, 857, 864, 131, 852, 876, 69, 69, 856, + 809, 810, 69, 816, 811, 815, 817, 69, 69, 820, + 69, 69, 818, 821, 69, 69, 822, 69, 69, 823, + 824, 828, 825, 819, 69, 69, 69, 69, 830, 69, + 826, 69, 69, 827, 69, 69, 833, 834, 69, 839, + 69, 836, 69, 69, 829, 832, 835, 69, 831, 838, + 69, 840, 69, 842, 837, 69, 69, 847, 69, 69, + 69, 69, 69, 69, 848, 841, 849, 133, 69, 69, + 843, 846, 851, 69, 844, 853, 845, 854, 850, 852, + 855, 69, 69, 858, 69, 69, 857, 69, 856, 69, + 69, 862, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 858, 861, 865, 862, 860, 69, 863, 69, 69, - 859, 866, 69, 69, 867, 69, 69, 69, 69, 872, - 870, 69, 69, 69, 873, 69, 868, 869, 69, 69, - 881, 871, 69, 874, 879, 69, 877, 882, 69, 69, - 875, 878, 883, 69, 69, 880, 885, 69, 69, 69, - 69, 69, 884, 887, 888, 890, 69, 886, 69, 69, - 892, 69, 69, 69, 69, 69, 889, 891, 893, 897, - 895, 69, 69, 894, 69, 898, 896, 69, 902, 69, - 906, 69, 69, 899, 69, 69, 900, 69, 905, 901, - 908, 69, 903, 912, 904, 907, 910, 913, 69, 911, + 69, 69, 861, 860, 871, 864, 859, 131, 880, 69, + 863, 69, 865, 868, 69, 869, 867, 872, 870, 866, + 69, 69, 69, 69, 69, 873, 874, 69, 875, 877, + 879, 69, 69, 883, 69, 69, 69, 876, 69, 69, + 69, 888, 878, 69, 886, 69, 881, 69, 889, 884, + 69, 882, 890, 892, 885, 69, 69, 69, 69, 887, + 69, 891, 895, 69, 69, 894, 69, 69, 897, 69, + 899, 69, 69, 893, 69, 69, 900, 896, 69, 898, + 69, 904, 69, 902, 901, 69, 903, 905, 909, 69, + 913, 906, 69, 69, 69, 69, 69, 69, 908, 907, - 69, 69, 69, 69, 909, 69, 917, 69, 920, 69, - 921, 919, 69, 69, 69, 915, 916, 922, 69, 914, - 918, 69, 69, 923, 69, 926, 924, 925, 69, 69, - 69, 931, 929, 932, 928, 69, 69, 927, 69, 69, - 933, 69, 940, 934, 69, 69, 69, 69, 930, 69, - 943, 69, 69, 69, 69, 942, 946, 947, 935, 951, - 944, 948, 69, 936, 69, 937, 69, 938, 949, 939, - 945, 69, 950, 69, 69, 953, 957, 69, 952, 956, - 69, 959, 69, 69, 69, 69, 960, 963, 69, 954, - 961, 69, 965, 69, 69, 958, 69, 69, 955, 966, + 910, 912, 915, 69, 69, 69, 919, 914, 917, 911, + 920, 69, 69, 69, 69, 69, 916, 918, 69, 924, + 927, 1136, 926, 921, 69, 69, 922, 923, 925, 69, + 928, 69, 69, 930, 69, 69, 929, 931, 69, 932, + 69, 933, 69, 935, 934, 69, 938, 939, 69, 69, + 69, 69, 69, 940, 941, 69, 936, 69, 947, 948, + 949, 69, 69, 937, 69, 69, 950, 69, 69, 69, + 951, 69, 69, 942, 69, 69, 953, 957, 943, 69, + 944, 954, 945, 952, 946, 955, 69, 959, 956, 960, + 958, 69, 69, 69, 963, 965, 69, 69, 964, 69, - 968, 69, 69, 962, 69, 971, 69, 69, 69, 970, - 69, 964, 972, 69, 973, 976, 975, 967, 69, 69, - 978, 979, 969, 69, 974, 69, 69, 981, 980, 69, - 69, 977, 69, 69, 985, 69, 69, 69, 982, 986, - 989, 69, 69, 69, 984, 69, 69, 69, 69, 983, - 69, 995, 69, 69, 69, 990, 987, 69, 993, 999, - 988, 991, 992, 996, 69, 994, 1000, 69, 69, 1002, - 998, 69, 69, 997, 1004, 69, 1001, 69, 1005, 69, - 1006, 1011, 69, 1007, 1008, 1010, 1009, 1003, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 1016, 1012, + 961, 967, 69, 69, 969, 69, 968, 971, 69, 69, + 962, 69, 966, 973, 69, 69, 974, 976, 69, 69, + 69, 69, 69, 69, 970, 978, 980, 69, 981, 972, + 979, 69, 69, 69, 69, 69, 975, 983, 986, 977, + 984, 982, 987, 69, 69, 985, 989, 69, 69, 988, + 69, 69, 69, 991, 993, 69, 69, 990, 996, 997, + 69, 992, 69, 69, 69, 69, 69, 1003, 69, 69, + 69, 69, 994, 69, 998, 1001, 995, 69, 1007, 2030, + 999, 69, 1000, 1002, 1008, 69, 1010, 1012, 1004, 1006, + 69, 1013, 69, 1009, 1005, 69, 1011, 69, 69, 1014, - 1019, 69, 69, 69, 69, 69, 69, 69, 1013, 69, - 1015, 69, 1017, 1033, 1022, 1018, 1021, 1014, 1023, 1020, - 1024, 1025, 1026, 69, 69, 69, 69, 1030, 1027, 69, - 1029, 1028, 1034, 69, 1036, 1031, 1037, 69, 1035, 69, - 69, 69, 69, 1038, 1032, 69, 1039, 1040, 69, 69, - 69, 69, 69, 1041, 1045, 1043, 1044, 1047, 69, 1042, - 1049, 1048, 69, 69, 1050, 69, 69, 69, 69, 69, - 69, 1046, 1058, 69, 69, 69, 1057, 69, 1051, 69, - 69, 69, 1052, 69, 1066, 1053, 1054, 2010, 1056, 1063, - 69, 69, 1059, 1060, 1055, 1069, 69, 69, 1061, 1062, + 1016, 1018, 69, 1015, 69, 69, 69, 69, 1019, 69, + 69, 1017, 69, 1020, 69, 1024, 69, 69, 69, 69, + 1027, 69, 69, 69, 1021, 69, 69, 1023, 1036, 69, + 1025, 1030, 69, 1022, 1026, 1028, 1031, 1029, 1032, 69, + 1033, 69, 69, 69, 1035, 1034, 1037, 1038, 69, 2030, + 69, 1039, 1044, 1042, 1041, 1043, 1045, 69, 1040, 69, + 1046, 69, 69, 1047, 1048, 69, 69, 69, 69, 69, + 1049, 69, 69, 1055, 1052, 1057, 1050, 1056, 69, 1058, + 69, 69, 69, 69, 69, 1053, 1051, 69, 69, 69, + 69, 1054, 1066, 69, 69, 1065, 69, 69, 69, 69, - 1067, 69, 1064, 1068, 69, 1065, 1070, 69, 1071, 69, - 69, 69, 69, 1075, 1079, 69, 69, 1076, 1073, 69, - 1072, 1080, 69, 1074, 69, 69, 1081, 2010, 1084, 69, - 1077, 69, 1078, 69, 1085, 69, 1087, 1082, 69, 1088, - 1089, 1090, 69, 1086, 1083, 69, 1091, 69, 69, 69, - 69, 1094, 1093, 69, 1096, 69, 69, 69, 1100, 69, - 69, 1098, 69, 69, 1092, 69, 1101, 69, 1095, 1097, - 69, 1103, 1099, 69, 69, 69, 1105, 1106, 69, 1108, - 1102, 1109, 69, 69, 1112, 1104, 1107, 69, 69, 69, - 69, 69, 1111, 1110, 1113, 69, 69, 1118, 1120, 1116, + 69, 1059, 1060, 1061, 69, 69, 1062, 1064, 1063, 1067, + 69, 1074, 1068, 1069, 1071, 1070, 1076, 1091, 69, 1072, + 1073, 1075, 1077, 69, 69, 69, 69, 69, 69, 1078, + 1079, 69, 69, 1083, 69, 69, 1081, 1084, 1080, 1088, + 69, 1082, 69, 69, 69, 1094, 69, 1089, 1090, 69, + 1085, 1087, 1086, 1093, 1092, 69, 69, 1097, 69, 1098, + 1096, 1095, 1099, 69, 69, 1100, 69, 69, 69, 69, + 1103, 1102, 69, 69, 1105, 69, 69, 69, 1107, 1109, + 69, 1110, 69, 1101, 69, 1112, 69, 1104, 69, 1106, + 69, 1108, 69, 69, 1115, 1118, 69, 69, 1117, 1114, - 69, 1119, 69, 69, 1122, 1124, 69, 1114, 1115, 69, - 69, 1117, 69, 69, 69, 1128, 1123, 69, 1126, 69, - 1121, 69, 69, 69, 2010, 1131, 1136, 1134, 1132, 1125, - 69, 1129, 69, 69, 69, 1135, 69, 1127, 1137, 1139, - 1133, 1130, 1140, 69, 1141, 69, 69, 69, 1138, 1145, - 69, 1147, 1142, 69, 69, 1146, 69, 69, 1150, 69, - 69, 69, 1149, 69, 1143, 1151, 1144, 69, 69, 69, - 1158, 69, 69, 69, 69, 69, 1148, 69, 69, 1152, - 69, 1156, 1155, 1153, 1157, 1163, 69, 1154, 1161, 69, - 69, 69, 1159, 1160, 1165, 69, 69, 69, 1162, 69, + 69, 69, 1111, 69, 1121, 69, 1122, 69, 1113, 69, + 69, 1116, 69, 2030, 1120, 1119, 69, 69, 1125, 1127, + 69, 1128, 69, 1129, 1131, 1123, 69, 1124, 69, 69, + 1126, 69, 1130, 69, 1132, 1133, 69, 1135, 69, 1137, + 69, 1134, 69, 1143, 69, 1138, 1139, 1140, 69, 69, + 1141, 1145, 69, 69, 1144, 1149, 1148, 1146, 69, 1150, + 69, 69, 1142, 69, 69, 1147, 1154, 69, 1156, 69, + 69, 69, 1155, 69, 69, 1158, 1159, 69, 69, 1151, + 69, 69, 1152, 1160, 1153, 69, 1167, 69, 69, 69, + 69, 69, 1157, 69, 1162, 69, 1172, 69, 1161, 1164, - 1164, 69, 1167, 1173, 1176, 1166, 1168, 1170, 69, 1169, - 69, 1171, 1174, 69, 1175, 69, 1172, 69, 1180, 1179, - 69, 69, 1177, 1184, 1178, 1185, 69, 69, 69, 1181, - 1183, 69, 1182, 69, 69, 69, 69, 69, 69, 69, - 1194, 69, 2010, 69, 1187, 69, 69, 1186, 1189, 1191, - 69, 1188, 1190, 69, 1196, 1197, 1193, 1195, 69, 1198, - 1192, 1202, 1200, 1203, 1204, 1201, 69, 1206, 69, 69, - 69, 1205, 69, 1199, 1209, 1207, 69, 69, 69, 69, - 1211, 69, 69, 69, 69, 69, 1212, 1218, 69, 1210, - 1208, 1214, 69, 69, 1215, 1221, 69, 1213, 69, 69, + 1165, 1163, 1166, 69, 69, 69, 69, 1168, 69, 1170, + 1169, 1174, 1176, 69, 1171, 69, 69, 1177, 69, 1175, + 1178, 1183, 69, 1173, 1184, 69, 69, 69, 69, 1179, + 1180, 1185, 1186, 69, 1187, 1181, 69, 69, 69, 1193, + 69, 1182, 1188, 69, 69, 1189, 1190, 1192, 69, 1191, + 1194, 69, 69, 1196, 69, 69, 1195, 69, 69, 1203, + 69, 1197, 1198, 69, 69, 69, 1200, 2030, 1199, 1206, + 69, 1207, 1205, 69, 1209, 1202, 1204, 1210, 1212, 1214, + 1201, 69, 1213, 69, 69, 1208, 69, 69, 1217, 69, + 69, 1211, 1216, 69, 69, 1218, 1220, 69, 69, 1215, - 1216, 1219, 1223, 1217, 1224, 69, 1220, 69, 69, 69, - 1225, 69, 1226, 1222, 1230, 69, 69, 1227, 69, 69, - 69, 69, 1236, 69, 69, 1232, 1229, 69, 69, 2010, - 1231, 1233, 1228, 1234, 1239, 1237, 1240, 69, 69, 1235, - 69, 1241, 1238, 1242, 69, 1243, 69, 1245, 69, 69, - 69, 69, 69, 69, 69, 1244, 1247, 69, 69, 1248, - 69, 1246, 1251, 1252, 1249, 1256, 69, 1257, 1250, 69, - 69, 69, 69, 1261, 69, 1255, 1253, 69, 1254, 1263, - 69, 69, 1265, 69, 69, 69, 69, 1267, 1266, 1259, - 1258, 1260, 69, 69, 1269, 1271, 1268, 1262, 69, 69, + 69, 69, 69, 1221, 69, 1222, 1219, 1229, 1225, 69, + 1226, 1223, 69, 1224, 69, 69, 1227, 1232, 69, 69, + 69, 69, 69, 1228, 1234, 1230, 1235, 1236, 69, 69, + 69, 69, 1231, 1237, 69, 1233, 1241, 69, 1238, 69, + 69, 69, 1239, 1244, 1247, 1240, 1243, 69, 1242, 69, + 69, 69, 1245, 1251, 69, 69, 69, 1250, 1252, 1248, + 1246, 1253, 69, 69, 69, 1255, 1256, 69, 1249, 1254, + 69, 69, 69, 69, 69, 1257, 1258, 69, 69, 1259, + 69, 69, 1262, 1263, 1260, 1267, 69, 1268, 1261, 69, + 69, 69, 69, 1272, 69, 1266, 1264, 69, 1265, 1274, - 69, 69, 1264, 1270, 1273, 69, 69, 1274, 1275, 69, - 69, 1272, 1282, 69, 69, 1284, 69, 69, 1280, 1285, - 69, 1276, 1277, 1278, 69, 1288, 69, 1289, 1279, 69, - 1281, 69, 1290, 69, 1283, 69, 1293, 1287, 1286, 1294, - 69, 69, 1296, 69, 69, 69, 69, 69, 69, 1291, - 1295, 69, 1298, 69, 1301, 1292, 1299, 69, 1305, 1297, - 69, 69, 1304, 69, 1308, 1309, 69, 1303, 1307, 69, - 69, 1311, 1300, 69, 1302, 1310, 69, 69, 69, 69, - 1306, 69, 1312, 69, 1316, 69, 69, 1319, 69, 69, - 1315, 69, 69, 69, 2010, 69, 1323, 1313, 1314, 1324, + 69, 69, 1269, 1276, 69, 1277, 69, 1278, 1270, 1279, + 1271, 1273, 69, 69, 1280, 1282, 69, 69, 1275, 69, + 69, 1284, 69, 69, 1285, 1286, 69, 69, 1293, 69, + 69, 1281, 69, 69, 69, 1299, 69, 1291, 1287, 1288, + 1289, 1283, 69, 69, 1301, 1290, 1295, 1292, 1297, 1294, + 1296, 69, 69, 1298, 69, 69, 1304, 1305, 69, 69, + 69, 1307, 69, 69, 69, 69, 69, 1312, 1300, 1306, + 1309, 69, 1302, 1310, 1308, 69, 1303, 69, 1316, 69, + 1315, 69, 1319, 69, 1320, 1321, 69, 69, 1318, 69, + 69, 1311, 69, 1314, 69, 1322, 69, 1313, 69, 1317, - 69, 1317, 69, 1320, 1325, 69, 1322, 69, 1321, 1326, - 69, 1318, 1333, 1327, 1329, 69, 69, 69, 1328, 1331, - 1335, 1330, 1334, 69, 1336, 69, 1337, 1332, 69, 1340, - 69, 69, 69, 69, 69, 69, 1345, 1342, 69, 69, - 1339, 69, 1338, 1347, 1341, 69, 69, 1343, 69, 1349, - 2010, 1348, 69, 1350, 69, 1344, 1351, 69, 1352, 69, - 1346, 69, 69, 69, 69, 1353, 1360, 1354, 1355, 69, - 1356, 1357, 69, 69, 1358, 1359, 1362, 69, 69, 69, - 69, 69, 69, 69, 1367, 1361, 69, 1369, 1364, 69, - 69, 1368, 69, 69, 1371, 69, 69, 1370, 1363, 1365, + 69, 1323, 69, 1327, 69, 69, 1330, 69, 69, 69, + 1326, 69, 1332, 69, 1324, 1325, 2030, 69, 69, 69, + 1328, 1336, 1331, 69, 1335, 1337, 69, 1338, 1333, 69, + 1329, 1345, 1334, 1339, 69, 1342, 69, 1340, 1347, 69, + 1346, 69, 1341, 1344, 1343, 69, 1348, 1350, 69, 1353, + 1349, 69, 69, 69, 69, 69, 69, 69, 1358, 1355, + 1352, 69, 69, 69, 1360, 1354, 69, 1351, 1356, 69, + 69, 69, 1363, 1362, 1361, 1364, 69, 1365, 69, 69, + 69, 69, 1357, 1359, 69, 1367, 1366, 1369, 69, 1368, + 69, 69, 1373, 69, 1372, 1371, 69, 1370, 1375, 69, - 69, 1366, 1376, 69, 1374, 1372, 1377, 1373, 69, 1375, - 1380, 1378, 69, 69, 1382, 69, 69, 69, 1383, 1384, - 69, 69, 1379, 69, 1385, 69, 1387, 69, 69, 1381, - 69, 69, 1388, 69, 69, 69, 69, 69, 69, 1400, - 1390, 1386, 1391, 1392, 1395, 69, 69, 69, 1389, 1394, - 1399, 69, 1402, 69, 69, 1397, 1398, 1396, 1403, 1393, - 1406, 69, 1404, 69, 1401, 69, 69, 69, 1405, 1409, - 1408, 1410, 69, 69, 69, 1414, 69, 1411, 69, 69, - 69, 1415, 69, 69, 1420, 69, 1417, 69, 1421, 1407, - 69, 1412, 1416, 69, 1413, 1424, 69, 1419, 69, 2010, + 69, 69, 69, 69, 69, 1374, 69, 1380, 1382, 1377, + 69, 1381, 69, 69, 69, 1384, 1376, 69, 1383, 1378, + 69, 1379, 69, 1389, 69, 69, 1385, 1391, 1386, 1387, + 1393, 1388, 69, 1390, 69, 69, 69, 1395, 69, 1392, + 1396, 1397, 69, 69, 69, 1400, 69, 69, 69, 1394, + 1398, 69, 69, 69, 1399, 1401, 69, 69, 69, 69, + 1403, 69, 69, 1404, 1405, 1408, 69, 1412, 1402, 69, + 69, 1407, 1413, 1416, 1415, 69, 1414, 1410, 1409, 1406, + 69, 1411, 1419, 69, 1417, 69, 69, 69, 69, 1422, + 69, 1421, 69, 1423, 1418, 1424, 69, 1427, 69, 69, - 69, 1418, 69, 1425, 1426, 1422, 69, 69, 1427, 1430, - 1431, 69, 69, 1423, 69, 1428, 69, 69, 1429, 69, - 69, 1432, 1434, 69, 1435, 69, 1433, 69, 69, 1436, - 69, 1440, 69, 69, 1441, 1445, 69, 69, 1447, 69, - 1437, 1438, 1444, 1439, 69, 1442, 1446, 69, 69, 69, - 1452, 1449, 69, 1450, 1453, 69, 69, 1443, 1456, 69, - 1454, 69, 1451, 1448, 1458, 69, 69, 1459, 69, 69, - 1457, 69, 1462, 69, 1464, 69, 1455, 69, 1463, 69, - 1460, 69, 69, 69, 1466, 69, 69, 1461, 1469, 1472, - 69, 69, 69, 69, 69, 1473, 1465, 1468, 1475, 69, + 69, 69, 69, 1428, 69, 1433, 69, 69, 1430, 69, + 1425, 1420, 1429, 69, 1434, 69, 1426, 1439, 1432, 1437, + 1431, 69, 1435, 69, 69, 69, 1438, 69, 1441, 1436, + 69, 1442, 1446, 69, 1443, 1440, 69, 1444, 1445, 69, + 69, 69, 69, 69, 69, 69, 1449, 1450, 1447, 69, + 69, 69, 1448, 69, 69, 69, 1451, 1455, 69, 1456, + 1460, 69, 69, 1453, 1452, 1454, 69, 1459, 69, 1457, + 1464, 1461, 1462, 69, 1463, 1458, 69, 69, 1467, 69, + 69, 1465, 1468, 69, 1471, 69, 69, 1469, 1470, 1472, + 1466, 1473, 69, 69, 1474, 69, 1477, 69, 1475, 1479, - 69, 69, 1471, 1470, 1467, 69, 69, 1474, 69, 69, - 69, 69, 1485, 69, 69, 69, 69, 1486, 1477, 1478, - 1476, 1487, 1483, 69, 1479, 1481, 69, 1490, 1489, 1480, - 1482, 1493, 1484, 1491, 69, 1492, 69, 1488, 69, 69, - 1495, 69, 1498, 69, 1499, 69, 1500, 69, 69, 69, - 1496, 1494, 69, 1497, 1502, 69, 1504, 69, 1505, 69, - 69, 1508, 69, 69, 69, 1507, 69, 1501, 1506, 69, - 1503, 1510, 69, 69, 69, 1512, 1513, 69, 1514, 1516, - 69, 69, 1509, 1517, 1511, 1520, 69, 69, 69, 1518, - 69, 69, 69, 1515, 69, 1524, 1525, 69, 1527, 69, + 69, 69, 1478, 69, 69, 69, 69, 69, 69, 1481, + 69, 69, 1484, 1476, 1487, 69, 69, 69, 69, 69, + 1483, 1488, 69, 1490, 69, 1489, 1485, 1486, 1480, 1482, + 69, 69, 69, 69, 69, 1500, 69, 69, 1492, 69, + 1501, 1493, 1491, 69, 2030, 1498, 69, 1494, 69, 1505, + 1496, 69, 1502, 1497, 1495, 1499, 69, 1503, 69, 1504, + 1506, 69, 1507, 69, 69, 1510, 1508, 1511, 69, 1509, + 1512, 1513, 69, 1514, 69, 1515, 69, 1517, 69, 69, + 1519, 69, 1520, 69, 69, 69, 69, 1516, 1523, 69, + 1522, 1525, 69, 69, 69, 69, 69, 1518, 1528, 69, - 1519, 69, 1529, 69, 69, 1523, 69, 1521, 69, 69, - 69, 1522, 1530, 1526, 1532, 69, 1531, 69, 1528, 69, - 69, 1534, 1536, 69, 1537, 1538, 69, 69, 1542, 1539, - 69, 1533, 1540, 69, 1543, 69, 1535, 69, 1546, 69, - 1541, 1547, 69, 1548, 1545, 69, 69, 1544, 69, 69, - 69, 1549, 1555, 69, 69, 69, 69, 1553, 1556, 1550, - 1552, 1551, 1554, 1559, 69, 1560, 69, 1558, 69, 1562, - 1561, 69, 69, 69, 1557, 69, 1566, 69, 69, 69, - 69, 1567, 1568, 1563, 1569, 69, 1564, 69, 69, 69, - 69, 69, 1565, 1570, 1574, 69, 1576, 1577, 1571, 69, + 1527, 69, 1529, 1521, 69, 1524, 1531, 69, 1535, 69, + 69, 1526, 69, 69, 1533, 1532, 69, 1530, 1540, 69, + 1539, 69, 69, 1534, 1542, 69, 69, 69, 1538, 69, + 1536, 69, 1546, 1544, 69, 1537, 69, 69, 1547, 69, + 1541, 1549, 1543, 69, 69, 69, 1548, 69, 69, 1553, + 1554, 69, 1551, 1545, 69, 69, 1556, 69, 69, 1560, + 1557, 1559, 1550, 1555, 1552, 69, 69, 1562, 1558, 69, + 1563, 1564, 69, 1565, 69, 69, 69, 1561, 69, 69, + 69, 1566, 1572, 69, 1570, 1567, 69, 1568, 1573, 1569, + 1571, 1576, 69, 1577, 69, 69, 69, 1579, 1575, 69, - 1572, 1573, 69, 69, 69, 1578, 69, 1581, 1580, 1575, - 69, 1579, 69, 69, 1582, 1583, 69, 1585, 1584, 69, - 69, 1588, 1586, 1589, 69, 69, 69, 1592, 69, 1593, - 69, 1591, 1594, 69, 1595, 69, 1587, 69, 69, 69, - 69, 69, 69, 1590, 1598, 1601, 69, 69, 69, 1603, - 69, 1596, 2010, 1600, 69, 1607, 1602, 1605, 69, 1599, - 1597, 1606, 69, 69, 69, 1608, 1604, 1611, 69, 1610, - 1612, 69, 1609, 1613, 69, 69, 69, 69, 1616, 69, - 69, 69, 69, 69, 1622, 69, 69, 1614, 1620, 69, - 69, 1617, 1618, 1619, 1615, 1623, 69, 69, 69, 69, + 1574, 69, 69, 69, 1583, 69, 69, 69, 1585, 1578, + 1584, 1580, 1586, 69, 69, 1581, 69, 69, 69, 1587, + 69, 1582, 1591, 69, 1594, 69, 69, 1588, 1593, 69, + 69, 1590, 1595, 1598, 69, 1597, 1589, 69, 69, 1600, + 1592, 1596, 1599, 69, 69, 1602, 69, 69, 69, 1603, + 69, 1605, 1606, 69, 69, 1609, 69, 1601, 1611, 1608, + 1610, 69, 69, 69, 69, 1612, 1607, 69, 69, 69, + 69, 1618, 69, 1604, 1615, 69, 1620, 69, 1613, 69, + 2030, 69, 1617, 69, 1619, 1623, 69, 1616, 1626, 1614, + 69, 1624, 1625, 69, 1622, 1621, 69, 69, 1627, 69, - 1629, 69, 1621, 69, 69, 2010, 69, 1635, 69, 1626, - 1625, 1633, 1628, 1630, 69, 1624, 69, 69, 69, 1631, - 69, 1627, 1634, 1636, 69, 1632, 69, 1637, 69, 69, - 69, 69, 1645, 69, 1638, 69, 1639, 1642, 1640, 69, - 1641, 1646, 69, 69, 1647, 69, 1649, 69, 1644, 1643, - 69, 1648, 69, 1655, 69, 1656, 69, 69, 1650, 69, - 69, 69, 69, 1651, 69, 1652, 1653, 1660, 69, 69, - 69, 1654, 1658, 1663, 1657, 69, 69, 1664, 1659, 1665, - 69, 1661, 69, 1668, 1662, 1669, 69, 69, 1666, 1672, - 69, 69, 69, 69, 69, 1673, 1667, 1670, 1675, 1676, + 1630, 69, 1631, 69, 1629, 1632, 69, 69, 69, 69, + 1635, 1628, 69, 69, 69, 69, 69, 1641, 69, 1633, + 69, 1639, 69, 69, 1636, 1637, 1634, 1638, 69, 1642, + 69, 69, 69, 1648, 1640, 69, 69, 69, 1654, 69, + 69, 1645, 69, 1644, 1649, 1647, 69, 1652, 1643, 1655, + 69, 1653, 69, 1656, 1646, 1650, 69, 69, 1651, 69, + 1657, 69, 69, 69, 1664, 69, 1665, 69, 1661, 69, + 69, 69, 69, 69, 1658, 69, 69, 69, 1666, 1659, + 1668, 1660, 1662, 1663, 1674, 69, 1669, 69, 1667, 1675, + 1670, 69, 1672, 1671, 69, 69, 1673, 69, 69, 69, - 69, 1678, 69, 69, 69, 1671, 1677, 1674, 1680, 69, - 1681, 69, 69, 1682, 69, 69, 69, 69, 69, 69, - 69, 1686, 1679, 1687, 1685, 69, 1683, 1684, 1689, 69, - 1691, 69, 69, 2010, 1690, 69, 1688, 1692, 1694, 69, - 1695, 69, 1696, 69, 1693, 1698, 69, 69, 1697, 1713, - 69, 1699, 1700, 69, 1701, 69, 1703, 69, 69, 69, - 1702, 69, 1704, 69, 1705, 69, 1706, 69, 69, 69, - 69, 69, 1709, 1708, 1711, 1712, 69, 69, 1707, 69, - 1710, 69, 1714, 69, 1717, 1715, 1716, 69, 1718, 69, - 1722, 69, 69, 69, 69, 1726, 69, 69, 69, 69, + 69, 69, 1679, 69, 69, 1676, 1677, 69, 1682, 1683, + 1684, 69, 69, 69, 1678, 1687, 1688, 69, 1680, 1681, + 1686, 1691, 69, 1685, 69, 69, 1689, 69, 1692, 69, + 69, 1690, 69, 1694, 1695, 69, 1697, 69, 1698, 69, + 1693, 1700, 69, 1696, 1701, 69, 1699, 69, 1702, 69, + 69, 69, 69, 69, 1703, 69, 1706, 1707, 69, 1705, + 69, 69, 1704, 1709, 69, 1711, 1712, 1714, 69, 1715, + 69, 69, 1708, 1710, 69, 69, 1718, 69, 1716, 1713, + 1717, 69, 1719, 1720, 69, 1721, 69, 1722, 1723, 69, + 69, 69, 69, 69, 1724, 69, 1725, 69, 1726, 69, - 1719, 69, 1724, 1728, 1729, 69, 1730, 1720, 1721, 1725, - 69, 1723, 69, 69, 1733, 1731, 1727, 1734, 69, 69, - 69, 1732, 69, 1737, 1738, 69, 69, 1740, 1741, 69, - 69, 69, 1735, 1742, 1736, 1743, 69, 1744, 69, 69, - 1739, 1745, 69, 1748, 1749, 69, 69, 1751, 69, 1746, - 1750, 1752, 69, 1747, 69, 69, 69, 1755, 69, 69, - 69, 1754, 69, 1756, 1759, 69, 69, 1763, 69, 69, - 69, 69, 69, 1757, 1758, 69, 1767, 1753, 1760, 1765, - 1762, 69, 1768, 69, 1769, 1761, 69, 69, 1764, 1766, - 69, 69, 1771, 69, 69, 1777, 69, 69, 1773, 69, + 69, 69, 1729, 1728, 1731, 1732, 69, 1727, 69, 69, + 69, 1730, 69, 1737, 69, 69, 69, 69, 1735, 1736, + 69, 1734, 69, 1738, 1733, 1742, 69, 69, 69, 1746, + 69, 69, 1745, 69, 1739, 1748, 1740, 1744, 1751, 1741, + 69, 1743, 1749, 69, 69, 69, 1747, 69, 1750, 69, + 69, 1754, 69, 1752, 69, 1757, 1758, 69, 1753, 69, + 1760, 1761, 69, 1755, 69, 1756, 69, 1762, 1763, 69, + 1764, 69, 1759, 1765, 69, 69, 1768, 1769, 69, 69, + 69, 69, 1771, 1770, 1766, 69, 1772, 69, 1775, 1767, + 69, 1774, 69, 69, 69, 1776, 69, 69, 69, 1779, - 1774, 69, 1770, 69, 1778, 1780, 69, 69, 1781, 69, - 1772, 1783, 69, 1775, 1776, 1779, 69, 1782, 1785, 1787, - 1784, 69, 1786, 1788, 69, 69, 69, 69, 69, 69, - 1795, 69, 2010, 69, 1789, 1790, 1791, 1792, 1794, 69, - 1796, 69, 1798, 69, 1797, 1799, 1800, 69, 69, 1803, - 69, 69, 1801, 1793, 69, 69, 1805, 1807, 69, 1809, - 69, 69, 69, 69, 1812, 69, 69, 69, 1802, 69, - 69, 1804, 69, 1806, 1814, 69, 1815, 69, 1811, 1813, - 1810, 69, 1819, 1808, 69, 1816, 1821, 69, 69, 1818, - 69, 1817, 1823, 69, 1824, 69, 1825, 69, 69, 69, + 1783, 69, 69, 1773, 69, 69, 69, 1787, 69, 1777, + 1778, 69, 1782, 1785, 1780, 69, 1788, 1781, 69, 1789, + 69, 1784, 69, 1786, 1790, 1791, 69, 69, 69, 69, + 69, 1792, 1797, 69, 69, 1794, 69, 1798, 1800, 69, + 69, 1801, 1803, 69, 69, 1806, 1799, 1795, 1793, 1796, + 69, 1807, 69, 1805, 1804, 1808, 69, 69, 1802, 69, + 69, 69, 69, 69, 1815, 1809, 1810, 1814, 1811, 69, + 69, 69, 1812, 69, 1818, 1817, 69, 1819, 1816, 1820, + 69, 69, 1823, 69, 69, 1821, 1813, 69, 1825, 69, + 1827, 1822, 1829, 69, 69, 69, 69, 1832, 69, 69, - 69, 1820, 69, 1822, 1826, 1827, 69, 69, 1828, 69, - 1831, 1834, 69, 1829, 1832, 1835, 69, 1830, 69, 69, - 1839, 69, 69, 69, 1833, 1840, 1836, 69, 1841, 69, - 1837, 69, 69, 69, 1844, 1842, 1847, 1845, 69, 1838, - 69, 69, 1850, 69, 1851, 69, 1853, 69, 69, 1843, - 69, 69, 1846, 1854, 1915, 1848, 1849, 69, 69, 1852, - 1857, 69, 1856, 1860, 1855, 1858, 69, 1859, 69, 1861, - 69, 69, 1862, 1863, 69, 69, 69, 69, 1867, 69, - 69, 69, 69, 1870, 69, 1868, 1866, 69, 69, 1864, - 1869, 69, 1871, 69, 69, 69, 1865, 69, 1874, 69, + 69, 69, 1824, 69, 1834, 69, 69, 1826, 69, 1828, + 1835, 1831, 1833, 1830, 1838, 69, 1841, 69, 69, 1836, + 1839, 1843, 69, 69, 1837, 1844, 69, 1845, 69, 69, + 69, 1847, 69, 69, 1840, 1846, 69, 1842, 69, 1851, + 69, 1854, 69, 1848, 1855, 69, 69, 1852, 69, 69, + 1859, 69, 1849, 69, 69, 1850, 1860, 69, 1861, 69, + 1857, 69, 1853, 69, 1864, 1856, 1862, 69, 1865, 1858, + 1867, 69, 1870, 69, 69, 69, 1871, 69, 69, 1863, + 1873, 69, 69, 1874, 69, 69, 1866, 1935, 1868, 1869, + 1876, 1877, 69, 1872, 1878, 69, 1875, 1879, 69, 69, - 69, 1872, 1876, 1875, 69, 69, 69, 69, 1873, 1911, - 1882, 1884, 69, 1877, 69, 1878, 1895, 1879, 1880, 1885, - 69, 1887, 69, 69, 69, 1881, 1883, 1886, 1888, 1889, - 69, 69, 1890, 1892, 69, 69, 69, 69, 1896, 1897, - 69, 1898, 69, 69, 69, 1891, 69, 69, 1899, 2010, - 1893, 69, 69, 69, 1894, 1916, 1903, 1904, 1906, 69, - 69, 1901, 1907, 69, 1908, 69, 69, 69, 1902, 1900, - 1910, 69, 1905, 69, 1912, 1909, 1914, 69, 69, 69, - 69, 69, 1913, 69, 1918, 69, 69, 69, 1922, 69, - 1923, 69, 1917, 69, 69, 69, 69, 1921, 69, 1919, + 1881, 69, 69, 1882, 1880, 1883, 69, 69, 69, 69, + 1887, 69, 69, 69, 69, 1890, 69, 1888, 1886, 69, + 69, 1884, 1889, 69, 1891, 69, 69, 69, 1885, 69, + 1894, 69, 69, 1892, 1896, 1895, 69, 69, 69, 69, + 1893, 1931, 1902, 1904, 69, 1897, 69, 1898, 1915, 1899, + 1900, 1905, 69, 1907, 69, 69, 69, 1901, 1903, 1906, + 1908, 1909, 69, 69, 1910, 1912, 69, 69, 69, 69, + 1916, 1917, 69, 1918, 69, 69, 69, 1911, 69, 69, + 1919, 2030, 1913, 69, 69, 69, 1914, 1936, 1923, 1924, + 1926, 69, 69, 1921, 1927, 69, 1928, 69, 69, 69, - 69, 1920, 1926, 1925, 69, 2010, 1927, 1924, 1934, 69, - 69, 1930, 69, 1928, 1929, 1932, 1936, 69, 69, 1935, - 1937, 69, 69, 1931, 1933, 69, 1942, 1938, 69, 69, - 1939, 69, 69, 1941, 1944, 69, 1947, 1940, 1948, 69, - 69, 69, 1943, 69, 1945, 69, 69, 69, 69, 69, - 69, 1946, 69, 1949, 69, 69, 1960, 1957, 1950, 1951, - 1952, 1954, 1955, 69, 69, 69, 1953, 69, 1958, 1956, - 1961, 69, 1962, 1959, 1965, 69, 1963, 1966, 69, 69, - 69, 69, 1967, 1964, 1970, 69, 69, 69, 69, 69, - 69, 1973, 69, 69, 1977, 69, 69, 69, 69, 1968, + 1922, 1920, 1930, 69, 1925, 69, 1932, 1929, 1934, 69, + 69, 69, 69, 69, 1933, 69, 1938, 69, 69, 69, + 1942, 69, 1943, 69, 1937, 69, 69, 69, 69, 1941, + 69, 1939, 69, 1940, 1946, 1945, 69, 2030, 1947, 1944, + 1954, 69, 69, 1950, 69, 1948, 1949, 1952, 1956, 69, + 69, 1955, 1957, 69, 69, 1951, 1953, 69, 1962, 1958, + 69, 69, 1959, 69, 69, 1961, 1964, 69, 1967, 1960, + 1968, 69, 69, 69, 1963, 69, 1965, 69, 69, 69, + 69, 69, 69, 1966, 69, 1969, 69, 69, 1980, 1977, + 1970, 1971, 1972, 1974, 1975, 69, 69, 69, 1973, 69, - 1969, 1972, 1978, 1982, 1971, 1976, 1974, 69, 1980, 1975, - 69, 1981, 69, 69, 1979, 1984, 1985, 69, 69, 1983, - 1986, 69, 69, 69, 69, 1987, 69, 1989, 69, 1991, - 69, 1992, 69, 1995, 69, 69, 69, 1998, 1999, 69, - 1988, 69, 1990, 2001, 69, 2002, 69, 1993, 2000, 1994, - 69, 69, 69, 1996, 1997, 69, 2004, 2003, 69, 2010, - 2005, 2008, 69, 2009, 69, 2010, 2010, 2010, 2010, 2010, - 2010, 2006, 2010, 2010, 2010, 2010, 2010, 2007, 41, 41, - 41, 41, 41, 41, 41, 46, 46, 46, 46, 46, - 46, 46, 51, 51, 51, 51, 51, 51, 51, 57, + 1978, 1976, 1981, 69, 1982, 1979, 1985, 69, 1983, 1986, + 69, 69, 69, 69, 1987, 1984, 1990, 69, 69, 69, + 69, 69, 69, 1993, 69, 69, 1997, 69, 69, 69, + 69, 1988, 1989, 1992, 1998, 2002, 1991, 1996, 1994, 69, + 2000, 1995, 69, 2001, 69, 69, 1999, 2004, 2005, 69, + 69, 2003, 2006, 69, 69, 69, 69, 2007, 69, 2009, + 69, 2011, 69, 2012, 69, 2015, 69, 69, 69, 2018, + 2019, 69, 2008, 69, 2010, 2021, 69, 2022, 69, 2013, + 2020, 2014, 69, 69, 69, 2016, 2017, 69, 2024, 2023, + 69, 2030, 2025, 2028, 69, 2029, 69, 2030, 2030, 2030, - 57, 57, 57, 57, 57, 57, 62, 62, 62, 62, - 62, 62, 62, 72, 72, 2010, 72, 72, 72, 72, - 130, 130, 2010, 2010, 2010, 130, 130, 132, 132, 2010, - 2010, 132, 2010, 132, 134, 2010, 2010, 2010, 2010, 2010, - 134, 137, 137, 2010, 2010, 2010, 137, 137, 139, 2010, - 2010, 2010, 2010, 2010, 139, 141, 141, 2010, 141, 141, - 141, 141, 73, 73, 2010, 73, 73, 73, 73, 13, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 2030, 2030, 2030, 2026, 2030, 2030, 2030, 2030, 2030, 2027, + 41, 41, 41, 41, 41, 41, 41, 46, 46, 46, + 46, 46, 46, 46, 51, 51, 51, 51, 51, 51, + 51, 57, 57, 57, 57, 57, 57, 57, 62, 62, + 62, 62, 62, 62, 62, 72, 72, 2030, 72, 72, + 72, 72, 130, 130, 2030, 2030, 2030, 130, 130, 132, + 132, 2030, 2030, 132, 2030, 132, 134, 2030, 2030, 2030, + 2030, 2030, 134, 137, 137, 2030, 2030, 2030, 137, 137, + 139, 2030, 2030, 2030, 2030, 2030, 139, 141, 141, 2030, + 141, 141, 141, 141, 73, 73, 2030, 73, 73, 73, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010 + 73, 13, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030 } ; -static yyconst flex_int16_t yy_chk[4010] = +static yyconst flex_int16_t yy_chk[4042] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1562,7 +1572,7 @@ static yyconst flex_int16_t yy_chk[4010] = 9, 162, 33, 6, 7, 7, 7, 7, 9, 7, 10, 10, 10, 45, 45, 7, 8, 8, 8, 8, 10, 8, 21, 33, 162, 21, 21, 8, 11, 11, - 11, 11, 11, 11, 2016, 20, 29, 20, 20, 11, + 11, 11, 11, 11, 2036, 20, 29, 20, 20, 11, 20, 29, 24, 21, 75, 20, 24, 75, 11, 12, 12, 12, 12, 12, 12, 83, 22, 22, 26, 26, @@ -1570,7 +1580,7 @@ static yyconst flex_int16_t yy_chk[4010] = 19, 22, 19, 19, 30, 19, 25, 83, 28, 27, 19, 19, 23, 27, 61, 61, 27, 23, 35, 30, 39, 23, 67, 27, 23, 27, 23, 23, 31, 31, - 32, 32, 35, 735, 39, 32, 67, 31, 70, 39, + 32, 32, 35, 741, 39, 32, 67, 31, 70, 39, 36, 36, 70, 31, 76, 36, 77, 31, 76, 80, 84, 32, 34, 38, 38, 36, 38, 34, 36, 40, 40, 34, 79, 80, 40, 88, 77, 34, 40, 84, @@ -1583,417 +1593,421 @@ static yyconst flex_int16_t yy_chk[4010] = 72, 72, 86, 90, 82, 82, 91, 96, 92, 93, 91, 94, 85, 92, 94, 95, 89, 94, 99, 97, 95, 90, 98, 93, 97, 98, 96, 100, 101, 98, - 94, 94, 101, 102, 103, 105, 104, 106, 107, 115, + 94, 94, 101, 102, 103, 105, 104, 106, 107, 116, 102, 100, 99, 104, 97, 108, 109, 103, 105, 108, - 110, 111, 113, 114, 115, 110, 107, 106, 116, 110, - 117, 118, 119, 120, 109, 122, 114, 119, 121, 121, - 123, 111, 113, 124, 118, 120, 127, 116, 117, 125, - 126, 125, 128, 122, 146, 126, 123, 129, 127, 121, - 131, 131, 129, 135, 124, 135, 135, 136, 135, 146, - 128, 144, 125, 138, 138, 140, 144, 140, 140, 141, - 140, 141, 141, 143, 141, 147, 143, 145, 148, 149, - 141, 150, 145, 147, 151, 152, 159, 153, 154, 154, - 152, 152, 153, 151, 149, 155, 156, 148, 156, 160, - 155, 150, 158, 158, 160, 159, 161, 165, 163, 164, + 110, 111, 113, 115, 114, 110, 107, 106, 116, 110, + 117, 118, 122, 120, 109, 119, 123, 114, 115, 124, + 119, 111, 113, 114, 118, 120, 121, 121, 117, 125, + 122, 125, 123, 126, 127, 128, 129, 202, 126, 202, + 124, 129, 131, 131, 138, 138, 127, 121, 143, 136, + 144, 143, 125, 128, 135, 144, 135, 135, 140, 135, + 140, 140, 141, 140, 141, 141, 145, 141, 146, 147, + 148, 145, 149, 141, 150, 151, 152, 147, 154, 154, + 153, 152, 152, 146, 151, 153, 155, 149, 156, 148, + 156, 155, 158, 158, 150, 159, 160, 161, 165, 163, - 166, 161, 163, 168, 164, 167, 173, 169, 156, 157, - 219, 165, 169, 157, 170, 166, 172, 167, 157, 170, - 167, 168, 173, 157, 219, 171, 171, 174, 179, 157, - 157, 171, 174, 175, 175, 176, 172, 177, 178, 180, - 176, 185, 177, 171, 180, 171, 176, 178, 181, 179, - 182, 183, 184, 181, 185, 182, 183, 186, 187, 184, - 188, 189, 190, 186, 191, 193, 188, 192, 194, 195, - 190, 196, 192, 198, 195, 200, 197, 191, 187, 199, - 193, 197, 202, 189, 199, 201, 204, 201, 194, 202, - 205, 198, 198, 196, 203, 200, 206, 206, 207, 203, + 164, 160, 161, 163, 166, 164, 167, 172, 168, 184, + 156, 157, 165, 134, 159, 157, 184, 169, 167, 166, + 157, 167, 169, 170, 173, 157, 168, 172, 170, 171, + 171, 157, 157, 174, 176, 171, 175, 175, 174, 176, + 173, 177, 178, 179, 132, 176, 177, 171, 180, 171, + 181, 178, 182, 180, 183, 181, 185, 182, 187, 183, + 186, 188, 189, 190, 179, 192, 186, 188, 191, 185, + 192, 190, 193, 194, 195, 196, 197, 198, 187, 201, + 196, 191, 198, 199, 189, 200, 203, 193, 205, 194, + 200, 204, 206, 203, 195, 208, 204, 211, 197, 201, - 210, 208, 205, 207, 211, 204, 208, 209, 212, 209, - 213, 218, 214, 217, 215, 216, 211, 214, 213, 215, - 216, 207, 220, 210, 221, 134, 209, 212, 217, 218, - 220, 222, 228, 223, 222, 223, 224, 224, 225, 226, - 226, 225, 227, 227, 229, 232, 234, 230, 228, 221, - 230, 231, 233, 235, 232, 231, 239, 233, 235, 229, - 234, 236, 236, 237, 238, 240, 241, 242, 237, 238, - 243, 243, 244, 245, 246, 244, 239, 247, 246, 249, - 242, 248, 248, 240, 250, 251, 252, 241, 253, 252, - 251, 245, 254, 255, 256, 247, 250, 249, 257, 132, + 208, 199, 199, 209, 206, 207, 207, 205, 209, 210, + 212, 210, 213, 214, 215, 219, 222, 218, 208, 215, + 211, 214, 212, 220, 216, 217, 221, 130, 210, 216, + 217, 213, 218, 219, 221, 223, 226, 220, 223, 226, + 224, 222, 224, 225, 225, 227, 227, 228, 228, 229, + 231, 230, 232, 231, 233, 234, 232, 235, 240, 236, + 234, 237, 237, 233, 236, 229, 230, 238, 239, 241, + 242, 235, 238, 239, 246, 243, 244, 244, 240, 245, + 247, 248, 245, 250, 247, 249, 249, 241, 243, 252, + 251, 242, 246, 253, 252, 254, 253, 255, 257, 248, - 253, 254, 255, 259, 258, 259, 259, 260, 260, 254, - 254, 257, 254, 262, 261, 256, 258, 261, 264, 263, - 265, 266, 266, 267, 268, 268, 269, 264, 267, 265, - 262, 270, 271, 262, 263, 272, 270, 273, 274, 278, - 275, 269, 273, 276, 271, 275, 277, 279, 276, 277, - 280, 277, 281, 278, 276, 272, 282, 281, 274, 280, - 283, 282, 284, 279, 285, 290, 279, 287, 279, 286, - 287, 288, 292, 283, 293, 291, 292, 292, 294, 285, - 290, 283, 284, 286, 291, 288, 287, 289, 296, 289, - 289, 297, 295, 298, 299, 293, 297, 294, 300, 289, + 256, 250, 251, 258, 261, 261, 255, 254, 259, 256, + 260, 263, 260, 260, 255, 255, 258, 255, 262, 257, + 259, 262, 264, 265, 266, 267, 267, 270, 263, 268, + 273, 263, 265, 266, 268, 269, 269, 264, 271, 272, + 274, 275, 270, 271, 276, 68, 275, 277, 278, 280, + 273, 272, 277, 278, 281, 274, 282, 279, 285, 278, + 279, 283, 279, 280, 276, 282, 283, 284, 286, 287, + 281, 285, 284, 281, 289, 281, 288, 289, 290, 285, + 292, 294, 293, 295, 287, 294, 294, 297, 286, 300, + 288, 293, 290, 289, 291, 292, 291, 291, 296, 298, - 301, 289, 289, 289, 302, 301, 289, 295, 296, 304, - 303, 305, 306, 300, 299, 303, 298, 307, 308, 302, - 309, 311, 307, 305, 312, 309, 306, 310, 310, 304, - 310, 313, 314, 315, 308, 315, 318, 319, 316, 317, - 312, 311, 316, 317, 320, 322, 314, 313, 321, 324, - 322, 319, 323, 320, 318, 325, 323, 321, 324, 326, - 325, 327, 330, 333, 328, 329, 320, 327, 328, 332, - 329, 331, 331, 337, 332, 340, 333, 334, 334, 335, - 326, 336, 330, 338, 335, 336, 339, 340, 338, 341, - 342, 342, 343, 341, 337, 339, 344, 343, 345, 345, + 299, 301, 297, 302, 295, 299, 291, 304, 291, 291, + 291, 303, 300, 291, 306, 305, 303, 296, 302, 298, + 305, 301, 304, 307, 308, 309, 310, 311, 312, 312, + 309, 312, 311, 313, 306, 307, 314, 316, 308, 315, + 318, 317, 310, 317, 318, 319, 320, 321, 322, 319, + 323, 316, 314, 313, 328, 315, 325, 322, 324, 323, + 325, 321, 326, 324, 320, 330, 332, 327, 329, 330, + 322, 326, 327, 331, 329, 328, 333, 333, 331, 334, + 335, 336, 336, 337, 334, 338, 332, 339, 337, 338, + 340, 341, 342, 335, 343, 340, 344, 344, 343, 346, - 347, 347, 348, 349, 350, 351, 352, 355, 354, 357, - 356, 349, 358, 350, 357, 359, 365, 344, 352, 363, - 359, 358, 360, 348, 356, 351, 354, 355, 354, 361, - 360, 362, 364, 363, 361, 366, 362, 364, 365, 367, - 368, 369, 370, 367, 371, 375, 369, 373, 377, 374, - 380, 377, 376, 378, 362, 368, 366, 376, 370, 379, - 379, 375, 376, 371, 372, 372, 382, 373, 374, 384, - 372, 386, 372, 378, 383, 380, 381, 381, 385, 388, - 372, 382, 387, 372, 384, 389, 383, 387, 388, 391, - 372, 390, 393, 386, 394, 391, 393, 385, 395, 394, + 341, 345, 347, 347, 342, 350, 345, 351, 339, 349, + 349, 353, 352, 354, 356, 351, 357, 359, 360, 358, + 346, 352, 359, 361, 362, 354, 350, 360, 361, 363, + 364, 353, 356, 358, 356, 364, 357, 363, 362, 365, + 366, 367, 368, 370, 365, 369, 367, 370, 371, 373, + 372, 374, 378, 376, 366, 372, 377, 380, 381, 383, + 380, 394, 365, 371, 368, 373, 369, 394, 378, 62, + 374, 375, 375, 376, 388, 377, 379, 375, 381, 375, + 385, 379, 382, 382, 383, 387, 379, 375, 384, 384, + 375, 386, 389, 388, 390, 385, 391, 375, 392, 390, - 396, 397, 130, 398, 389, 400, 390, 399, 399, 402, - 395, 398, 404, 403, 397, 401, 403, 400, 396, 405, - 401, 402, 406, 407, 405, 406, 408, 404, 409, 416, - 408, 408, 410, 410, 411, 411, 413, 413, 412, 407, - 418, 409, 407, 412, 414, 414, 415, 417, 423, 419, - 416, 415, 417, 419, 421, 420, 422, 424, 421, 418, - 420, 422, 424, 426, 425, 428, 430, 427, 423, 425, - 427, 429, 429, 431, 433, 427, 432, 426, 431, 427, - 434, 432, 435, 428, 430, 434, 436, 438, 433, 436, - 437, 435, 438, 439, 437, 440, 441, 442, 439, 443, + 387, 393, 396, 386, 397, 391, 396, 398, 399, 397, + 400, 57, 401, 403, 389, 405, 393, 392, 407, 398, + 401, 402, 402, 400, 404, 403, 399, 405, 406, 404, + 408, 406, 410, 407, 409, 408, 411, 409, 419, 412, + 411, 411, 413, 413, 414, 414, 416, 416, 410, 415, + 421, 410, 412, 418, 415, 417, 417, 420, 418, 419, + 422, 423, 420, 424, 422, 425, 423, 424, 426, 421, + 425, 427, 428, 429, 431, 433, 427, 428, 430, 432, + 432, 430, 439, 436, 434, 439, 430, 429, 426, 434, + 430, 435, 431, 433, 437, 438, 435, 436, 440, 437, - 444, 445, 442, 450, 446, 447, 445, 521, 447, 441, - 446, 440, 444, 449, 448, 443, 437, 448, 449, 451, - 452, 450, 453, 454, 521, 452, 455, 453, 454, 455, - 456, 458, 457, 451, 459, 456, 457, 457, 460, 461, - 466, 463, 462, 460, 458, 462, 463, 459, 461, 464, - 465, 465, 468, 464, 464, 467, 469, 467, 469, 470, - 462, 471, 472, 473, 474, 466, 475, 476, 474, 477, - 478, 468, 481, 479, 482, 475, 68, 470, 488, 471, - 480, 472, 476, 473, 487, 480, 484, 477, 479, 478, - 484, 481, 485, 482, 483, 483, 486, 488, 489, 490, + 441, 442, 440, 443, 438, 441, 442, 444, 445, 446, + 447, 448, 449, 445, 450, 453, 448, 450, 449, 443, + 444, 454, 447, 451, 440, 446, 451, 452, 52, 455, + 464, 456, 452, 453, 455, 454, 456, 457, 458, 459, + 461, 458, 457, 460, 459, 462, 463, 460, 460, 464, + 465, 463, 466, 461, 470, 466, 467, 472, 462, 465, + 468, 467, 469, 469, 468, 468, 471, 473, 471, 473, + 466, 474, 475, 476, 477, 479, 472, 478, 480, 470, + 481, 478, 482, 484, 479, 483, 485, 486, 484, 474, + 475, 489, 476, 480, 477, 487, 487, 491, 481, 488, - 487, 486, 491, 485, 493, 492, 490, 491, 494, 493, - 495, 489, 492, 494, 496, 497, 498, 499, 500, 501, - 503, 496, 501, 500, 497, 502, 499, 505, 495, 502, - 498, 504, 504, 507, 508, 509, 505, 510, 507, 509, - 504, 503, 511, 512, 513, 514, 515, 518, 512, 510, - 524, 525, 513, 528, 508, 527, 527, 525, 528, 524, - 511, 526, 518, 514, 530, 526, 62, 531, 532, 530, - 533, 515, 516, 533, 534, 534, 535, 516, 536, 536, - 542, 516, 542, 535, 516, 531, 537, 538, 538, 540, - 544, 516, 540, 532, 516, 529, 529, 529, 539, 529, + 483, 482, 489, 488, 490, 485, 486, 492, 493, 490, + 494, 495, 496, 491, 499, 497, 495, 494, 498, 496, + 497, 493, 500, 498, 501, 502, 492, 503, 505, 500, + 504, 505, 499, 501, 506, 504, 503, 507, 506, 502, + 508, 508, 509, 511, 512, 514, 513, 515, 511, 508, + 513, 509, 517, 518, 516, 519, 525, 514, 507, 516, + 517, 522, 529, 528, 512, 515, 530, 535, 529, 536, + 530, 518, 528, 525, 531, 531, 522, 532, 534, 51, + 519, 520, 532, 534, 537, 535, 520, 537, 538, 538, + 520, 539, 541, 520, 536, 540, 540, 546, 539, 546, - 541, 537, 529, 539, 543, 541, 545, 529, 546, 544, - 547, 548, 548, 529, 529, 549, 543, 550, 547, 551, - 552, 554, 554, 553, 555, 57, 545, 546, 553, 555, - 549, 550, 552, 556, 558, 559, 557, 551, 556, 557, - 558, 560, 561, 559, 563, 562, 564, 565, 565, 560, - 562, 563, 566, 568, 567, 569, 574, 571, 568, 572, - 561, 566, 567, 576, 573, 564, 571, 573, 572, 577, - 574, 575, 575, 578, 569, 580, 578, 580, 576, 581, - 581, 582, 583, 584, 578, 585, 586, 583, 588, 587, - 589, 592, 590, 577, 589, 591, 52, 588, 594, 593, + 520, 542, 542, 520, 533, 533, 533, 541, 533, 543, + 544, 533, 545, 544, 543, 547, 533, 545, 548, 549, + 551, 550, 533, 533, 552, 552, 553, 547, 551, 554, + 555, 557, 556, 558, 558, 561, 557, 548, 561, 549, + 550, 553, 559, 554, 556, 560, 562, 559, 555, 563, + 560, 564, 562, 565, 567, 566, 568, 563, 570, 564, + 566, 567, 569, 569, 571, 572, 573, 570, 575, 576, + 572, 565, 571, 577, 578, 568, 577, 575, 576, 578, + 579, 580, 580, 581, 582, 573, 583, 590, 585, 583, + 585, 586, 586, 587, 579, 588, 589, 583, 581, 591, - 592, 595, 582, 597, 584, 585, 598, 595, 586, 587, - 590, 593, 594, 599, 591, 596, 596, 600, 599, 602, - 598, 601, 600, 597, 603, 601, 604, 605, 606, 606, - 607, 604, 609, 610, 608, 607, 603, 608, 602, 612, - 611, 613, 613, 614, 603, 611, 610, 616, 605, 617, - 609, 615, 615, 617, 618, 619, 620, 621, 51, 612, - 625, 614, 616, 623, 623, 624, 628, 626, 627, 624, - 620, 629, 627, 618, 630, 625, 629, 621, 632, 619, - 622, 628, 632, 622, 631, 622, 636, 633, 630, 622, - 634, 622, 626, 637, 635, 634, 622, 638, 631, 635, + 588, 593, 592, 597, 596, 594, 595, 590, 582, 594, + 593, 602, 597, 598, 587, 599, 603, 589, 601, 601, + 600, 591, 592, 596, 595, 598, 600, 604, 605, 599, + 603, 602, 604, 605, 606, 607, 608, 609, 606, 610, + 611, 611, 609, 613, 612, 614, 613, 616, 608, 612, + 617, 615, 616, 619, 607, 624, 608, 618, 618, 621, + 610, 620, 620, 614, 615, 622, 623, 625, 626, 622, + 617, 619, 628, 628, 621, 630, 629, 631, 632, 624, + 629, 625, 632, 635, 633, 623, 634, 636, 626, 627, + 630, 634, 627, 638, 627, 642, 656, 635, 627, 633, - 636, 622, 633, 639, 813, 634, 813, 640, 643, 639, - 646, 638, 640, 645, 637, 641, 641, 642, 642, 644, - 643, 648, 646, 642, 644, 642, 648, 645, 647, 647, - 649, 650, 651, 652, 652, 653, 642, 655, 649, 653, - 657, 656, 655, 642, 656, 650, 661, 658, 659, 660, - 664, 651, 662, 659, 660, 663, 666, 667, 665, 657, - 658, 662, 667, 668, 663, 661, 664, 665, 669, 670, - 671, 672, 673, 675, 684, 666, 676, 673, 677, 671, - 672, 678, 669, 668, 46, 679, 678, 684, 681, 670, - 679, 680, 675, 677, 676, 683, 680, 681, 682, 682, + 627, 636, 631, 637, 639, 627, 640, 637, 638, 639, + 627, 640, 641, 643, 644, 656, 642, 645, 648, 639, + 644, 650, 645, 646, 646, 654, 641, 643, 647, 647, + 648, 651, 649, 654, 647, 650, 647, 649, 652, 652, + 653, 655, 658, 651, 662, 653, 658, 647, 657, 657, + 661, 660, 663, 661, 647, 655, 660, 664, 666, 665, + 667, 668, 664, 662, 665, 663, 669, 670, 671, 667, + 668, 673, 674, 672, 675, 676, 670, 666, 672, 677, + 678, 680, 669, 681, 676, 678, 674, 671, 677, 682, + 683, 673, 684, 685, 675, 683, 686, 684, 685, 689, - 683, 686, 687, 691, 688, 688, 687, 687, 688, 689, - 690, 692, 689, 693, 695, 694, 696, 686, 694, 699, - 697, 702, 698, 691, 690, 697, 692, 698, 701, 706, - 703, 699, 696, 693, 701, 695, 703, 702, 704, 704, - 705, 707, 708, 709, 707, 710, 711, 706, 712, 705, - 713, 714, 716, 712, 717, 713, 714, 717, 718, 711, - 708, 719, 709, 720, 722, 710, 721, 723, 720, 718, - 716, 721, 723, 719, 724, 724, 725, 726, 727, 722, - 728, 729, 731, 730, 728, 732, 734, 738, 736, 737, - 727, 726, 730, 739, 41, 725, 751, 751, 739, 729, + 680, 681, 687, 687, 682, 686, 688, 691, 695, 692, + 696, 688, 689, 692, 692, 693, 693, 694, 697, 693, + 694, 698, 695, 691, 699, 700, 698, 701, 700, 702, + 696, 703, 704, 697, 705, 707, 703, 704, 708, 710, + 710, 707, 711, 709, 699, 702, 705, 712, 701, 709, + 713, 711, 714, 713, 708, 715, 716, 718, 717, 719, + 722, 720, 718, 725, 719, 712, 720, 46, 724, 723, + 714, 717, 723, 728, 715, 725, 716, 726, 722, 724, + 727, 729, 726, 730, 730, 727, 729, 731, 728, 732, + 733, 734, 735, 737, 738, 734, 736, 740, 744, 742, - 747, 731, 736, 740, 737, 734, 741, 738, 740, 742, - 732, 741, 743, 744, 742, 745, 746, 748, 749, 747, - 745, 750, 752, 753, 748, 755, 743, 744, 754, 756, - 756, 746, 757, 749, 754, 758, 752, 757, 759, 761, - 750, 753, 758, 760, 762, 755, 760, 764, 766, 763, - 765, 771, 759, 762, 763, 765, 768, 761, 770, 769, - 768, 772, 773, 774, 775, 776, 764, 766, 769, 773, - 771, 777, 778, 770, 780, 774, 772, 779, 778, 781, - 783, 784, 785, 775, 786, 783, 776, 788, 781, 777, - 785, 787, 779, 789, 780, 784, 787, 789, 789, 788, + 743, 754, 733, 732, 745, 736, 731, 41, 754, 745, + 735, 753, 737, 742, 749, 743, 740, 746, 744, 738, + 747, 748, 746, 750, 751, 747, 748, 752, 749, 751, + 753, 755, 756, 757, 757, 758, 759, 750, 760, 761, + 762, 762, 752, 763, 760, 764, 755, 765, 763, 758, + 766, 756, 764, 766, 759, 767, 768, 769, 770, 761, + 772, 765, 769, 771, 777, 768, 774, 775, 771, 776, + 774, 778, 781, 767, 779, 780, 775, 770, 782, 772, + 783, 779, 784, 777, 776, 785, 778, 780, 784, 786, + 789, 781, 787, 790, 791, 789, 792, 1014, 783, 782, - 790, 791, 795, 792, 786, 793, 793, 794, 796, 797, - 797, 795, 798, 796, 799, 791, 792, 798, 805, 790, - 794, 800, 801, 799, 802, 802, 800, 801, 803, 804, - 806, 807, 805, 808, 804, 809, 807, 803, 808, 810, - 809, 812, 812, 810, 814, 817, 816, 819, 806, 811, - 816, 823, 818, 822, 821, 814, 819, 820, 811, 823, - 817, 820, 820, 811, 824, 811, 825, 811, 821, 811, - 818, 826, 822, 827, 828, 825, 829, 829, 824, 828, - 830, 831, 831, 833, 835, 834, 833, 836, 836, 826, - 834, 837, 838, 838, 839, 830, 840, 844, 827, 839, + 785, 787, 791, 793, 796, 794, 795, 790, 793, 786, + 795, 795, 797, 801, 798, 800, 792, 794, 799, 799, + 802, 1014, 801, 796, 805, 802, 797, 798, 800, 803, + 803, 804, 806, 805, 807, 809, 804, 806, 810, 807, + 808, 808, 811, 810, 809, 812, 813, 814, 815, 820, + 816, 813, 814, 815, 816, 823, 811, 818, 818, 819, + 820, 819, 822, 812, 817, 824, 822, 825, 828, 834, + 823, 829, 14, 817, 827, 831, 825, 828, 817, 830, + 817, 826, 817, 824, 817, 826, 826, 830, 827, 831, + 829, 832, 833, 835, 834, 836, 836, 837, 835, 841, - 841, 841, 842, 835, 843, 844, 847, 845, 849, 843, - 848, 837, 845, 846, 846, 849, 848, 840, 850, 860, - 852, 853, 842, 854, 847, 852, 853, 855, 854, 856, - 857, 850, 855, 858, 859, 859, 861, 862, 856, 860, - 863, 864, 865, 869, 858, 863, 866, 867, 870, 857, - 868, 868, 871, 874, 872, 864, 861, 14, 866, 872, - 862, 864, 865, 869, 875, 867, 873, 873, 877, 875, - 871, 879, 882, 870, 878, 880, 874, 884, 878, 878, - 879, 884, 881, 880, 881, 883, 882, 877, 885, 886, - 883, 887, 888, 889, 890, 891, 892, 894, 889, 885, + 832, 838, 838, 840, 841, 842, 840, 843, 843, 844, + 833, 846, 837, 845, 845, 847, 846, 848, 848, 849, + 850, 852, 851, 854, 842, 850, 852, 853, 853, 844, + 851, 855, 857, 856, 864, 869, 847, 855, 859, 849, + 856, 854, 860, 859, 861, 857, 862, 860, 863, 861, + 865, 862, 867, 864, 866, 866, 868, 863, 869, 870, + 871, 865, 872, 873, 870, 874, 875, 875, 876, 877, + 881, 878, 867, 879, 871, 873, 868, 884, 879, 13, + 871, 882, 872, 874, 880, 880, 882, 885, 876, 878, + 886, 885, 885, 881, 877, 887, 884, 889, 888, 886, - 892, 893, 895, 899, 896, 897, 898, 906, 886, 903, - 888, 907, 890, 906, 895, 891, 894, 887, 896, 893, - 897, 898, 899, 900, 901, 902, 904, 903, 900, 905, - 902, 901, 907, 908, 909, 904, 910, 917, 908, 909, - 919, 910, 911, 911, 905, 912, 912, 914, 914, 915, - 916, 918, 920, 915, 919, 917, 918, 921, 923, 916, - 922, 921, 921, 924, 922, 922, 925, 926, 927, 928, - 929, 920, 930, 931, 932, 935, 929, 930, 923, 933, - 934, 936, 924, 938, 938, 925, 926, 13, 928, 935, - 937, 940, 931, 932, 927, 941, 941, 939, 933, 934, + 888, 890, 892, 887, 891, 893, 890, 894, 891, 895, + 896, 889, 897, 892, 898, 896, 899, 900, 901, 902, + 899, 908, 903, 904, 893, 905, 906, 895, 908, 910, + 897, 902, 914, 894, 898, 900, 903, 901, 904, 907, + 905, 909, 911, 912, 907, 906, 909, 910, 913, 0, + 915, 911, 916, 914, 913, 915, 917, 916, 912, 918, + 918, 917, 919, 919, 921, 921, 922, 923, 924, 925, + 922, 926, 927, 928, 925, 929, 923, 928, 928, 929, + 929, 930, 934, 931, 932, 926, 924, 933, 935, 936, + 938, 927, 937, 939, 940, 936, 941, 937, 943, 961, - 939, 942, 936, 940, 943, 937, 942, 944, 943, 945, - 946, 947, 949, 947, 950, 950, 951, 947, 945, 953, - 944, 951, 952, 946, 954, 958, 952, 0, 955, 972, - 947, 960, 949, 955, 956, 956, 960, 953, 961, 961, - 962, 964, 964, 958, 954, 962, 966, 966, 967, 969, - 970, 970, 969, 971, 972, 973, 974, 975, 976, 976, - 978, 974, 977, 980, 967, 981, 977, 983, 971, 973, - 979, 979, 975, 982, 984, 987, 981, 982, 988, 984, - 978, 986, 986, 989, 989, 980, 983, 991, 992, 990, - 993, 994, 988, 987, 990, 995, 996, 995, 997, 993, + 942, 930, 931, 932, 947, 944, 933, 935, 934, 938, + 945, 945, 939, 940, 942, 941, 947, 961, 946, 943, + 944, 946, 948, 948, 949, 951, 950, 952, 953, 949, + 950, 954, 956, 954, 962, 957, 952, 954, 951, 958, + 958, 953, 959, 966, 960, 964, 964, 959, 960, 980, + 954, 957, 956, 963, 962, 968, 969, 969, 963, 970, + 968, 966, 972, 972, 970, 974, 974, 975, 977, 978, + 978, 977, 979, 982, 980, 981, 983, 985, 982, 984, + 984, 985, 986, 975, 987, 987, 988, 979, 989, 981, + 990, 983, 991, 992, 990, 994, 994, 995, 992, 989, - 998, 996, 1001, 997, 999, 1002, 1002, 991, 992, 999, - 1003, 994, 1004, 1006, 1007, 1007, 1001, 1013, 1004, 1008, - 998, 1009, 1010, 1015, 0, 1010, 1013, 1011, 1010, 1003, - 1012, 1008, 1011, 1014, 1019, 1012, 1016, 1006, 1014, 1016, - 1010, 1009, 1017, 1018, 1018, 1020, 1021, 1017, 1015, 1022, - 1023, 1024, 1019, 1025, 1022, 1023, 1024, 1026, 1027, 1027, - 1028, 1029, 1026, 1030, 1020, 1028, 1021, 1031, 1032, 1033, - 1035, 1034, 1036, 1037, 1038, 1035, 1025, 1039, 1051, 1029, - 1042, 1033, 1032, 1030, 1034, 1041, 1041, 1031, 1038, 1043, - 1044, 1047, 1036, 1037, 1043, 1045, 1049, 1046, 1039, 1058, + 996, 998, 986, 997, 997, 999, 998, 1000, 988, 1001, + 1002, 991, 1006, 0, 996, 995, 1004, 1003, 1001, 1003, + 1009, 1004, 1011, 1005, 1007, 999, 1017, 1000, 1005, 1007, + 1002, 1012, 1006, 1016, 1009, 1010, 1010, 1012, 1015, 1015, + 1023, 1011, 1021, 1019, 1018, 1016, 1017, 1018, 1019, 1020, + 1018, 1021, 1022, 1024, 1020, 1025, 1024, 1022, 1026, 1026, + 1025, 1027, 1018, 1028, 1029, 1023, 1030, 1031, 1032, 1033, + 1034, 1030, 1031, 1032, 1038, 1034, 1035, 1035, 1036, 1027, + 1037, 1039, 1028, 1036, 1029, 1040, 1043, 1044, 1041, 1042, + 1045, 1043, 1033, 1047, 1038, 1046, 1049, 1049, 1037, 1040, - 1042, 1054, 1045, 1051, 1054, 1044, 1046, 1047, 1056, 1046, - 1057, 1049, 1052, 1052, 1053, 1053, 1049, 1055, 1058, 1057, - 1059, 1060, 1055, 1061, 1056, 1062, 1062, 1063, 1061, 1059, - 1060, 1064, 1059, 1065, 1066, 1070, 1067, 1068, 1071, 1072, - 1072, 1073, 0, 1078, 1064, 1074, 1081, 1063, 1066, 1068, - 1075, 1065, 1067, 1077, 1074, 1075, 1071, 1073, 1076, 1076, - 1070, 1078, 1077, 1080, 1081, 1077, 1082, 1083, 1080, 1084, - 1086, 1082, 1083, 1076, 1087, 1084, 1088, 1089, 1092, 1087, - 1089, 1094, 1095, 1093, 1096, 1098, 1089, 1097, 1099, 1088, - 1086, 1093, 1097, 1102, 1094, 1101, 1101, 1092, 1103, 1104, + 1041, 1039, 1042, 1050, 1052, 1053, 1051, 1044, 1054, 1046, + 1045, 1051, 1053, 1055, 1047, 1057, 1059, 1054, 1064, 1052, + 1054, 1060, 1060, 1050, 1061, 1061, 1066, 1063, 1062, 1055, + 1057, 1062, 1063, 1065, 1064, 1057, 1071, 1067, 1068, 1069, + 1072, 1059, 1065, 1073, 1069, 1066, 1067, 1068, 1074, 1067, + 1070, 1070, 1075, 1072, 1076, 1078, 1071, 1079, 1080, 1080, + 1081, 1073, 1074, 1082, 1083, 1085, 1076, 0, 1075, 1083, + 1084, 1084, 1082, 1086, 1085, 1079, 1081, 1085, 1087, 1089, + 1078, 1090, 1087, 1087, 1089, 1084, 1095, 1091, 1092, 1093, + 1097, 1086, 1091, 1092, 1101, 1093, 1096, 1103, 1104, 1090, - 1095, 1098, 1103, 1096, 1104, 1105, 1099, 1106, 1107, 1108, - 1105, 1110, 1106, 1102, 1111, 1111, 1112, 1107, 1113, 1114, - 1116, 1115, 1117, 1118, 1119, 1113, 1110, 1117, 1120, 0, - 1112, 1114, 1108, 1115, 1120, 1118, 1121, 1121, 1122, 1116, - 1125, 1122, 1119, 1123, 1123, 1125, 1126, 1127, 1127, 1128, - 1130, 1129, 1131, 1132, 1134, 1126, 1129, 1133, 1135, 1130, - 1136, 1128, 1133, 1134, 1131, 1137, 1137, 1138, 1132, 1139, - 1140, 1141, 1138, 1142, 1142, 1136, 1134, 1143, 1135, 1144, - 1144, 1145, 1146, 1146, 1147, 1152, 1154, 1148, 1147, 1140, - 1139, 1141, 1148, 1149, 1151, 1153, 1149, 1143, 1159, 1151, + 1102, 1096, 1098, 1097, 1105, 1098, 1095, 1106, 1102, 1107, + 1103, 1098, 1106, 1101, 1108, 1111, 1104, 1110, 1110, 1117, + 1112, 1113, 1114, 1105, 1112, 1107, 1113, 1114, 1115, 1116, + 1119, 1123, 1108, 1115, 1121, 1111, 1120, 1120, 1116, 1122, + 1124, 1125, 1117, 1123, 1126, 1119, 1122, 1127, 1121, 1126, + 1128, 1129, 1124, 1130, 1130, 1131, 1135, 1129, 1131, 1127, + 1125, 1132, 1132, 1137, 1134, 1135, 1136, 1136, 1128, 1134, + 1139, 1138, 1140, 1141, 1143, 1137, 1138, 1142, 1144, 1139, + 1145, 1148, 1142, 1143, 1140, 1146, 1146, 1147, 1141, 1149, + 1150, 1152, 1147, 1151, 1151, 1145, 1143, 1154, 1144, 1153, - 1153, 1168, 1145, 1152, 1155, 1155, 1156, 1156, 1157, 1158, - 1160, 1154, 1161, 1157, 1162, 1164, 1166, 1161, 1159, 1164, - 1164, 1158, 1158, 1158, 1165, 1167, 1167, 1168, 1158, 1170, - 1160, 1169, 1169, 1171, 1162, 1172, 1172, 1166, 1165, 1173, - 1173, 1176, 1177, 1177, 1178, 1179, 1181, 1180, 1183, 1170, - 1176, 1184, 1179, 1182, 1182, 1171, 1180, 1186, 1187, 1178, - 1188, 1189, 1186, 1187, 1190, 1191, 1193, 1184, 1189, 1190, - 1191, 1193, 1181, 1194, 1183, 1192, 1192, 1195, 1197, 1196, - 1188, 1198, 1194, 1199, 1198, 1200, 1201, 1201, 1202, 1203, - 1197, 1204, 1205, 1206, 0, 1207, 1205, 1195, 1196, 1206, + 1153, 1156, 1148, 1155, 1155, 1156, 1158, 1157, 1149, 1158, + 1150, 1152, 1157, 1161, 1160, 1162, 1163, 1168, 1154, 1160, + 1162, 1164, 1164, 1165, 1165, 1166, 1167, 1169, 1170, 1171, + 1166, 1161, 1175, 1170, 1174, 1176, 1176, 1168, 1167, 1167, + 1167, 1163, 1177, 1178, 1178, 1167, 1173, 1169, 1174, 1171, + 1173, 1173, 1179, 1175, 1180, 1181, 1181, 1182, 1182, 1187, + 1185, 1186, 1186, 1188, 1189, 1190, 1191, 1191, 1177, 1185, + 1188, 1192, 1179, 1189, 1187, 1195, 1180, 1193, 1196, 1197, + 1195, 1198, 1199, 1196, 1200, 1201, 1201, 1199, 1198, 1200, + 1202, 1190, 1203, 1193, 1204, 1202, 1205, 1192, 1206, 1197, - 1211, 1199, 1209, 1202, 1207, 1212, 1204, 1213, 1203, 1208, - 1208, 1200, 1214, 1209, 1210, 1210, 1218, 1214, 1209, 1212, - 1216, 1211, 1215, 1215, 1216, 1216, 1217, 1213, 1219, 1220, - 1225, 1217, 1222, 1223, 1220, 1224, 1226, 1223, 1227, 1229, - 1219, 1226, 1218, 1228, 1222, 1235, 1231, 1224, 1228, 1231, - 0, 1229, 1232, 1232, 1244, 1225, 1233, 1233, 1234, 1234, - 1227, 1236, 1239, 1237, 1238, 1235, 1244, 1236, 1237, 1241, - 1238, 1239, 1243, 1246, 1241, 1243, 1247, 1247, 1248, 1249, - 1252, 1250, 1251, 1255, 1252, 1246, 1253, 1254, 1249, 1258, - 1264, 1253, 1254, 1257, 1257, 1259, 1266, 1255, 1248, 1250, + 1207, 1203, 1208, 1207, 1209, 1210, 1210, 1211, 1212, 1215, + 1206, 1224, 1212, 1214, 1204, 1205, 0, 1216, 1218, 1217, + 1208, 1216, 1211, 1222, 1215, 1217, 1220, 1218, 1212, 1223, + 1209, 1224, 1214, 1219, 1219, 1221, 1221, 1220, 1226, 1226, + 1225, 1229, 1220, 1223, 1222, 1225, 1227, 1228, 1230, 1231, + 1227, 1227, 1228, 1233, 1231, 1234, 1235, 1236, 1237, 1234, + 1230, 1238, 1240, 1237, 1239, 1233, 1246, 1229, 1235, 1239, + 1242, 1243, 1243, 1242, 1240, 1244, 1244, 1245, 1245, 1247, + 1255, 1249, 1236, 1238, 1248, 1247, 1246, 1249, 1250, 1248, + 1252, 1254, 1255, 1257, 1254, 1252, 1259, 1250, 1258, 1258, - 1260, 1251, 1262, 1262, 1259, 1257, 1264, 1258, 1267, 1260, - 1268, 1266, 1269, 1270, 1270, 1268, 1271, 1274, 1271, 1272, - 1272, 1275, 1267, 1277, 1274, 1276, 1276, 1278, 1279, 1269, - 1280, 1281, 1277, 1282, 1283, 1286, 1287, 1290, 1284, 1290, - 1279, 1275, 1280, 1281, 1284, 1289, 1291, 1292, 1278, 1283, - 1289, 1293, 1292, 1295, 1297, 1286, 1287, 1284, 1293, 1282, - 1298, 1298, 1295, 1299, 1291, 1300, 1302, 1301, 1297, 1301, - 1300, 1302, 1303, 1304, 1305, 1306, 1307, 1303, 1309, 1308, - 1306, 1307, 1311, 1312, 1313, 1313, 1309, 1314, 1314, 1299, - 1315, 1304, 1308, 1316, 1305, 1317, 1320, 1312, 1318, 0, + 1260, 1261, 1262, 1263, 1266, 1257, 1264, 1263, 1265, 1260, + 1269, 1264, 1277, 1265, 1268, 1268, 1259, 1275, 1266, 1261, + 1270, 1262, 1271, 1273, 1273, 1278, 1268, 1277, 1269, 1270, + 1279, 1271, 1280, 1275, 1286, 1279, 1281, 1281, 1282, 1278, + 1282, 1283, 1283, 1285, 1287, 1287, 1288, 1289, 1290, 1280, + 1285, 1291, 1292, 1293, 1286, 1288, 1294, 1297, 1302, 1295, + 1290, 1298, 1300, 1291, 1292, 1295, 1304, 1300, 1289, 1303, + 1301, 1294, 1301, 1304, 1303, 1306, 1302, 1297, 1295, 1293, + 1308, 1298, 1309, 1309, 1306, 1310, 1311, 1312, 1313, 1312, + 1314, 1311, 1315, 1313, 1308, 1314, 1316, 1317, 1318, 1319, - 1317, 1311, 1319, 1318, 1319, 1315, 1321, 1322, 1320, 1322, - 1323, 1323, 1324, 1316, 1325, 1321, 1330, 1327, 1321, 1328, - 1331, 1324, 1327, 1332, 1328, 1335, 1325, 1333, 1337, 1330, - 1338, 1335, 1339, 1340, 1337, 1341, 1341, 1342, 1343, 1343, - 1331, 1332, 1340, 1333, 1344, 1338, 1342, 1345, 1346, 1347, - 1348, 1345, 1349, 1346, 1348, 1348, 1350, 1339, 1353, 1353, - 1349, 1354, 1347, 1344, 1355, 1355, 1356, 1356, 1357, 1358, - 1354, 1363, 1359, 1360, 1361, 1361, 1350, 1359, 1360, 1364, - 1357, 1365, 1366, 1367, 1364, 1368, 1369, 1358, 1367, 1370, - 1370, 1371, 1372, 1373, 1374, 1371, 1363, 1366, 1373, 1375, + 1320, 1322, 1317, 1318, 1323, 1324, 1324, 1326, 1320, 1327, + 1315, 1310, 1319, 1325, 1325, 1330, 1316, 1330, 1323, 1328, + 1322, 1329, 1326, 1331, 1328, 1334, 1329, 1332, 1332, 1327, + 1333, 1333, 1336, 1336, 1334, 1331, 1335, 1334, 1335, 1337, + 1338, 1340, 1341, 1343, 1344, 1345, 1340, 1341, 1337, 1346, + 1352, 1348, 1338, 1350, 1351, 1357, 1343, 1348, 1353, 1350, + 1354, 1354, 1355, 1345, 1344, 1346, 1358, 1353, 1363, 1351, + 1358, 1355, 1356, 1356, 1357, 1352, 1359, 1360, 1361, 1362, + 1367, 1359, 1361, 1361, 1366, 1366, 1370, 1362, 1363, 1367, + 1360, 1368, 1368, 1369, 1369, 1371, 1372, 1373, 1370, 1374, - 1377, 1378, 1369, 1368, 1365, 1379, 1380, 1372, 1387, 1381, - 1382, 1383, 1385, 1385, 1386, 1389, 1393, 1386, 1375, 1377, - 1374, 1387, 1382, 1388, 1378, 1380, 1390, 1390, 1389, 1379, - 1381, 1393, 1383, 1391, 1391, 1392, 1392, 1388, 1394, 1395, - 1395, 1396, 1397, 1397, 1398, 1398, 1399, 1399, 1400, 1405, - 1396, 1394, 1402, 1396, 1401, 1401, 1403, 1403, 1404, 1404, - 1407, 1408, 1408, 1409, 1416, 1407, 1411, 1400, 1405, 1412, - 1402, 1410, 1410, 1413, 1417, 1412, 1413, 1414, 1414, 1415, - 1415, 1418, 1409, 1416, 1411, 1419, 1419, 1421, 1422, 1417, - 1423, 1424, 1428, 1414, 1426, 1424, 1425, 1425, 1427, 1427, + 1374, 1372, 1373, 1376, 1377, 1379, 1378, 1380, 1381, 1377, + 1385, 1382, 1380, 1371, 1383, 1383, 1387, 1384, 1386, 1388, + 1379, 1384, 1390, 1386, 1391, 1385, 1381, 1382, 1376, 1378, + 1392, 1393, 1394, 1395, 1396, 1398, 1398, 1399, 1388, 1400, + 1399, 1390, 1387, 1401, 0, 1395, 1402, 1391, 1403, 1403, + 1393, 1406, 1400, 1394, 1392, 1396, 1407, 1401, 1409, 1402, + 1404, 1404, 1405, 1405, 1408, 1408, 1406, 1409, 1413, 1407, + 1409, 1410, 1410, 1411, 1411, 1412, 1412, 1414, 1414, 1415, + 1416, 1416, 1417, 1417, 1418, 1420, 1422, 1413, 1421, 1421, + 1420, 1423, 1423, 1424, 1425, 1426, 1429, 1415, 1426, 1430, - 1418, 1429, 1429, 1430, 1432, 1423, 1434, 1421, 1435, 1433, - 1439, 1422, 1430, 1426, 1433, 1436, 1432, 1437, 1428, 1438, - 1440, 1435, 1437, 1441, 1438, 1439, 1442, 1446, 1443, 1440, - 1444, 1434, 1441, 1443, 1444, 1448, 1436, 1449, 1449, 1452, - 1442, 1450, 1451, 1451, 1448, 1454, 1450, 1446, 1455, 1459, - 1457, 1451, 1459, 1460, 1461, 1462, 1466, 1455, 1460, 1452, - 1454, 1452, 1457, 1463, 1463, 1465, 1465, 1462, 1467, 1467, - 1466, 1468, 1469, 1470, 1461, 1471, 1471, 1473, 1477, 1474, - 1478, 1473, 1474, 1468, 1475, 1475, 1469, 1479, 1476, 1481, - 1480, 1482, 1470, 1476, 1480, 1486, 1482, 1483, 1477, 1484, + 1425, 1427, 1427, 1418, 1431, 1422, 1428, 1428, 1432, 1432, + 1434, 1424, 1435, 1436, 1430, 1429, 1437, 1427, 1438, 1438, + 1437, 1439, 1441, 1431, 1440, 1440, 1442, 1443, 1436, 1445, + 1434, 1444, 1444, 1442, 1447, 1435, 1448, 1449, 1445, 1450, + 1439, 1448, 1441, 1451, 1452, 1453, 1447, 1455, 1454, 1452, + 1453, 1456, 1450, 1443, 1457, 1459, 1455, 1461, 1463, 1459, + 1456, 1458, 1449, 1454, 1451, 1467, 1458, 1463, 1457, 1464, + 1464, 1465, 1466, 1466, 1469, 1470, 1465, 1461, 1472, 1474, + 1476, 1466, 1474, 1475, 1470, 1467, 1477, 1467, 1475, 1469, + 1472, 1478, 1478, 1480, 1480, 1481, 1482, 1482, 1477, 1483, - 1478, 1479, 1483, 1487, 1493, 1484, 1489, 1488, 1487, 1481, - 1496, 1486, 1488, 1490, 1489, 1490, 1494, 1494, 1493, 1495, - 1497, 1497, 1495, 1501, 1501, 1503, 1506, 1507, 1507, 1509, - 1509, 1506, 1511, 1512, 1512, 1513, 1496, 1511, 1514, 1515, - 1517, 1518, 1524, 1503, 1515, 1519, 1519, 1521, 1523, 1522, - 1528, 1513, 0, 1518, 1522, 1528, 1521, 1524, 1530, 1517, - 1514, 1526, 1526, 1529, 1531, 1529, 1523, 1532, 1532, 1531, - 1533, 1533, 1530, 1534, 1534, 1535, 1536, 1537, 1537, 1538, - 1539, 1540, 1542, 1541, 1543, 1543, 1544, 1535, 1541, 1545, - 1546, 1538, 1539, 1540, 1536, 1544, 1547, 1548, 1549, 1550, + 1476, 1484, 1485, 1486, 1486, 1489, 1488, 1492, 1489, 1481, + 1488, 1483, 1490, 1490, 1491, 1484, 1493, 1494, 1495, 1491, + 1496, 1485, 1495, 1497, 1498, 1501, 1499, 1492, 1497, 1498, + 1502, 1494, 1499, 1503, 1504, 1502, 1493, 1505, 1503, 1505, + 1496, 1501, 1504, 1508, 1509, 1509, 1510, 1511, 1518, 1510, + 1512, 1512, 1516, 1516, 1521, 1522, 1522, 1508, 1526, 1521, + 1524, 1524, 1528, 1526, 1527, 1527, 1518, 1529, 1532, 1530, + 1533, 1534, 1534, 1511, 1530, 1536, 1537, 1538, 1528, 1539, + 0, 1537, 1533, 1545, 1536, 1541, 1541, 1532, 1545, 1529, + 1543, 1543, 1544, 1544, 1539, 1538, 1546, 1547, 1546, 1548, - 1550, 1552, 1542, 1553, 1551, 0, 1554, 1556, 1556, 1547, - 1546, 1554, 1549, 1551, 1561, 1545, 1563, 1555, 1562, 1552, - 1564, 1548, 1555, 1557, 1557, 1553, 1558, 1558, 1565, 1566, - 1567, 1568, 1568, 1572, 1561, 1571, 1562, 1565, 1563, 1573, - 1564, 1570, 1570, 1574, 1571, 1575, 1573, 1576, 1567, 1566, - 1577, 1572, 1578, 1579, 1579, 1580, 1581, 1582, 1574, 1583, - 1580, 1585, 1584, 1575, 1586, 1576, 1577, 1584, 1587, 1591, - 1590, 1578, 1582, 1587, 1581, 1588, 1594, 1588, 1583, 1590, - 1595, 1585, 1597, 1595, 1586, 1596, 1596, 1598, 1591, 1599, - 1599, 1600, 1602, 1605, 1603, 1600, 1594, 1597, 1603, 1604, + 1549, 1549, 1550, 1550, 1548, 1551, 1551, 1552, 1553, 1554, + 1554, 1547, 1555, 1556, 1559, 1557, 1558, 1560, 1560, 1552, + 1561, 1558, 1562, 1563, 1555, 1556, 1553, 1557, 1564, 1561, + 1565, 1566, 1567, 1567, 1559, 1568, 1570, 1569, 1573, 1573, + 1578, 1564, 1571, 1563, 1568, 1566, 1572, 1571, 1562, 1574, + 1574, 1572, 1575, 1575, 1565, 1569, 1579, 1580, 1570, 1582, + 1578, 1581, 1583, 1585, 1585, 1584, 1587, 1587, 1582, 1588, + 1589, 1591, 1592, 1590, 1579, 1593, 1594, 1595, 1588, 1580, + 1590, 1581, 1583, 1584, 1596, 1596, 1591, 1598, 1589, 1597, + 1592, 1599, 1594, 1593, 1597, 1600, 1595, 1601, 1602, 1603, - 1604, 1607, 1607, 1608, 1615, 1598, 1605, 1602, 1609, 1609, - 1610, 1610, 1614, 1614, 1616, 1617, 1618, 1620, 1619, 1623, - 1621, 1618, 1608, 1619, 1617, 1624, 1615, 1616, 1621, 1626, - 1624, 1649, 1625, 0, 1623, 1629, 1620, 1625, 1627, 1627, - 1628, 1628, 1629, 1630, 1626, 1631, 1632, 1637, 1630, 1649, - 1631, 1632, 1633, 1633, 1634, 1634, 1638, 1641, 1639, 1640, - 1637, 1638, 1639, 1642, 1640, 1643, 1641, 1644, 1645, 1650, - 1648, 1647, 1644, 1643, 1647, 1648, 1651, 1652, 1642, 1654, - 1645, 1656, 1650, 1653, 1653, 1651, 1652, 1657, 1654, 1658, - 1659, 1659, 1660, 1661, 1662, 1663, 1663, 1664, 1667, 1665, + 1611, 1607, 1601, 1604, 1608, 1598, 1599, 1605, 1604, 1605, + 1607, 1614, 1612, 1615, 1600, 1612, 1613, 1613, 1602, 1603, + 1611, 1616, 1616, 1608, 1617, 1619, 1614, 1627, 1617, 1620, + 1622, 1615, 1634, 1620, 1621, 1621, 1624, 1624, 1626, 1626, + 1619, 1628, 1628, 1622, 1629, 1629, 1627, 1633, 1633, 1635, + 1636, 1637, 1638, 1639, 1634, 1640, 1637, 1638, 1642, 1636, + 1643, 1644, 1635, 1640, 1645, 1643, 1644, 1646, 1646, 1647, + 1647, 1648, 1639, 1642, 1656, 1649, 1650, 1651, 1648, 1645, + 1649, 1650, 1651, 1652, 1652, 1653, 1653, 1656, 1657, 1660, + 1658, 1659, 1661, 1657, 1658, 1662, 1659, 1663, 1660, 1664, - 1656, 1671, 1661, 1665, 1666, 1666, 1667, 1657, 1658, 1662, - 1668, 1660, 1670, 1673, 1671, 1668, 1664, 1673, 1674, 1675, - 1682, 1670, 1677, 1677, 1679, 1679, 1683, 1683, 1684, 1684, - 1685, 1689, 1674, 1685, 1675, 1686, 1686, 1687, 1687, 1690, - 1682, 1688, 1688, 1691, 1692, 1692, 1693, 1696, 1691, 1689, - 1693, 1696, 1696, 1690, 1697, 1698, 1703, 1699, 1702, 1704, - 1705, 1698, 1699, 1702, 1704, 1706, 1707, 1708, 1708, 1709, - 1711, 1710, 1718, 1703, 1703, 1712, 1712, 1697, 1705, 1710, - 1707, 1713, 1713, 1714, 1714, 1706, 1715, 1716, 1709, 1711, - 1717, 1719, 1716, 1720, 1721, 1723, 1723, 1725, 1718, 1730, + 1667, 1666, 1663, 1662, 1666, 1667, 1668, 1661, 1669, 1670, + 1671, 1664, 1672, 1672, 1673, 1675, 1676, 1681, 1670, 1671, + 1677, 1669, 1679, 1673, 1668, 1678, 1678, 1683, 1680, 1682, + 1682, 1684, 1681, 1687, 1675, 1684, 1676, 1680, 1687, 1677, + 1686, 1679, 1685, 1685, 1689, 1690, 1683, 1692, 1686, 1693, + 1694, 1692, 1702, 1689, 1696, 1696, 1699, 1699, 1690, 1703, + 1703, 1704, 1704, 1693, 1705, 1694, 1709, 1705, 1706, 1706, + 1707, 1707, 1702, 1708, 1708, 1710, 1711, 1712, 1712, 1713, + 1717, 1711, 1716, 1713, 1709, 1718, 1716, 1716, 1719, 1710, + 1722, 1718, 1723, 1719, 1724, 1722, 1725, 1726, 1727, 1724, - 1719, 1724, 1715, 1728, 1724, 1727, 1727, 1734, 1728, 1733, - 1717, 1731, 1731, 1720, 1721, 1725, 1732, 1730, 1733, 1735, - 1732, 1736, 1734, 1735, 1735, 1740, 1737, 1739, 1742, 1747, - 1747, 1748, 0, 1746, 1736, 1737, 1739, 1740, 1746, 1750, - 1748, 1751, 1751, 1754, 1750, 1751, 1753, 1753, 1755, 1756, - 1757, 1758, 1754, 1742, 1756, 1759, 1758, 1760, 1761, 1762, - 1762, 1764, 1760, 1765, 1766, 1766, 1767, 1769, 1755, 1770, - 1768, 1757, 1771, 1759, 1768, 1774, 1769, 1773, 1765, 1767, - 1764, 1772, 1773, 1761, 1776, 1770, 1775, 1775, 1785, 1772, - 1786, 1771, 1778, 1778, 1779, 1779, 1781, 1781, 1787, 1782, + 1728, 1728, 1729, 1717, 1731, 1730, 1732, 1732, 1735, 1723, + 1723, 1737, 1727, 1730, 1725, 1733, 1733, 1726, 1734, 1734, + 1736, 1729, 1738, 1731, 1735, 1736, 1739, 1740, 1745, 1741, + 1754, 1737, 1743, 1743, 1744, 1739, 1748, 1744, 1747, 1747, + 1750, 1748, 1751, 1751, 1753, 1754, 1745, 1740, 1738, 1741, + 1752, 1755, 1756, 1753, 1752, 1755, 1755, 1757, 1750, 1759, + 1760, 1762, 1766, 1767, 1767, 1756, 1757, 1766, 1759, 1768, + 1770, 1775, 1760, 1771, 1771, 1770, 1774, 1771, 1768, 1773, + 1773, 1777, 1776, 1778, 1781, 1774, 1762, 1776, 1778, 1779, + 1780, 1775, 1782, 1782, 1784, 1780, 1785, 1786, 1786, 1787, - 1790, 1774, 1791, 1776, 1782, 1784, 1784, 1794, 1785, 1789, - 1789, 1792, 1792, 1786, 1790, 1793, 1793, 1787, 1795, 1796, - 1797, 1797, 1798, 1801, 1791, 1798, 1794, 1799, 1799, 1802, - 1795, 1803, 1804, 1805, 1803, 1801, 1806, 1804, 1807, 1796, - 1811, 1806, 1808, 1808, 1810, 1810, 1813, 1813, 1814, 1802, - 1815, 1899, 1805, 1814, 1899, 1807, 1807, 1816, 1820, 1811, - 1817, 1817, 1816, 1820, 1815, 1818, 1818, 1819, 1819, 1822, - 1822, 1826, 1826, 1828, 1828, 1829, 1830, 1831, 1832, 1832, - 1833, 1840, 1836, 1837, 1837, 1833, 1831, 1838, 1841, 1829, - 1836, 1843, 1838, 1842, 1844, 1845, 1830, 1893, 1842, 1846, + 1788, 1789, 1777, 1790, 1788, 1791, 1792, 1779, 1794, 1781, + 1789, 1785, 1787, 1784, 1792, 1793, 1795, 1795, 1796, 1790, + 1793, 1798, 1798, 1805, 1791, 1799, 1799, 1801, 1801, 1806, + 1802, 1804, 1804, 1810, 1794, 1802, 1807, 1796, 1809, 1809, + 1811, 1812, 1812, 1805, 1813, 1813, 1814, 1810, 1815, 1816, + 1817, 1817, 1806, 1818, 1821, 1807, 1818, 1819, 1819, 1822, + 1815, 1823, 1811, 1824, 1823, 1814, 1821, 1825, 1824, 1816, + 1826, 1827, 1828, 1828, 1831, 1826, 1830, 1830, 1834, 1822, + 1833, 1833, 1835, 1834, 1919, 1836, 1825, 1919, 1827, 1827, + 1836, 1837, 1837, 1831, 1838, 1838, 1835, 1839, 1839, 1840, - 1847, 1840, 1844, 1843, 1848, 1849, 1852, 1872, 1841, 1893, - 1849, 1854, 1854, 1845, 1865, 1846, 1872, 1847, 1847, 1855, - 1855, 1860, 1860, 1856, 1862, 1848, 1852, 1856, 1862, 1864, - 1864, 1866, 1865, 1868, 1868, 1869, 1871, 1873, 1873, 1874, - 1874, 1875, 1875, 1876, 1877, 1866, 1878, 1879, 1876, 0, - 1869, 1880, 1881, 1882, 1871, 1900, 1880, 1881, 1883, 1883, - 1900, 1878, 1886, 1886, 1888, 1888, 1890, 1895, 1879, 1877, - 1891, 1891, 1882, 1894, 1894, 1890, 1896, 1896, 1901, 1902, - 1903, 1905, 1895, 1904, 1902, 1909, 1911, 1912, 1909, 1913, - 1911, 1915, 1901, 1916, 1917, 1919, 1918, 1905, 1920, 1903, + 1842, 1842, 1846, 1846, 1840, 1848, 1848, 1849, 1850, 1851, + 1852, 1852, 1853, 1860, 1856, 1857, 1857, 1853, 1851, 1858, + 1861, 1849, 1856, 1863, 1858, 1862, 1864, 1865, 1850, 1913, + 1862, 1866, 1867, 1860, 1864, 1863, 1868, 1869, 1872, 1892, + 1861, 1913, 1869, 1874, 1874, 1865, 1885, 1866, 1892, 1867, + 1867, 1875, 1875, 1880, 1880, 1876, 1882, 1868, 1872, 1876, + 1882, 1884, 1884, 1886, 1885, 1888, 1888, 1889, 1891, 1893, + 1893, 1894, 1894, 1895, 1895, 1896, 1897, 1886, 1898, 1899, + 1896, 0, 1889, 1900, 1901, 1902, 1891, 1920, 1900, 1901, + 1903, 1903, 1920, 1898, 1906, 1906, 1908, 1908, 1910, 1915, - 1921, 1904, 1915, 1913, 1922, 0, 1916, 1912, 1923, 1923, - 1924, 1919, 1929, 1917, 1918, 1921, 1925, 1925, 1930, 1924, - 1926, 1926, 1927, 1920, 1922, 1928, 1931, 1927, 1932, 1935, - 1928, 1931, 1938, 1930, 1933, 1933, 1939, 1929, 1940, 1941, - 1943, 1939, 1932, 1940, 1935, 1942, 1945, 1946, 1947, 1948, - 1949, 1938, 1950, 1941, 1952, 1953, 1953, 1950, 1942, 1943, - 1945, 1947, 1948, 1951, 1957, 1954, 1946, 1955, 1951, 1949, - 1954, 1956, 1955, 1952, 1958, 1960, 1956, 1959, 1959, 1958, - 1961, 1962, 1960, 1957, 1963, 1964, 1967, 1968, 1965, 1963, - 1969, 1967, 1970, 1971, 1971, 1973, 1978, 1972, 1976, 1961, + 1899, 1897, 1911, 1911, 1902, 1914, 1914, 1910, 1916, 1916, + 1921, 1922, 1923, 1925, 1915, 1924, 1922, 1929, 1931, 1932, + 1929, 1933, 1931, 1935, 1921, 1936, 1937, 1939, 1938, 1925, + 1940, 1923, 1941, 1924, 1935, 1933, 1942, 0, 1936, 1932, + 1943, 1943, 1944, 1939, 1949, 1937, 1938, 1941, 1945, 1945, + 1950, 1944, 1946, 1946, 1947, 1940, 1942, 1948, 1951, 1947, + 1952, 1955, 1948, 1951, 1958, 1950, 1953, 1953, 1959, 1949, + 1960, 1961, 1963, 1959, 1952, 1960, 1955, 1962, 1965, 1966, + 1967, 1968, 1969, 1958, 1970, 1961, 1972, 1973, 1973, 1970, + 1962, 1963, 1965, 1967, 1968, 1971, 1977, 1974, 1966, 1975, - 1962, 1965, 1972, 1976, 1964, 1970, 1968, 1974, 1974, 1969, - 1975, 1975, 1977, 1980, 1973, 1978, 1979, 1979, 1981, 1977, - 1980, 1982, 1983, 1984, 1986, 1981, 1987, 1983, 1988, 1986, - 1989, 1987, 1990, 1990, 1991, 1992, 1993, 1993, 1994, 1994, - 1982, 1995, 1984, 1996, 1996, 1997, 1997, 1988, 1995, 1989, - 1998, 2000, 2004, 1991, 1992, 2003, 2000, 1998, 2005, 0, - 2003, 2006, 2006, 2007, 2007, 0, 0, 0, 0, 0, - 0, 2004, 0, 0, 0, 0, 0, 2005, 2011, 2011, - 2011, 2011, 2011, 2011, 2011, 2012, 2012, 2012, 2012, 2012, - 2012, 2012, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2014, + 1971, 1969, 1974, 1976, 1975, 1972, 1978, 1980, 1976, 1979, + 1979, 1978, 1981, 1982, 1980, 1977, 1983, 1984, 1987, 1988, + 1985, 1983, 1989, 1987, 1990, 1991, 1991, 1993, 1998, 1992, + 1996, 1981, 1982, 1985, 1992, 1996, 1984, 1990, 1988, 1994, + 1994, 1989, 1995, 1995, 1997, 2000, 1993, 1998, 1999, 1999, + 2001, 1997, 2000, 2002, 2003, 2004, 2006, 2001, 2007, 2003, + 2008, 2006, 2009, 2007, 2010, 2010, 2011, 2012, 2013, 2013, + 2014, 2014, 2002, 2015, 2004, 2016, 2016, 2017, 2017, 2008, + 2015, 2009, 2018, 2020, 2024, 2011, 2012, 2023, 2020, 2018, + 2025, 0, 2023, 2026, 2026, 2027, 2027, 0, 0, 0, - 2014, 2014, 2014, 2014, 2014, 2014, 2015, 2015, 2015, 2015, - 2015, 2015, 2015, 2017, 2017, 0, 2017, 2017, 2017, 2017, - 2018, 2018, 0, 0, 0, 2018, 2018, 2019, 2019, 0, - 0, 2019, 0, 2019, 2020, 0, 0, 0, 0, 0, - 2020, 2021, 2021, 0, 0, 0, 2021, 2021, 2022, 0, - 0, 0, 0, 0, 2022, 2023, 2023, 0, 2023, 2023, - 2023, 2023, 2024, 2024, 0, 2024, 2024, 2024, 2024, 2010, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, + 0, 0, 0, 2024, 0, 0, 0, 0, 0, 2025, + 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2032, 2032, 2032, + 2032, 2032, 2032, 2032, 2033, 2033, 2033, 2033, 2033, 2033, + 2033, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2035, 2035, + 2035, 2035, 2035, 2035, 2035, 2037, 2037, 0, 2037, 2037, + 2037, 2037, 2038, 2038, 0, 0, 0, 2038, 2038, 2039, + 2039, 0, 0, 2039, 0, 2039, 2040, 0, 0, 0, + 0, 0, 2040, 2041, 2041, 0, 0, 0, 2041, 2041, + 2042, 0, 0, 0, 0, 0, 2042, 2043, 2043, 0, + 2043, 2043, 2043, 2043, 2044, 2044, 0, 2044, 2044, 2044, - 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010 + 2044, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, + 2030 } ; static yy_state_type yy_last_accepting_state; @@ -2204,7 +2218,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2206 "" +#line 2220 "" #define INITIAL 0 #define quotedstring 1 @@ -2427,7 +2441,7 @@ YY_DECL { #line 207 "./util/configlexer.lex" -#line 2429 "" +#line 2443 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2460,13 +2474,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 >= 2011 ) + if ( yy_current_state >= 2031 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 3970 ); + while ( yy_base[yy_current_state] != 4002 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3421,40 +3435,55 @@ YY_RULE_SETUP { YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 185: -/* rule 185 can match eol */ YY_RULE_SETUP #line 402 "./util/configlexer.lex" +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } + YY_BREAK +case 186: +YY_RULE_SETUP +#line 403 "./util/configlexer.lex" +{ YDVAR(2, VAR_RESPONSE_IP) } + YY_BREAK +case 187: +YY_RULE_SETUP +#line 404 "./util/configlexer.lex" +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } + YY_BREAK +case 188: +/* rule 188 can match eol */ +YY_RULE_SETUP +#line 405 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 186: +case 189: YY_RULE_SETUP -#line 405 "./util/configlexer.lex" +#line 408 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 406 "./util/configlexer.lex" +#line 409 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 187: +case 190: YY_RULE_SETUP -#line 411 "./util/configlexer.lex" +#line 414 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 188: -/* rule 188 can match eol */ +case 191: +/* rule 191 can match eol */ YY_RULE_SETUP -#line 412 "./util/configlexer.lex" +#line 415 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 189: +case 192: YY_RULE_SETUP -#line 414 "./util/configlexer.lex" +#line 417 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -3467,34 +3496,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 190: +case 193: YY_RULE_SETUP -#line 426 "./util/configlexer.lex" +#line 429 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 427 "./util/configlexer.lex" +#line 430 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 191: +case 194: YY_RULE_SETUP -#line 432 "./util/configlexer.lex" +#line 435 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 192: -/* rule 192 can match eol */ +case 195: +/* rule 195 can match eol */ YY_RULE_SETUP -#line 433 "./util/configlexer.lex" +#line 436 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 193: +case 196: YY_RULE_SETUP -#line 435 "./util/configlexer.lex" +#line 438 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -3507,38 +3536,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 194: +case 197: YY_RULE_SETUP -#line 447 "./util/configlexer.lex" +#line 450 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 449 "./util/configlexer.lex" +#line 452 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 195: -YY_RULE_SETUP -#line 453 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 196: -/* rule 196 can match eol */ -YY_RULE_SETUP -#line 454 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK -case 197: -YY_RULE_SETUP -#line 455 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } - YY_BREAK case 198: YY_RULE_SETUP #line 456 "./util/configlexer.lex" +{ LEXOUT(("ISP ")); /* ignore */ } + YY_BREAK +case 199: +/* rule 199 can match eol */ +YY_RULE_SETUP +#line 457 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 200: +YY_RULE_SETUP +#line 458 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 201: +YY_RULE_SETUP +#line 459 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -3546,27 +3575,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 461 "./util/configlexer.lex" +#line 464 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 199: +case 202: YY_RULE_SETUP -#line 465 "./util/configlexer.lex" +#line 468 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 200: -/* rule 200 can match eol */ +case 203: +/* rule 203 can match eol */ YY_RULE_SETUP -#line 466 "./util/configlexer.lex" +#line 469 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 201: +case 204: YY_RULE_SETUP -#line 468 "./util/configlexer.lex" +#line 471 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -3576,7 +3605,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 474 "./util/configlexer.lex" +#line 477 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -3588,33 +3617,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 202: +case 205: YY_RULE_SETUP -#line 485 "./util/configlexer.lex" +#line 488 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 203: +case 206: YY_RULE_SETUP -#line 489 "./util/configlexer.lex" +#line 492 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 204: +case 207: YY_RULE_SETUP -#line 493 "./util/configlexer.lex" +#line 496 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 205: +case 208: YY_RULE_SETUP -#line 497 "./util/configlexer.lex" +#line 500 "./util/configlexer.lex" ECHO; YY_BREAK -#line 3616 "" +#line 3645 "" case YY_END_OF_BUFFER: { @@ -3905,7 +3934,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 >= 2011 ) + if ( yy_current_state >= 2031 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3933,11 +3962,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 >= 2011 ) + if ( yy_current_state >= 2031 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 2010); + yy_is_jam = (yy_current_state == 2030); return yy_is_jam ? 0 : yy_current_state; } @@ -4576,7 +4605,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 497 "./util/configlexer.lex" +#line 500 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 8bac3d818..c37830a33 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -399,6 +399,9 @@ ratelimit-for-domain{COLON} { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } ratelimit-below-domain{COLON} { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } ip-ratelimit-factor{COLON} { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) } +response-ip-tag{COLON} { YDVAR(2, VAR_RESPONSE_IP_TAG) } +response-ip{COLON} { YDVAR(2, VAR_RESPONSE_IP) } +response-ip-data{COLON} { YDVAR(2, VAR_RESPONSE_IP_DATA) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index 6768bcecd..e38f40e0b 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -79,6 +79,8 @@ int ub_c_lex(void); void ub_c_error(const char *message); +static void validate_respip_action(const char* action); + /* these need to be global, otherwise they cannot be used inside yacc */ extern struct config_parser_state* cfg_parser; @@ -89,7 +91,7 @@ extern struct config_parser_state* cfg_parser; #endif -#line 93 "util/configparser.c" /* yacc.c:339 */ +#line 95 "util/configparser.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -279,40 +281,43 @@ extern int yydebug; VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 410, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 411, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 412, - VAR_HARDEN_ALGO_DOWNGRADE = 413, - VAR_IP_TRANSPARENT = 414, - VAR_DISABLE_DNSSEC_LAME_CHECK = 415, - VAR_IP_RATELIMIT = 416, - VAR_IP_RATELIMIT_SLABS = 417, - VAR_IP_RATELIMIT_SIZE = 418, - VAR_RATELIMIT = 419, - VAR_RATELIMIT_SLABS = 420, - VAR_RATELIMIT_SIZE = 421, - VAR_RATELIMIT_FOR_DOMAIN = 422, - VAR_RATELIMIT_BELOW_DOMAIN = 423, - VAR_IP_RATELIMIT_FACTOR = 424, - VAR_RATELIMIT_FACTOR = 425, - VAR_CAPS_WHITELIST = 426, - VAR_CACHE_MAX_NEGATIVE_TTL = 427, - VAR_PERMIT_SMALL_HOLDDOWN = 428, - VAR_QNAME_MINIMISATION = 429, - VAR_QNAME_MINIMISATION_STRICT = 430, - VAR_IP_FREEBIND = 431, - VAR_DEFINE_TAG = 432, - VAR_LOCAL_ZONE_TAG = 433, - VAR_ACCESS_CONTROL_TAG = 434, - VAR_LOCAL_ZONE_OVERRIDE = 435, - VAR_ACCESS_CONTROL_TAG_ACTION = 436, - VAR_ACCESS_CONTROL_TAG_DATA = 437, - VAR_VIEW = 438, - VAR_ACCESS_CONTROL_VIEW = 439, - VAR_VIEW_FIRST = 440, - VAR_SERVE_EXPIRED = 441, - VAR_FAKE_DSA = 442, - VAR_LOG_IDENTITY = 443, - VAR_USE_SYSTEMD = 444, - VAR_SHM_ENABLE = 445, - VAR_SHM_KEY = 446 + 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_CAPS_WHITELIST = 429, + VAR_CACHE_MAX_NEGATIVE_TTL = 430, + VAR_PERMIT_SMALL_HOLDDOWN = 431, + VAR_QNAME_MINIMISATION = 432, + VAR_QNAME_MINIMISATION_STRICT = 433, + VAR_IP_FREEBIND = 434, + VAR_DEFINE_TAG = 435, + VAR_LOCAL_ZONE_TAG = 436, + VAR_ACCESS_CONTROL_TAG = 437, + VAR_LOCAL_ZONE_OVERRIDE = 438, + VAR_ACCESS_CONTROL_TAG_ACTION = 439, + VAR_ACCESS_CONTROL_TAG_DATA = 440, + VAR_VIEW = 441, + VAR_ACCESS_CONTROL_VIEW = 442, + VAR_VIEW_FIRST = 443, + VAR_SERVE_EXPIRED = 444, + VAR_FAKE_DSA = 445, + VAR_LOG_IDENTITY = 446, + VAR_USE_SYSTEMD = 447, + VAR_SHM_ENABLE = 448, + VAR_SHM_KEY = 449 }; #endif /* Tokens. */ @@ -471,51 +476,54 @@ extern int yydebug; #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_HARDEN_ALGO_DOWNGRADE 413 -#define VAR_IP_TRANSPARENT 414 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 415 -#define VAR_IP_RATELIMIT 416 -#define VAR_IP_RATELIMIT_SLABS 417 -#define VAR_IP_RATELIMIT_SIZE 418 -#define VAR_RATELIMIT 419 -#define VAR_RATELIMIT_SLABS 420 -#define VAR_RATELIMIT_SIZE 421 -#define VAR_RATELIMIT_FOR_DOMAIN 422 -#define VAR_RATELIMIT_BELOW_DOMAIN 423 -#define VAR_IP_RATELIMIT_FACTOR 424 -#define VAR_RATELIMIT_FACTOR 425 -#define VAR_CAPS_WHITELIST 426 -#define VAR_CACHE_MAX_NEGATIVE_TTL 427 -#define VAR_PERMIT_SMALL_HOLDDOWN 428 -#define VAR_QNAME_MINIMISATION 429 -#define VAR_QNAME_MINIMISATION_STRICT 430 -#define VAR_IP_FREEBIND 431 -#define VAR_DEFINE_TAG 432 -#define VAR_LOCAL_ZONE_TAG 433 -#define VAR_ACCESS_CONTROL_TAG 434 -#define VAR_LOCAL_ZONE_OVERRIDE 435 -#define VAR_ACCESS_CONTROL_TAG_ACTION 436 -#define VAR_ACCESS_CONTROL_TAG_DATA 437 -#define VAR_VIEW 438 -#define VAR_ACCESS_CONTROL_VIEW 439 -#define VAR_VIEW_FIRST 440 -#define VAR_SERVE_EXPIRED 441 -#define VAR_FAKE_DSA 442 -#define VAR_LOG_IDENTITY 443 -#define VAR_USE_SYSTEMD 444 -#define VAR_SHM_ENABLE 445 -#define VAR_SHM_KEY 446 +#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_CAPS_WHITELIST 429 +#define VAR_CACHE_MAX_NEGATIVE_TTL 430 +#define VAR_PERMIT_SMALL_HOLDDOWN 431 +#define VAR_QNAME_MINIMISATION 432 +#define VAR_QNAME_MINIMISATION_STRICT 433 +#define VAR_IP_FREEBIND 434 +#define VAR_DEFINE_TAG 435 +#define VAR_LOCAL_ZONE_TAG 436 +#define VAR_ACCESS_CONTROL_TAG 437 +#define VAR_LOCAL_ZONE_OVERRIDE 438 +#define VAR_ACCESS_CONTROL_TAG_ACTION 439 +#define VAR_ACCESS_CONTROL_TAG_DATA 440 +#define VAR_VIEW 441 +#define VAR_ACCESS_CONTROL_VIEW 442 +#define VAR_VIEW_FIRST 443 +#define VAR_SERVE_EXPIRED 444 +#define VAR_FAKE_DSA 445 +#define VAR_LOG_IDENTITY 446 +#define VAR_USE_SYSTEMD 447 +#define VAR_SHM_ENABLE 448 +#define VAR_SHM_KEY 449 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 64 "./util/configparser.y" /* yacc.c:355 */ +#line 66 "./util/configparser.y" /* yacc.c:355 */ char* str; -#line 519 "util/configparser.c" /* yacc.c:355 */ +#line 527 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -532,7 +540,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 536 "util/configparser.c" /* yacc.c:358 */ +#line 544 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -774,21 +782,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 379 +#define YYLAST 394 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 192 +#define YYNTOKENS 195 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 202 +#define YYNNTS 207 /* YYNRULES -- Number of rules. */ -#define YYNRULES 387 +#define YYNRULES 397 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 580 +#define YYNSTATES 600 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 446 +#define YYMAXUTOK 449 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -841,52 +849,53 @@ static const yytype_uint8 yytranslate[] = 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191 + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 141, 141, 141, 142, 142, 143, 143, 144, 144, - 144, 149, 154, 155, 156, 156, 156, 157, 157, 158, - 158, 159, 159, 160, 160, 161, 161, 161, 162, 162, - 162, 163, 163, 164, 164, 165, 165, 166, 166, 167, - 167, 168, 168, 169, 169, 170, 170, 171, 171, 171, - 172, 172, 172, 173, 173, 173, 174, 174, 175, 175, - 176, 176, 177, 177, 178, 178, 178, 179, 179, 180, - 180, 181, 181, 181, 182, 182, 183, 183, 184, 184, - 185, 185, 185, 186, 186, 187, 187, 188, 188, 189, - 189, 190, 190, 191, 191, 191, 192, 192, 193, 193, - 193, 194, 194, 194, 195, 195, 195, 196, 196, 196, - 196, 197, 197, 197, 198, 198, 198, 199, 199, 200, - 200, 201, 201, 202, 202, 203, 203, 203, 204, 204, - 205, 205, 206, 207, 207, 208, 209, 209, 210, 210, - 211, 211, 211, 212, 212, 213, 213, 214, 214, 215, - 215, 216, 216, 216, 217, 217, 219, 231, 232, 233, - 233, 233, 233, 233, 234, 236, 248, 249, 250, 250, - 250, 250, 251, 253, 267, 268, 269, 269, 269, 269, - 271, 280, 289, 300, 309, 318, 327, 338, 347, 360, - 375, 384, 393, 402, 411, 420, 429, 438, 447, 456, - 465, 474, 483, 492, 501, 510, 517, 524, 533, 542, - 551, 565, 574, 583, 592, 599, 606, 632, 640, 647, - 654, 661, 668, 676, 684, 692, 699, 706, 715, 724, - 731, 738, 746, 754, 764, 774, 784, 797, 808, 816, - 829, 838, 847, 856, 866, 876, 884, 897, 906, 914, - 923, 931, 944, 953, 960, 970, 980, 990, 1000, 1010, - 1020, 1030, 1040, 1047, 1054, 1061, 1070, 1079, 1088, 1095, - 1105, 1122, 1129, 1147, 1160, 1173, 1182, 1191, 1200, 1209, - 1219, 1229, 1238, 1247, 1260, 1269, 1276, 1285, 1294, 1303, - 1312, 1320, 1333, 1341, 1369, 1376, 1391, 1401, 1411, 1418, - 1425, 1434, 1448, 1467, 1486, 1498, 1510, 1522, 1533, 1543, - 1552, 1560, 1568, 1581, 1594, 1607, 1620, 1629, 1638, 1648, - 1658, 1668, 1675, 1682, 1691, 1701, 1711, 1721, 1728, 1735, - 1744, 1754, 1764, 1793, 1802, 1811, 1816, 1817, 1818, 1818, - 1818, 1819, 1819, 1819, 1820, 1820, 1822, 1832, 1841, 1848, - 1858, 1865, 1872, 1879, 1886, 1891, 1892, 1893, 1893, 1894, - 1894, 1895, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1903, - 1911, 1918, 1926, 1934, 1941, 1948, 1957, 1966, 1975, 1984, - 1993, 2002, 2007, 2008, 2009, 2011, 2017, 2027 + 0, 144, 144, 144, 145, 145, 146, 146, 147, 147, + 147, 152, 157, 158, 159, 159, 159, 160, 160, 161, + 161, 162, 162, 163, 163, 164, 164, 164, 165, 165, + 165, 166, 166, 167, 167, 168, 168, 169, 169, 170, + 170, 171, 171, 172, 172, 173, 173, 174, 174, 174, + 175, 175, 175, 176, 176, 176, 177, 177, 178, 178, + 179, 179, 180, 180, 181, 181, 181, 182, 182, 183, + 183, 184, 184, 184, 185, 185, 186, 186, 187, 187, + 188, 188, 188, 189, 189, 190, 190, 191, 191, 192, + 192, 193, 193, 194, 194, 194, 195, 195, 196, 196, + 196, 197, 197, 197, 198, 198, 198, 199, 199, 199, + 199, 200, 200, 200, 201, 201, 201, 202, 202, 203, + 203, 204, 204, 205, 205, 206, 206, 206, 207, 207, + 208, 208, 209, 210, 210, 211, 212, 212, 213, 213, + 214, 214, 214, 215, 215, 216, 216, 217, 217, 218, + 218, 219, 219, 219, 220, 220, 220, 221, 221, 223, + 235, 236, 237, 237, 237, 237, 237, 238, 240, 252, + 253, 254, 254, 254, 254, 255, 257, 271, 272, 273, + 273, 273, 273, 274, 274, 276, 285, 294, 305, 314, + 323, 332, 343, 352, 365, 380, 389, 398, 407, 416, + 425, 434, 443, 452, 461, 470, 479, 488, 497, 506, + 515, 522, 529, 538, 547, 556, 570, 579, 588, 597, + 604, 611, 637, 645, 652, 659, 666, 673, 681, 689, + 697, 704, 711, 720, 729, 736, 743, 751, 759, 769, + 779, 789, 802, 813, 821, 834, 843, 852, 861, 871, + 881, 889, 902, 911, 919, 928, 936, 949, 958, 965, + 975, 985, 995, 1005, 1015, 1025, 1035, 1045, 1052, 1059, + 1066, 1075, 1084, 1093, 1100, 1110, 1127, 1134, 1152, 1165, + 1178, 1187, 1196, 1205, 1214, 1224, 1234, 1243, 1252, 1265, + 1274, 1281, 1290, 1299, 1308, 1317, 1325, 1338, 1346, 1374, + 1381, 1396, 1406, 1416, 1423, 1430, 1439, 1453, 1472, 1491, + 1503, 1515, 1527, 1538, 1557, 1567, 1576, 1584, 1592, 1605, + 1618, 1631, 1644, 1653, 1662, 1672, 1682, 1692, 1699, 1706, + 1715, 1725, 1735, 1745, 1752, 1759, 1768, 1778, 1788, 1817, + 1827, 1835, 1844, 1853, 1858, 1859, 1860, 1860, 1860, 1861, + 1861, 1861, 1862, 1862, 1864, 1874, 1883, 1890, 1900, 1907, + 1914, 1921, 1928, 1933, 1934, 1935, 1935, 1936, 1936, 1937, + 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1945, 1953, 1960, + 1968, 1976, 1983, 1990, 1999, 2008, 2017, 2026, 2035, 2044, + 2049, 2050, 2051, 2053, 2059, 2069, 2076, 2085 }; #endif @@ -948,13 +957,13 @@ static const char *const yytname[] = "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES", - "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", - "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", - "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_IP_RATELIMIT", - "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT", - "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN", - "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_IP_RATELIMIT_FACTOR", - "VAR_RATELIMIT_FACTOR", "VAR_CAPS_WHITELIST", + "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG", + "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE", + "VAR_IP_TRANSPARENT", "VAR_DISABLE_DNSSEC_LAME_CHECK", + "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", + "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", + "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", + "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR", "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", @@ -1019,16 +1028,18 @@ static const char *const yytname[] = "server_dns64_synthall", "server_define_tag", "server_local_zone_tag", "server_access_control_tag", "server_access_control_tag_action", "server_access_control_tag_data", "server_local_zone_override", - "server_access_control_view", "server_ip_ratelimit", "server_ratelimit", - "server_ip_ratelimit_size", "server_ratelimit_size", - "server_ip_ratelimit_slabs", "server_ratelimit_slabs", - "server_ratelimit_for_domain", "server_ratelimit_below_domain", - "server_ip_ratelimit_factor", "server_ratelimit_factor", - "server_qname_minimisation", "server_qname_minimisation_strict", - "stub_name", "stub_host", "stub_addr", "stub_first", "stub_ssl_upstream", - "stub_prime", "forward_name", "forward_host", "forward_addr", - "forward_first", "forward_ssl_upstream", "view_name", "view_local_zone", - "view_local_data", "view_first", "rcstart", "contents_rc", "content_rc", + "server_access_control_view", "server_response_ip_tag", + "server_ip_ratelimit", "server_ratelimit", "server_ip_ratelimit_size", + "server_ratelimit_size", "server_ip_ratelimit_slabs", + "server_ratelimit_slabs", "server_ratelimit_for_domain", + "server_ratelimit_below_domain", "server_ip_ratelimit_factor", + "server_ratelimit_factor", "server_qname_minimisation", + "server_qname_minimisation_strict", "stub_name", "stub_host", + "stub_addr", "stub_first", "stub_ssl_upstream", "stub_prime", + "forward_name", "forward_host", "forward_addr", "forward_first", + "forward_ssl_upstream", "view_name", "view_local_zone", + "view_response_ip", "view_response_ip_data", "view_local_data", + "view_first", "rcstart", "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", @@ -1042,7 +1053,8 @@ static const char *const yytname[] = "dt_dnstap_log_forwarder_query_messages", "dt_dnstap_log_forwarder_response_messages", "pythonstart", "contents_py", "content_py", "py_script", - "server_disable_dnssec_lame_check", "server_log_identity", YY_NULLPTR + "server_disable_dnssec_lame_check", "server_log_identity", + "server_response_ip", "server_response_ip_data", YY_NULLPTR }; #endif @@ -1070,7 +1082,7 @@ static const yytype_uint16 yytoknum[] = 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446 + 445, 446, 447, 448, 449 }; # endif @@ -1089,22 +1101,22 @@ static const yytype_uint16 yytoknum[] = static const yytype_int16 yypact[] = { -132, 0, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132, -132, -132, -132, -132, -132, -132, 134, -39, - -35, -11, -62, -131, -106, -4, -3, -2, -1, 2, - 17, 18, 28, 29, 30, 32, 33, 34, 35, 36, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 82, 83, 85, 88, 90, 91, 92, 93, 94, 95, - 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 165, 166, 167, - 171, 172, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 227, 231, 232, 256, 257, 258, 259, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 307, 309, 316, 317, 318, 319, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, 137, -39, + -35, 193, -65, -131, -106, -4, -3, -2, -1, 2, + 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, + 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 82, 83, 85, 88, 90, 91, 92, + 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 136, 138, 167, 168, 169, 170, 174, 175, 218, + 219, 220, 221, 222, 224, 225, 226, 230, 234, 235, + 261, 262, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 313, 315, 322, 323, 324, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, @@ -1119,33 +1131,35 @@ static const yytype_int16 yypact[] = -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, - 320, 321, 322, 323, 324, 325, -132, -132, -132, -132, - -132, -132, -132, 326, 327, 328, 329, 330, -132, -132, - -132, -132, -132, -132, 331, 332, 333, 334, -132, -132, - -132, -132, -132, 335, 336, 337, 338, 339, 340, 341, - 342, -132, -132, -132, -132, -132, -132, -132, -132, -132, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132, -132, -132, -132, 355, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, 325, 326, 327, 328, + 329, 330, -132, -132, -132, -132, -132, -132, -132, 331, + 332, 333, 334, 335, -132, -132, -132, -132, -132, -132, + 336, 337, 338, 339, 340, 341, -132, -132, -132, -132, + -132, -132, -132, 344, 345, 346, 347, 348, 349, 350, + 351, -132, -132, -132, -132, -132, -132, -132, -132, -132, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, 364, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132, -132, -132, 356, 357, -132, -132, -132, -132, + -132, -132, -132, -132, 365, 366, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, 367, 368, + 369, -132, -132, -132, -132, -132, -132, -132, -132, -132, + 370, 372, -132, -132, -132, -132, -132, -132, -132, -132, + -132, 373, 374, 375, 376, 377, 378, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132, -132, -132, -132, -132, -132, 358, 359, -132, - -132, -132, -132, -132, -132, -132, -132, -132, 360, 361, - 362, 363, 364, 365, -132, -132, -132, -132, -132, -132, - -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132, 366, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, 379, -132, 380, 381, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132, 367, 368, 369, -132, -132, -132, -132, -132 + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + 382, 383, 384, -132, -132, -132, -132, -132, -132, -132 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1153,8 +1167,8 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 11, 156, 165, 335, 381, 354, 173, - 3, 13, 158, 167, 175, 337, 356, 383, 4, 5, + 2, 0, 1, 11, 159, 168, 343, 389, 362, 176, + 3, 13, 161, 170, 178, 345, 364, 391, 4, 5, 6, 10, 8, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1169,48 +1183,50 @@ 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, 0, 0, 0, 0, 0, 12, 14, 15, - 74, 77, 86, 154, 155, 16, 25, 65, 17, 78, - 79, 36, 58, 73, 18, 19, 21, 22, 20, 23, - 24, 109, 110, 111, 112, 113, 153, 75, 64, 90, - 107, 108, 26, 27, 28, 29, 30, 66, 80, 81, - 96, 52, 62, 53, 91, 46, 47, 48, 49, 100, - 104, 117, 125, 140, 101, 59, 31, 32, 33, 88, - 118, 119, 120, 34, 35, 37, 38, 40, 41, 39, - 123, 42, 43, 44, 50, 69, 105, 83, 124, 76, - 136, 84, 85, 102, 103, 89, 45, 67, 70, 51, - 54, 92, 93, 68, 137, 94, 55, 56, 57, 106, - 150, 151, 95, 63, 97, 98, 99, 138, 60, 61, - 82, 71, 72, 87, 114, 115, 116, 121, 122, 141, - 142, 144, 146, 147, 145, 148, 126, 127, 130, 131, - 128, 129, 132, 133, 135, 134, 139, 149, 143, 152, - 0, 0, 0, 0, 0, 0, 157, 159, 160, 161, - 163, 164, 162, 0, 0, 0, 0, 0, 166, 168, - 169, 170, 171, 172, 0, 0, 0, 0, 174, 176, - 177, 178, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 336, 338, 340, 339, 345, 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 355, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 0, 382, 384, 181, 180, - 187, 190, 188, 196, 197, 200, 198, 199, 201, 202, - 214, 215, 216, 217, 218, 238, 239, 240, 245, 246, - 193, 247, 248, 251, 249, 250, 253, 254, 255, 268, - 227, 228, 229, 230, 256, 271, 223, 225, 272, 278, - 279, 280, 194, 237, 290, 291, 224, 285, 210, 189, - 219, 269, 275, 257, 0, 0, 294, 195, 182, 209, - 261, 183, 191, 192, 220, 221, 292, 259, 263, 264, - 184, 295, 241, 267, 211, 226, 273, 274, 277, 284, - 222, 288, 286, 287, 231, 236, 265, 266, 232, 233, - 258, 281, 212, 213, 203, 204, 205, 206, 207, 296, - 297, 298, 242, 243, 244, 252, 299, 300, 260, 234, - 386, 308, 312, 310, 309, 313, 311, 0, 0, 316, - 317, 262, 276, 289, 318, 319, 235, 301, 0, 0, - 0, 0, 0, 0, 282, 283, 387, 208, 185, 186, - 320, 321, 322, 325, 324, 323, 326, 327, 328, 329, - 330, 331, 0, 333, 334, 346, 348, 347, 350, 351, - 352, 353, 349, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 385, 270, 293, 314, 315, - 302, 303, 0, 0, 0, 307, 332, 306, 304, 305 + 12, 14, 15, 74, 77, 86, 157, 158, 16, 25, + 65, 17, 78, 79, 36, 58, 73, 18, 19, 21, + 22, 20, 23, 24, 109, 110, 111, 112, 113, 153, + 75, 64, 90, 107, 108, 26, 27, 28, 29, 30, + 66, 80, 81, 96, 52, 62, 53, 91, 46, 47, + 48, 49, 100, 104, 117, 125, 140, 101, 59, 31, + 32, 33, 88, 118, 119, 120, 34, 35, 37, 38, + 40, 41, 39, 123, 42, 43, 44, 50, 69, 105, + 83, 124, 76, 136, 84, 85, 102, 103, 89, 45, + 67, 70, 51, 54, 92, 93, 68, 137, 94, 55, + 56, 57, 106, 150, 151, 95, 63, 97, 98, 99, + 138, 60, 61, 82, 71, 72, 87, 114, 115, 116, + 121, 122, 141, 142, 144, 146, 147, 145, 148, 154, + 126, 127, 130, 131, 128, 129, 132, 133, 135, 134, + 139, 149, 143, 152, 155, 156, 0, 0, 0, 0, + 0, 0, 160, 162, 163, 164, 166, 167, 165, 0, + 0, 0, 0, 0, 169, 171, 172, 173, 174, 175, + 0, 0, 0, 0, 0, 0, 177, 179, 180, 183, + 184, 181, 182, 0, 0, 0, 0, 0, 0, 0, + 0, 344, 346, 348, 347, 353, 349, 350, 351, 352, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 363, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 0, 390, 392, 186, 185, + 192, 195, 193, 201, 202, 205, 203, 204, 206, 207, + 219, 220, 221, 222, 223, 243, 244, 245, 250, 251, + 198, 252, 253, 256, 254, 255, 258, 259, 260, 273, + 232, 233, 234, 235, 261, 276, 228, 230, 277, 283, + 284, 285, 199, 242, 295, 296, 229, 290, 215, 194, + 224, 274, 280, 262, 0, 0, 299, 200, 187, 214, + 266, 188, 196, 197, 225, 226, 297, 264, 268, 269, + 189, 300, 246, 272, 216, 231, 278, 279, 282, 289, + 227, 293, 291, 292, 236, 241, 270, 271, 237, 238, + 263, 286, 217, 218, 208, 209, 210, 211, 212, 301, + 302, 303, 247, 248, 249, 257, 304, 305, 0, 0, + 0, 265, 239, 394, 314, 318, 316, 315, 319, 317, + 0, 0, 322, 323, 267, 281, 294, 324, 325, 240, + 306, 0, 0, 0, 0, 0, 0, 287, 288, 395, + 213, 190, 191, 326, 327, 328, 331, 330, 329, 332, + 333, 334, 335, 336, 337, 0, 341, 0, 0, 342, + 354, 356, 355, 358, 359, 360, 361, 357, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 393, 275, 298, 313, 396, 397, 320, 321, 307, 308, + 0, 0, 0, 312, 338, 339, 340, 311, 309, 310 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1236,33 +1252,33 @@ static const yytype_int16 yypgoto[] = -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, - -132, -132 + -132, -132, -132, -132, -132, -132, -132 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 10, 11, 18, 167, 12, 19, 316, 13, - 20, 328, 14, 21, 338, 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, - 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, 317, 318, 319, 320, 321, - 322, 329, 330, 331, 332, 333, 339, 340, 341, 342, - 15, 22, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 16, 23, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 17, 24, 386, 387, - 308, 309 + -1, 1, 10, 11, 18, 170, 12, 19, 322, 13, + 20, 334, 14, 21, 346, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 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, 323, 324, 325, 326, + 327, 328, 335, 336, 337, 338, 339, 347, 348, 349, + 350, 351, 352, 15, 22, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 16, 23, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 17, + 24, 396, 397, 312, 313, 314, 315 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1270,55 +1286,57 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 310, 385, 311, 312, 323, 388, 389, 390, 391, - 0, 3, 392, 324, 325, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 393, 394, 334, - 343, 344, 345, 346, 347, 348, 349, 350, 395, 396, - 397, 4, 398, 399, 400, 401, 402, 5, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 313, 335, 336, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 6, 443, 444, 314, 445, 315, 326, 446, 327, - 447, 448, 449, 450, 451, 452, 453, 7, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 0, 8, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 337, 490, 491, 492, 53, 54, - 55, 493, 494, 9, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 97, 98, 99, 504, 100, 101, - 102, 505, 506, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 507, 508, 509, 510, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 524, 160, 525, - 161, 162, 163, 164, 165, 166, 526, 527, 528, 529, - 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, - 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579 + 2, 316, 395, 317, 318, 329, 398, 399, 400, 401, + 0, 3, 402, 330, 331, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 353, 354, 355, + 356, 357, 358, 359, 360, 403, 404, 405, 406, 407, + 408, 4, 409, 410, 411, 412, 413, 5, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 319, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 6, 456, 457, 320, 458, 321, 332, 459, 333, + 460, 461, 462, 463, 464, 465, 466, 7, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 8, 504, 0, 505, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 506, 507, 508, + 509, 53, 54, 55, 510, 511, 9, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 512, 513, + 514, 515, 516, 340, 517, 518, 519, 97, 98, 99, + 520, 100, 101, 102, 521, 522, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 341, + 342, 523, 524, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 535, 536, 537, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 538, 163, 539, 164, 165, 166, 167, + 168, 169, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 343, 344, 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, 345, 587, 588, 589, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599 }; static const yytype_int16 yycheck[] = { 0, 40, 108, 42, 43, 40, 10, 10, 10, 10, -1, 11, 10, 48, 49, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 10, 10, 40, - 92, 93, 94, 95, 96, 97, 98, 99, 10, 10, + 151, 152, 153, 154, 155, 156, 157, 92, 93, 94, + 95, 96, 97, 98, 99, 10, 10, 10, 10, 10, 10, 41, 10, 10, 10, 10, 10, 47, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 103, 76, 77, 10, 10, 10, + 10, 10, 10, 10, 103, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 91, 10, 10, 133, 10, 135, 132, 10, 134, @@ -1326,39 +1344,41 @@ static const yytype_int16 yycheck[] = 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, -1, 145, 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, 185, 10, 10, 10, 44, 45, - 46, 10, 10, 183, 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, 145, 10, -1, 10, 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, 186, 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, 40, 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, 76, + 77, 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, 10, 187, 10, 189, 190, 191, 192, + 193, 194, 10, 10, 10, 10, 10, 10, 10, 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, 10, 184, 10, - 186, 187, 188, 189, 190, 191, 10, 10, 10, 10, + 10, 10, 159, 160, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 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, 188, 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, 193, 0, 11, 41, 47, 91, 107, 145, 183, - 194, 195, 198, 201, 204, 362, 373, 388, 196, 199, - 202, 205, 363, 374, 389, 12, 13, 14, 15, 16, + 0, 196, 0, 11, 41, 47, 91, 107, 145, 186, + 197, 198, 201, 204, 207, 368, 379, 394, 199, 202, + 205, 208, 369, 380, 395, 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, @@ -1372,8 +1392,8 @@ static const yytype_uint16 yystos[] = 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, - 184, 186, 187, 188, 189, 190, 191, 197, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 183, 184, 185, 187, 189, 190, 191, 192, 193, 194, + 200, 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, @@ -1386,15 +1406,17 @@ static const yytype_uint16 yystos[] = 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, 392, 393, - 40, 42, 43, 103, 133, 135, 200, 347, 348, 349, - 350, 351, 352, 40, 48, 49, 132, 134, 203, 353, - 354, 355, 356, 357, 40, 76, 77, 185, 206, 358, - 359, 360, 361, 92, 93, 94, 95, 96, 97, 98, - 99, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 398, 399, 400, 401, 40, 42, 43, 103, + 133, 135, 203, 351, 352, 353, 354, 355, 356, 40, + 48, 49, 132, 134, 206, 357, 358, 359, 360, 361, + 40, 76, 77, 159, 160, 188, 209, 362, 363, 364, + 365, 366, 367, 92, 93, 94, 95, 96, 97, 98, + 99, 370, 371, 372, 373, 374, 375, 376, 377, 378, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 108, 390, 391, 10, 10, + 156, 157, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 108, 396, 397, 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, @@ -1419,45 +1441,46 @@ static const yytype_uint16 yystos[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 192, 193, 193, 194, 194, 194, 194, 194, 194, - 194, 195, 196, 196, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 198, 199, 199, 200, - 200, 200, 200, 200, 200, 201, 202, 202, 203, 203, - 203, 203, 203, 204, 205, 205, 206, 206, 206, 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, - 357, 358, 359, 360, 361, 362, 363, 363, 364, 364, - 364, 364, 364, 364, 364, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 374, 375, 375, 375, - 375, 375, 375, 375, 375, 375, 375, 375, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 389, 390, 391, 392, 393 + 0, 195, 196, 196, 197, 197, 197, 197, 197, 197, + 197, 198, 199, 199, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 201, + 202, 202, 203, 203, 203, 203, 203, 203, 204, 205, + 205, 206, 206, 206, 206, 206, 207, 208, 208, 209, + 209, 209, 209, 209, 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, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 369, 370, 370, 370, 370, + 370, 370, 370, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 380, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 395, 396, 397, 398, 399, 400, 401 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1478,9 +1501,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, 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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1489,19 +1513,19 @@ 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, 2, 2, 3, 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, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 4, 4, 4, 3, 2, 2, - 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 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 + 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, 3, 3, + 3, 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 }; @@ -2178,15 +2202,15 @@ yyreduce: switch (yyn) { case 11: -#line 150 "./util/configparser.y" /* yacc.c:1646 */ +#line 153 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2186 "util/configparser.c" /* yacc.c:1646 */ +#line 2210 "util/configparser.c" /* yacc.c:1646 */ break; - case 156: -#line 220 "./util/configparser.y" /* yacc.c:1646 */ + case 159: +#line 224 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2197,11 +2221,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2201 "util/configparser.c" /* yacc.c:1646 */ +#line 2225 "util/configparser.c" /* yacc.c:1646 */ break; - case 165: -#line 237 "./util/configparser.y" /* yacc.c:1646 */ + case 168: +#line 241 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2212,11 +2236,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2216 "util/configparser.c" /* yacc.c:1646 */ +#line 2240 "util/configparser.c" /* yacc.c:1646 */ break; - case 173: -#line 254 "./util/configparser.y" /* yacc.c:1646 */ + case 176: +#line 258 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2229,11 +2253,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2233 "util/configparser.c" /* yacc.c:1646 */ +#line 2257 "util/configparser.c" /* yacc.c:1646 */ break; - case 180: -#line 272 "./util/configparser.y" /* yacc.c:1646 */ + case 185: +#line 277 "./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) @@ -2241,11 +2265,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2245 "util/configparser.c" /* yacc.c:1646 */ +#line 2269 "util/configparser.c" /* yacc.c:1646 */ break; - case 181: -#line 281 "./util/configparser.y" /* yacc.c:1646 */ + case 186: +#line 286 "./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) @@ -2253,11 +2277,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2257 "util/configparser.c" /* yacc.c:1646 */ +#line 2281 "util/configparser.c" /* yacc.c:1646 */ break; - case 182: -#line 290 "./util/configparser.y" /* yacc.c:1646 */ + case 187: +#line 295 "./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) @@ -2267,11 +2291,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2271 "util/configparser.c" /* yacc.c:1646 */ +#line 2295 "util/configparser.c" /* yacc.c:1646 */ break; - case 183: -#line 301 "./util/configparser.y" /* yacc.c:1646 */ + case 188: +#line 306 "./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) @@ -2279,11 +2303,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2283 "util/configparser.c" /* yacc.c:1646 */ +#line 2307 "util/configparser.c" /* yacc.c:1646 */ break; - case 184: -#line 310 "./util/configparser.y" /* yacc.c:1646 */ + case 189: +#line 315 "./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) @@ -2291,11 +2315,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2295 "util/configparser.c" /* yacc.c:1646 */ +#line 2319 "util/configparser.c" /* yacc.c:1646 */ break; - case 185: -#line 319 "./util/configparser.y" /* yacc.c:1646 */ + case 190: +#line 324 "./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) @@ -2303,11 +2327,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2307 "util/configparser.c" /* yacc.c:1646 */ +#line 2331 "util/configparser.c" /* yacc.c:1646 */ break; - case 186: -#line 328 "./util/configparser.y" /* yacc.c:1646 */ + case 191: +#line 333 "./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) @@ -2317,11 +2341,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2321 "util/configparser.c" /* yacc.c:1646 */ +#line 2345 "util/configparser.c" /* yacc.c:1646 */ break; - case 187: -#line 339 "./util/configparser.y" /* yacc.c:1646 */ + case 192: +#line 344 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2329,11 +2353,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2333 "util/configparser.c" /* yacc.c:1646 */ +#line 2357 "util/configparser.c" /* yacc.c:1646 */ break; - case 188: -#line 348 "./util/configparser.y" /* yacc.c:1646 */ + case 193: +#line 353 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2345,11 +2369,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2349 "util/configparser.c" /* yacc.c:1646 */ +#line 2373 "util/configparser.c" /* yacc.c:1646 */ break; - case 189: -#line 361 "./util/configparser.y" /* yacc.c:1646 */ + case 194: +#line 366 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2363,11 +2387,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2367 "util/configparser.c" /* yacc.c:1646 */ +#line 2391 "util/configparser.c" /* yacc.c:1646 */ break; - case 190: -#line 376 "./util/configparser.y" /* yacc.c:1646 */ + case 195: +#line 381 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2375,11 +2399,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2379 "util/configparser.c" /* yacc.c:1646 */ +#line 2403 "util/configparser.c" /* yacc.c:1646 */ break; - case 191: -#line 385 "./util/configparser.y" /* yacc.c:1646 */ + case 196: +#line 390 "./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, @@ -2387,11 +2411,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2391 "util/configparser.c" /* yacc.c:1646 */ +#line 2415 "util/configparser.c" /* yacc.c:1646 */ break; - case 192: -#line 394 "./util/configparser.y" /* yacc.c:1646 */ + case 197: +#line 399 "./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, @@ -2399,11 +2423,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2403 "util/configparser.c" /* yacc.c:1646 */ +#line 2427 "util/configparser.c" /* yacc.c:1646 */ break; - case 193: -#line 403 "./util/configparser.y" /* yacc.c:1646 */ + case 198: +#line 408 "./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) @@ -2411,11 +2435,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2415 "util/configparser.c" /* yacc.c:1646 */ +#line 2439 "util/configparser.c" /* yacc.c:1646 */ break; - case 194: -#line 412 "./util/configparser.y" /* yacc.c:1646 */ + case 199: +#line 417 "./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) @@ -2423,11 +2447,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2427 "util/configparser.c" /* yacc.c:1646 */ +#line 2451 "util/configparser.c" /* yacc.c:1646 */ break; - case 195: -#line 421 "./util/configparser.y" /* yacc.c:1646 */ + case 200: +#line 426 "./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) @@ -2435,11 +2459,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2439 "util/configparser.c" /* yacc.c:1646 */ +#line 2463 "util/configparser.c" /* yacc.c:1646 */ break; - case 196: -#line 430 "./util/configparser.y" /* yacc.c:1646 */ + case 201: +#line 435 "./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) @@ -2447,11 +2471,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2451 "util/configparser.c" /* yacc.c:1646 */ +#line 2475 "util/configparser.c" /* yacc.c:1646 */ break; - case 197: -#line 439 "./util/configparser.y" /* yacc.c:1646 */ + case 202: +#line 444 "./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) @@ -2459,11 +2483,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2463 "util/configparser.c" /* yacc.c:1646 */ +#line 2487 "util/configparser.c" /* yacc.c:1646 */ break; - case 198: -#line 448 "./util/configparser.y" /* yacc.c:1646 */ + case 203: +#line 453 "./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) @@ -2471,11 +2495,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2475 "util/configparser.c" /* yacc.c:1646 */ +#line 2499 "util/configparser.c" /* yacc.c:1646 */ break; - case 199: -#line 457 "./util/configparser.y" /* yacc.c:1646 */ + case 204: +#line 462 "./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) @@ -2483,11 +2507,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2487 "util/configparser.c" /* yacc.c:1646 */ +#line 2511 "util/configparser.c" /* yacc.c:1646 */ break; - case 200: -#line 466 "./util/configparser.y" /* yacc.c:1646 */ + case 205: +#line 471 "./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) @@ -2495,11 +2519,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2499 "util/configparser.c" /* yacc.c:1646 */ +#line 2523 "util/configparser.c" /* yacc.c:1646 */ break; - case 201: -#line 475 "./util/configparser.y" /* yacc.c:1646 */ + case 206: +#line 480 "./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) @@ -2507,11 +2531,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2511 "util/configparser.c" /* yacc.c:1646 */ +#line 2535 "util/configparser.c" /* yacc.c:1646 */ break; - case 202: -#line 484 "./util/configparser.y" /* yacc.c:1646 */ + case 207: +#line 489 "./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) @@ -2519,11 +2543,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2523 "util/configparser.c" /* yacc.c:1646 */ +#line 2547 "util/configparser.c" /* yacc.c:1646 */ break; - case 203: -#line 493 "./util/configparser.y" /* yacc.c:1646 */ + case 208: +#line 498 "./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) @@ -2531,11 +2555,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2535 "util/configparser.c" /* yacc.c:1646 */ +#line 2559 "util/configparser.c" /* yacc.c:1646 */ break; - case 204: -#line 502 "./util/configparser.y" /* yacc.c:1646 */ + case 209: +#line 507 "./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) @@ -2543,31 +2567,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2547 "util/configparser.c" /* yacc.c:1646 */ +#line 2571 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: -#line 511 "./util/configparser.y" /* yacc.c:1646 */ + case 210: +#line 516 "./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 2557 "util/configparser.c" /* yacc.c:1646 */ +#line 2581 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: -#line 518 "./util/configparser.y" /* yacc.c:1646 */ + case 211: +#line 523 "./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 2567 "util/configparser.c" /* yacc.c:1646 */ +#line 2591 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: -#line 525 "./util/configparser.y" /* yacc.c:1646 */ + case 212: +#line 530 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2575,11 +2599,11 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2579 "util/configparser.c" /* yacc.c:1646 */ +#line 2603 "util/configparser.c" /* yacc.c:1646 */ break; - case 208: -#line 534 "./util/configparser.y" /* yacc.c:1646 */ + case 213: +#line 539 "./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) @@ -2587,11 +2611,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2591 "util/configparser.c" /* yacc.c:1646 */ +#line 2615 "util/configparser.c" /* yacc.c:1646 */ break; - case 209: -#line 543 "./util/configparser.y" /* yacc.c:1646 */ + case 214: +#line 548 "./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) @@ -2599,11 +2623,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2603 "util/configparser.c" /* yacc.c:1646 */ +#line 2627 "util/configparser.c" /* yacc.c:1646 */ break; - case 210: -#line 552 "./util/configparser.y" /* yacc.c:1646 */ + case 215: +#line 557 "./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) @@ -2616,11 +2640,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2620 "util/configparser.c" /* yacc.c:1646 */ +#line 2644 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: -#line 566 "./util/configparser.y" /* yacc.c:1646 */ + case 216: +#line 571 "./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) @@ -2628,11 +2652,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2632 "util/configparser.c" /* yacc.c:1646 */ +#line 2656 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 575 "./util/configparser.y" /* yacc.c:1646 */ + case 217: +#line 580 "./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) @@ -2640,11 +2664,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2644 "util/configparser.c" /* yacc.c:1646 */ +#line 2668 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: -#line 584 "./util/configparser.y" /* yacc.c:1646 */ + case 218: +#line 589 "./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) @@ -2652,31 +2676,31 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2656 "util/configparser.c" /* yacc.c:1646 */ +#line 2680 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: -#line 593 "./util/configparser.y" /* yacc.c:1646 */ + case 219: +#line 598 "./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 2666 "util/configparser.c" /* yacc.c:1646 */ +#line 2690 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: -#line 600 "./util/configparser.y" /* yacc.c:1646 */ + case 220: +#line 605 "./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 2676 "util/configparser.c" /* yacc.c:1646 */ +#line 2700 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: -#line 607 "./util/configparser.y" /* yacc.c:1646 */ + case 221: +#line 612 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -2701,115 +2725,115 @@ yyreduce: } } } -#line 2705 "util/configparser.c" /* yacc.c:1646 */ +#line 2729 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: -#line 633 "./util/configparser.y" /* yacc.c:1646 */ + case 222: +#line 638 "./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 2716 "util/configparser.c" /* yacc.c:1646 */ +#line 2740 "util/configparser.c" /* yacc.c:1646 */ break; - case 218: -#line 641 "./util/configparser.y" /* yacc.c:1646 */ + case 223: +#line 646 "./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 2726 "util/configparser.c" /* yacc.c:1646 */ +#line 2750 "util/configparser.c" /* yacc.c:1646 */ break; - case 219: -#line 648 "./util/configparser.y" /* yacc.c:1646 */ + case 224: +#line 653 "./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 2736 "util/configparser.c" /* yacc.c:1646 */ +#line 2760 "util/configparser.c" /* yacc.c:1646 */ break; - case 220: -#line 655 "./util/configparser.y" /* yacc.c:1646 */ + case 225: +#line 660 "./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 2746 "util/configparser.c" /* yacc.c:1646 */ +#line 2770 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 662 "./util/configparser.y" /* yacc.c:1646 */ + case 226: +#line 667 "./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 2756 "util/configparser.c" /* yacc.c:1646 */ +#line 2780 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: -#line 669 "./util/configparser.y" /* yacc.c:1646 */ + case 227: +#line 674 "./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 2767 "util/configparser.c" /* yacc.c:1646 */ +#line 2791 "util/configparser.c" /* yacc.c:1646 */ break; - case 223: -#line 677 "./util/configparser.y" /* yacc.c:1646 */ + case 228: +#line 682 "./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 2778 "util/configparser.c" /* yacc.c:1646 */ +#line 2802 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 685 "./util/configparser.y" /* yacc.c:1646 */ + case 229: +#line 690 "./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 2789 "util/configparser.c" /* yacc.c:1646 */ +#line 2813 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: -#line 693 "./util/configparser.y" /* yacc.c:1646 */ + case 230: +#line 698 "./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 2799 "util/configparser.c" /* yacc.c:1646 */ +#line 2823 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: -#line 700 "./util/configparser.y" /* yacc.c:1646 */ + case 231: +#line 705 "./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 2809 "util/configparser.c" /* yacc.c:1646 */ +#line 2833 "util/configparser.c" /* yacc.c:1646 */ break; - case 227: -#line 707 "./util/configparser.y" /* yacc.c:1646 */ + case 232: +#line 712 "./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) @@ -2817,11 +2841,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2821 "util/configparser.c" /* yacc.c:1646 */ +#line 2845 "util/configparser.c" /* yacc.c:1646 */ break; - case 228: -#line 716 "./util/configparser.y" /* yacc.c:1646 */ + case 233: +#line 721 "./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) @@ -2829,53 +2853,53 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2833 "util/configparser.c" /* yacc.c:1646 */ +#line 2857 "util/configparser.c" /* yacc.c:1646 */ break; - case 229: -#line 725 "./util/configparser.y" /* yacc.c:1646 */ + case 234: +#line 730 "./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 2843 "util/configparser.c" /* yacc.c:1646 */ +#line 2867 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: -#line 732 "./util/configparser.y" /* yacc.c:1646 */ + case 235: +#line 737 "./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 2853 "util/configparser.c" /* yacc.c:1646 */ +#line 2877 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 739 "./util/configparser.y" /* yacc.c:1646 */ + case 236: +#line 744 "./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 2864 "util/configparser.c" /* yacc.c:1646 */ +#line 2888 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: -#line 747 "./util/configparser.y" /* yacc.c:1646 */ + case 237: +#line 752 "./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 2875 "util/configparser.c" /* yacc.c:1646 */ +#line 2899 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: -#line 755 "./util/configparser.y" /* yacc.c:1646 */ + case 238: +#line 760 "./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) @@ -2884,11 +2908,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2888 "util/configparser.c" /* yacc.c:1646 */ +#line 2912 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: -#line 765 "./util/configparser.y" /* yacc.c:1646 */ + case 239: +#line 770 "./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) @@ -2897,11 +2921,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2901 "util/configparser.c" /* yacc.c:1646 */ +#line 2925 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: -#line 775 "./util/configparser.y" /* yacc.c:1646 */ + case 240: +#line 780 "./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) @@ -2910,11 +2934,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2914 "util/configparser.c" /* yacc.c:1646 */ +#line 2938 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: -#line 785 "./util/configparser.y" /* yacc.c:1646 */ + case 241: +#line 790 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2926,11 +2950,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2930 "util/configparser.c" /* yacc.c:1646 */ +#line 2954 "util/configparser.c" /* yacc.c:1646 */ break; - case 237: -#line 798 "./util/configparser.y" /* yacc.c:1646 */ + case 242: +#line 803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2940,22 +2964,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2944 "util/configparser.c" /* yacc.c:1646 */ +#line 2968 "util/configparser.c" /* yacc.c:1646 */ break; - case 238: -#line 809 "./util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 814 "./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 2955 "util/configparser.c" /* yacc.c:1646 */ +#line 2979 "util/configparser.c" /* yacc.c:1646 */ break; - case 239: -#line 817 "./util/configparser.y" /* yacc.c:1646 */ + case 244: +#line 822 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2967,11 +2991,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 2971 "util/configparser.c" /* yacc.c:1646 */ +#line 2995 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: -#line 830 "./util/configparser.y" /* yacc.c:1646 */ + case 245: +#line 835 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2979,11 +3003,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2983 "util/configparser.c" /* yacc.c:1646 */ +#line 3007 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: -#line 839 "./util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 844 "./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) @@ -2991,11 +3015,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2995 "util/configparser.c" /* yacc.c:1646 */ +#line 3019 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: -#line 848 "./util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 853 "./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) @@ -3003,11 +3027,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3007 "util/configparser.c" /* yacc.c:1646 */ +#line 3031 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 857 "./util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 862 "./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) @@ -3016,11 +3040,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3020 "util/configparser.c" /* yacc.c:1646 */ +#line 3044 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: -#line 867 "./util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 872 "./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) @@ -3029,22 +3053,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3033 "util/configparser.c" /* yacc.c:1646 */ +#line 3057 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 877 "./util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 882 "./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 3044 "util/configparser.c" /* yacc.c:1646 */ +#line 3068 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 885 "./util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 890 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3056,11 +3080,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3060 "util/configparser.c" /* yacc.c:1646 */ +#line 3084 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 898 "./util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 903 "./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) @@ -3068,22 +3092,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3072 "util/configparser.c" /* yacc.c:1646 */ +#line 3096 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 907 "./util/configparser.y" /* yacc.c:1646 */ + case 253: +#line 912 "./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 3083 "util/configparser.c" /* yacc.c:1646 */ +#line 3107 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 915 "./util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 920 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3091,22 +3115,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3095 "util/configparser.c" /* yacc.c:1646 */ +#line 3119 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 924 "./util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 929 "./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 3106 "util/configparser.c" /* yacc.c:1646 */ +#line 3130 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 932 "./util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 937 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3118,11 +3142,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3122 "util/configparser.c" /* yacc.c:1646 */ +#line 3146 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 945 "./util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 950 "./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) @@ -3130,21 +3154,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3134 "util/configparser.c" /* yacc.c:1646 */ +#line 3158 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 954 "./util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 959 "./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 3144 "util/configparser.c" /* yacc.c:1646 */ +#line 3168 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 961 "./util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 966 "./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) @@ -3153,11 +3177,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3157 "util/configparser.c" /* yacc.c:1646 */ +#line 3181 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 971 "./util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 976 "./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) @@ -3166,11 +3190,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3170 "util/configparser.c" /* yacc.c:1646 */ +#line 3194 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 981 "./util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 986 "./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) @@ -3179,11 +3203,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3183 "util/configparser.c" /* yacc.c:1646 */ +#line 3207 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 991 "./util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 996 "./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) @@ -3192,11 +3216,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3196 "util/configparser.c" /* yacc.c:1646 */ +#line 3220 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 1001 "./util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 1006 "./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) @@ -3205,11 +3229,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3209 "util/configparser.c" /* yacc.c:1646 */ +#line 3233 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 1011 "./util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 1016 "./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) @@ -3218,11 +3242,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3222 "util/configparser.c" /* yacc.c:1646 */ +#line 3246 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 1021 "./util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 1026 "./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) @@ -3231,11 +3255,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3235 "util/configparser.c" /* yacc.c:1646 */ +#line 3259 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 1031 "./util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 1036 "./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) @@ -3244,41 +3268,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3248 "util/configparser.c" /* yacc.c:1646 */ +#line 3272 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 1041 "./util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 1046 "./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 3258 "util/configparser.c" /* yacc.c:1646 */ +#line 3282 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 1048 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 1053 "./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 3268 "util/configparser.c" /* yacc.c:1646 */ +#line 3292 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 1055 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 1060 "./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 3278 "util/configparser.c" /* yacc.c:1646 */ +#line 3302 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 1062 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 1067 "./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) @@ -3286,11 +3310,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3290 "util/configparser.c" /* yacc.c:1646 */ +#line 3314 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 1071 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 1076 "./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) @@ -3298,11 +3322,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3302 "util/configparser.c" /* yacc.c:1646 */ +#line 3326 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 1080 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 1085 "./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) @@ -3310,21 +3334,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3314 "util/configparser.c" /* yacc.c:1646 */ +#line 3338 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 1089 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 1094 "./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 3324 "util/configparser.c" /* yacc.c:1646 */ +#line 3348 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 1096 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 1101 "./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) @@ -3333,11 +3357,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3337 "util/configparser.c" /* yacc.c:1646 */ +#line 3361 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 1106 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 1111 "./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 && @@ -3353,21 +3377,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 3357 "util/configparser.c" /* yacc.c:1646 */ +#line 3381 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 1123 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 1128 "./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 3367 "util/configparser.c" /* yacc.c:1646 */ +#line 3391 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 1130 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 1135 "./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) { @@ -3384,11 +3408,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3388 "util/configparser.c" /* yacc.c:1646 */ +#line 3412 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 1148 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 1153 "./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) { @@ -3400,11 +3424,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3404 "util/configparser.c" /* yacc.c:1646 */ +#line 3428 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 1161 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 1166 "./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) { @@ -3416,11 +3440,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3420 "util/configparser.c" /* yacc.c:1646 */ +#line 3444 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 1174 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 1179 "./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) @@ -3428,11 +3452,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3432 "util/configparser.c" /* yacc.c:1646 */ +#line 3456 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 1183 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 1188 "./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) @@ -3440,11 +3464,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3444 "util/configparser.c" /* yacc.c:1646 */ +#line 3468 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 1192 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 1197 "./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) @@ -3452,11 +3476,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3456 "util/configparser.c" /* yacc.c:1646 */ +#line 3480 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 1201 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 1206 "./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) @@ -3464,11 +3488,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3468 "util/configparser.c" /* yacc.c:1646 */ +#line 3492 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 1210 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 1215 "./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) @@ -3477,11 +3501,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3481 "util/configparser.c" /* yacc.c:1646 */ +#line 3505 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 1220 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 1225 "./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) @@ -3490,11 +3514,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3494 "util/configparser.c" /* yacc.c:1646 */ +#line 3518 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 1230 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 1235 "./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) @@ -3502,11 +3526,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3506 "util/configparser.c" /* yacc.c:1646 */ +#line 3530 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 1239 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 1244 "./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) @@ -3514,11 +3538,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3518 "util/configparser.c" /* yacc.c:1646 */ +#line 3542 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 1248 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 1253 "./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) @@ -3530,11 +3554,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3534 "util/configparser.c" /* yacc.c:1646 */ +#line 3558 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 1261 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 1266 "./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) @@ -3542,21 +3566,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3546 "util/configparser.c" /* yacc.c:1646 */ +#line 3570 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 1270 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 1275 "./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 3556 "util/configparser.c" /* yacc.c:1646 */ +#line 3580 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 1277 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 1282 "./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) @@ -3564,11 +3588,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3568 "util/configparser.c" /* yacc.c:1646 */ +#line 3592 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 1286 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 1291 "./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) @@ -3576,11 +3600,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3580 "util/configparser.c" /* yacc.c:1646 */ +#line 3604 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 1295 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 1300 "./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) @@ -3588,11 +3612,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3592 "util/configparser.c" /* yacc.c:1646 */ +#line 3616 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 1304 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 1309 "./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) @@ -3601,22 +3625,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3605 "util/configparser.c" /* yacc.c:1646 */ +#line 3629 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 1313 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 1318 "./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 3616 "util/configparser.c" /* yacc.c:1646 */ +#line 3640 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 1321 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 1326 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3628,22 +3652,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3632 "util/configparser.c" /* yacc.c:1646 */ +#line 3656 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 1334 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 1339 "./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 3643 "util/configparser.c" /* yacc.c:1646 */ +#line 3667 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 1342 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 1347 "./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 && @@ -3670,21 +3694,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 3674 "util/configparser.c" /* yacc.c:1646 */ +#line 3698 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 1370 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 1375 "./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 3684 "util/configparser.c" /* yacc.c:1646 */ +#line 3708 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 1377 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 1382 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -3698,11 +3722,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 3702 "util/configparser.c" /* yacc.c:1646 */ +#line 3726 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 1392 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 1397 "./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) @@ -3711,11 +3735,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3715 "util/configparser.c" /* yacc.c:1646 */ +#line 3739 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 1402 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 1407 "./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) @@ -3724,31 +3748,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3728 "util/configparser.c" /* yacc.c:1646 */ +#line 3752 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 1412 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 1417 "./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 3738 "util/configparser.c" /* yacc.c:1646 */ +#line 3762 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 1419 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 1424 "./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 3748 "util/configparser.c" /* yacc.c:1646 */ +#line 3772 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 1426 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 1431 "./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) @@ -3756,11 +3780,11 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3760 "util/configparser.c" /* yacc.c:1646 */ +#line 3784 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 1435 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 1440 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -3773,11 +3797,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3777 "util/configparser.c" /* yacc.c:1646 */ +#line 3801 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 1449 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 1454 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -3795,11 +3819,11 @@ yyreduce: } } } -#line 3799 "util/configparser.c" /* yacc.c:1646 */ +#line 3823 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 1468 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 1473 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -3817,11 +3841,11 @@ yyreduce: } } } -#line 3821 "util/configparser.c" /* yacc.c:1646 */ +#line 3845 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 1487 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1492 "./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, @@ -3832,11 +3856,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3836 "util/configparser.c" /* yacc.c:1646 */ +#line 3860 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 1499 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1504 "./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, @@ -3847,11 +3871,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3851 "util/configparser.c" /* yacc.c:1646 */ +#line 3875 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 1511 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1516 "./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, @@ -3862,11 +3886,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3866 "util/configparser.c" /* yacc.c:1646 */ +#line 3890 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1523 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1528 "./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, @@ -3876,11 +3900,33 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3880 "util/configparser.c" /* yacc.c:1646 */ +#line 3904 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1534 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1539 "./util/configparser.y" /* yacc.c:1646 */ + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + &len); + free((yyvsp[0].str)); + OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str))); + if(!bitlist) + yyerror("could not parse tags, (define-tag them first)"); + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->respip_tags, + (yyvsp[-1].str), bitlist, len)) { + yyerror("out of memory"); + free((yyvsp[-1].str)); + } + } + } +#line 3926 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 314: +#line 1558 "./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) @@ -3888,11 +3934,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3892 "util/configparser.c" /* yacc.c:1646 */ +#line 3938 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1544 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1568 "./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) @@ -3900,33 +3946,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3904 "util/configparser.c" /* yacc.c:1646 */ +#line 3950 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1553 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1577 "./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 3915 "util/configparser.c" /* yacc.c:1646 */ +#line 3961 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1561 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1585 "./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 3926 "util/configparser.c" /* yacc.c:1646 */ +#line 3972 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1569 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1593 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3938,11 +3984,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3942 "util/configparser.c" /* yacc.c:1646 */ +#line 3988 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1582 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1606 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3954,11 +4000,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3958 "util/configparser.c" /* yacc.c:1646 */ +#line 4004 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1595 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1619 "./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) { @@ -3970,11 +4016,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 3974 "util/configparser.c" /* yacc.c:1646 */ +#line 4020 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1608 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1632 "./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) { @@ -3986,11 +4032,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 3990 "util/configparser.c" /* yacc.c:1646 */ +#line 4036 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1621 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1645 "./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) @@ -3998,11 +4044,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4002 "util/configparser.c" /* yacc.c:1646 */ +#line 4048 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1630 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1654 "./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) @@ -4010,11 +4056,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4014 "util/configparser.c" /* yacc.c:1646 */ +#line 4060 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1639 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1663 "./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) @@ -4023,11 +4069,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4027 "util/configparser.c" /* yacc.c:1646 */ +#line 4073 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1649 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1673 "./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) @@ -4036,11 +4082,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4040 "util/configparser.c" /* yacc.c:1646 */ +#line 4086 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1659 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1683 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -4049,31 +4095,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 4053 "util/configparser.c" /* yacc.c:1646 */ +#line 4099 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1669 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1693 "./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 4063 "util/configparser.c" /* yacc.c:1646 */ +#line 4109 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1676 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1700 "./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 4073 "util/configparser.c" /* yacc.c:1646 */ +#line 4119 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1683 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1707 "./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) @@ -4081,11 +4127,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4085 "util/configparser.c" /* yacc.c:1646 */ +#line 4131 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1692 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1716 "./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) @@ -4094,11 +4140,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4098 "util/configparser.c" /* yacc.c:1646 */ +#line 4144 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1702 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1726 "./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) @@ -4107,11 +4153,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4111 "util/configparser.c" /* yacc.c:1646 */ +#line 4157 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1712 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1736 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -4120,31 +4166,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 4124 "util/configparser.c" /* yacc.c:1646 */ +#line 4170 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1722 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1746 "./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 4134 "util/configparser.c" /* yacc.c:1646 */ +#line 4180 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1729 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1753 "./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 4144 "util/configparser.c" /* yacc.c:1646 */ +#line 4190 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1736 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1760 "./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) @@ -4152,11 +4198,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4156 "util/configparser.c" /* yacc.c:1646 */ +#line 4202 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1745 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1769 "./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) @@ -4165,11 +4211,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4169 "util/configparser.c" /* yacc.c:1646 */ +#line 4215 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1755 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1779 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -4178,11 +4224,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 4182 "util/configparser.c" /* yacc.c:1646 */ +#line 4228 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1765 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1789 "./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 && @@ -4210,11 +4256,35 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4214 "util/configparser.c" /* yacc.c:1646 */ +#line 4260 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1794 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1818 "./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)); + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str))) + fatal_exit("out of memory adding per-view " + "response-ip action"); + } +#line 4273 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 340: +#line 1828 "./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 4284 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 341: +#line 1836 "./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))) { @@ -4222,11 +4292,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4226 "util/configparser.c" /* yacc.c:1646 */ +#line 4296 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1803 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1845 "./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) @@ -4234,19 +4304,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4238 "util/configparser.c" /* yacc.c:1646 */ +#line 4308 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1812 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1854 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 4246 "util/configparser.c" /* yacc.c:1646 */ +#line 4316 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1823 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1865 "./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) @@ -4255,11 +4325,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4259 "util/configparser.c" /* yacc.c:1646 */ +#line 4329 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1833 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1875 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4267,21 +4337,21 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4271 "util/configparser.c" /* yacc.c:1646 */ +#line 4341 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1842 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1884 "./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 4281 "util/configparser.c" /* yacc.c:1646 */ +#line 4351 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1849 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1891 "./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) @@ -4290,122 +4360,122 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4294 "util/configparser.c" /* yacc.c:1646 */ +#line 4364 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1859 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1901 "./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 4304 "util/configparser.c" /* yacc.c:1646 */ +#line 4374 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1866 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1908 "./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 4314 "util/configparser.c" /* yacc.c:1646 */ +#line 4384 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1873 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1915 "./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 4324 "util/configparser.c" /* yacc.c:1646 */ +#line 4394 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1880 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1922 "./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 4334 "util/configparser.c" /* yacc.c:1646 */ +#line 4404 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1887 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1929 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 4342 "util/configparser.c" /* yacc.c:1646 */ +#line 4412 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1904 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1946 "./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 4353 "util/configparser.c" /* yacc.c:1646 */ +#line 4423 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1912 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1954 "./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 4363 "util/configparser.c" /* yacc.c:1646 */ +#line 4433 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1919 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1961 "./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 4374 "util/configparser.c" /* yacc.c:1646 */ +#line 4444 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1927 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1969 "./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 4385 "util/configparser.c" /* yacc.c:1646 */ +#line 4455 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1935 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1977 "./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 4395 "util/configparser.c" /* yacc.c:1646 */ +#line 4465 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1942 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1984 "./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 4405 "util/configparser.c" /* yacc.c:1646 */ +#line 4475 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1949 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1991 "./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) @@ -4413,11 +4483,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4417 "util/configparser.c" /* yacc.c:1646 */ +#line 4487 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1958 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 2000 "./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) @@ -4425,11 +4495,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4429 "util/configparser.c" /* yacc.c:1646 */ +#line 4499 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1967 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 2009 "./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) @@ -4437,11 +4507,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4441 "util/configparser.c" /* yacc.c:1646 */ +#line 4511 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1976 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 2018 "./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) @@ -4449,11 +4519,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4453 "util/configparser.c" /* yacc.c:1646 */ +#line 4523 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1985 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 2027 "./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) @@ -4461,11 +4531,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4465 "util/configparser.c" /* yacc.c:1646 */ +#line 4535 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1994 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 2036 "./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) @@ -4473,29 +4543,29 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4477 "util/configparser.c" /* yacc.c:1646 */ +#line 4547 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 2003 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 2045 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 4485 "util/configparser.c" /* yacc.c:1646 */ +#line 4555 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 2012 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 2054 "./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 4495 "util/configparser.c" /* yacc.c:1646 */ +#line 4565 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 2018 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 2060 "./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) @@ -4504,21 +4574,44 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4508 "util/configparser.c" /* yacc.c:1646 */ +#line 4578 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 2028 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 2070 "./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 4518 "util/configparser.c" /* yacc.c:1646 */ +#line 4588 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 396: +#line 2077 "./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)); + if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, + (yyvsp[-1].str), (yyvsp[0].str))) + fatal_exit("out of memory adding response-ip"); + } +#line 4600 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 397: +#line 2086 "./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 4611 "util/configparser.c" /* yacc.c:1646 */ break; -#line 4522 "util/configparser.c" /* yacc.c:1646 */ +#line 4615 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4746,7 +4839,23 @@ yyreturn: #endif return yyresult; } -#line 2034 "./util/configparser.y" /* yacc.c:1906 */ +#line 2093 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ +static void +validate_respip_action(const char* action) +{ + if(strcmp(action, "deny")!=0 && + strcmp(action, "redirect")!=0 && + strcmp(action, "inform")!=0 && + strcmp(action, "inform_deny")!=0 && + strcmp(action, "always_transparent")!=0 && + strcmp(action, "always_refuse")!=0 && + strcmp(action, "always_nxdomain")!=0) + { + yyerror("response-ip action: expected deny, redirect, " + "inform, inform_deny, always_transparent, " + "always_refuse or always_nxdomain"); + } +} diff --git a/util/configparser.h b/util/configparser.h index 80360c651..08542392b 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -200,40 +200,43 @@ extern int yydebug; VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 410, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 411, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 412, - VAR_HARDEN_ALGO_DOWNGRADE = 413, - VAR_IP_TRANSPARENT = 414, - VAR_DISABLE_DNSSEC_LAME_CHECK = 415, - VAR_IP_RATELIMIT = 416, - VAR_IP_RATELIMIT_SLABS = 417, - VAR_IP_RATELIMIT_SIZE = 418, - VAR_RATELIMIT = 419, - VAR_RATELIMIT_SLABS = 420, - VAR_RATELIMIT_SIZE = 421, - VAR_RATELIMIT_FOR_DOMAIN = 422, - VAR_RATELIMIT_BELOW_DOMAIN = 423, - VAR_IP_RATELIMIT_FACTOR = 424, - VAR_RATELIMIT_FACTOR = 425, - VAR_CAPS_WHITELIST = 426, - VAR_CACHE_MAX_NEGATIVE_TTL = 427, - VAR_PERMIT_SMALL_HOLDDOWN = 428, - VAR_QNAME_MINIMISATION = 429, - VAR_QNAME_MINIMISATION_STRICT = 430, - VAR_IP_FREEBIND = 431, - VAR_DEFINE_TAG = 432, - VAR_LOCAL_ZONE_TAG = 433, - VAR_ACCESS_CONTROL_TAG = 434, - VAR_LOCAL_ZONE_OVERRIDE = 435, - VAR_ACCESS_CONTROL_TAG_ACTION = 436, - VAR_ACCESS_CONTROL_TAG_DATA = 437, - VAR_VIEW = 438, - VAR_ACCESS_CONTROL_VIEW = 439, - VAR_VIEW_FIRST = 440, - VAR_SERVE_EXPIRED = 441, - VAR_FAKE_DSA = 442, - VAR_LOG_IDENTITY = 443, - VAR_USE_SYSTEMD = 444, - VAR_SHM_ENABLE = 445, - VAR_SHM_KEY = 446 + 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_CAPS_WHITELIST = 429, + VAR_CACHE_MAX_NEGATIVE_TTL = 430, + VAR_PERMIT_SMALL_HOLDDOWN = 431, + VAR_QNAME_MINIMISATION = 432, + VAR_QNAME_MINIMISATION_STRICT = 433, + VAR_IP_FREEBIND = 434, + VAR_DEFINE_TAG = 435, + VAR_LOCAL_ZONE_TAG = 436, + VAR_ACCESS_CONTROL_TAG = 437, + VAR_LOCAL_ZONE_OVERRIDE = 438, + VAR_ACCESS_CONTROL_TAG_ACTION = 439, + VAR_ACCESS_CONTROL_TAG_DATA = 440, + VAR_VIEW = 441, + VAR_ACCESS_CONTROL_VIEW = 442, + VAR_VIEW_FIRST = 443, + VAR_SERVE_EXPIRED = 444, + VAR_FAKE_DSA = 445, + VAR_LOG_IDENTITY = 446, + VAR_USE_SYSTEMD = 447, + VAR_SHM_ENABLE = 448, + VAR_SHM_KEY = 449 }; #endif /* Tokens. */ @@ -392,51 +395,54 @@ extern int yydebug; #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_HARDEN_ALGO_DOWNGRADE 413 -#define VAR_IP_TRANSPARENT 414 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 415 -#define VAR_IP_RATELIMIT 416 -#define VAR_IP_RATELIMIT_SLABS 417 -#define VAR_IP_RATELIMIT_SIZE 418 -#define VAR_RATELIMIT 419 -#define VAR_RATELIMIT_SLABS 420 -#define VAR_RATELIMIT_SIZE 421 -#define VAR_RATELIMIT_FOR_DOMAIN 422 -#define VAR_RATELIMIT_BELOW_DOMAIN 423 -#define VAR_IP_RATELIMIT_FACTOR 424 -#define VAR_RATELIMIT_FACTOR 425 -#define VAR_CAPS_WHITELIST 426 -#define VAR_CACHE_MAX_NEGATIVE_TTL 427 -#define VAR_PERMIT_SMALL_HOLDDOWN 428 -#define VAR_QNAME_MINIMISATION 429 -#define VAR_QNAME_MINIMISATION_STRICT 430 -#define VAR_IP_FREEBIND 431 -#define VAR_DEFINE_TAG 432 -#define VAR_LOCAL_ZONE_TAG 433 -#define VAR_ACCESS_CONTROL_TAG 434 -#define VAR_LOCAL_ZONE_OVERRIDE 435 -#define VAR_ACCESS_CONTROL_TAG_ACTION 436 -#define VAR_ACCESS_CONTROL_TAG_DATA 437 -#define VAR_VIEW 438 -#define VAR_ACCESS_CONTROL_VIEW 439 -#define VAR_VIEW_FIRST 440 -#define VAR_SERVE_EXPIRED 441 -#define VAR_FAKE_DSA 442 -#define VAR_LOG_IDENTITY 443 -#define VAR_USE_SYSTEMD 444 -#define VAR_SHM_ENABLE 445 -#define VAR_SHM_KEY 446 +#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_CAPS_WHITELIST 429 +#define VAR_CACHE_MAX_NEGATIVE_TTL 430 +#define VAR_PERMIT_SMALL_HOLDDOWN 431 +#define VAR_QNAME_MINIMISATION 432 +#define VAR_QNAME_MINIMISATION_STRICT 433 +#define VAR_IP_FREEBIND 434 +#define VAR_DEFINE_TAG 435 +#define VAR_LOCAL_ZONE_TAG 436 +#define VAR_ACCESS_CONTROL_TAG 437 +#define VAR_LOCAL_ZONE_OVERRIDE 438 +#define VAR_ACCESS_CONTROL_TAG_ACTION 439 +#define VAR_ACCESS_CONTROL_TAG_DATA 440 +#define VAR_VIEW 441 +#define VAR_ACCESS_CONTROL_VIEW 442 +#define VAR_VIEW_FIRST 443 +#define VAR_SERVE_EXPIRED 444 +#define VAR_FAKE_DSA 445 +#define VAR_LOG_IDENTITY 446 +#define VAR_USE_SYSTEMD 447 +#define VAR_SHM_ENABLE 448 +#define VAR_SHM_KEY 449 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 64 "./util/configparser.y" /* yacc.c:1909 */ +#line 66 "./util/configparser.y" /* yacc.c:1909 */ char* str; -#line 440 "util/configparser.h" /* yacc.c:1909 */ +#line 446 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 1fb12e7f8..16c97004f 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -51,6 +51,8 @@ int ub_c_lex(void); void ub_c_error(const char *message); +static void validate_respip_action(const char* action); + /* these need to be global, otherwise they cannot be used inside yacc */ extern struct config_parser_state* cfg_parser; @@ -122,6 +124,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES +%token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT %token VAR_DISABLE_DNSSEC_LAME_CHECK %token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE @@ -214,6 +217,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_access_control_tag_data | server_access_control_view | server_qname_minimisation_strict | server_serve_expired | server_fake_dsa | server_log_identity | server_use_systemd | + server_response_ip_tag | server_response_ip | server_response_ip_data | server_shm_enable | server_shm_key ; stubstart: VAR_STUB_ZONE @@ -266,7 +270,8 @@ viewstart: VAR_VIEW ; contents_view: contents_view content_view | ; -content_view: view_name | view_local_zone | view_local_data | view_first +content_view: view_name | view_local_zone | view_local_data | view_first | + view_response_ip | view_response_ip_data ; server_num_threads: VAR_NUM_THREADS STRING_ARG { @@ -1530,6 +1535,25 @@ server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG } } ; +server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, + &len); + free($3); + OUTYY(("P(response_ip_tag:%s)\n", $2)); + if(!bitlist) + yyerror("could not parse tags, (define-tag them first)"); + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->respip_tags, + $2, bitlist, len)) { + yyerror("out of memory"); + free($2); + } + } + } + ; server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG { OUTYY(("P(server_ip_ratelimit:%s)\n", $2)); @@ -1790,6 +1814,24 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG } } ; +view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG + { + OUTYY(("P(view_response_ip:%s %s)\n", $2, $3)); + validate_respip_action($3); + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->respip_actions, $2, $3)) + fatal_exit("out of memory adding per-view " + "response-ip action"); + } + ; +view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG + { + OUTYY(("P(view_response_ip_data:%s)\n", $2)); + if(!cfg_str2list_insert( + &cfg_parser->cfg->views->respip_data, $2, $3)) + fatal_exit("out of memory adding response-ip-data"); + } + ; view_local_data: VAR_LOCAL_DATA STRING_ARG { OUTYY(("P(view_local_data:%s)\n", $2)); @@ -2031,6 +2073,39 @@ server_log_identity: VAR_LOG_IDENTITY STRING_ARG cfg_parser->cfg->log_identity = $2; } ; +server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG + { + OUTYY(("P(server_response_ip:%s %s)\n", $2, $3)); + validate_respip_action($3); + if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, + $2, $3)) + fatal_exit("out of memory adding response-ip"); + } + ; +server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG + { + OUTYY(("P(server_response_ip_data:%s)\n", $2)); + if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, + $2, $3)) + fatal_exit("out of memory adding response-ip-data"); + } + ; %% /* parse helper routines could be here */ +static void +validate_respip_action(const char* action) +{ + if(strcmp(action, "deny")!=0 && + strcmp(action, "redirect")!=0 && + strcmp(action, "inform")!=0 && + strcmp(action, "inform_deny")!=0 && + strcmp(action, "always_transparent")!=0 && + strcmp(action, "always_refuse")!=0 && + strcmp(action, "always_nxdomain")!=0) + { + yyerror("response-ip action: expected deny, redirect, " + "inform, inform_deny, always_transparent, " + "always_refuse or always_nxdomain"); + } +} diff --git a/util/data/msgencode.c b/util/data/msgencode.c index 5d3a24762..1f72a03b8 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -459,6 +459,10 @@ packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, owner_labs = dname_count_labels(key->rk.dname); owner_pos = sldns_buffer_position(pkt); + /* For an rrset with a fixed TTL, use the rrset's TTL as given */ + if((key->rk.flags & PACKED_RRSET_FIXEDTTL) != 0) + timenow = 0; + if(do_data) { const sldns_rr_descriptor* c = type_rdata_compressable(key); for(i=0; icount; i++) { diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 8869716b6..d1b7a4388 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -133,9 +133,8 @@ parse_create_repinfo(struct msg_parse* msg, struct reply_info** rep, return 1; } -/** allocate (special) rrset keys, return 0 on error */ -static int -repinfo_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc, +int +reply_info_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc, struct regional* region) { size_t i; @@ -438,7 +437,7 @@ parse_create_msg(sldns_buffer* pkt, struct msg_parse* msg, return 0; if(!parse_create_repinfo(msg, rep, region)) return 0; - if(!repinfo_alloc_rrset_keys(*rep, alloc, region)) + if(!reply_info_alloc_rrset_keys(*rep, alloc, region)) return 0; if(!parse_copy_decompress(pkt, msg, *rep, region)) return 0; @@ -688,7 +687,7 @@ reply_info_copy(struct reply_info* rep, struct alloc_cache* alloc, if(!cp) return NULL; /* allocate ub_key structures special or not */ - if(!repinfo_alloc_rrset_keys(cp, alloc, region)) { + if(!reply_info_alloc_rrset_keys(cp, alloc, region)) { if(!region) reply_info_parsedelete(cp, alloc); return NULL; diff --git a/util/data/msgreply.h b/util/data/msgreply.h index 485d49afa..037bbaa79 100644 --- a/util/data/msgreply.h +++ b/util/data/msgreply.h @@ -356,6 +356,21 @@ struct msgreply_entry* query_info_entrysetup(struct query_info* q, struct reply_info* reply_info_copy(struct reply_info* rep, struct alloc_cache* alloc, struct regional* region); +/** + * Allocate (special) rrset keys. + * @param rep: reply info in which the rrset keys to be allocated, rrset[] + * array should have bee allocated with NULL pointers. + * @param alloc: how to allocate rrset keys. + * Not used if region!=NULL, it can be NULL in that case. + * @region: if this parameter is NULL then the alloc is used. + * otherwise, rrset keys are allocated in this region. + * In a region, no special rrset key structures are needed (not shared). + * and no rrset_ref array in the reply needs to be built up. + * @return 1 on success, 0 on error + */ +int reply_info_alloc_rrset_keys(struct reply_info* rep, + struct alloc_cache* alloc, struct regional* region); + /** * Copy a parsed rrset into given key, decompressing and allocating rdata. * @param pkt: packet for decompression diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index a2f116afb..28f603d6f 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -57,6 +57,10 @@ typedef uint64_t rrset_id_type; * this is set on SOA rrsets in the authority section, to keep its TTL separate * from the SOA in the answer section from a direct SOA query or ANY query. */ #define PACKED_RRSET_SOA_NEG 0x4 +/** This rrset is considered to have a fixed TTL; its TTL doesn't have to be + * updated on encoding in a reply. This flag is not expected to be set in + * cached data. */ +#define PACKED_RRSET_FIXEDTTL 0x80000000 /** number of rrs and rrsets for integer overflow protection. More than * this is not really possible (64K packet has much less RRs and RRsets) in @@ -83,6 +87,7 @@ struct packed_rrset_key { * o PACKED_RRSET_NSEC_AT_APEX * o PACKED_RRSET_PARENT_SIDE * o PACKED_RRSET_SOA_NEG + * o PACKED_RRSET_FIXEDTTL (not supposed to be cached) */ uint32_t flags; /** the rrset type in network format */ diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 8bd7b973c..bf7b943ff 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -75,6 +75,7 @@ #ifdef UB_ON_WINDOWS #include "winrc/win_svc.h" #endif +#include "respip/respip.h" #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" @@ -318,6 +319,7 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)) if(fptr == &iter_init) return 1; else if(fptr == &val_init) return 1; else if(fptr == &dns64_init) return 1; + else if(fptr == &respip_init) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_init) return 1; #endif @@ -333,6 +335,7 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)) if(fptr == &iter_deinit) return 1; else if(fptr == &val_deinit) return 1; else if(fptr == &dns64_deinit) return 1; + else if(fptr == &respip_deinit) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_deinit) return 1; #endif @@ -349,6 +352,7 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, if(fptr == &iter_operate) return 1; else if(fptr == &val_operate) return 1; else if(fptr == &dns64_operate) return 1; + else if(fptr == &respip_operate) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_operate) return 1; #endif @@ -365,6 +369,7 @@ fptr_whitelist_mod_inform_super(void (*fptr)( if(fptr == &iter_inform_super) return 1; else if(fptr == &val_inform_super) return 1; else if(fptr == &dns64_inform_super) return 1; + else if(fptr == &respip_inform_super) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_inform_super) return 1; #endif @@ -381,6 +386,7 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, if(fptr == &iter_clear) return 1; else if(fptr == &val_clear) return 1; else if(fptr == &dns64_clear) return 1; + else if(fptr == &respip_clear) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_clear) return 1; #endif @@ -396,6 +402,7 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)) if(fptr == &iter_get_mem) return 1; else if(fptr == &val_get_mem) return 1; else if(fptr == &dns64_get_mem) return 1; + else if(fptr == &respip_get_mem) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_get_mem) return 1; #endif diff --git a/util/module.h b/util/module.h index d3db3eaec..5803353e0 100644 --- a/util/module.h +++ b/util/module.h @@ -174,6 +174,9 @@ struct val_anchors; struct val_neg_cache; struct iter_forwards; struct iter_hints; +struct respip_set; +struct respip_client_info; +struct respip_addr_info; /** Maximum number of modules in operation */ #define MAX_MODULE 16 @@ -508,6 +511,8 @@ struct sock_list { struct sockaddr_storage addr; }; +struct respip_action_info; + /** * Module state, per query. */ @@ -562,6 +567,19 @@ struct module_qstate { int no_cache_lookup; /** whether modules should store answer in the cache */ int no_cache_store; + + /** + * Attributes of clients that share the qstate that may affect IP-based + * actions. + */ + struct respip_client_info* client_info; + + /** Extended result of response-ip action processing, mainly + * for logging purposes. */ + struct respip_action_info* respip_action_info; + + /** whether the reply should be dropped */ + int is_drop; }; /**