aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Makefile.in966
-rw-r--r--aclocal.m48
-rw-r--r--compat/arc4random.c1
-rwxr-xr-xconfig.guess2
-rw-r--r--config.h.in18
-rwxr-xr-xconfig.sub2
-rwxr-xr-xconfigure37
-rw-r--r--configure.ac17
-rw-r--r--contrib/README2
-rw-r--r--contrib/fastrpz.patch114
-rw-r--r--contrib/unbound-fuzzme.patch148
-rw-r--r--daemon/daemon.c1
-rw-r--r--daemon/remote.c36
-rw-r--r--daemon/stats.c13
-rw-r--r--daemon/unbound.c18
-rw-r--r--daemon/worker.c9
-rw-r--r--dns64/dns64.c80
-rw-r--r--dnscrypt/dnscrypt.c3
-rw-r--r--dnstap/dnstap.c17
-rw-r--r--doc/Changelog276
-rw-r--r--doc/README2
-rw-r--r--doc/example.conf.in67
-rw-r--r--doc/libunbound.3.in14
-rw-r--r--doc/unbound-anchor.8.in2
-rw-r--r--doc/unbound-checkconf.8.in2
-rw-r--r--doc/unbound-control.8.in13
-rw-r--r--doc/unbound-host.1.in2
-rw-r--r--doc/unbound.8.in4
-rw-r--r--doc/unbound.conf.5.in117
-rw-r--r--doc/unbound.doxygen11
-rw-r--r--edns-subnet/addrtree.c2
-rw-r--r--edns-subnet/addrtree.h6
-rw-r--r--edns-subnet/subnetmod.c58
-rw-r--r--edns-subnet/subnetmod.h5
-rwxr-xr-xinstall-sh2
-rw-r--r--iterator/iter_scrub.c37
-rw-r--r--iterator/iter_utils.c123
-rw-r--r--iterator/iter_utils.h9
-rw-r--r--iterator/iterator.c80
-rw-r--r--iterator/iterator.h2
-rw-r--r--libunbound/libunbound.c15
-rw-r--r--libunbound/libworker.c4
-rw-r--r--libunbound/ubsyms.def1
-rw-r--r--libunbound/unbound.h15
-rwxr-xr-xltmain.sh6
-rw-r--r--pythonmod/doc/modules/functions.rst33
-rw-r--r--pythonmod/doc/modules/struct.rst30
-rw-r--r--pythonmod/examples/inplace_callbacks.py24
-rw-r--r--pythonmod/interface.i289
-rw-r--r--pythonmod/pythonmod.c157
-rw-r--r--pythonmod/pythonmod.h8
-rw-r--r--respip/respip.c2
-rw-r--r--services/authzone.c146
-rw-r--r--services/authzone.h4
-rw-r--r--services/cache/dns.c11
-rw-r--r--services/cache/infra.c2
-rw-r--r--services/listen_dnsport.c426
-rw-r--r--services/listen_dnsport.h130
-rw-r--r--services/mesh.c106
-rw-r--r--services/mesh.h12
-rw-r--r--services/outside_network.c65
-rw-r--r--services/outside_network.h2
-rw-r--r--sldns/wire2str.c4
-rw-r--r--smallapp/unbound-checkconf.c17
-rw-r--r--smallapp/unbound-control-setup.sh.in4
-rw-r--r--smallapp/unbound-control.c12
-rw-r--r--testcode/checklocks.c3
-rw-r--r--testcode/fake_event.c24
-rw-r--r--testcode/perf.c10
-rw-r--r--testcode/petal.c14
-rw-r--r--testcode/replay.c1
-rw-r--r--testcode/streamtcp.15
-rw-r--r--testcode/streamtcp.c69
-rw-r--r--testcode/testbound.c1
-rw-r--r--testcode/testpkts.c9
-rw-r--r--testcode/testpkts.h2
-rw-r--r--testcode/unitauth.c8
-rw-r--r--testcode/unitecs.c2
-rw-r--r--testdata/07-confroot.tdir/07-confroot.test2
-rw-r--r--testdata/auth_nsec3_wild.rpl203
-rw-r--r--testdata/black_ds_entry.rpl12
-rw-r--r--testdata/black_key_entry.rpl12
-rw-r--r--testdata/black_prime_entry.rpl8
-rw-r--r--testdata/clang-analysis.tdir/clang-analysis.test19
-rw-r--r--testdata/edns_cache.tdir/edns_cache.conf3
-rw-r--r--testdata/edns_cache.tdir/edns_cache.stub111
-rw-r--r--testdata/edns_cache.tdir/edns_cache.stub26
-rw-r--r--testdata/edns_cache.tdir/edns_cache.test4
-rw-r--r--testdata/edns_lame.tdir/edns_lame.conf15
-rw-r--r--testdata/edns_lame.tdir/edns_lame.dsc16
-rw-r--r--testdata/edns_lame.tdir/edns_lame.test24
-rw-r--r--testdata/edns_lame.tdir/edns_lame.testns14
-rw-r--r--testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post1
-rw-r--r--testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test4
-rw-r--r--testdata/fwd_no_cache.rpl78
-rw-r--r--testdata/iter_domain_sale.rpl4
-rw-r--r--testdata/iter_domain_sale_nschange.rpl8
-rw-r--r--testdata/iter_pcnamech.rpl6
-rw-r--r--testdata/iter_pcnamechrec.rpl6
-rw-r--r--testdata/net_signed_servfail.rpl2
-rwxr-xr-xtestdata/pylib.tdir/pylib.lookup.py10
-rw-r--r--testdata/pylib.tdir/pylib.test6
-rw-r--r--testdata/pymod.tdir/pymod.py38
-rw-r--r--testdata/pymod_thread.tdir/pymod_thread.py49
-rw-r--r--testdata/pymod_thread.tdir/pymod_thread.testns80
-rw-r--r--testdata/ssl_req_order.tdir/ssl_req_order.conf25
-rw-r--r--testdata/ssl_req_order.tdir/ssl_req_order.dsc16
-rw-r--r--testdata/ssl_req_order.tdir/ssl_req_order.post11
-rw-r--r--testdata/ssl_req_order.tdir/ssl_req_order.pre31
-rw-r--r--testdata/ssl_req_order.tdir/ssl_req_order.test341
-rw-r--r--testdata/ssl_req_order.tdir/ssl_req_order.testns74
-rw-r--r--testdata/ssl_req_order.tdir/unbound_server.key15
-rw-r--r--testdata/ssl_req_order.tdir/unbound_server.pem11
-rw-r--r--testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf25
-rw-r--r--testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc16
-rw-r--r--testdata/ssl_req_timeout.tdir/ssl_req_timeout.post12
-rw-r--r--testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre31
-rw-r--r--testdata/ssl_req_timeout.tdir/ssl_req_timeout.test136
-rw-r--r--testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns63
-rw-r--r--testdata/ssl_req_timeout.tdir/unbound_server.key15
-rw-r--r--testdata/ssl_req_timeout.tdir/unbound_server.pem11
-rw-r--r--testdata/stream_ssl.tdir/stream_ssl.post2
-rw-r--r--testdata/stream_ssl.tdir/stream_ssl.serv.conf3
-rw-r--r--testdata/stream_ssl.tdir/ticket1.dat1
-rw-r--r--testdata/stream_ssl.tdir/ticket2.dat1
-rw-r--r--testdata/subnet_max_source.crpl64
-rw-r--r--testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns2
-rw-r--r--testdata/tcp_req_order.tdir/tcp_req_order.conf22
-rw-r--r--testdata/tcp_req_order.tdir/tcp_req_order.dsc16
-rw-r--r--testdata/tcp_req_order.tdir/tcp_req_order.post11
-rw-r--r--testdata/tcp_req_order.tdir/tcp_req_order.pre31
-rw-r--r--testdata/tcp_req_order.tdir/tcp_req_order.test341
-rw-r--r--testdata/tcp_req_order.tdir/tcp_req_order.testns74
-rw-r--r--testdata/tcp_req_size.tdir/tcp_req_size.conf25
-rw-r--r--testdata/tcp_req_size.tdir/tcp_req_size.dsc16
-rw-r--r--testdata/tcp_req_size.tdir/tcp_req_size.post (renamed from testdata/edns_lame.tdir/edns_lame.post)3
-rw-r--r--testdata/tcp_req_size.tdir/tcp_req_size.pre (renamed from testdata/edns_lame.tdir/edns_lame.pre)9
-rw-r--r--testdata/tcp_req_size.tdir/tcp_req_size.test100
-rw-r--r--testdata/tcp_req_size.tdir/tcp_req_size.testns63
-rw-r--r--testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf22
-rw-r--r--testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc16
-rw-r--r--testdata/tcp_req_timeout.tdir/tcp_req_timeout.post12
-rw-r--r--testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre31
-rw-r--r--testdata/tcp_req_timeout.tdir/tcp_req_timeout.test136
-rw-r--r--testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns63
-rw-r--r--testdata/ttl_max.rpl10
-rw-r--r--util/config_file.c53
-rw-r--r--util/config_file.h32
-rw-r--r--util/configlexer.c6480
-rw-r--r--util/configlexer.lex22
-rw-r--r--util/configparser.c3035
-rw-r--r--util/configparser.h306
-rw-r--r--util/configparser.y213
-rw-r--r--util/data/msgencode.c7
-rw-r--r--util/data/msgreply.c12
-rw-r--r--util/edns.c2
-rw-r--r--util/fptr_wlist.c10
-rw-r--r--util/iana_ports.inc2
-rw-r--r--util/log.c29
-rw-r--r--util/log.h21
-rw-r--r--util/mini_event.c2
-rw-r--r--util/net_help.c168
-rw-r--r--util/net_help.h36
-rw-r--r--util/netevent.c101
-rw-r--r--util/netevent.h8
-rw-r--r--validator/val_neg.c1
-rw-r--r--winrc/combined.icobin10534 -> 45128 bytes
-rw-r--r--winrc/setup_left.bmpbin154542 -> 154542 bytes
-rw-r--r--winrc/setup_top.bmpbin25818 -> 25818 bytes
-rw-r--r--winrc/unbound16.icobin894 -> 0 bytes
-rw-r--r--winrc/unbound256.pngbin0 -> 6206 bytes
-rw-r--r--winrc/unbound32.icobin3262 -> 2238 bytes
-rw-r--r--winrc/unbound48.icobin7358 -> 0 bytes
-rw-r--r--winrc/unbound64.icobin12862 -> 0 bytes
-rw-r--r--winrc/unbound64.pngbin6240 -> 0 bytes
176 files changed, 11165 insertions, 5925 deletions
diff --git a/.gitignore b/.gitignore
index baf06faadb6e..f4527fd812eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,4 +36,7 @@
/streamtcp
/testbound
/unittest
+/contrib/libunbound.pc
+/contrib/unbound.service
+/contrib/unbound.socket
diff --git a/Makefile.in b/Makefile.in
index e8494484e2dd..1f035725dd28 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -482,9 +482,9 @@ doc:
if test -n "$(doxygen)"; then \
$(doxygen) $(srcdir)/doc/unbound.doxygen; fi
if test "$(WITH_PYUNBOUND)" = "yes" -o "$(WITH_PYTHONMODULE)" = "yes"; \
- then if test -x "`which sphinx-build 2>&1`"; then \
- sphinx-build -b html pythonmod/doc doc/html/pythonmod; \
- sphinx-build -b html libunbound/python/doc doc/html/pyunbound;\
+ then if test -x "`which sphinx-build-$(PY_MAJOR_VERSION) 2>&1`"; then \
+ sphinx-build-$(PY_MAJOR_VERSION) -b html pythonmod/doc doc/html/pythonmod; \
+ sphinx-build-$(PY_MAJOR_VERSION) -b html libunbound/python/doc doc/html/pyunbound;\
fi ;\
fi
@@ -613,6 +613,8 @@ depend:
-e 's?$$(srcdir)/util/configparser.c?util/configparser.c?g' \
-e 's?$$(srcdir)/util/configparser.h?util/configparser.h?g' \
-e 's?$$(srcdir)/dnstap/dnstap_config.h??g' \
+ -e 's?$$(srcdir)/dnstap/dnstap.pb-c.c?dnstap/dnstap.pb-c.c?g' \
+ -e 's?$$(srcdir)/dnstap/dnstap.pb-c.h?dnstap/dnstap.pb-c.h?g' \
-e 's?$$(srcdir)/dnscrypt/dnscrypt_config.h??g' \
-e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \
-e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \
@@ -634,214 +636,201 @@ depend:
# Dependencies
dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \
$(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/services/cache/dns.h $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
- $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/locks.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h
infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \
$(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \
$(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
$(srcdir)/sldns/pkthdr.h
rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/net_help.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h
as112.lo as112.o: $(srcdir)/util/as112.c $(srcdir)/util/as112.h
dname.lo dname.o: $(srcdir)/util/data/dname.c config.h $(srcdir)/util/data/dname.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/storage/lookup3.h \
- $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/storage/lookup3.h $(srcdir)/sldns/sbuffer.h
msgencode.lo msgencode.o: $(srcdir)/util/data/msgencode.c config.h $(srcdir)/util/data/msgencode.h \
$(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h \
- $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
+ $(srcdir)/sldns/sbuffer.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \
$(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/services/view.h
msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h \
- $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h
msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h $(srcdir)/util/fptr_wlist.h \
- $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h \
+ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/services/modstack.h
packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h \
- $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h
+ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h
iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterator/iterator.h \
$(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_hints.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \
- $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h \
- $(srcdir)/iterator/iter_priv.h $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h \
- $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h \
- $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \
- $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_utils.h \
+ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_donotq.h \
+ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h $(srcdir)/iterator/iter_priv.h \
+ $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \
+ $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \
+ $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h \
+ $(srcdir)/sldns/sbuffer.h
iter_delegpt.lo iter_delegpt.o: $(srcdir)/iterator/iter_delegpt.c config.h $(srcdir)/iterator/iter_delegpt.h \
$(srcdir)/util/log.h $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h
iter_donotq.lo iter_donotq.o: $(srcdir)/iterator/iter_donotq.c config.h $(srcdir)/iterator/iter_donotq.h \
$(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h \
$(srcdir)/util/config_file.h $(srcdir)/util/net_help.h
iter_fwd.lo iter_fwd.o: $(srcdir)/iterator/iter_fwd.c config.h $(srcdir)/iterator/iter_fwd.h \
$(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \
$(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
iter_hints.lo iter_hints.o: $(srcdir)/iterator/iter_hints.c config.h $(srcdir)/iterator/iter_hints.h \
$(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \
$(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \
+ $(srcdir)/sldns/wire2str.h
iter_priv.lo iter_priv.o: $(srcdir)/iterator/iter_priv.c config.h $(srcdir)/iterator/iter_priv.h \
$(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \
$(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h
iter_resptype.lo iter_resptype.o: $(srcdir)/iterator/iter_resptype.c config.h \
$(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \
$(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h
iter_scrub.lo iter_scrub.o: $(srcdir)/iterator/iter_scrub.c config.h $(srcdir)/iterator/iter_scrub.h \
$(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_priv.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/util/alloc.h \
- $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/iterator/iter_priv.h $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/util/alloc.h $(srcdir)/sldns/sbuffer.h
iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/iterator/iter_utils.h \
$(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \
$(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_hints.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_hints.h \
$(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \
$(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_priv.h \
$(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/dns.h \
- $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h \
- $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \
- $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \
- $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/sbuffer.h \
- $(srcdir)/sldns/str2wire.h
+ $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \
+ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/validator/val_anchor.h \
+ $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_utils.h \
+ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h
listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \
$(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \
- $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \
+ $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/services/modstack.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h
localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \
- $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \
$(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/as112.h
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h
mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/services/modstack.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h \
- $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h \
- $(srcdir)/util/edns.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/localzone.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/data/dname.h $(srcdir)/respip/respip.h
+ $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h $(srcdir)/services/outbound_list.h \
+ $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h $(srcdir)/util/edns.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/sldns/wire2str.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/services/view.h $(srcdir)/util/data/dname.h $(srcdir)/respip/respip.h \
+ $(srcdir)/services/listen_dnsport.h
modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \
$(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \
- $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \
- $(srcdir)/validator/val_utils.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(PYTHONMOD_HEADER) \
- $(srcdir)/cachedb/cachedb.h $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h \
- $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h \
- $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h
-view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/services/localzone.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
$(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \
+ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \
+ $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \
+ $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h
+view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h
outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \
$(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \
$(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
+ $(srcdir)/dnscrypt/dnscrypt.h \
$(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \
- $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/dnstap/dnstap.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h \
+ $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \
+ $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/dnstap/dnstap.h \
alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/modstack.h
+ $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
+ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h
config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/util/log.h \
$(srcdir)/util/configyyrename.h $(srcdir)/util/config_file.h util/configparser.h \
$(srcdir)/util/net_help.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \
- $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
- $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h \
- $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h \
- $(srcdir)/sldns/parseutil.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/iana_ports.inc
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h $(srcdir)/util/fptr_wlist.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h \
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \
+ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/iana_ports.inc
configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \
$(srcdir)/util/config_file.h util/configparser.h
configparser.lo configparser.o: util/configparser.c config.h $(srcdir)/util/configyyrename.h \
$(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h
shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_main.c config.h $(srcdir)/util/shm_side/shm_main.h \
$(srcdir)/libunbound/unbound.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
- $(srcdir)/daemon/worker.h \
- $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/util/module.h \
- $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
- $(srcdir)/util/rtt.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h
+ $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
+ $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \
+ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \
+ $(srcdir)/util/timehist.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
+ $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \
+ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h
authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/services/authzone.h \
- $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \
$(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \
$(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \
$(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
@@ -852,10 +841,9 @@ authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/service
$(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_secalgo.h
fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
$(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
$(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \
$(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \
@@ -867,299 +855,252 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/
$(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \
$(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \
$(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \
- $(PYTHONMOD_HEADER) $(srcdir)/cachedb/cachedb.h $(srcdir)/ipsecmod/ipsecmod.h \
- $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h $(srcdir)/edns-subnet/addrtree.h \
- $(srcdir)/edns-subnet/edns-subnet.h
-locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h
-log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/sldns/sbuffer.h
+ $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h
+locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h
+log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h
mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
$(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/modstack.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
+ $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
+ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h
module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h \
$(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \
$(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
$(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
$(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/dnstap/dnstap.h \
- \
+ $(srcdir)/services/listen_dnsport.h \
net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \
+ $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \
random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h
rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
$(srcdir)/services/modstack.h
regional.lo regional.o: $(srcdir)/util/regional.c config.h $(srcdir)/util/log.h $(srcdir)/util/regional.h
rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/iterator/iterator.h \
$(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h
-edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/config_file.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/regional.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h
+edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
+ $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h
dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/storage/dnstree.h \
$(srcdir)/util/rbtree.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/net_help.h
+ $(srcdir)/util/log.h $(srcdir)/util/net_help.h
lookup3.lo lookup3.o: $(srcdir)/util/storage/lookup3.c config.h $(srcdir)/util/storage/lookup3.h
lruhash.lo lruhash.o: $(srcdir)/util/storage/lruhash.c config.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
$(srcdir)/services/modstack.h
slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/util/storage/slabhash.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h
tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(srcdir)/util/regional.h \
$(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/tcp_conn_limit.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/services/localzone.h \
+ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h
timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h
tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
- $(srcdir)/util/ub_event.h
+ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h
ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/tube.h \
- $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
+ $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \
$(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
- $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \
- $(srcdir)/util/rbtree.h
+ $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h
autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \
$(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_anchor.h \
- $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_sigcrypt.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \
- $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_utils.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
$(srcdir)/services/modstack.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
$(srcdir)/validator/val_kcache.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \
$(srcdir)/sldns/keyraw.h \
val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \
- $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/autotrust.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/validator/autotrust.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h \
$(srcdir)/util/config_file.h $(srcdir)/util/as112.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h \
$(srcdir)/sldns/str2wire.h
validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/validator/validator.h \
$(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \
$(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_kcache.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_nsec.h \
$(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_neg.h $(srcdir)/validator/val_sigcrypt.h \
$(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \
$(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \
$(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
+ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
$(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h
val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/validator/val_kcache.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h
+ $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h
val_kentry.lo val_kentry.o: $(srcdir)/validator/val_kentry.c config.h $(srcdir)/validator/val_kentry.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h \
- $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \
val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h \
- $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \
+ $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \
$(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
$(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h
val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \
$(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_secalgo.h \
- $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \
- $(srcdir)/validator/val_kentry.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
- $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/validator/val_nsec.h \
- $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/validator.h \
+ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kentry.h \
+ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/validator/val_nsec.h $(srcdir)/sldns/sbuffer.h
val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c config.h $(srcdir)/validator/val_nsec.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/rrset.h \
- $(srcdir)/util/storage/slabhash.h
+ $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h
val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \
+ $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \
$(srcdir)/sldns/sbuffer.h \
val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \
$(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/validator/val_utils.h $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \
+ $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \
$(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \
val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_anchor.h \
- $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_neg.h \
- $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \
- $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_kentry.h \
+ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/wire2str.h \
+ $(srcdir)/sldns/parseutil.h
dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(srcdir)/util/module.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h
-edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h \
- $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h
-subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h $(srcdir)/edns-subnet/subnetmod.h \
- $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \
- $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/services/modstack.h \
- $(srcdir)/services/cache/dns.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/sldns/str2wire.h
+edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h
+subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h
addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \
$(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h
-subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h \
- $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \
- $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h
-cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.h $(srcdir)/util/module.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/cachedb/redis.h $(srcdir)/util/regional.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/data/msgencode.h \
- $(srcdir)/services/cache/dns.h $(srcdir)/validator/val_neg.h $(srcdir)/util/rbtree.h \
- $(srcdir)/validator/val_secalgo.h $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h \
- $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h
-redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h $(srcdir)/cachedb/redis.h $(srcdir)/cachedb/cachedb.h \
- $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h
+subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h
+cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h
+redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h
respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/dnstree.h \
- $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h \
+ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
$(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/respip/respip.h
checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
$(srcdir)/testcode/checklocks.h
-dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \
+dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \
$(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/slabhash.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/lookup3.h
+ $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/dnstap/dnstap.h \
+ dnstap/dnstap.pb-c.h
+dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \
+
ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \
$(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \
- $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \
- $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \
- $(srcdir)/sldns/wire2str.h
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h \
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \
+ $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h
ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h \
$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \
- $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h
unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/testcode/unitmain.h $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h \
- $(srcdir)/sldns/rrdef.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \
+ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h
unitdname.lo unitdname.o: $(srcdir)/testcode/unitdname.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h
+ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h
unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir)/testcode/unitmain.h \
- $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/storage/slabhash.h
+ $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h
unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \
$(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \
- $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h \
- $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h \
- $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/random.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \
- $(srcdir)/services/view.h
+ $(srcdir)/util/log.h \
+ $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \
+ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h $(srcdir)/services/cache/infra.h \
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/random.h $(srcdir)/respip/respip.h \
+ $(srcdir)/services/localzone.h $(srcdir)/services/view.h
unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \
$(srcdir)/testcode/unitmain.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h \
- $(srcdir)/util/data/dname.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
- $(srcdir)/testcode/readhex.h $(srcdir)/testcode/testpkts.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \
- $(srcdir)/sldns/wire2str.h
+ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/testcode/readhex.h \
+ $(srcdir)/testcode/testpkts.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h
unitneg.lo unitneg.o: $(srcdir)/testcode/unitneg.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/dname.h $(srcdir)/testcode/unitmain.h \
- $(srcdir)/validator/val_neg.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h
+ $(srcdir)/util/data/dname.h $(srcdir)/testcode/unitmain.h $(srcdir)/validator/val_neg.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/sldns/rrdef.h
unitregional.lo unitregional.o: $(srcdir)/testcode/unitregional.c config.h $(srcdir)/testcode/unitmain.h \
$(srcdir)/util/log.h $(srcdir)/util/regional.h
unitslabhash.lo unitslabhash.o: $(srcdir)/testcode/unitslabhash.c config.h $(srcdir)/testcode/unitmain.h \
- $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h
+ $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h
unitverify.lo unitverify.o: $(srcdir)/testcode/unitverify.c config.h $(srcdir)/util/log.h \
$(srcdir)/testcode/unitmain.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h \
$(srcdir)/validator/val_secalgo.h $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_nsec3.h \
$(srcdir)/util/rbtree.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
$(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \
@@ -1173,49 +1114,42 @@ testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcod
$(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h
unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \
$(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h
-unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h $(srcdir)/util/log.h $(srcdir)/util/module.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h $(srcdir)/edns-subnet/addrtree.h \
- $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/edns-subnet.h
+unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h
unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \
- $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \
$(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \
$(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \
- $(srcdir)/testcode/unitmain.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h \
- $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/testcode/unitmain.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \
+ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h
acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \
$(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \
- $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \
- $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/module.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \
+ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h \
$(srcdir)/daemon/cachedump.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \
$(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \
- $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \
- $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \
- $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \
- $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \
- $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h \
- $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \
- $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h
-daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \
- $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
- $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h \
$(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \
$(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \
- $(srcdir)/daemon/remote.h \
+ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
+ $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \
+ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h \
+ $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/wire2str.h \
+ $(srcdir)/sldns/str2wire.h
+daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \
+ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
+ $(srcdir)/daemon/worker.h \
+ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \
+ $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \
$(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \
$(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \
@@ -1226,11 +1160,10 @@ remote.lo remote.o: $(srcdir)/daemon/remote.c config.h \
$(srcdir)/daemon/remote.h \
$(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \
- $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \
+ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
$(srcdir)/services/modstack.h $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h \
$(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
@@ -1244,35 +1177,34 @@ remote.lo remote.o: $(srcdir)/daemon/remote.c config.h \
stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \
$(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
- $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \
+ $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
$(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h \
$(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \
$(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
$(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \
- $(srcdir)/validator/val_neg.h
+ $(srcdir)/validator/val_neg.h \
+
unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \
- $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
- $(srcdir)/daemon/remote.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
+ $(srcdir)/daemon/remote.h \
$(srcdir)/util/config_file.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \
$(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
- $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h
+ $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h \
+ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/ub_event.h
worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
$(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \
- $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \
+ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
$(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \
$(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \
$(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \
@@ -1286,27 +1218,26 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr
$(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h
testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \
$(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \
$(srcdir)/daemon/remote.h \
- $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/daemon/daemon.h \
- $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \
- $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h
+ $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/util/log.h \
+ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
+ $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h
testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \
$(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \
$(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h
worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
$(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \
- $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \
+ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
$(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \
$(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \
$(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \
@@ -1320,19 +1251,18 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr
$(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h
acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \
$(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \
- $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \
- $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/module.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
+ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \
+ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h
daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \
- $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
- $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \
- $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \
- $(srcdir)/daemon/remote.h \
+ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
+ $(srcdir)/daemon/worker.h \
+ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \
+ $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \
$(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \
$(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \
@@ -1342,27 +1272,25 @@ daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \
stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \
$(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \
- $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \
+ $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
$(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h \
$(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \
$(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \
$(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
$(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \
- $(srcdir)/validator/val_neg.h
+ $(srcdir)/validator/val_neg.h \
+
replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \
$(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \
$(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h
fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/testcode/fake_event.h \
$(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \
$(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \
$(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \
$(srcdir)/util/rbtree.h $(srcdir)/services/cache/infra.h \
@@ -1370,127 +1298,122 @@ fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/t
$(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
$(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h
lock_verify.lo lock_verify.o: $(srcdir)/testcode/lock_verify.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h
+ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
+ $(srcdir)/services/modstack.h
pktview.lo pktview.o: $(srcdir)/testcode/pktview.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h \
- $(srcdir)/testcode/readhex.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h $(srcdir)/testcode/readhex.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/sldns/parseutil.h
readhex.lo readhex.o: $(srcdir)/testcode/readhex.c config.h $(srcdir)/testcode/readhex.h $(srcdir)/util/log.h \
$(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h
memstats.lo memstats.o: $(srcdir)/testcode/memstats.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \
- $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
- $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h
+ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \
+ $(srcdir)/services/modstack.h
unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c config.h $(srcdir)/util/log.h \
$(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \
- $(srcdir)/util/regional.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \
- $(srcdir)/iterator/iter_fwd.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \
- $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/services/modstack.h $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h \
- $(PYTHONMOD_HEADER) $(srcdir)/edns-subnet/subnet-whitelist.h
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \
+ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \
+ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \
+ $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \
+ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \
+ $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER)
worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/worker.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/tube.h $(srcdir)/services/mesh.h
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
+ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
+ $(srcdir)/services/mesh.h
context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbound/context.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \
- $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
+ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \
+ $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
+ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \
+ $(srcdir)/sldns/sbuffer.h
libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \
$(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \
- $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \
- $(srcdir)/services/modstack.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/libunbound/libworker.h $(srcdir)/util/config_file.h $(srcdir)/util/module.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h \
- $(srcdir)/util/ub_event.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
- $(srcdir)/services/view.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \
- $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/authzone.h \
- $(srcdir)/services/mesh.h $(srcdir)/sldns/sbuffer.h
+ $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/libworker.h \
+ $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h \
+ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \
+ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/services/cache/rrset.h \
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \
+ $(srcdir)/sldns/sbuffer.h
libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h \
$(srcdir)/libunbound/libworker.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/libunbound/context.h \
- $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h \
- $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \
- $(srcdir)/services/outside_network.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h \
- $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/services/localzone.h \
- $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h \
- $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h $(srcdir)/services/authzone.h \
- $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/regional.h $(srcdir)/util/random.h \
- $(srcdir)/util/config_file.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \
+ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h \
+ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \
+ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h \
+ $(srcdir)/services/authzone.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/regional.h \
+ $(srcdir)/util/random.h $(srcdir)/util/config_file.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/net_help.h \
$(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h \
$(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/str2wire.h
unbound-host.lo unbound-host.o: $(srcdir)/smallapp/unbound-host.c config.h $(srcdir)/libunbound/unbound.h \
$(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \
asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \
- $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \
- $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \
+ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \
$(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h \
streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \
+ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgparse.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \
-perf.lo perf.o: $(srcdir)/testcode/perf.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h \
- $(srcdir)/testcode/checklocks.h $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/packed_rrset.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h \
- $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h
+perf.lo perf.o: $(srcdir)/testcode/perf.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h
delayer.lo delayer.o: $(srcdir)/testcode/delayer.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \
$(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h
unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h \
- $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/net_help.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/libunbound/unbound.h \
- $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/pkthdr.h
+ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \
+ $(srcdir)/util/shm_side/shm_main.h $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h \
+ $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/pkthdr.h
unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \
$(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h \
petal.lo petal.o: $(srcdir)/testcode/petal.c config.h \
pythonmod_utils.lo pythonmod_utils.o: $(srcdir)/pythonmod/pythonmod_utils.c config.h $(srcdir)/util/module.h \
- $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
- $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
- $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h \
- $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \
- $(srcdir)/util/regional.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h \
+ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \
+ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h \
win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc.h $(srcdir)/winrc/w_inst.h \
- $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \
- $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
- $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \
- $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
- $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \
- $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \
- $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \
- $(srcdir)/daemon/remote.h \
+ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
+ $(srcdir)/daemon/worker.h \
+ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
+ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
+ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \
+ $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \
$(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h
w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h
unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \
@@ -1513,8 +1436,7 @@ parseutil.lo parseutil.o: $(srcdir)/sldns/parseutil.c config.h $(srcdir)/sldns/p
rrdef.lo rrdef.o: $(srcdir)/sldns/rrdef.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h
str2wire.lo str2wire.o: $(srcdir)/sldns/str2wire.c config.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \
$(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h
-ctime_r.lo ctime_r.o: $(srcdir)/compat/ctime_r.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
- $(srcdir)/testcode/checklocks.h
+ctime_r.lo ctime_r.o: $(srcdir)/compat/ctime_r.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h
fake-rfc2553.lo fake-rfc2553.o: $(srcdir)/compat/fake-rfc2553.c $(srcdir)/compat/fake-rfc2553.h config.h
gmtime_r.lo gmtime_r.o: $(srcdir)/compat/gmtime_r.c config.h
inet_aton.lo inet_aton.o: $(srcdir)/compat/inet_aton.c config.h
diff --git a/aclocal.m4 b/aclocal.m4
index 002c4723b6b2..dd1b8658c7b8 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -9390,7 +9390,7 @@ AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2017 Free Software Foundation, Inc.
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -9421,7 +9421,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 2006-2017 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/compat/arc4random.c b/compat/arc4random.c
index bcef0ec90f8a..b536d3143d42 100644
--- a/compat/arc4random.c
+++ b/compat/arc4random.c
@@ -140,6 +140,7 @@ nodevrandom:
static inline void
_rs_init(u_char *buf, size_t n)
{
+ assert(buf);
if (n < KEYSZ + IVSZ)
return;
diff --git a/config.guess b/config.guess
index 2e9ad7fe8189..7ea49fadcd8b 100755
--- a/config.guess
+++ b/config.guess
@@ -1,4 +1,4 @@
-#! /bin/sh
+#!/usr/bin/sh
# Attempt to guess a canonical system name.
# Copyright 1992-2016 Free Software Foundation, Inc.
diff --git a/config.h.in b/config.h.in
index 2f98f193c062..545536d63126 100644
--- a/config.h.in
+++ b/config.h.in
@@ -178,6 +178,9 @@
/* Define to 1 if you have the <event.h> header file. */
#undef HAVE_EVENT_H
+/* Define to 1 if you have the `EVP_aes_256_cbc' function. */
+#undef HAVE_EVP_AES_256_CBC
+
/* Define to 1 if you have the `EVP_cleanup' function. */
#undef HAVE_EVP_CLEANUP
@@ -187,6 +190,9 @@
/* Define to 1 if you have the `EVP_dss1' function. */
#undef HAVE_EVP_DSS1
+/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */
+#undef HAVE_EVP_ENCRYPTINIT_EX
+
/* Define to 1 if you have the `EVP_MD_CTX_new' function. */
#undef HAVE_EVP_MD_CTX_NEW
@@ -259,6 +265,9 @@
/* Define to 1 if you have the <hiredis/hiredis.h> header file. */
#undef HAVE_HIREDIS_HIREDIS_H
+/* Define to 1 if you have the `HMAC_Init_ex' function. */
+#undef HAVE_HMAC_INIT_EX
+
/* If you have HMAC_Update */
#undef HAVE_HMAC_UPDATE
@@ -451,9 +460,15 @@
/* Define if you have the SSL libraries installed. */
#undef HAVE_SSL
+/* Define to 1 if you have the `SSL_CTX_set_ciphersuites' function. */
+#undef HAVE_SSL_CTX_SET_CIPHERSUITES
+
/* Define to 1 if you have the `SSL_CTX_set_security_level' function. */
#undef HAVE_SSL_CTX_SET_SECURITY_LEVEL
+/* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_cb' function. */
+#undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_CB
+
/* Define to 1 if you have the `SSL_get0_peername' function. */
#undef HAVE_SSL_GET0_PEERNAME
@@ -586,6 +601,9 @@
/* Define to 1 if you have the <ws2tcpip.h> header file. */
#undef HAVE_WS2TCPIP_H
+/* Define to 1 if you have the `X509_VERIFY_PARAM_set1_host' function. */
+#undef HAVE_X509_VERIFY_PARAM_SET1_HOST
+
/* Define to 1 if you have the `_beginthreadex' function. */
#undef HAVE__BEGINTHREADEX
diff --git a/config.sub b/config.sub
index cc69b06765a3..ba15a57a5cf3 100755
--- a/config.sub
+++ b/config.sub
@@ -1,4 +1,4 @@
-#! /bin/sh
+#!/usr/bin/sh
# Configuration validation subroutine script.
# Copyright 1992-2016 Free Software Foundation, Inc.
diff --git a/configure b/configure
index 5c14d8767602..6d8611192abf 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for unbound 1.8.1.
+# Generated by GNU Autoconf 2.69 for unbound 1.9.0.
#
# Report bugs to <unbound-bugs@nlnetlabs.nl>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='unbound'
PACKAGE_TARNAME='unbound'
-PACKAGE_VERSION='1.8.1'
-PACKAGE_STRING='unbound 1.8.1'
+PACKAGE_VERSION='1.9.0'
+PACKAGE_STRING='unbound 1.9.0'
PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl'
PACKAGE_URL=''
@@ -1440,7 +1440,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures unbound 1.8.1 to adapt to many kinds of systems.
+\`configure' configures unbound 1.9.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1505,7 +1505,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of unbound 1.8.1:";;
+ short | recursive ) echo "Configuration of unbound 1.9.0:";;
esac
cat <<\_ACEOF
@@ -1722,7 +1722,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-unbound configure 1.8.1
+unbound configure 1.9.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2431,7 +2431,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by unbound $as_me 1.8.1, which was
+It was created by unbound $as_me 1.9.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2781,14 +2781,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
UNBOUND_VERSION_MAJOR=1
-UNBOUND_VERSION_MINOR=8
+UNBOUND_VERSION_MINOR=9
-UNBOUND_VERSION_MICRO=1
+UNBOUND_VERSION_MICRO=0
-LIBUNBOUND_CURRENT=8
-LIBUNBOUND_REVISION=1
-LIBUNBOUND_AGE=0
+LIBUNBOUND_CURRENT=9
+LIBUNBOUND_REVISION=0
+LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
# 1.0.2 had 0:14:0
@@ -2852,6 +2852,9 @@ LIBUNBOUND_AGE=0
# 1.7.3 had 7:11:5
# 1.8.0 had 8:0:0 # changes the event callback function signature
# 1.8.1 had 8:1:0
+# 1.8.2 had 8:2:0
+# 1.8.3 had 8:3:0
+# 1.8.4 had 9:0:1 # add ub_ctx_set_tls
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -17990,7 +17993,7 @@ fi
done
-for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify
+for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -18006,7 +18009,7 @@ done
# these check_funcs need -lssl
BAKLIBS="$LIBS"
LIBS="-lssl $LIBS"
-for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername
+for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -21145,7 +21148,7 @@ _ACEOF
-version=1.8.1
+version=1.9.0
date=`date +'%b %e, %Y'`
@@ -21664,7 +21667,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by unbound $as_me 1.8.1, which was
+This file was extended by unbound $as_me 1.9.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -21730,7 +21733,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-unbound config.status 1.8.1
+unbound config.status 1.9.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 48bdb8fab6e4..e071dc398989 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10,16 +10,16 @@ sinclude(dnscrypt/dnscrypt.m4)
# must be numbers. ac_defun because of later processing
m4_define([VERSION_MAJOR],[1])
-m4_define([VERSION_MINOR],[8])
-m4_define([VERSION_MICRO],[1])
+m4_define([VERSION_MINOR],[9])
+m4_define([VERSION_MICRO],[0])
AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound)
AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
-LIBUNBOUND_CURRENT=8
-LIBUNBOUND_REVISION=1
-LIBUNBOUND_AGE=0
+LIBUNBOUND_CURRENT=9
+LIBUNBOUND_REVISION=0
+LIBUNBOUND_AGE=1
# 1.0.0 had 0:12:0
# 1.0.1 had 0:13:0
# 1.0.2 had 0:14:0
@@ -83,6 +83,9 @@ LIBUNBOUND_AGE=0
# 1.7.3 had 7:11:5
# 1.8.0 had 8:0:0 # changes the event callback function signature
# 1.8.1 had 8:1:0
+# 1.8.2 had 8:2:0
+# 1.8.3 had 8:3:0
+# 1.8.4 had 9:0:1 # add ub_ctx_set_tls
# Current -- the number of the binary API that we're implementing
# Revision -- which iteration of the implementation of the binary
@@ -778,12 +781,12 @@ else
AC_MSG_RESULT([no])
fi
AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h],,, [AC_INCLUDES_DEFAULT])
-AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify])
+AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex])
# these check_funcs need -lssl
BAKLIBS="$LIBS"
LIBS="-lssl $LIBS"
-AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername])
+AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites])
LIBS="$BAKLIBS"
AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
diff --git a/contrib/README b/contrib/README
index 2b5e754247ac..262ccc7db42d 100644
--- a/contrib/README
+++ b/contrib/README
@@ -38,3 +38,5 @@ distribution but may be helpful.
* unbound-querycachedb.py: utility to show data stored in cachedb backend
for a particular query name and type. It requires dnspython and (for
redis backend) redis Python modules.
+* unbound-fuzzme.patch: adds unbound-fuzzme program that parses a packet from
+ stdin. Used with fuzzers, patch from Jacob Hoffman-Andrews.
diff --git a/contrib/fastrpz.patch b/contrib/fastrpz.patch
index 590f843d9fa5..0291ea3d81a4 100644
--- a/contrib/fastrpz.patch
+++ b/contrib/fastrpz.patch
@@ -3,7 +3,7 @@ Author: fastrpz@farsightsecurity.com
---
Index: unboundfastrpz/Makefile.in
===================================================================
---- unboundfastrpz/Makefile.in (revision 4923)
+--- unboundfastrpz/Makefile.in (revision 5073)
+++ unboundfastrpz/Makefile.in (working copy)
@@ -23,6 +23,8 @@
CHECKLOCK_OBJ=@CHECKLOCK_OBJ@
@@ -46,9 +46,9 @@ Index: unboundfastrpz/Makefile.in
pythonmod/interface.h \
Index: unboundfastrpz/config.h.in
===================================================================
---- unboundfastrpz/config.h.in (revision 4923)
+--- unboundfastrpz/config.h.in (revision 5073)
+++ unboundfastrpz/config.h.in (working copy)
-@@ -1272,4 +1272,11 @@
+@@ -1293,4 +1293,11 @@
/** the version of unbound-control that this software implements */
#define UNBOUND_CONTROL_VERSION 1
@@ -63,7 +63,7 @@ Index: unboundfastrpz/config.h.in
+#undef ENABLE_FASTRPZ
Index: unboundfastrpz/configure.ac
===================================================================
---- unboundfastrpz/configure.ac (revision 4923)
+--- unboundfastrpz/configure.ac (revision 5073)
+++ unboundfastrpz/configure.ac (working copy)
@@ -6,6 +6,7 @@
sinclude(acx_python.m4)
@@ -73,7 +73,7 @@ Index: unboundfastrpz/configure.ac
sinclude(dnscrypt/dnscrypt.m4)
# must be numbers. ac_defun because of later processing
-@@ -1565,6 +1566,9 @@
+@@ -1575,6 +1576,9 @@
;;
esac
@@ -85,7 +85,7 @@ Index: unboundfastrpz/configure.ac
# on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
Index: unboundfastrpz/daemon/daemon.c
===================================================================
---- unboundfastrpz/daemon/daemon.c (revision 4923)
+--- unboundfastrpz/daemon/daemon.c (revision 5073)
+++ unboundfastrpz/daemon/daemon.c (working copy)
@@ -91,6 +91,9 @@
#include "sldns/keyraw.h"
@@ -124,7 +124,7 @@ Index: unboundfastrpz/daemon/daemon.c
Index: unboundfastrpz/daemon/daemon.h
===================================================================
---- unboundfastrpz/daemon/daemon.h (revision 4923)
+--- unboundfastrpz/daemon/daemon.h (revision 5073)
+++ unboundfastrpz/daemon/daemon.h (working copy)
@@ -136,6 +136,11 @@
/** the dnscrypt environment */
@@ -140,7 +140,7 @@ Index: unboundfastrpz/daemon/daemon.h
/**
Index: unboundfastrpz/daemon/worker.c
===================================================================
---- unboundfastrpz/daemon/worker.c (revision 4923)
+--- unboundfastrpz/daemon/worker.c (revision 5073)
+++ unboundfastrpz/daemon/worker.c (working copy)
@@ -75,6 +75,9 @@
#include "libunbound/context.h"
@@ -268,9 +268,9 @@ Index: unboundfastrpz/daemon/worker.c
verbose(VERB_ALGO, "answer norec from cache -- "
Index: unboundfastrpz/doc/unbound.conf.5.in
===================================================================
---- unboundfastrpz/doc/unbound.conf.5.in (revision 4923)
+--- unboundfastrpz/doc/unbound.conf.5.in (revision 5073)
+++ unboundfastrpz/doc/unbound.conf.5.in (working copy)
-@@ -1728,6 +1728,81 @@
+@@ -1781,6 +1781,81 @@
used by dns64 processing instead. Can be entered multiple times, list a
new domain for which it applies, one per line. Applies also to names
underneath the name given.
@@ -2885,7 +2885,7 @@ Index: unboundfastrpz/fastrpz/rpz.m4
+])
Index: unboundfastrpz/iterator/iterator.c
===================================================================
---- unboundfastrpz/iterator/iterator.c (revision 4923)
+--- unboundfastrpz/iterator/iterator.c (revision 5073)
+++ unboundfastrpz/iterator/iterator.c (working copy)
@@ -68,6 +68,9 @@
#include "sldns/str2wire.h"
@@ -2895,9 +2895,9 @@ Index: unboundfastrpz/iterator/iterator.c
+#include "fastrpz/rpz.h"
+#endif
- int
- iter_init(struct module_env* env, int id)
-@@ -525,6 +528,23 @@
+ /* in msec */
+ int UNKNOWN_SERVER_NICENESS = 376;
+@@ -551,6 +554,23 @@
if(ntohs(r->rk.type) == LDNS_RR_TYPE_CNAME &&
query_dname_compare(*mname, r->rk.dname) == 0 &&
!iter_find_rrset_in_prepend_answer(iq, r)) {
@@ -2921,7 +2921,7 @@ Index: unboundfastrpz/iterator/iterator.c
/* Add this relevant CNAME rrset to the prepend list.*/
if(!iter_add_prepend_answer(qstate, iq, r))
return 0;
-@@ -533,6 +553,9 @@
+@@ -559,6 +579,9 @@
/* Other rrsets in the section are ignored. */
}
@@ -2931,7 +2931,7 @@ Index: unboundfastrpz/iterator/iterator.c
/* add authority rrsets to authority prepend, for wildcarded CNAMEs */
for(i=msg->rep->an_numrrsets; i<msg->rep->an_numrrsets +
msg->rep->ns_numrrsets; i++) {
-@@ -1216,6 +1239,7 @@
+@@ -1195,6 +1218,7 @@
uint8_t* delname;
size_t delnamelen;
struct dns_msg* msg = NULL;
@@ -2939,7 +2939,7 @@ Index: unboundfastrpz/iterator/iterator.c
log_query_info(VERB_DETAIL, "resolving", &qstate->qinfo);
/* check effort */
-@@ -1302,8 +1326,7 @@
+@@ -1281,8 +1305,7 @@
}
if(msg) {
/* handle positive cache response */
@@ -2949,7 +2949,7 @@ Index: unboundfastrpz/iterator/iterator.c
if(verbosity >= VERB_ALGO) {
log_dns_msg("msg from cache lookup", &msg->qinfo,
msg->rep);
-@@ -1311,7 +1334,22 @@
+@@ -1290,7 +1313,22 @@
(int)msg->rep->ttl,
(int)msg->rep->prefetch_ttl);
}
@@ -2972,7 +2972,7 @@ Index: unboundfastrpz/iterator/iterator.c
if(type == RESPONSE_TYPE_CNAME) {
uint8_t* sname = 0;
size_t slen = 0;
-@@ -2716,6 +2754,62 @@
+@@ -2694,6 +2732,62 @@
sock_list_insert(&qstate->reply_origin,
&qstate->reply->addr, qstate->reply->addrlen,
qstate->region);
@@ -3035,7 +3035,7 @@ Index: unboundfastrpz/iterator/iterator.c
if(iq->minimisation_state != DONOT_MINIMISE_STATE
&& !(iq->chase_flags & BIT_RD)) {
if(FLAGS_GET_RCODE(iq->response->rep->flags) !=
-@@ -3462,6 +3556,10 @@
+@@ -3440,6 +3534,10 @@
* but only if we did recursion. The nonrecursion referral
* from cache does not need to be stored in the msg cache. */
if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) {
@@ -3046,7 +3046,7 @@ Index: unboundfastrpz/iterator/iterator.c
iter_dns_store(qstate->env, &qstate->qinfo,
iq->response->rep, 0, qstate->prefetch_leeway,
iq->dp&&iq->dp->has_parent_side_NS,
-@@ -3468,6 +3566,34 @@
+@@ -3446,6 +3544,34 @@
qstate->region, qstate->query_flags);
}
}
@@ -3083,7 +3083,7 @@ Index: unboundfastrpz/iterator/iterator.c
return 0;
Index: unboundfastrpz/iterator/iterator.h
===================================================================
---- unboundfastrpz/iterator/iterator.h (revision 4923)
+--- unboundfastrpz/iterator/iterator.h (revision 5073)
+++ unboundfastrpz/iterator/iterator.h (working copy)
@@ -386,6 +386,16 @@
*/
@@ -3104,9 +3104,9 @@ Index: unboundfastrpz/iterator/iterator.h
* the QNAME minimisation QTYPE is blocked. */
Index: unboundfastrpz/services/cache/dns.c
===================================================================
---- unboundfastrpz/services/cache/dns.c (revision 4923)
+--- unboundfastrpz/services/cache/dns.c (revision 5073)
+++ unboundfastrpz/services/cache/dns.c (working copy)
-@@ -928,6 +928,14 @@
+@@ -939,6 +939,14 @@
struct regional* region, uint32_t flags)
{
struct reply_info* rep = NULL;
@@ -3123,7 +3123,7 @@ Index: unboundfastrpz/services/cache/dns.c
if(!rep)
Index: unboundfastrpz/services/mesh.c
===================================================================
---- unboundfastrpz/services/mesh.c (revision 4923)
+--- unboundfastrpz/services/mesh.c (revision 5073)
+++ unboundfastrpz/services/mesh.c (working copy)
@@ -60,6 +60,9 @@
#include "sldns/wire2str.h"
@@ -3133,9 +3133,9 @@ Index: unboundfastrpz/services/mesh.c
+#include "fastrpz/rpz.h"
+#endif
#include "respip/respip.h"
+ #include "services/listen_dnsport.h"
- /** subtract timers and the values do not overflow or become negative */
-@@ -1057,6 +1060,13 @@
+@@ -1072,6 +1075,13 @@
else secure = 0;
if(!rep && rcode == LDNS_RCODE_NOERROR)
rcode = LDNS_RCODE_SERVFAIL;
@@ -3149,7 +3149,7 @@ Index: unboundfastrpz/services/mesh.c
/* send the reply */
/* We don't reuse the encoded answer if either the previous or current
* response has a local alias. We could compare the alias records
-@@ -1230,6 +1240,7 @@
+@@ -1247,6 +1257,7 @@
key.s.is_valrec = valrec;
key.s.qinfo = *qinfo;
key.s.query_flags = qflags;
@@ -3157,7 +3157,7 @@ Index: unboundfastrpz/services/mesh.c
/* We are searching for a similar mesh state when we DO want to
* aggregate the state. Thus unique is set to NULL. (default when we
* desire aggregation).*/
-@@ -1276,6 +1287,10 @@
+@@ -1293,6 +1304,10 @@
if(!r)
return 0;
r->query_reply = *rep;
@@ -3170,9 +3170,9 @@ Index: unboundfastrpz/services/mesh.c
r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
Index: unboundfastrpz/util/config_file.c
===================================================================
---- unboundfastrpz/util/config_file.c (revision 4923)
+--- unboundfastrpz/util/config_file.c (revision 5073)
+++ unboundfastrpz/util/config_file.c (working copy)
-@@ -1386,6 +1386,8 @@
+@@ -1418,6 +1418,8 @@
free(cfg->dnstap_socket_path);
free(cfg->dnstap_identity);
free(cfg->dnstap_version);
@@ -3183,9 +3183,9 @@ Index: unboundfastrpz/util/config_file.c
#ifdef USE_IPSECMOD
Index: unboundfastrpz/util/config_file.h
===================================================================
---- unboundfastrpz/util/config_file.h (revision 4923)
+--- unboundfastrpz/util/config_file.h (revision 5073)
+++ unboundfastrpz/util/config_file.h (working copy)
-@@ -468,6 +468,11 @@
+@@ -490,6 +490,11 @@
/** true to disable DNSSEC lameness check in iterator */
int disable_dnssec_lame_check;
@@ -3199,9 +3199,9 @@ Index: unboundfastrpz/util/config_file.h
/** number of slabs for ip_ratelimit cache */
Index: unboundfastrpz/util/configlexer.lex
===================================================================
---- unboundfastrpz/util/configlexer.lex (revision 4923)
+--- unboundfastrpz/util/configlexer.lex (revision 5073)
+++ unboundfastrpz/util/configlexer.lex (working copy)
-@@ -429,6 +429,10 @@
+@@ -439,6 +439,10 @@
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
dnstap-log-forwarder-response-messages{COLON} {
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
@@ -3214,7 +3214,7 @@ Index: unboundfastrpz/util/configlexer.lex
ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) }
Index: unboundfastrpz/util/configparser.y
===================================================================
---- unboundfastrpz/util/configparser.y (revision 4923)
+--- unboundfastrpz/util/configparser.y (revision 5073)
+++ unboundfastrpz/util/configparser.y (working copy)
@@ -125,6 +125,7 @@
%token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES
@@ -3224,7 +3224,7 @@ Index: unboundfastrpz/util/configparser.y
%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
-@@ -164,7 +165,7 @@
+@@ -170,7 +171,7 @@
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -3233,8 +3233,8 @@ Index: unboundfastrpz/util/configparser.y
forwardstart contents_forward | pythonstart contents_py |
rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
dnscstart contents_dnsc | cachedbstart contents_cachedb |
-@@ -2546,6 +2547,50 @@
- (strcmp($2, "yes")==0);
+@@ -2708,6 +2709,50 @@
+ free($2);
}
;
+rpzstart: VAR_RPZ
@@ -3286,9 +3286,9 @@ Index: unboundfastrpz/util/configparser.y
OUTYY(("\nP(python:)\n"));
Index: unboundfastrpz/util/data/msgencode.c
===================================================================
---- unboundfastrpz/util/data/msgencode.c (revision 4923)
+--- unboundfastrpz/util/data/msgencode.c (revision 5073)
+++ unboundfastrpz/util/data/msgencode.c (working copy)
-@@ -585,6 +585,35 @@
+@@ -590,6 +590,35 @@
return RETVAL_OK;
}
@@ -3324,7 +3324,7 @@ Index: unboundfastrpz/util/data/msgencode.c
/** store query section in wireformat buffer, return RETVAL */
static int
insert_query(struct query_info* qinfo, struct compress_tree_node** tree,
-@@ -748,6 +777,19 @@
+@@ -753,6 +782,19 @@
return 0;
}
sldns_buffer_write_u16_at(buffer, 10, arcount);
@@ -3346,7 +3346,7 @@ Index: unboundfastrpz/util/data/msgencode.c
return 1;
Index: unboundfastrpz/util/data/packed_rrset.c
===================================================================
---- unboundfastrpz/util/data/packed_rrset.c (revision 4923)
+--- unboundfastrpz/util/data/packed_rrset.c (revision 5073)
+++ unboundfastrpz/util/data/packed_rrset.c (working copy)
@@ -255,6 +255,10 @@
case sec_status_insecure: return "sec_status_insecure";
@@ -3361,7 +3361,7 @@ Index: unboundfastrpz/util/data/packed_rrset.c
}
Index: unboundfastrpz/util/data/packed_rrset.h
===================================================================
---- unboundfastrpz/util/data/packed_rrset.h (revision 4923)
+--- unboundfastrpz/util/data/packed_rrset.h (revision 5073)
+++ unboundfastrpz/util/data/packed_rrset.h (working copy)
@@ -193,7 +193,15 @@
sec_status_secure_sentinel_fail,
@@ -3382,9 +3382,9 @@ Index: unboundfastrpz/util/data/packed_rrset.h
/**
Index: unboundfastrpz/util/netevent.c
===================================================================
---- unboundfastrpz/util/netevent.c (revision 4923)
+--- unboundfastrpz/util/netevent.c (revision 5073)
+++ unboundfastrpz/util/netevent.c (working copy)
-@@ -56,6 +56,9 @@
+@@ -57,6 +57,9 @@
#ifdef HAVE_OPENSSL_ERR_H
#include <openssl/err.h>
#endif
@@ -3394,7 +3394,7 @@ Index: unboundfastrpz/util/netevent.c
/* -------- Start of local definitions -------- */
/** if CMSG_ALIGN is not defined on this platform, a workaround */
-@@ -588,6 +591,9 @@
+@@ -590,6 +593,9 @@
struct cmsghdr* cmsg;
#endif /* S_SPLINT_S */
@@ -3404,7 +3404,7 @@ Index: unboundfastrpz/util/netevent.c
rep.c = (struct comm_point*)arg;
log_assert(rep.c->type == comm_udp);
-@@ -677,6 +683,9 @@
+@@ -679,6 +685,9 @@
int i;
struct sldns_buffer *buffer;
@@ -3414,7 +3414,7 @@ Index: unboundfastrpz/util/netevent.c
rep.c = (struct comm_point*)arg;
log_assert(rep.c->type == comm_udp);
-@@ -720,6 +729,9 @@
+@@ -722,6 +731,9 @@
(void)comm_point_send_udp_msg(rep.c, buffer,
(struct sockaddr*)&rep.addr, rep.addrlen);
}
@@ -3424,9 +3424,9 @@ Index: unboundfastrpz/util/netevent.c
if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for
another UDP port. Note rep.c cannot be reused with TCP fd. */
break;
-@@ -3035,6 +3047,9 @@
- comm_point_start_listening(repinfo->c, -1,
- repinfo->c->tcp_timeout_msec);
+@@ -3108,6 +3120,9 @@
+ repinfo->c->tcp_timeout_msec);
+ }
}
+#ifdef ENABLE_FASTRPZ
+ rpz_end(repinfo);
@@ -3434,7 +3434,7 @@ Index: unboundfastrpz/util/netevent.c
}
void
-@@ -3044,6 +3059,9 @@
+@@ -3117,6 +3132,9 @@
return;
log_assert(repinfo && repinfo->c);
log_assert(repinfo->c->type != comm_tcp_accept);
@@ -3443,8 +3443,8 @@ Index: unboundfastrpz/util/netevent.c
+#endif
if(repinfo->c->type == comm_udp)
return;
- reclaim_tcp_handler(repinfo->c);
-@@ -3063,6 +3081,9 @@
+ if(repinfo->c->tcp_req_info)
+@@ -3138,6 +3156,9 @@
{
verbose(VERB_ALGO, "comm point start listening %d",
c->fd==-1?newfd:c->fd);
@@ -3456,7 +3456,7 @@ Index: unboundfastrpz/util/netevent.c
return;
Index: unboundfastrpz/util/netevent.h
===================================================================
---- unboundfastrpz/util/netevent.h (revision 4923)
+--- unboundfastrpz/util/netevent.h (revision 5073)
+++ unboundfastrpz/util/netevent.h (working copy)
@@ -120,6 +120,10 @@
/** return type 0 (none), 4(IP4), 6(IP6) */
@@ -3471,7 +3471,7 @@ Index: unboundfastrpz/util/netevent.h
uint8_t nmkey[crypto_box_BEFORENMBYTES];
Index: unboundfastrpz/validator/validator.c
===================================================================
---- unboundfastrpz/validator/validator.c (revision 4923)
+--- unboundfastrpz/validator/validator.c (revision 5073)
+++ unboundfastrpz/validator/validator.c (working copy)
@@ -2755,6 +2755,12 @@
default:
diff --git a/contrib/unbound-fuzzme.patch b/contrib/unbound-fuzzme.patch
new file mode 100644
index 000000000000..a2f3e1db313b
--- /dev/null
+++ b/contrib/unbound-fuzzme.patch
@@ -0,0 +1,148 @@
+>From cc9b927f8f29d989ddb8415fe6508a538546abca Mon Sep 17 00:00:00 2001
+From: Jacob Hoffman-Andrews <github@hoffman-andrews.com>
+Date: Wed, 2 Jan 2019 22:52:51 -0800
+Subject: [PATCH] Add unbound-fuzzme.
+
+This is a small program that simply parses a packet provided on stdout,
+for the purposes of fuzzing.
+---
+ .gitignore | 1 +
+ Makefile.in | 22 ++++++++++++++++++++--
+ smallapp/unbound-fuzzme.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 59 insertions(+), 2 deletions(-)
+ create mode 100644 smallapp/unbound-fuzzme.c
+
+diff --git a/.gitignore b/.gitignore
+index f4527fd8..6163f905 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -24,6 +24,7 @@
+ /unbound-checkconf
+ /unbound-control
+ /unbound-control-setup
++/unbound-fuzzme
+ /unbound-host
+ /unbound.h
+ /asynclook
+diff --git a/Makefile.in b/Makefile.in
+index af5b10f6..dacf1ab5 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -177,6 +177,10 @@ shm_main.lo remote.lo stats.lo unbound.lo \
+ worker.lo @WIN_DAEMON_OBJ@
+ DAEMON_OBJ_LINK=$(DAEMON_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \
+ $(COMPAT_OBJ) @WIN_DAEMON_OBJ_LINK@
++FUZZME_SRC=smallapp/unbound-fuzzme.c
++FUZZME_OBJ=unbound-fuzzme.lo
++FUZZME_OBJ_LINK=$(FUZZME_OBJ) worker_cb.lo $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \
++$(COMPAT_OBJ)
+ CHECKCONF_SRC=smallapp/unbound-checkconf.c smallapp/worker_cb.c
+ CHECKCONF_OBJ=unbound-checkconf.lo worker_cb.lo
+ CHECKCONF_OBJ_LINK=$(CHECKCONF_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \
+@@ -252,6 +256,7 @@ RSRC_OBJ=rsrc_svcinst.o rsrc_svcuninst.o rsrc_anchorupd.o rsrc_unbound.o \
+ rsrc_unbound_checkconf.o
+
+ ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \
++ $(FUZZME_SRC) \
+ $(TESTBOUND_SRC) $(LOCKVERIFY_SRC) $(PKTVIEW_SRC) \
+ $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \
+ $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \
+@@ -259,6 +264,7 @@ ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \
+ $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC)\
+ $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC)
+ ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \
++ $(FUZZME_OBJ) \
+ $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \
+ $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \
+ $(ASYNCLOOK_OBJ) $(STREAMTCP_OBJ) $(PERF_OBJ) $(DELAYER_OBJ) \
+@@ -274,7 +280,7 @@ LINK_LIB=$(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFL
+
+ all: $(COMMON_OBJ) $(ALLTARGET)
+
+-alltargets: unbound$(EXEEXT) unbound-checkconf$(EXEEXT) lib unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup $(WINAPPS) $(PYUNBOUND_TARGET)
++alltargets: unbound$(EXEEXT) unbound-checkconf$(EXEEXT) lib unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup unbound-fuzzme$(EXEEXT) $(WINAPPS) $(PYUNBOUND_TARGET)
+
+ # compat with BSD make, register suffix, and an implicit rule to actualise it.
+ .SUFFIXES: .lo
+@@ -325,6 +331,9 @@ libunbound.la: $(LIBUNBOUND_OBJ_LINK)
+ unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la
+ $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS)
+
++unbound-fuzzme$(EXEEXT): $(FUZZME_OBJ_LINK) libunbound.la
++ $(LINK) -o $@ $(FUZZME_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS)
++
+ unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la
+ $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS)
+
+@@ -447,7 +456,7 @@ util/configparser.c util/configparser.h: $(srcdir)/util/configparser.y
+
+ clean:
+ rm -f *.o *.d *.lo *~ tags
+- rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h
++ rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-fuzzme$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h
+ rm -f $(ALL_SRC:.c=.lint)
+ rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py
+ rm -rf autom4te.cache .libs build doc/html doc/xml
+@@ -1183,6 +1192,15 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s
+ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
+ $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \
+ $(srcdir)/validator/val_neg.h
++unbound-fuzzme.lo unbound-fuzzme.o: $(srcdir)/smallapp/unbound-fuzzme.c \
++ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
++ $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h \
++ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \
++ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \
++ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \
++ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \
++ $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \
++ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h
+ unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \
+ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \
+ $(srcdir)/daemon/remote.h \
+diff --git a/smallapp/unbound-fuzzme.c b/smallapp/unbound-fuzzme.c
+new file mode 100644
+index 00000000..74ae5204
+--- /dev/null
++++ b/smallapp/unbound-fuzzme.c
+@@ -0,0 +1,38 @@
++/*
++ * unbound-fuzzme.c - parse a packet provided on stdin (for fuzzing).
++ *
++ */
++#include "config.h"
++#include "util/regional.h"
++#include "util/fptr_wlist.h"
++#include "sldns/sbuffer.h"
++
++#define SZ 10000
++
++int main() {
++ char buffer[SZ];
++ size_t n_read = fread(buffer, 1, SZ, stdin);
++ if (n_read == SZ) {
++ printf("input too big\n");
++ return 1;
++ }
++ sldns_buffer *pkt = sldns_buffer_new(n_read);
++ sldns_buffer_init_frm_data(pkt, buffer, n_read);
++
++ struct regional *region = regional_create();
++
++ struct msg_parse* prs;
++ struct edns_data edns;
++ prs = (struct msg_parse*)malloc(sizeof(struct msg_parse));
++ if(!prs) {
++ printf("out of memory on incoming message\n");
++ return 1;
++ }
++ memset(prs, 0, sizeof(*prs));
++ memset(&edns, 0, sizeof(edns));
++ sldns_buffer_set_position(pkt, 0);
++ if(parse_packet(pkt, prs, region) != LDNS_RCODE_NOERROR) {
++ printf("parse error\n");
++ return 1;
++ }
++}
+--
+2.17.1
+
diff --git a/daemon/daemon.c b/daemon/daemon.c
index 4c3d5f1c1a17..e14edb99df05 100644
--- a/daemon/daemon.c
+++ b/daemon/daemon.c
@@ -749,6 +749,7 @@ daemon_delete(struct daemon* daemon)
free(daemon->pidfile);
free(daemon->env);
#ifdef HAVE_SSL
+ listen_sslctx_delete_ticket_keys();
SSL_CTX_free((SSL_CTX*)daemon->listen_sslctx);
SSL_CTX_free((SSL_CTX*)daemon->connect_sslctx);
#endif
diff --git a/daemon/remote.c b/daemon/remote.c
index 3971e4540510..48efba7409c8 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -789,7 +789,8 @@ print_longnum(RES* ssl, const char* desc, size_t x)
/** print mem stats */
static int
-print_mem(RES* ssl, struct worker* worker, struct daemon* daemon)
+print_mem(RES* ssl, struct worker* worker, struct daemon* daemon,
+ struct ub_stats_info* s)
{
size_t msg, rrset, val, iter, respip;
#ifdef CLIENT_SUBNET
@@ -847,6 +848,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon)
dnscrypt_nonce))
return 0;
#endif /* USE_DNSCRYPT */
+ if(!print_longnum(ssl, "mem.streamwait"SQ,
+ (size_t)s->svr.mem_stream_wait))
+ return 0;
return 1;
}
@@ -969,6 +973,8 @@ print_ext(RES* ssl, struct ub_stats_info* s)
(unsigned long)s->svr.qtcp_outgoing)) return 0;
if(!ssl_printf(ssl, "num.query.tls"SQ"%lu\n",
(unsigned long)s->svr.qtls)) return 0;
+ if(!ssl_printf(ssl, "num.query.tls.resume"SQ"%lu\n",
+ (unsigned long)s->svr.qtls_resume)) return 0;
if(!ssl_printf(ssl, "num.query.ipv6"SQ"%lu\n",
(unsigned long)s->svr.qipv6)) return 0;
/* flags */
@@ -1088,7 +1094,7 @@ do_stats(RES* ssl, struct daemon_remote* rc, int reset)
if(!print_uptime(ssl, rc->worker, reset))
return;
if(daemon->cfg->stat_extended) {
- if(!print_mem(ssl, rc->worker, daemon))
+ if(!print_mem(ssl, rc->worker, daemon, &total))
return;
if(!print_hist(ssl, &total))
return;
@@ -1428,6 +1434,28 @@ do_view_data_add(RES* ssl, struct worker* worker, char* arg)
lock_rw_unlock(&v->lock);
}
+/** Add new RR data from stdin to view */
+static void
+do_view_datas_add(RES* ssl, struct worker* worker, char* arg)
+{
+ struct view* v;
+ v = views_find_view(worker->daemon->views,
+ arg, 1 /* get write lock*/);
+ if(!v) {
+ ssl_printf(ssl,"no view with name: %s\n", arg);
+ return;
+ }
+ if(!v->local_zones) {
+ if(!(v->local_zones = local_zones_create())){
+ lock_rw_unlock(&v->lock);
+ ssl_printf(ssl,"error out of memory\n");
+ return;
+ }
+ }
+ do_datas_add(ssl, v->local_zones);
+ lock_rw_unlock(&v->lock);
+}
+
/** Remove RR data from view */
static void
do_view_data_remove(RES* ssl, struct worker* worker, char* arg)
@@ -2456,7 +2484,7 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg)
(void)ssl_printf(ssl, "error no auth-zone %s\n", arg);
return;
}
- if(!auth_zone_read_zonefile(z)) {
+ if(!auth_zone_read_zonefile(z, worker->env.cfg)) {
lock_rw_unlock(&z->lock);
(void)ssl_printf(ssl, "error failed to read %s\n", arg);
return;
@@ -2963,6 +2991,8 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
do_view_data_remove(ssl, worker, skipwhite(p+22));
} else if(cmdcmp(p, "view_local_data", 15)) {
do_view_data_add(ssl, worker, skipwhite(p+15));
+ } else if(cmdcmp(p, "view_local_datas", 16)) {
+ do_view_datas_add(ssl, worker, skipwhite(p+16));
} else if(cmdcmp(p, "flush_zone", 10)) {
do_flush_zone(ssl, worker, skipwhite(p+10));
} else if(cmdcmp(p, "flush_type", 10)) {
diff --git a/daemon/stats.c b/daemon/stats.c
index cff01d90342f..504b0efccc4a 100644
--- a/daemon/stats.c
+++ b/daemon/stats.c
@@ -66,6 +66,9 @@
#ifdef CLIENT_SUBNET
#include "edns-subnet/subnetmod.h"
#endif
+#ifdef HAVE_SSL
+#include <openssl/ssl.h>
+#endif
/** add timers and the values do not overflow or become negative */
static void
@@ -328,6 +331,8 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset)
}
lock_rw_unlock(&worker->env.auth_zones->lock);
}
+ s->svr.mem_stream_wait =
+ (long long)tcp_req_info_get_stream_buffer_size();
/* Set neg cache usage numbers */
set_neg_cache_stats(worker, &s->svr, reset);
@@ -412,6 +417,7 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a)
total->svr.qtcp += a->svr.qtcp;
total->svr.qtcp_outgoing += a->svr.qtcp_outgoing;
total->svr.qtls += a->svr.qtls;
+ total->svr.qtls_resume += a->svr.qtls_resume;
total->svr.qipv6 += a->svr.qipv6;
total->svr.qbit_QR += a->svr.qbit_QR;
total->svr.qbit_AA += a->svr.qbit_AA;
@@ -468,8 +474,13 @@ void server_stats_insquery(struct ub_server_stats* stats, struct comm_point* c,
stats->qopcode[ LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) ]++;
if(c->type != comm_udp) {
stats->qtcp++;
- if(c->ssl != NULL)
+ if(c->ssl != NULL) {
stats->qtls++;
+#ifdef HAVE_SSL
+ if(SSL_session_reused(c->ssl))
+ stats->qtls_resume++;
+#endif
+ }
}
if(repinfo && addr_is_ip6(&repinfo->addr, repinfo->addrlen))
stats->qipv6++;
diff --git a/daemon/unbound.c b/daemon/unbound.c
index 020e453034ad..4a508c13878b 100644
--- a/daemon/unbound.c
+++ b/daemon/unbound.c
@@ -67,6 +67,7 @@
#ifdef HAVE_GRP_H
#include <grp.h>
#endif
+#include <openssl/ssl.h>
#ifndef S_SPLINT_S
/* splint chokes on this system header file */
@@ -430,6 +431,23 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode,
if(!(daemon->listen_sslctx = listen_sslctx_create(
cfg->ssl_service_key, cfg->ssl_service_pem, NULL)))
fatal_exit("could not set up listen SSL_CTX");
+ if(cfg->tls_ciphers && cfg->tls_ciphers[0]) {
+ if (!SSL_CTX_set_cipher_list(daemon->listen_sslctx, cfg->tls_ciphers)) {
+ fatal_exit("failed to set tls-cipher %s", cfg->tls_ciphers);
+ }
+ }
+#ifdef HAVE_SSL_CTX_SET_CIPHERSUITES
+ if(cfg->tls_ciphersuites && cfg->tls_ciphersuites[0]) {
+ if (!SSL_CTX_set_ciphersuites(daemon->listen_sslctx, cfg->tls_ciphersuites)) {
+ fatal_exit("failed to set tls-ciphersuites %s", cfg->tls_ciphersuites);
+ }
+ }
+#endif
+ if(cfg->tls_session_ticket_keys.first) {
+ if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys.first)) {
+ fatal_exit("could not set session ticket SSL_CTX");
+ }
+ }
}
if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL,
cfg->tls_cert_bundle, cfg->tls_win_cert)))
diff --git a/daemon/worker.c b/daemon/worker.c
index 2697ea6534f1..c9504dd207be 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -1088,7 +1088,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
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 query_info qinfo_tmp; /* placeholder for lookup_qinfo */
struct respip_client_info* cinfo = NULL, cinfo_tmp;
memset(&qinfo, 0, sizeof(qinfo));
@@ -1175,7 +1175,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
/* See if we are passed through with slip factor */
if(worker->env.cfg->ip_ratelimit_factor != 0 &&
ub_random_max(worker->env.rnd,
- worker->env.cfg->ip_ratelimit_factor) == 1) {
+ worker->env.cfg->ip_ratelimit_factor) == 0) {
char addrbuf[128];
addr_to_str(&repinfo->addr, repinfo->addrlen,
@@ -1208,7 +1208,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
if(worker->env.cfg->log_queries) {
char ip[128];
addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip));
- log_nametypeclass(0, ip, qinfo.qname, qinfo.qtype, qinfo.qclass);
+ log_query_in(ip, qinfo.qname, qinfo.qtype, qinfo.qclass);
}
if(qinfo.qtype == LDNS_RR_TYPE_AXFR ||
qinfo.qtype == LDNS_RR_TYPE_IXFR) {
@@ -1802,8 +1802,6 @@ worker_init(struct worker* worker, struct config_file *cfg,
alloc_set_id_cleanup(&worker->alloc, &worker_alloc_cleanup, worker);
worker->env = *worker->daemon->env;
comm_base_timept(worker->base, &worker->env.now, &worker->env.now_tv);
- if(worker->thread_num == 0)
- log_set_time(worker->env.now);
worker->env.worker = worker;
worker->env.worker_base = worker->base;
worker->env.send_query = &worker_send_query;
@@ -1909,7 +1907,6 @@ worker_delete(struct worker* worker)
comm_timer_delete(worker->env.probe_timer);
free(worker->ports);
if(worker->thread_num == 0) {
- log_set_time(NULL);
#ifdef UB_ON_WINDOWS
wsvc_desetup_worker(worker);
#endif /* UB_ON_WINDOWS */
diff --git a/dns64/dns64.c b/dns64/dns64.c
index eadfabb08c89..f2834da2bfc4 100644
--- a/dns64/dns64.c
+++ b/dns64/dns64.c
@@ -70,12 +70,9 @@ static const char DEFAULT_DNS64_PREFIX[] = "64:ff9b::/96";
#define MAX_PTR_QNAME_IPV4 30
/**
- * Per-query module-specific state. This is usually a dynamically-allocated
- * structure, but in our case we only need to store one variable describing the
- * state the query is in. So we repurpose the minfo pointer by storing an
- * integer in there.
+ * State of DNS64 processing for a query.
*/
-enum dns64_qstate {
+enum dns64_state {
DNS64_INTERNAL_QUERY, /**< Internally-generated query, no DNS64
processing. */
DNS64_NEW_QUERY, /**< Query for which we're the first module in
@@ -84,6 +81,19 @@ enum dns64_qstate {
for which this sub-query is finished. */
};
+/**
+ * Per-query module-specific state. For the DNS64 module.
+ */
+struct dns64_qstate {
+ /** State of the DNS64 module. */
+ enum dns64_state state;
+ /** If the dns64 module started with no_cache bool set in the qstate,
+ * a message to tell it to not modify the cache contents, then this
+ * is true. The dns64 module is then free to modify that flag for
+ * its own purposes.
+ * Otherwise, it is false, the dns64 module was not told to no_cache */
+ int started_no_cache_store;
+};
/******************************************************************************
* *
@@ -470,7 +480,7 @@ handle_ipv6_ptr(struct module_qstate* qstate, int id)
if (subq) {
subq->curmod = id;
subq->ext_state[id] = module_state_initial;
- subq->minfo[id] = NULL;
+ subq->minfo[id] = NULL;
}
return module_wait_subquery;
@@ -540,7 +550,8 @@ dns64_always_synth_for_qname(struct module_qstate* qstate, int id)
static enum module_ext_state
handle_event_pass(struct module_qstate* qstate, int id)
{
- if ((uintptr_t)qstate->minfo[id] == DNS64_NEW_QUERY
+ struct dns64_qstate* iq = (struct dns64_qstate*)qstate->minfo[id];
+ if (iq && iq->state == DNS64_NEW_QUERY
&& qstate->qinfo.qtype == LDNS_RR_TYPE_PTR
&& qstate->qinfo.qname_len == 74
&& !strcmp((char*)&qstate->qinfo.qname[64], "\03ip6\04arpa"))
@@ -548,12 +559,12 @@ handle_event_pass(struct module_qstate* qstate, int id)
return handle_ipv6_ptr(qstate, id);
if (qstate->env->cfg->dns64_synthall &&
- (uintptr_t)qstate->minfo[id] == DNS64_NEW_QUERY
+ iq && iq->state == DNS64_NEW_QUERY
&& qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA)
return generate_type_A_query(qstate, id);
if(dns64_always_synth_for_qname(qstate, id) &&
- (uintptr_t)qstate->minfo[id] == DNS64_NEW_QUERY
+ iq && iq->state == DNS64_NEW_QUERY
&& !(qstate->query_flags & BIT_CD)
&& qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) {
verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway");
@@ -561,7 +572,7 @@ handle_event_pass(struct module_qstate* qstate, int id)
}
/* We are finished when our sub-query is finished. */
- if ((uintptr_t)qstate->minfo[id] == DNS64_SUBQUERY_FINISHED)
+ if (iq && iq->state == DNS64_SUBQUERY_FINISHED)
return module_finished;
/* Otherwise, pass request to next module. */
@@ -582,6 +593,7 @@ handle_event_pass(struct module_qstate* qstate, int id)
static enum module_ext_state
handle_event_moddone(struct module_qstate* qstate, int id)
{
+ struct dns64_qstate* iq = (struct dns64_qstate*)qstate->minfo[id];
/*
* In many cases we have nothing special to do. From most to least common:
*
@@ -593,7 +605,7 @@ handle_event_moddone(struct module_qstate* qstate, int id)
* synthesize in (sec 5.1.2 of RFC6147).
* - A successful AAAA query with an answer.
*/
- if((enum dns64_qstate)qstate->minfo[id] != DNS64_INTERNAL_QUERY
+ if((!iq || iq->state != DNS64_INTERNAL_QUERY)
&& qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA
&& !(qstate->query_flags & BIT_CD)
&& !(qstate->return_msg &&
@@ -604,7 +616,7 @@ handle_event_moddone(struct module_qstate* qstate, int id)
* So, this is a AAAA noerror/nodata answer */
return generate_type_A_query(qstate, id);
- if((enum dns64_qstate)qstate->minfo[id] != DNS64_INTERNAL_QUERY
+ if((!iq || iq->state != DNS64_INTERNAL_QUERY)
&& qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA
&& !(qstate->query_flags & BIT_CD)
&& dns64_always_synth_for_qname(qstate, id)) {
@@ -614,6 +626,13 @@ handle_event_moddone(struct module_qstate* qstate, int id)
return generate_type_A_query(qstate, id);
}
+ /* Store the response in cache. */
+ if ( (!iq || !iq->started_no_cache_store) &&
+ qstate->return_msg && qstate->return_msg->rep &&
+ !dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep,
+ 0, 0, 0, NULL, qstate->query_flags))
+ log_err("out of memory");
+
/* do nothing */
return module_finished;
}
@@ -634,6 +653,7 @@ void
dns64_operate(struct module_qstate* qstate, enum module_ev event, int id,
struct outbound_entry* outbound)
{
+ struct dns64_qstate* iq;
(void)outbound;
verbose(VERB_QUERY, "dns64[module %d] operate: extstate:%s event:%s",
id, strextstate(qstate->ext_state[id]),
@@ -643,7 +663,12 @@ dns64_operate(struct module_qstate* qstate, enum module_ev event, int id,
switch(event) {
case module_event_new:
/* Tag this query as being new and fall through. */
- qstate->minfo[id] = (void*)DNS64_NEW_QUERY;
+ iq = (struct dns64_qstate*)regional_alloc(
+ qstate->region, sizeof(*iq));
+ qstate->minfo[id] = iq;
+ iq->state = DNS64_NEW_QUERY;
+ iq->started_no_cache_store = qstate->no_cache_store;
+ qstate->no_cache_store = 1;
/* fallthrough */
case module_event_pass:
qstate->ext_state[id] = handle_event_pass(qstate, id);
@@ -655,6 +680,11 @@ dns64_operate(struct module_qstate* qstate, enum module_ev event, int id,
qstate->ext_state[id] = module_finished;
break;
}
+ if(qstate->ext_state[id] == module_finished) {
+ iq = (struct dns64_qstate*)qstate->minfo[id];
+ if(iq && iq->state != DNS64_INTERNAL_QUERY)
+ qstate->no_cache_store = iq->started_no_cache_store;
+ }
}
static void
@@ -867,9 +897,10 @@ dns64_adjust_ptr(struct module_qstate* qstate, struct module_qstate* super)
* initial query's domain name.
*/
answer = reply_find_answer_rrset(&qstate->qinfo, super->return_msg->rep);
- log_assert(answer);
- answer->rk.dname = super->qinfo.qname;
- answer->rk.dname_len = super->qinfo.qname_len;
+ if(answer) {
+ answer->rk.dname = super->qinfo.qname;
+ answer->rk.dname_len = super->qinfo.qname_len;
+ }
}
/**
@@ -885,6 +916,7 @@ void
dns64_inform_super(struct module_qstate* qstate, int id,
struct module_qstate* super)
{
+ struct dns64_qstate* super_dq = (struct dns64_qstate*)super->minfo[id];
log_query_info(VERB_ALGO, "dns64: inform_super, sub is",
&qstate->qinfo);
log_query_info(VERB_ALGO, "super is", &super->qinfo);
@@ -893,15 +925,21 @@ dns64_inform_super(struct module_qstate* qstate, int id,
* Signal that the sub-query is finished, no matter whether we are
* successful or not. This lets the state machine terminate.
*/
- super->minfo[id] = (void*)DNS64_SUBQUERY_FINISHED;
+ if(!super_dq) {
+ super_dq = (struct dns64_qstate*)regional_alloc(super->region,
+ sizeof(*super_dq));
+ super->minfo[id] = super_dq;
+ memset(super_dq, 0, sizeof(*super_dq));
+ super_dq->started_no_cache_store = super->no_cache_store;
+ }
+ super_dq->state = DNS64_SUBQUERY_FINISHED;
/* If there is no successful answer, we're done. */
if (qstate->return_rcode != LDNS_RCODE_NOERROR
|| !qstate->return_msg
- || !qstate->return_msg->rep
- || !reply_find_answer_rrset(&qstate->qinfo,
- qstate->return_msg->rep))
+ || !qstate->return_msg->rep) {
return;
+ }
/* Use return code from A query in response to client. */
if (super->return_rcode != LDNS_RCODE_NOERROR)
@@ -916,7 +954,7 @@ dns64_inform_super(struct module_qstate* qstate, int id,
}
/* Store the generated response in cache. */
- if (!super->no_cache_store &&
+ if ( (!super_dq || !super_dq->started_no_cache_store) &&
!dns_cache_store(super->env, &super->qinfo, super->return_msg->rep,
0, 0, 0, NULL, super->query_flags))
log_err("out of memory");
diff --git a/dnscrypt/dnscrypt.c b/dnscrypt/dnscrypt.c
index 3545d3d9b43f..0787dec23ddb 100644
--- a/dnscrypt/dnscrypt.c
+++ b/dnscrypt/dnscrypt.c
@@ -772,12 +772,13 @@ key_get_es_version(uint8_t version[2])
const char *name;
};
+ const int num_versions = 2;
struct es_version es_versions[] = {
{{0x00, 0x01}, "X25519-XSalsa20Poly1305"},
{{0x00, 0x02}, "X25519-XChacha20Poly1305"},
};
int i;
- for(i=0; i < (int)sizeof(es_versions); i++){
+ for(i=0; i < num_versions; i++){
if(es_versions[i].es_version[0] == version[0] &&
es_versions[i].es_version[1] == version[1]){
return es_versions[i].name;
diff --git a/dnstap/dnstap.c b/dnstap/dnstap.c
index 5d0420f6fbba..aabf8eec9071 100644
--- a/dnstap/dnstap.c
+++ b/dnstap/dnstap.c
@@ -39,6 +39,10 @@
#include "config.h"
#include <string.h>
#include <sys/time.h>
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#include <errno.h>
#include "sldns/sbuffer.h"
#include "util/config_file.h"
#include "util/net_help.h"
@@ -118,6 +122,18 @@ dt_msg_init(const struct dt_env *env,
}
}
+/* check that the socket file can be opened and exists, print error if not */
+static void
+check_socket_file(const char* socket_path)
+{
+ struct stat statbuf;
+ memset(&statbuf, 0, sizeof(statbuf));
+ if(stat(socket_path, &statbuf) < 0) {
+ log_warn("could not open dnstap-socket-path: %s, %s",
+ socket_path, strerror(errno));
+ }
+}
+
struct dt_env *
dt_create(const char *socket_path, unsigned num_workers)
{
@@ -134,6 +150,7 @@ dt_create(const char *socket_path, unsigned num_workers)
socket_path);
log_assert(socket_path != NULL);
log_assert(num_workers > 0);
+ check_socket_file(socket_path);
env = (struct dt_env *) calloc(1, sizeof(struct dt_env));
if (!env)
diff --git a/doc/Changelog b/doc/Changelog
index 69bab6f640ad..2c029484f612 100644
--- a/doc/Changelog
+++ b/doc/Changelog
@@ -1,8 +1,280 @@
+5 February 2019: Wouter
+ - Fix tls-ciphers spelling in example.conf
+
+28 January 2019: Wouter
+ - ub_ctx_set_tls call for libunbound that enables DoT for the machines
+ set with ub_ctx_set_fwd. Patch from Florian Obser.
+ - Set build system for added call in the libunbound API.
+ - List example config for root zone copy locally hosted with auth-zone
+ as suggested from draft-ietf-dnsop-7706-bis-02. But with updated
+ B root address.
+ - set version to 1.9.0 for release.
+
+25 January 2019: Wouter
+ - Fix that tcp for auth zone and outgoing does not remove and
+ then gets the ssl read again applied to the deleted commpoint.
+ - updated contrib/fastrpz.patch to cleanly diff.
+ - no lock when threads disabled in tcp request buffer count.
+ - remove compile warnings from libnettle compile.
+ - output of newer lex 2.6.1 and bison 3.0.5.
+
+24 January 2019: Wouter
+ - Newer aclocal and libtoolize used for generating configure scripts,
+ aclocal 1.16.1 and libtoolize 2.4.6.
+ - Fix unit test for python 3.7 new keyword 'async'.
+ - clang analysis fixes, assert arc4random buffer in init,
+ no check for already checked delegation pointer in iterator,
+ in testcode check for NULL packet matches, in perf do not copy
+ from NULL start list when growing capacity. Adjust host and file
+ only when present in test header read to please checker. In
+ testcode for unknown macro operand give zero result. Initialise the
+ passed argv array in test code. In test code add EDNS data
+ segment copy only when nonempty.
+ - Patch from Florian Obser fixes some compiler warnings:
+ include mini_event.h to have a prototype for mini_ev_cmp
+ include edns.h to have a prototype for apply_edns_options
+ sldns_wire2str_edns_keepalive_print is only called in the wire2str,
+ module declare it static to get rid of compiler warning:
+ no previous prototype for function
+ infra_find_ip_ratedata() is only called in the infra module,
+ declare it static to get rid of compiler warning:
+ no previous prototype for function
+ do not shadow local variable buf in authzone
+ auth_chunks_delete and az_nsec3_findnode are only called in the
+ authzone module, declare them static to get rid of compiler warning:
+ no previous prototype for function...
+ copy_rrset() is only called in the respip module, declare it
+ static to get rid of compiler warning:
+ no previous prototype for function 'copy_rrset'
+ no need for another variable "r"; gets rid of compiler warning:
+ declaration shadows a local variable in libunbound.c
+ no need for another variable "ns"; gets rid of compiler warning:
+ declaration shadows a local variable in iterator.c
+ - Moved includes and make depend.
+
+23 January 2019: Wouter
+ - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites
+ options for unbound.conf.
+ - Fixes for the patch, and man page entry.
+ - Fix configure to detect SSL_CTX_set_ciphersuites, for better
+ library compatibility when compiling.
+ - Patch for TLS session resumption from Manabu Sonoda,
+ enable with tls-session-ticket-keys in unbound.conf.
+ - Fixes for patch (includes, declarations, warnings). Free at end
+ and keep config options in order read from file to keep the first
+ one as the first one.
+ - Fix for IXFR fallback to reset counter when IXFR does not timeout.
+
+22 January 2019: Wouter
+ - Fix space calculation for tcp req buffer size.
+ - Doc for stream-wait-size and unit test.
+ - unbound-control stats has mem.streamwait that counts TCP and TLS
+ waiting result buffers.
+ - Fix for #4219: secondaries not updated after serial change, unbound
+ falls back to AXFR after IXFR gives several timeout failures.
+ - Fix that auth zone after IXFR fallback tries the same master.
+
+21 January 2019: Wouter
+ - Fix tcp idle timeout test, for difference in the tcp reply code.
+ - Unit test for tcp request reorder and timeouts.
+ - Unit tests for ssl out of order processing.
+ - Fix that multiple dns fragments can be carried in one TLS frame.
+ - Add stream-wait-size: 4m config option to limit the maximum
+ memory used by waiting tcp and tls stream replies. This avoids
+ a denial of service where these replies use up all of the memory.
+
+17 January 2019: Wouter
+ - For caps-for-id fallback, use the whitelist to avoid timeout
+ starting a fallback sequence for it.
+ - increase mesh max activation count for capsforid long fetches.
+
+16 January 2019: Ralph
+ - Get ready for the DNS flag day: remove EDNS lame procedure, do not
+ re-query without EDNS after timeout.
+
+15 January 2019: Wouter
+ - In the out of order processing, reset byte count for (potential)
+ partial read.
+ - Review fixes in out of order processing.
+
+14 January 2019: Wouter
+ - streamtcp option -a send queries consecutively and prints answers
+ as they arrive.
+ - Fix for out of order processing administration quit cleanup.
+ - unit test for tcp out of order processing.
+
+11 January 2019: Wouter
+ - Initial commit for out-of-order processing for TCP and TLS.
+
+9 January 2019: Wouter
+ - Log query name for looping module errors.
+
+8 January 2019: Wouter
+ - Fix syntax in comment of local alias processing.
+ - Fix NSEC3 record that is returned in wildcard replies from
+ auth-zone zones with NSEC3 and wildcards.
+
+7 January 2019: Wouter
+ - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN,
+ and server tcp fastopen is enabled at compile time.
+ - Document interaction between the tls-upstream option in the server
+ section and forward-tls-upstream option in the forward-zone sections.
+ - Add contrib/unbound-fuzzme.patch from Jacob Hoffman-Andrews,
+ the patch adds a program used for fuzzing.
+
+12 December 2018: Wouter
+ - Fix for crash in dns64 module if response is null.
+
+10 December 2018: Wouter
+ - Fix config parser memory leaks.
+ - ip-ratelimit-factor of 1 allows all traffic through, instead of the
+ previous blocking everything.
+ - Fix for FreeBSD port make with dnscrypt and dnstap enabled.
+ - Fix #4206: support openssl 1.0.2 for TLS hostname verification,
+ alongside the 1.1.0 and later support that is already there.
+ - Fixup openssl 1.0.2 compile
+
+6 December 2018: Wouter
+ - Fix dns64 allocation in wrong region for returned internal queries.
+
+3 December 2018: Wouter
+ - Fix icon, no ragged edges and nicer resolutions available, for eg.
+ Win 7 and Windows 10 display.
+ - cache-max-ttl also defines upperbound of initial TTL in response.
+
+30 November 2018: Wouter
+ - Patch for typo in unbound.conf man page.
+ - log-tag-queryreply: yes in unbound.conf tags the log-queries and
+ log-replies in the log file for easier log filter maintenance.
+
+29 November 2018: Wouter
+ - iana portlist updated.
+ - Fix chroot auth-zone fix to remove chroot prefix.
+ - tag for 1.8.2rc1, which became 1.8.2 on 4 dec 2018, with icon
+ updated. Trunk contains 1.8.3 in development.
+ Which became 1.8.3 on 11 december with only the dns64 fix of 6 dec.
+ Trunk then became 1.8.4 in development.
+ - Fix that unbound-checkconf does not complains if the config file
+ is not placed inside the chroot.
+ - Refuse to start with no ports.
+ - Remove clang analysis warnings.
+
+28 November 2018: Wouter
+ - Fix leak in chroot fix for auth-zone.
+ - Fix clang analysis for outside directory build test.
+
+27 November 2018: Wouter
+ - Fix DNS64 to not store intermediate results in cache, this avoids
+ other threads from picking up the wrong data. The module restores
+ the previous no_cache_store setting when the the module is finished.
+ - Fix #4208: 'stub-no-cache' and 'forward-no-cache' not work.
+ - New and better fix for Fix #4193: Fix that prefetch failure does
+ not overwrite valid cache entry with SERVFAIL.
+ - auth-zone give SERVFAIL when expired, fallback activates when
+ expired, and this is documented in the man page.
+ - stat count SERVFAIL downstream auth-zone queries for expired zones.
+ - Put new logos into windows installer.
+ - Fix windows compile for new rrset roundrobin fix.
+ - Update contrib fastrpz patch for latest release.
+
+26 November 2018: Wouter
+ - Fix to not set GLOB_NOSORT so the unbound.conf include: files are
+ sorted and in a predictable order.
+ - Fix #4193: Fix that prefetch failure does not overwrite valid cache
+ entry with SERVFAIL.
+ - Add unbound-control view_local_datas command, like local_datas.
+ - Fix that unbound-control can send file for view_local_datas.
+
+22 November 2018: Wouter
+ - With ./configure --with-pyunbound --with-pythonmodule
+ PYTHON_VERSION=3.6 or with 2.7 unbound can compile and unit tests
+ succeed for the python module.
+ - pythonmod logs the python error and traceback on failure.
+ - ignore debug python module for test in doxygen output.
+ - review fixes for python module.
+ - Fix #4209: Crash in libunbound when called from getdns.
+ - auth zone zonefiles can be in a chroot, the chroot directory
+ components are removed before use.
+ - Fix that empty zonefile means the zonefile is not set and not used.
+ - make depend.
+
+21 November 2018: Wouter
+ - Scrub NS records from NODATA responses as well.
+
+20 November 2018: Wouter
+ - Scrub NS records from NXDOMAIN responses to stop fragmentation
+ poisoning of the cache.
+ - Add patch from Jan Vcelak for pythonmod,
+ add sockaddr_storage getters, add support for query callbacks,
+ allow raw address access via comm_reply and update API documentation.
+ - Removed compile warnings in pythonmod sockaddr routines.
+
+19 November 2018: Wouter
+ - Support SO_REUSEPORT_LB in FreeBSD 12 with the so-reuseport: yes
+ option in unbound.conf.
+
+6 November 2018: Ralph
+ - Bugfix min-client-subnet-ipv6
+
+25 October 2018: Ralph
+ - Add min-client-subnet-ipv6 and min-client-subnet-ipv4 options.
+
+25 October 2018: Wouter
+ - Fix #4191: NXDOMAIN vs SERVFAIL during dns64 PTR query.
+ - Fix #4190: Please create a "ANY" deny option, adds the option
+ deny-any: yes in unbound.conf. This responds with an empty message
+ to queries of type ANY.
+ - Fix #4141: More randomness to rrset-roundrobin.
+ - Fix #4132: Openness/closeness of RANGE intervals in rpl files.
+ - Fix #4126: RTT_band too low on VSAT links with 600+ms latency,
+ adds the option unknown-server-time-limit to unbound.conf that
+ can be increased to avoid the problem.
+ - remade makefile dependencies.
+ - Fix #4152: Logs shows wrong time when using log-time-ascii: yes.
+
+24 October 2018: Ralph
+ - Add markdel function to ECS slabhash.
+ - Limit ECS scope returned to client to the scope used for caching.
+ - Make lint like previous #4154 fix.
+
+22 October 2018: Wouter
+ - Fix #4192: unbound-control-setup generates keys not readable by
+ group.
+ - check that the dnstap socket file can be opened and exists, print
+ error if not.
+ - Fix #4154: make ECS_MAX_TREESIZE configurable, with
+ the max-ecs-tree-size-ipv4 and max-ecs-tree-size-ipv6 options.
+
+22 October 2018: Ralph
+ - Change fast-server-num default to 3.
+
+8 October 2018: Ralph
+ - Add fast-server-permil and fast-server-num options.
+ - Deprecate low-rtt and low-rtt-permil options.
+
8 October 2018: Wouter
- - fastrpz.patch fix included.
+ - Squelch log of failed to tcp initiate after TCP Fastopen failure.
+
+5 October 2018: Wouter
+ - Squelch EADDRNOTAVAIL errors when the interface goes away,
+ this omits 'can't assign requested address' errors unless
+ verbosity is set to a high value.
+ - Set default for so-reuseport to no for FreeBSD. It is enabled
+ by default for Linux and DragonFlyBSD. The setting can
+ be configured in unbound.conf to override the default.
+ - iana port update.
+
+2 October 2018: Wouter
+ - updated contrib/fastrpz.patch to apply for this version
+ - dnscrypt.c removed sizeof to get array bounds.
+ - Fix testlock code to set noreturn on error routine.
+ - Remove unused variable from contrib fastrpz/rpz.c and
+ remove unused diagnostic pragmas that themselves generate warnings
+ - clang analyze test is used only when assertions are enabled.
1 October 2018: Wouter
- - tag for release 1.8.1rc1.
+ - tag for release 1.8.1rc1. Became release 1.8.1 on 8 oct, with
+ fastrpz.patch fix included. Trunk has 1.8.2 in development.
27 September 2018: Wouter
- Fix #4188: IPv6 forwarders without ipv6 result in SERVFAIL, fixes
diff --git a/doc/README b/doc/README
index c817e34be24c..0afef47bee24 100644
--- a/doc/README
+++ b/doc/README
@@ -1,4 +1,4 @@
-README for Unbound 1.8.1
+README for Unbound 1.9.0
Copyright 2007 NLnet Labs
http://unbound.net
diff --git a/doc/example.conf.in b/doc/example.conf.in
index fc8bc6b0de8d..bbfaf66ddaed 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
@@ -1,7 +1,7 @@
#
# Example configuration file.
#
-# See unbound.conf(5) man page, version 1.8.1.
+# See unbound.conf(5) man page, version 1.9.0.
#
# this is a comment.
@@ -123,6 +123,9 @@ server:
# Suggested values are 512 to 4096. Default is 4096. 65536 disables it.
# max-udp-size: 4096
+ # max memory to use for stream(tcp and tls) waiting result buffers.
+ # stream-wait-size: 4m
+
# buffer size for handling DNS data. No messages larger than this
# size can be sent or received, by UDP or TCP. In bytes.
# msg-buffer-size: 65552
@@ -145,6 +148,10 @@ server:
# msec to wait before close of port on timeout UDP. 0 disables.
# delay-close: 0
+ # msec for waiting for an unknown server to reply. Increase if you
+ # are behind a slow satellite link, to eg. 1128.
+ # unknown-server-time-limit: 376
+
# the amount of memory to use for the RRset cache.
# plain value in bytes or you can append k, m or G. default is "4Mb".
# rrset-cache-size: 4m
@@ -318,6 +325,10 @@ server:
# timetoresolve, fromcache and responsesize.
# log-replies: no
+ # log with tag 'query' and 'reply' instead of 'info' for
+ # filtering log-queries and log-replies from the log.
+ # log-tag-queryreply: no
+
# log the local-zone actions, like local-zone type inform is enabled
# also for the other local zone types.
# log-local-actions: no
@@ -449,6 +460,9 @@ server:
# if yes, perform key lookups adjacent to normal lookups.
# prefetch-key: no
+ # deny queries of type ANY with an empty response.
+ # deny-any: no
+
# if yes, Unbound rotates RRSet order in response.
# rrset-roundrobin: no
@@ -701,6 +715,19 @@ server:
# tls-service-pem: "path/to/publiccertfile.pem"
# tls-port: 853
+ # cipher setting for TLSv1.2
+ # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256"
+ # cipher setting for TLSv1.3
+ # tls-ciphersuites: "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"
+
+ # Add the secret file for TLS Session Ticket.
+ # Secret file must be 80 bytes of random data.
+ # First key use to encrypt and decrypt TLS session tickets.
+ # Other keys use to decrypt only.
+ # requires restart to take effect.
+ # tls-session-ticket-keys: "path/to/secret_file1"
+ # tls-session-ticket-keys: "path/to/secret_file2"
+
# request upstream over TLS (with plain DNS inside the TLS stream).
# Default is no. Can be turned on and off with unbound-control.
# tls-upstream: no
@@ -757,12 +784,12 @@ server:
# Limit the number of connections simultaneous from a netblock
# tcp-connection-limit: 192.0.2.0/24 12
- # what is considered a low rtt (ping time for upstream server), in msec
- # low-rtt: 45
- # select low rtt this many times out of 1000. 0 means the fast server
- # select is disabled. prefetches are not sped up.
- # low-rtt-permil: 0
-
+ # select from the fastest servers this many times out of 1000. 0 means
+ # the fast server select is disabled. prefetches are not sped up.
+ # fast-server-permil: 0
+ # the number of servers that will be used in the fast server selection.
+ # fast-server-num: 3
+
# Specific options for ipsecmod. unbound needs to be configured with
# --enable-ipsecmod for these to take effect.
#
@@ -879,15 +906,25 @@ remote-control:
# notifies.
# auth-zone:
# name: "."
-# for-downstream: no
+# master: 199.9.14.201 # b.root-servers.net
+# master: 192.33.4.12 # c.root-servers.net
+# master: 199.7.91.13 # d.root-servers.net
+# master: 192.5.5.241 # f.root-servers.net
+# master: 192.112.36.4 # g.root-servers.net
+# master: 193.0.14.129 # k.root-servers.net
+# master: 192.0.47.132 # xfr.cjr.dns.icann.org
+# master: 192.0.32.132 # xfr.lax.dns.icann.org
+# master: 2001:500:200::b # b.root-servers.net
+# master: 2001:500:2::c # c.root-servers.net
+# master: 2001:500:2d::d # d.root-servers.net
+# master: 2001:500:2f::f # f.root-servers.net
+# master: 2001:500:12::d0d # g.root-servers.net
+# master: 2001:7fd::1 # k.root-servers.net
+# master: 2620:0:2830:202::132 # xfr.cjr.dns.icann.org
+# master: 2620:0:2d0:202::132 # xfr.lax.dns.icann.org
+# fallback-enabled: yes
+# for-downstream: no
# for-upstream: yes
-# fallback-enabled: yes
-# master: b.root-servers.net
-# master: c.root-servers.net
-# master: e.root-servers.net
-# master: f.root-servers.net
-# master: g.root-servers.net
-# master: k.root-servers.net
# auth-zone:
# name: "example.org"
# for-downstream: yes
diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in
index 003c867b1a7f..6115a977a501 100644
--- a/doc/libunbound.3.in
+++ b/doc/libunbound.3.in
@@ -1,4 +1,4 @@
-.TH "libunbound" "3" "Oct 8, 2018" "NLnet Labs" "unbound 1.8.1"
+.TH "libunbound" "3" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
.\"
.\" libunbound.3 -- unbound library functions manual
.\"
@@ -20,6 +20,7 @@
.B ub_ctx_config,
.B ub_ctx_set_fwd,
.B ub_ctx_set_stub,
+.B ub_ctx_set_tls,
.B ub_ctx_resolvconf,
.B ub_ctx_hosts,
.B ub_ctx_add_ta,
@@ -43,7 +44,7 @@
.B ub_ctx_zone_remove,
.B ub_ctx_data_add,
.B ub_ctx_data_remove
-\- Unbound DNS validating resolver 1.8.1 functions.
+\- Unbound DNS validating resolver 1.9.0 functions.
.SH "SYNOPSIS"
.B #include <unbound.h>
.LP
@@ -72,6 +73,9 @@
\fIint\fR isprime);
.LP
\fIint\fR
+\fBub_ctx_set_tls\fR(\fIstruct ub_ctx*\fR ctx, \fIint\fR tls);
+.LP
+\fIint\fR
\fBub_ctx_resolvconf\fR(\fIstruct ub_ctx*\fR ctx, \fIchar*\fR fname);
.LP
\fIint\fR
@@ -227,6 +231,12 @@ for different zones, or to add multiple addresses for a particular zone.
At this time it is only possible to set configuration before the
first resolve is done.
.TP
+.B ub_ctx_set_tls
+Enable DNS over TLS (DoT) for machines set with
+.B ub_ctx_set_fwd.
+At this time it is only possible to set configuration before the
+first resolve is done.
+.TP
.B ub_ctx_resolvconf
By default the root servers are queried and full resolver mode is used, but
you can use this call to read the list of nameservers to use from the
diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in
index 089aa47dfacb..226297f34dce 100644
--- a/doc/unbound-anchor.8.in
+++ b/doc/unbound-anchor.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-anchor" "8" "Oct 8, 2018" "NLnet Labs" "unbound 1.8.1"
+.TH "unbound-anchor" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
.\"
.\" unbound-anchor.8 -- unbound anchor maintenance utility manual
.\"
diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in
index 60f56267ff15..9e5df52c98a1 100644
--- a/doc/unbound-checkconf.8.in
+++ b/doc/unbound-checkconf.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-checkconf" "8" "Oct 8, 2018" "NLnet Labs" "unbound 1.8.1"
+.TH "unbound-checkconf" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
.\"
.\" unbound-checkconf.8 -- unbound configuration checker manual
.\"
diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in
index d176394cf2d3..f7558e5a9ed2 100644
--- a/doc/unbound-control.8.in
+++ b/doc/unbound-control.8.in
@@ -1,4 +1,4 @@
-.TH "unbound-control" "8" "Oct 8, 2018" "NLnet Labs" "unbound 1.8.1"
+.TH "unbound-control" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
.\"
.\" unbound-control.8 -- unbound remote control manual
.\"
@@ -322,6 +322,9 @@ serial check). And then the zone is transferred for a newer zone version.
.TP
.B view_local_data_remove \fIview\fR \fIname
\fIlocal_data_remove\fR for given view.
+.TP
+.B view_local_datas \fIview\fR
+Add a list of \fIlocal_data\fR for given view from stdin. Like local_datas.
.SH "EXIT CODE"
The unbound\-control program exits with status code 1 on error, 0 on success.
.SH "SET UP"
@@ -496,6 +499,10 @@ Memory in bytes in use by the iterator module.
Memory in bytes in use by the validator module. Includes the key cache and
negative cache.
.TP
+.I mem.streamwait
+Memory in bytes in used by the TCP and TLS stream wait buffers. These are
+answers waiting to be written back to the clients.
+.TP
.I histogram.<sec>.<usec>.to.<sec>.<usec>
Shows a histogram, summed over all threads. Every element counts the
recursive queries whose reply time fit between the lower and upper bound.
@@ -531,6 +538,10 @@ other servers.
Number of queries that were made using TLS towards the unbound server.
These are also counted in num.query.tcp, because TLS uses TCP.
.TP
+.I num.query.tls.resume
+Number of TLS session resumptions, these are queries over TLS towards
+the unbound server where the client negotiated a TLS session resumption key.
+.TP
.I num.query.ipv6
Number of queries that were made using IPv6 towards the unbound server.
.TP
diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in
index d3a0b42bf5e0..1c24aa601d09 100644
--- a/doc/unbound-host.1.in
+++ b/doc/unbound-host.1.in
@@ -1,4 +1,4 @@
-.TH "unbound\-host" "1" "Oct 8, 2018" "NLnet Labs" "unbound 1.8.1"
+.TH "unbound\-host" "1" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
.\"
.\" unbound-host.1 -- unbound DNS lookup utility
.\"
diff --git a/doc/unbound.8.in b/doc/unbound.8.in
index 65aa4b11d764..999ac24fcacf 100644
--- a/doc/unbound.8.in
+++ b/doc/unbound.8.in
@@ -1,4 +1,4 @@
-.TH "unbound" "8" "Oct 8, 2018" "NLnet Labs" "unbound 1.8.1"
+.TH "unbound" "8" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
.\"
.\" unbound.8 -- unbound manual
.\"
@@ -9,7 +9,7 @@
.\"
.SH "NAME"
.B unbound
-\- Unbound DNS validating resolver 1.8.1.
+\- Unbound DNS validating resolver 1.9.0.
.SH "SYNOPSIS"
.B unbound
.RB [ \-h ]
diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
index bc233fdeb0c7..2710100da9bf 100644
--- a/doc/unbound.conf.5.in
+++ b/doc/unbound.conf.5.in
@@ -1,4 +1,4 @@
-.TH "unbound.conf" "5" "Oct 8, 2018" "NLnet Labs" "unbound 1.8.1"
+.TH "unbound.conf" "5" "Feb 5, 2019" "NLnet Labs" "unbound 1.9.0"
.\"
.\" unbound.conf.5 -- unbound.conf manual
.\"
@@ -207,6 +207,16 @@ Maximum UDP response size (not applied to TCP response). 65536 disables the
udp response size maximum, and uses the choice from the client, always.
Suggested values are 512 to 4096. Default is 4096.
.TP
+.B stream\-wait\-size: \fI<number>
+Number of bytes size maximum to use for waiting stream buffers. Default is
+4 megabytes. A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes,
+megabytes or gigabytes (1024*1024 bytes in a megabyte). As TCP and TLS streams
+queue up multiple results, the amount of memory used for these buffers does
+not exceed this number, otherwise the responses are dropped. This manages
+the total memory usage of the server (under heavy use), the number of requests
+that can be queued up per connection is also limited, with further requests
+waiting in TCP buffers.
+.TP
.B msg\-buffer\-size: \fI<number>
Number of bytes size of the message buffers. Default is 65552 bytes, enough
for 64 Kb packets, the maximum DNS message size. No message larger than this
@@ -253,6 +263,12 @@ eg. 1500 msec. When timeouts happen you need extra sockets, it checks
the ID and remote IP of packets, and unwanted packets are added to the
unwanted packet counter.
.TP
+.B unknown\-server\-time\-limit: \fI<msec>
+The wait time in msec for waiting for an unknown server to reply.
+Increase this if you are behind a slow satellite link, to eg. 1128.
+That would then avoid re\-querying every initial query because it times out.
+Default is 376 msec.
+.TP
.B so\-rcvbuf: \fI<number>
If not 0, then set the SO_RCVBUF socket option to get more buffer
space on UDP port 53 incoming queries. So that short spikes on busy
@@ -314,11 +330,9 @@ Must be set to a power of 2.
.TP
.B cache\-max\-ttl: \fI<seconds>
Time to live maximum for RRsets and messages in the cache. Default is
-86400 seconds (1 day). If the maximum kicks in, responses to clients
-still get decrementing TTLs based on the original (larger) values.
-When the internal TTL expires, the cache item has expired.
+86400 seconds (1 day). When the TTL expires, the cache item has expired.
Can be set lower to force the resolver to query for data often, and not
-trust (very large) TTL values.
+trust (very large) TTL values. Downstream clients also see the lower TTL.
.TP
.B cache\-min\-ttl: \fI<seconds>
Time to live minimum for RRsets and messages in the cache. Default is 0.
@@ -436,13 +450,15 @@ TCP wireformat. The other server must support this (see
\fBtls\-service\-key\fR).
If you enable this, also configure a tls\-cert\-bundle or use tls\-win\-cert to
load CA certs, otherwise the connections cannot be authenticated.
+This option enables TLS for all of them, but if you do not set this you can
+configure TLS specifically for some forward zones with forward\-tls\-upstream. And also with stub\-tls\-upstream.
.TP
.B ssl\-upstream: \fI<yes or no>
Alternate syntax for \fBtls\-upstream\fR. If both are present in the config
file the last is used.
.TP
.B tls\-service\-key: \fI<file>
-If enabled, the server provider TLS service on its TCP sockets. The clients
+If enabled, the server provides TLS service on its TCP sockets. The clients
have to use tls\-upstream: yes. The file is the private key for the TLS
session. The public certificate is in the tls\-service\-pem file. Default
is "", turned off. Requires a restart (a reload is not enough) if changed,
@@ -488,6 +504,27 @@ List portnumbers as tls\-additional\-port, and when interfaces are defined,
eg. with the @port suffix, as this port number, they provide dns over TLS
service. Can list multiple, each on a new statement.
.TP
+.B tls-session-ticket-keys: \fI<file>
+If not "", lists files with 80 bytes of random contents that are used to
+perform TLS session resumption for clients using the unbound server.
+These files contain the secret key for the TLS session tickets.
+First key use to encrypt and decrypt TLS session tickets.
+Other keys use to decrypt only. With this you can roll over to new keys,
+by generating a new first file and allowing decrypt of the old file by
+listing it after the first file for some time, after the wait clients are not
+using the old key any more and the old key can be removed.
+One way to create the file is dd if=/dev/random bs=1 count=80 of=ticket.dat
+The first 16 bytes should be different from the old one if you create a second key, that is the name used to identify the key. Then there is 32 bytes random
+data for an AES key and then 32 bytes random data for the HMAC key.
+.TP
+.B tls\-ciphers: \fI<string with cipher list>
+Set the list of ciphers to allow when serving TLS. Use "" for defaults,
+and that is the default.
+.TP
+.B tls\-ciphersuites: \fI<string with ciphersuites list>
+Set the list of ciphersuites to allow when serving TLS. This is for newer
+TLS 1.3 connections. Use "" for defaults, and that is the default.
+.TP
.B use\-systemd: \fI<yes or no>
Enable or disable systemd socket activation.
Default is no.
@@ -655,6 +692,11 @@ Default is no. Note that it takes time to print these
lines which makes the server (significantly) slower. Odd (nonprintable)
characters in names are printed as '?'.
.TP
+.B log\-tag\-queryreply: \fI<yes or no>
+Prints the word 'query' and 'reply' with log\-queries and log\-replies.
+This makes filtering logs easier. The default is off (for backwards
+compatibility).
+.TP
.B log\-local\-actions: \fI<yes or no>
Print log lines to inform about local zone actions. These lines are like the
local\-zone type inform prints out, but they are also printed for the other
@@ -848,12 +890,18 @@ keep the cache up to date. Default is no. Turning it on gives about
10 percent more traffic and load on the machine, but popular items do
not expire from the cache.
.TP
-.B prefetch-key: \fI<yes or no>
+.B prefetch\-key: \fI<yes or no>
If yes, fetch the DNSKEYs earlier in the validation process, when a DS
record is encountered. This lowers the latency of requests. It does use
a little more CPU. Also if the cache is set to 0, it is no use. Default is no.
.TP
-.B rrset-roundrobin: \fI<yes or no>
+.B deny\-any: \fI<yes or no>
+If yes, deny queries of type ANY with an empty response. Default is no.
+If disabled, unbound responds with a short list of resource records if some
+can be found in the cache and makes the upstream type ANY query if there
+are none.
+.TP
+.B rrset\-roundrobin: \fI<yes or no>
If yes, Unbound rotates RRSet order in response (the random number is taken
from the query ID, for speed and thread safety). Default is no.
.TP
@@ -1391,22 +1439,20 @@ This can make ordinary queries complete (if repeatedly queried for),
and enter the cache, whilst also mitigating the traffic flow by the
factor given.
.TP 5
-.B low\-rtt: \fI<msec time>
-Set the time in millisecond that is considere a low ping time for fast
-server selection with the low\-rtt\-permil option, that turns this on or off.
-The default is 45 msec, a number from IPv6 quick response documents.
+.B fast\-server\-permil: \fI<number>
+Specify how many times out of 1000 to pick from the set of fastest servers.
+0 turns the feature off. A value of 900 would pick from the fastest
+servers 90 percent of the time, and would perform normal exploration of random
+servers for the remaining time. When prefetch is enabled (or serve\-expired),
+such prefetches are not sped up, because there is no one waiting for it, and it
+presents a good moment to perform server exploration. The
+\fBfast\-server\-num\fR option can be used to specify the size of the fastest
+servers set. The default for fast\-server\-permil is 0.
.TP 5
-.B low\-rtt\-permil: \fI<number>
-Specify how many times out of 1000 to pick the fast server from the low
-rtt band. 0 turns the feature off. A value of 900 would pick the fast
-server when such fast servers are available 90 percent of the time, and
-the remaining time perform normal exploration of random servers.
-When prefetch is enabled (or serve\-expired), such prefetches are not
-sped up, because there is no one waiting for it, and it presents a good
-moment to perform server exploration. The low\-rtt option can be used
-to specify which servers are picked for fast server selection, servers
-with a ping roundtrip time below that value are considered.
-The default for low\-rtt\-permil is 0.
+.B fast\-server\-num: \fI<number>
+Set the number of servers that should be used for fast server selection. Only
+use the fastest specified number of servers with the fast\-server\-permil
+option, that turns this on or off. The default is to use the fastest 3 servers.
.SS "Remote Control Options"
In the
.B remote\-control:
@@ -1604,6 +1650,13 @@ lookups of that data.
Authority zones can be read from zonefile. And can be kept updated via
AXFR and IXFR. After update the zonefile is rewritten. The update mechanism
uses the SOA timer values and performs SOA UDP queries to detect zone changes.
+.LP
+If the update fetch fails, the timers in the SOA record are used to time
+another fetch attempt. Until the SOA expiry timer is reached. Then the
+zone is expired. When a zone is expired, queries are SERVFAIL, and
+any new serial number is accepted from the master (even if older), and if
+fallback is enabled, the fallback activates to fetch from the upstream instead
+of the SERVFAIL.
.TP
.B name: \fI<zone name>
Name of the authority zone.
@@ -1843,6 +1896,24 @@ to expose to third parties for IPv6. Defaults to 56.
.B max\-client\-subnet\-ipv4: \fI<number>\fR
Specifies the maximum prefix length of the client source address we are willing
to expose to third parties for IPv4. Defaults to 24.
+.TP
+.B min\-client\-subnet\-ipv6: \fI<number>\fR
+Specifies the minimum prefix length of the IPv6 source mask we are willing to
+accept in queries. Shorter source masks result in REFUSED answers. Source mask
+of 0 is always accepted. Default is 0.
+.TP
+.B min\-client\-subnet\-ipv4: \fI<number>\fR
+Specifies the minimum prefix length of the IPv4 source mask we are willing to
+accept in queries. Shorter source masks result in REFUSED answers. Source mask
+of 0 is always accepted. Default is 0.
+.TP
+.B max\-ecs\-tree\-size\-ipv4: \fI<number>\fR
+Specifies the maximum number of subnets ECS answers kept in the ECS radix tree.
+This number applies for each qname/qclass/qtype tuple. Defaults to 100.
+.TP
+.B max\-ecs\-tree\-size\-ipv6: \fI<number>\fR
+Specifies the maximum number of subnets ECS answers kept in the ECS radix tree.
+This number applies for each qname/qclass/qtype tuple. Defaults to 100.
.SS "Opportunistic IPsec Support Module Options"
.LP
The IPsec module must be configured in the \fBmodule\-config:\fR "ipsecmod
diff --git a/doc/unbound.doxygen b/doc/unbound.doxygen
index fe39876816b5..24f4203a83ed 100644
--- a/doc/unbound.doxygen
+++ b/doc/unbound.doxygen
@@ -612,17 +612,22 @@ RECURSIVE = YES
EXCLUDE = ./build \
./compat \
+ ./contrib \
util/configparser.c \
util/configparser.h \
util/configlexer.c \
util/locks.h \
+ pythonmod/doc \
+ pythonmod/examples \
pythonmod/unboundmodule.py \
pythonmod/interface.h \
- pythonmod/examples/resgen.py \
- pythonmod/examples/resmod.py \
- pythonmod/examples/resip.py \
+ pythonmod/ubmodule-msg.py \
+ pythonmod/ubmodule-tst.py \
+ unboundmodule.py \
libunbound/python/unbound.py \
libunbound/python/libunbound_wrap.c \
+ libunbound/python/doc \
+ libunbound/python/examples \
./ldns-src \
doc/control_proto_spec.txt \
doc/requirements.txt
diff --git a/edns-subnet/addrtree.c b/edns-subnet/addrtree.c
index 9a02db062c51..180a0227917c 100644
--- a/edns-subnet/addrtree.c
+++ b/edns-subnet/addrtree.c
@@ -119,7 +119,7 @@ node_size(const struct addrtree *tree, const struct addrnode *n)
struct addrtree *
addrtree_create(addrlen_t max_depth, void (*delfunc)(void *, void *),
- size_t (*sizefunc)(void *), void *env, unsigned int max_node_count)
+ size_t (*sizefunc)(void *), void *env, uint32_t max_node_count)
{
struct addrtree *tree;
log_assert(delfunc != NULL);
diff --git a/edns-subnet/addrtree.h b/edns-subnet/addrtree.h
index 71d9d2ec6c9b..1aea54e01f79 100644
--- a/edns-subnet/addrtree.h
+++ b/edns-subnet/addrtree.h
@@ -66,10 +66,10 @@ struct addrtree {
struct addrnode *root;
/** Number of elements in the tree (not always equal to number of
* nodes) */
- unsigned int node_count;
+ uint32_t node_count;
/** Maximum number of allowed nodes, will be enforced by LRU list.
* Excluding the root node, 0 for unlimited */
- unsigned int max_node_count;
+ uint32_t max_node_count;
/** Size of tree in bytes */
size_t size_bytes;
/** Maximum prefix length we are willing to cache. */
@@ -137,7 +137,7 @@ size_t addrtree_size(const struct addrtree *tree);
*/
struct addrtree *
addrtree_create(addrlen_t max_depth, void (*delfunc)(void *, void *),
- size_t (*sizefunc)(void *), void *env, unsigned int max_node_count);
+ size_t (*sizefunc)(void *), void *env, uint32_t max_node_count);
/**
* Free tree and all nodes below.
diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c
index 1a5044e427cc..69e743ddc364 100644
--- a/edns-subnet/subnetmod.c
+++ b/edns-subnet/subnetmod.c
@@ -55,8 +55,7 @@
#include "util/config_file.h"
#include "util/data/msgreply.h"
#include "sldns/sbuffer.h"
-
-#define ECS_MAX_TREESIZE 100
+#include "iterator/iter_utils.h"
/** externally called */
void
@@ -93,6 +92,7 @@ subnet_new_qstate(struct module_qstate *qstate, int id)
return 0;
qstate->minfo[id] = sq;
memset(sq, 0, sizeof(*sq));
+ sq->started_no_cache_store = qstate->no_cache_store;
return 1;
}
@@ -150,7 +150,9 @@ int ecs_whitelist_check(struct query_info* qinfo,
/* Cache by default, might be disabled after parsing EDNS option
* received from nameserver. */
- qstate->no_cache_store = 0;
+ if(!iter_stub_fwd_no_cache(qstate, &qstate->qinfo)) {
+ qstate->no_cache_store = 0;
+ }
if(sq->ecs_server_out.subnet_validdata && ((sq->subnet_downstream &&
qstate->env->cfg->client_subnet_always_forward) ||
@@ -177,6 +179,14 @@ int ecs_whitelist_check(struct query_info* qinfo,
}
+void
+subnet_markdel(void* key)
+{
+ struct msgreply_entry *e = (struct msgreply_entry*)key;
+ e->key.qtype = 0;
+ e->key.qclass = 0;
+}
+
int
subnetmod_init(struct module_env *env, int id)
{
@@ -193,6 +203,7 @@ subnetmod_init(struct module_env *env, int id)
HASH_DEFAULT_STARTARRAY, env->cfg->msg_cache_size,
msg_cache_sizefunc, query_info_compare, query_entry_delete,
subnet_data_delete, NULL);
+ slabhash_setmarkdel(sn_env->subnet_msg_cache, &subnet_markdel);
if(!sn_env->subnet_msg_cache) {
log_err("subnet: could not create cache");
free(sn_env);
@@ -291,13 +302,13 @@ get_tree(struct subnet_msg_cache_data *data, struct ecs_data *edns,
if (!data->tree4)
data->tree4 = addrtree_create(
cfg->max_client_subnet_ipv4, &delfunc,
- &sizefunc, env, ECS_MAX_TREESIZE);
+ &sizefunc, env, cfg->max_ecs_tree_size_ipv4);
tree = data->tree4;
} else {
if (!data->tree6)
data->tree6 = addrtree_create(
cfg->max_client_subnet_ipv6, &delfunc,
- &sizefunc, env, ECS_MAX_TREESIZE);
+ &sizefunc, env, cfg->max_ecs_tree_size_ipv6);
tree = data->tree6;
}
return tree;
@@ -487,9 +498,11 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq)
* is still usefull to put it in the edns subnet cache for
* when a client explicitly asks for subnet specific answer. */
verbose(VERB_QUERY, "subnet: Authority indicates no support");
- lock_rw_wrlock(&sne->biglock);
- update_cache(qstate, id);
- lock_rw_unlock(&sne->biglock);
+ if(!sq->started_no_cache_store) {
+ lock_rw_wrlock(&sne->biglock);
+ update_cache(qstate, id);
+ lock_rw_unlock(&sne->biglock);
+ }
if (sq->subnet_downstream)
cp_edns_bad_response(c_out, c_in);
return module_finished;
@@ -515,7 +528,9 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq)
}
lock_rw_wrlock(&sne->biglock);
- update_cache(qstate, id);
+ if(!sq->started_no_cache_store) {
+ update_cache(qstate, id);
+ }
sne->num_msg_nocache++;
lock_rw_unlock(&sne->biglock);
@@ -526,6 +541,19 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq)
c_out->subnet_source_mask = c_in->subnet_source_mask;
memcpy(&c_out->subnet_addr, &c_in->subnet_addr, INET6_SIZE);
c_out->subnet_scope_mask = s_in->subnet_scope_mask;
+ /* Limit scope returned to client to scope used for caching. */
+ if(c_out->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) {
+ if(c_out->subnet_scope_mask >
+ qstate->env->cfg->max_client_subnet_ipv4) {
+ c_out->subnet_scope_mask =
+ qstate->env->cfg->max_client_subnet_ipv4;
+ }
+ }
+ else if(c_out->subnet_scope_mask >
+ qstate->env->cfg->max_client_subnet_ipv6) {
+ c_out->subnet_scope_mask =
+ qstate->env->cfg->max_client_subnet_ipv6;
+ }
c_out->subnet_validdata = 1;
}
return module_finished;
@@ -697,6 +725,17 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
return;
}
+ /* Limit to minimum allowed source mask */
+ if(sq->ecs_client_in.subnet_source_mask != 0 && (
+ (sq->ecs_client_in.subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4 &&
+ sq->ecs_client_in.subnet_source_mask < qstate->env->cfg->min_client_subnet_ipv4) ||
+ (sq->ecs_client_in.subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP6 &&
+ sq->ecs_client_in.subnet_source_mask < qstate->env->cfg->min_client_subnet_ipv6))) {
+ qstate->return_rcode = LDNS_RCODE_REFUSED;
+ qstate->ext_state[id] = module_finished;
+ return;
+ }
+
lock_rw_wrlock(&sne->biglock);
if (lookup_and_reply(qstate, id, sq)) {
sne->num_msg_cache++;
@@ -753,6 +792,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
ecs_opt_list_append(&sq->ecs_client_out,
&qstate->edns_opts_front_out, qstate);
}
+ qstate->no_cache_store = sq->started_no_cache_store;
return;
}
if(sq && outbound) {
diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h
index f417a64a45b0..e408627b0abd 100644
--- a/edns-subnet/subnetmod.h
+++ b/edns-subnet/subnetmod.h
@@ -83,6 +83,8 @@ struct subnet_qstate {
struct ecs_data ecs_server_out;
int subnet_downstream;
int subnet_sent;
+ /** has the subnet module been started with no_cache_store? */
+ int started_no_cache_store;
};
void subnet_data_delete(void* d, void* ATTR_UNUSED(arg));
@@ -131,4 +133,7 @@ int ecs_edns_back_parsed(struct module_qstate* qstate, int id, void* cbargs);
int ecs_query_response(struct module_qstate* qstate, struct dns_msg* response,
int id, void* cbargs);
+/** mark subnet msg to be deleted */
+void subnet_markdel(void* key);
+
#endif /* SUBNETMOD_H */
diff --git a/install-sh b/install-sh
index 0b0fdcbba69a..ea4c8234c41a 100755
--- a/install-sh
+++ b/install-sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/sh
# install - install a program, script, or datafile
scriptversion=2013-12-25.23; # UTC
diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c
index b354eaa285b0..3f1438a4ff3d 100644
--- a/iterator/iter_scrub.c
+++ b/iterator/iter_scrub.c
@@ -316,6 +316,18 @@ sub_of_pkt(sldns_buffer* pkt, uint8_t* zone, uint8_t* comprname)
return dname_subdomain_c(zone, buf);
}
+/** Check if there are SOA records in the authority section (negative) */
+static int
+soa_in_auth(struct msg_parse* msg)
+{
+ struct rrset_parse* rrset;
+ for(rrset = msg->rrset_first; rrset; rrset = rrset->rrset_all_next)
+ if(rrset->type == LDNS_RR_TYPE_SOA &&
+ rrset->section == LDNS_SECTION_AUTHORITY)
+ return 1;
+ return 0;
+}
+
/**
* This routine normalizes a response. This includes removing "irrelevant"
* records from the answer and additional sections and (re)synthesizing
@@ -497,6 +509,19 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg,
"RRset:", pkt, msg, prev, &rrset);
continue;
}
+ /* we don't want NS sets for NXDOMAIN answers,
+ * because they could contain poisonous contents,
+ * from. eg. fragmentation attacks, inserted after
+ * long RRSIGs in the packet get to the packet
+ * border and such */
+ /* also for NODATA answers */
+ if(FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NXDOMAIN ||
+ (FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NOERROR
+ && soa_in_auth(msg) && msg->an_rrsets == 0)) {
+ remove_rrset("normalize: removing irrelevant "
+ "RRset:", pkt, msg, prev, &rrset);
+ continue;
+ }
if(nsset == NULL) {
nsset = rrset;
} else {
@@ -595,18 +620,6 @@ store_rrset(sldns_buffer* pkt, struct msg_parse* msg, struct module_env* env,
(void)rrset_cache_update(env->rrset_cache, &ref, env->alloc, now);
}
-/** Check if there are SOA records in the authority section (negative) */
-static int
-soa_in_auth(struct msg_parse* msg)
-{
- struct rrset_parse* rrset;
- for(rrset = msg->rrset_first; rrset; rrset = rrset->rrset_all_next)
- if(rrset->type == LDNS_RR_TYPE_SOA &&
- rrset->section == LDNS_SECTION_AUTHORITY)
- return 1;
- return 0;
-}
-
/**
* Check if right hand name in NSEC is within zone
* @param rrset: the NSEC rrset
diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c
index 90c8cf114e33..4ac8efd0d17a 100644
--- a/iterator/iter_utils.c
+++ b/iterator/iter_utils.c
@@ -282,10 +282,13 @@ iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env,
static int
iter_fill_rtt(struct iter_env* iter_env, struct module_env* env,
uint8_t* name, size_t namelen, uint16_t qtype, time_t now,
- struct delegpt* dp, int* best_rtt, struct sock_list* blacklist)
+ struct delegpt* dp, int* best_rtt, struct sock_list* blacklist,
+ size_t* num_suitable_results)
{
int got_it = 0;
struct delegpt_addr* a;
+ *num_suitable_results = 0;
+
if(dp->bogus)
return 0; /* NS bogus, all bogus, nothing found */
for(a=dp->result_list; a; a = a->next_result) {
@@ -301,11 +304,58 @@ iter_fill_rtt(struct iter_env* iter_env, struct module_env* env,
} else if(a->sel_rtt < *best_rtt) {
*best_rtt = a->sel_rtt;
}
+ (*num_suitable_results)++;
}
}
return got_it;
}
+/** compare two rtts, return -1, 0 or 1 */
+static int
+rtt_compare(const void* x, const void* y)
+{
+ if(*(int*)x == *(int*)y)
+ return 0;
+ if(*(int*)x > *(int*)y)
+ return 1;
+ return -1;
+}
+
+/** get RTT for the Nth fastest server */
+static int
+nth_rtt(struct delegpt_addr* result_list, size_t num_results, size_t n)
+{
+ int rtt_band;
+ size_t i;
+ int* rtt_list, *rtt_index;
+
+ if(num_results < 1 || n >= num_results) {
+ return -1;
+ }
+
+ rtt_list = calloc(num_results, sizeof(int));
+ if(!rtt_list) {
+ log_err("malloc failure: allocating rtt_list");
+ return -1;
+ }
+ rtt_index = rtt_list;
+
+ for(i=0; i<num_results && result_list; i++) {
+ if(result_list->sel_rtt != -1) {
+ *rtt_index = result_list->sel_rtt;
+ rtt_index++;
+ }
+ result_list=result_list->next_result;
+ }
+ qsort(rtt_list, num_results, sizeof(*rtt_list), rtt_compare);
+
+ log_assert(n > 0);
+ rtt_band = rtt_list[n-1];
+ free(rtt_list);
+
+ return rtt_band;
+}
+
/** filter the address list, putting best targets at front,
* returns number of best targets (or 0, no suitable targets) */
static int
@@ -314,12 +364,13 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env,
struct delegpt* dp, int* selected_rtt, int open_target,
struct sock_list* blacklist, time_t prefetch)
{
- int got_num = 0, low_rtt = 0, swap_to_front, rtt_band = RTT_BAND;
+ int got_num = 0, low_rtt = 0, swap_to_front, rtt_band = RTT_BAND, nth;
+ size_t num_results;
struct delegpt_addr* a, *n, *prev=NULL;
/* fillup sel_rtt and find best rtt in the bunch */
got_num = iter_fill_rtt(iter_env, env, name, namelen, qtype, now, dp,
- &low_rtt, blacklist);
+ &low_rtt, blacklist, &num_results);
if(got_num == 0)
return 0;
if(low_rtt >= USEFUL_SERVER_TOP_TIMEOUT &&
@@ -329,14 +380,19 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env,
return 0 to force the caller to fetch more */
}
- if(env->cfg->low_rtt_permil != 0 && prefetch == 0 &&
- low_rtt < env->cfg->low_rtt &&
- ub_random_max(env->rnd, 1000) < env->cfg->low_rtt_permil) {
+ if(env->cfg->fast_server_permil != 0 && prefetch == 0 &&
+ num_results > env->cfg->fast_server_num &&
+ ub_random_max(env->rnd, 1000) < env->cfg->fast_server_permil) {
/* the query is not prefetch, but for a downstream client,
- * there is a low_rtt (fast) server. We choose that x% of the
- * time */
- /* pick rtt numbers from 0..LOWBAND_RTT */
- rtt_band = env->cfg->low_rtt - low_rtt;
+ * there are more servers available then the fastest N we want
+ * to choose from. Limit our choice to the fastest servers. */
+ nth = nth_rtt(dp->result_list, num_results,
+ env->cfg->fast_server_num);
+ if(nth > 0) {
+ rtt_band = nth - low_rtt;
+ if(rtt_band > RTT_BAND)
+ rtt_band = RTT_BAND;
+ }
}
got_num = 0;
@@ -1210,3 +1266,50 @@ int iter_dp_cangodown(struct query_info* qinfo, struct delegpt* dp)
return 0;
return 1;
}
+
+int
+iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf)
+{
+ struct iter_hints_stub *stub;
+ struct delegpt *dp;
+
+ /* Check for stub. */
+ stub = hints_lookup_stub(qstate->env->hints, qinf->qname,
+ qinf->qclass, NULL);
+ dp = forwards_lookup(qstate->env->fwds, qinf->qname, qinf->qclass);
+
+ /* see if forward or stub is more pertinent */
+ if(stub && stub->dp && dp) {
+ if(dname_strict_subdomain(dp->name, dp->namelabs,
+ stub->dp->name, stub->dp->namelabs)) {
+ stub = NULL; /* ignore stub, forward is lower */
+ } else {
+ dp = NULL; /* ignore forward, stub is lower */
+ }
+ }
+
+ /* check stub */
+ if (stub != NULL && stub->dp != NULL) {
+ if(stub->dp->no_cache) {
+ char qname[255+1];
+ char dpname[255+1];
+ dname_str(qinf->qname, qname);
+ dname_str(stub->dp->name, dpname);
+ verbose(VERB_ALGO, "stub for %s %s has no_cache", qname, dpname);
+ }
+ return (stub->dp->no_cache);
+ }
+
+ /* Check for forward. */
+ if (dp) {
+ if(dp->no_cache) {
+ char qname[255+1];
+ char dpname[255+1];
+ dname_str(qinf->qname, qname);
+ dname_str(dp->name, dpname);
+ verbose(VERB_ALGO, "forward for %s %s has no_cache", qname, dpname);
+ }
+ return (dp->no_cache);
+ }
+ return 0;
+}
diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h
index e971d930b164..ccfb280224b3 100644
--- a/iterator/iter_utils.h
+++ b/iterator/iter_utils.h
@@ -369,4 +369,13 @@ int iter_ds_toolow(struct dns_msg* msg, struct delegpt* dp);
*/
int iter_dp_cangodown(struct query_info* qinfo, struct delegpt* dp);
+/**
+ * Lookup if no_cache is set in stub or fwd.
+ * @param qstate: query state with env with hints and fwds.
+ * @param qinf: query name to lookup for.
+ * @return true if no_cache is set in stub or fwd.
+ */
+int iter_stub_fwd_no_cache(struct module_qstate *qstate,
+ struct query_info *qinf);
+
#endif /* ITERATOR_ITER_UTILS_H */
diff --git a/iterator/iterator.c b/iterator/iterator.c
index 2f26bd3349de..8312dfd53313 100644
--- a/iterator/iterator.c
+++ b/iterator/iterator.c
@@ -69,6 +69,9 @@
#include "sldns/parseutil.h"
#include "sldns/sbuffer.h"
+/* in msec */
+int UNKNOWN_SERVER_NICENESS = 376;
+
int
iter_init(struct module_env* env, int id)
{
@@ -324,6 +327,29 @@ error_response_cache(struct module_qstate* qstate, int id, int rcode)
/* serving expired contents, but nothing is cached
* at all, so the servfail cache entry is useful
* (stops waste of time on this servfail NORR_TTL) */
+ } else {
+ /* don't overwrite existing (non-expired) data in
+ * cache with a servfail */
+ struct msgreply_entry* msg;
+ if((msg=msg_cache_lookup(qstate->env,
+ qstate->qinfo.qname, qstate->qinfo.qname_len,
+ qstate->qinfo.qtype, qstate->qinfo.qclass,
+ qstate->query_flags, *qstate->env->now, 0))
+ != NULL) {
+ struct reply_info* rep = (struct reply_info*)
+ msg->entry.data;
+ if(FLAGS_GET_RCODE(rep->flags) ==
+ LDNS_RCODE_NOERROR ||
+ FLAGS_GET_RCODE(rep->flags) ==
+ LDNS_RCODE_NXDOMAIN) {
+ /* we have a good entry,
+ * don't overwrite */
+ lock_rw_unlock(&msg->entry.lock);
+ return error_response(qstate, id, rcode);
+ }
+ lock_rw_unlock(&msg->entry.lock);
+ }
+
}
memset(&err, 0, sizeof(err));
err.flags = (uint16_t)(BIT_QR | BIT_RA);
@@ -1144,53 +1170,6 @@ forward_request(struct module_qstate* qstate, struct iter_qstate* iq)
return 1;
}
-static int
-iter_stub_fwd_no_cache(struct module_qstate *qstate, struct iter_qstate *iq)
-{
- struct iter_hints_stub *stub;
- struct delegpt *dp;
-
- /* Check for stub. */
- stub = hints_lookup_stub(qstate->env->hints, iq->qchase.qname,
- iq->qchase.qclass, iq->dp);
- dp = forwards_lookup(qstate->env->fwds, iq->qchase.qname, iq->qchase.qclass);
-
- /* see if forward or stub is more pertinent */
- if(stub && stub->dp && dp) {
- if(dname_strict_subdomain(dp->name, dp->namelabs,
- stub->dp->name, stub->dp->namelabs)) {
- stub = NULL; /* ignore stub, forward is lower */
- } else {
- dp = NULL; /* ignore forward, stub is lower */
- }
- }
-
- /* check stub */
- if (stub != NULL && stub->dp != NULL) {
- if(stub->dp->no_cache) {
- char qname[255+1];
- char dpname[255+1];
- dname_str(iq->qchase.qname, qname);
- dname_str(stub->dp->name, dpname);
- verbose(VERB_ALGO, "stub for %s %s has no_cache", qname, dpname);
- }
- return (stub->dp->no_cache);
- }
-
- /* Check for forward. */
- if (dp) {
- if(dp->no_cache) {
- char qname[255+1];
- char dpname[255+1];
- dname_str(iq->qchase.qname, qname);
- dname_str(dp->name, dpname);
- verbose(VERB_ALGO, "forward for %s %s has no_cache", qname, dpname);
- }
- return (dp->no_cache);
- }
- return 0;
-}
-
/**
* Process the initial part of the request handling. This state roughly
* corresponds to resolver algorithms steps 1 (find answer in cache) and 2
@@ -1268,7 +1247,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
/* This either results in a query restart (CNAME cache response), a
* terminating response (ANSWER), or a cache miss (null). */
- if (iter_stub_fwd_no_cache(qstate, iq)) {
+ if (iter_stub_fwd_no_cache(qstate, &iq->qchase)) {
/* Asked to not query cache. */
verbose(VERB_ALGO, "no-cache set, going to the network");
qstate->no_cache_lookup = 1;
@@ -1903,7 +1882,6 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq,
struct delegpt* p = hints_lookup_root(qstate->env->hints,
iq->qchase.qclass);
if(p) {
- struct delegpt_ns* ns;
struct delegpt_addr* a;
iq->chase_flags &= ~BIT_RD; /* go to authorities */
for(ns = p->nslist; ns; ns=ns->next) {
@@ -2320,7 +2298,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
errinf(qstate, "auth zone lookup failed, fallback is off");
return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
}
- if(iq->dp && iq->dp->auth_dp) {
+ if(iq->dp->auth_dp) {
/* we wanted to fallback, but had no delegpt, only the
* auth zone generated delegpt, create an actual one */
iq->auth_zone_avoid = 1;
@@ -3592,7 +3570,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
if(event == module_event_noreply || event == module_event_error) {
if(event == module_event_noreply && iq->sent_count >= 3 &&
qstate->env->cfg->use_caps_bits_for_id &&
- !iq->caps_fallback) {
+ !iq->caps_fallback && !is_caps_whitelisted(ie, iq)) {
/* start fallback */
iq->caps_fallback = 1;
iq->caps_server = 0;
diff --git a/iterator/iterator.h b/iterator/iterator.h
index 57cb7c4c474e..a2f1b5705e70 100644
--- a/iterator/iterator.h
+++ b/iterator/iterator.h
@@ -83,7 +83,7 @@ struct rbtree_type;
/** how nice is a server without further information, in msec
* Equals rtt initial timeout value.
*/
-#define UNKNOWN_SERVER_NICENESS 376
+extern int UNKNOWN_SERVER_NICENESS;
/** maximum timeout before a host is deemed unsuitable, in msec.
* After host_ttl this will be timed out and the host will be tried again.
* Equals RTT_MAX_TIMEOUT
diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c
index 31adbd54dcdb..5f5a8a10265c 100644
--- a/libunbound/libunbound.c
+++ b/libunbound/libunbound.c
@@ -724,7 +724,7 @@ ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype,
*async_id = 0;
lock_basic_lock(&ctx->cfglock);
if(!ctx->finalized) {
- int r = context_finalize(ctx);
+ r = context_finalize(ctx);
if(r) {
lock_basic_unlock(&ctx->cfglock);
return r;
@@ -966,6 +966,19 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr)
return UB_NOERROR;
}
+int ub_ctx_set_tls(struct ub_ctx* ctx, int tls)
+{
+ lock_basic_lock(&ctx->cfglock);
+ if(ctx->finalized) {
+ lock_basic_unlock(&ctx->cfglock);
+ errno=EINVAL;
+ return UB_AFTERFINAL;
+ }
+ ctx->env->cfg->ssl_upstream = tls;
+ lock_basic_unlock(&ctx->cfglock);
+ return UB_NOERROR;
+}
+
int ub_ctx_set_stub(struct ub_ctx* ctx, const char* zone, const char* addr,
int isprime)
{
diff --git a/libunbound/libworker.c b/libunbound/libworker.c
index 065f0a7b141a..a886f9a88113 100644
--- a/libunbound/libworker.c
+++ b/libunbound/libworker.c
@@ -657,8 +657,8 @@ libworker_event_done_cb(void* arg, int rcode, sldns_buffer* buf,
sec = 1;
else if(s == sec_status_secure)
sec = 2;
- (*cb)(cb_arg, rcode, (void*)sldns_buffer_begin(buf),
- (int)sldns_buffer_limit(buf), sec, why_bogus, was_ratelimited);
+ (*cb)(cb_arg, rcode, (buf?(void*)sldns_buffer_begin(buf):NULL),
+ (buf?(int)sldns_buffer_limit(buf):0), sec, why_bogus, was_ratelimited);
}
}
diff --git a/libunbound/ubsyms.def b/libunbound/ubsyms.def
index 0d8e6af91ee2..0ace984fa300 100644
--- a/libunbound/ubsyms.def
+++ b/libunbound/ubsyms.def
@@ -20,6 +20,7 @@ ub_ctx_set_event
ub_ctx_set_fwd
ub_ctx_set_option
ub_ctx_set_stub
+ub_ctx_set_tls
ub_ctx_trustedkeys
ub_ctx_zone_add
ub_ctx_zone_remove
diff --git a/libunbound/unbound.h b/libunbound/unbound.h
index 90766b062363..682ba55308c6 100644
--- a/libunbound/unbound.h
+++ b/libunbound/unbound.h
@@ -310,6 +310,17 @@ int ub_ctx_config(struct ub_ctx* ctx, const char* fname);
int ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr);
/**
+ * Use DNS over TLS to send queries to machines set with ub_ctx_set_fwd().
+ *
+ * @param ctx: context.
+ * At this time it is only possible to set configuration before the
+ * first resolve is done.
+ * @param tls: enable or disable DNS over TLS
+ * @return 0 if OK, else error.
+ */
+int ub_ctx_set_tls(struct ub_ctx* ctx, int tls);
+
+/**
* Add a stub zone, with given address to send to. This is for custom
* root hints or pointing to a local authoritative dns server.
* For dns resolvers and the 'DHCP DNS' ip address, use ub_ctx_set_fwd.
@@ -770,6 +781,10 @@ struct ub_server_stats {
/** number of queries answered from edns-subnet specific data, and
* the answer was from the edns-subnet cache. */
long long num_query_subnet_cache;
+ /** number of bytes in the stream wait buffers */
+ long long mem_stream_wait;
+ /** number of TLS connection resume */
+ long long qtls_resume;
};
/**
diff --git a/ltmain.sh b/ltmain.sh
index 0f0a2da3f9dd..7f3523d335c5 100755
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -2124,7 +2124,7 @@ fi
# a configuration failure hint, and exit.
func_fatal_configuration ()
{
- func__fatal_error ${1+"$@"} \
+ func_fatal_error ${1+"$@"} \
"See the $PACKAGE documentation for more information." \
"Fatal configuration error."
}
@@ -7272,10 +7272,12 @@ func_mode_link ()
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
# -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
# -stdlib=* select c++ std lib with clang
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
diff --git a/pythonmod/doc/modules/functions.rst b/pythonmod/doc/modules/functions.rst
index 49ea7bfa45f0..43c66eb380dd 100644
--- a/pythonmod/doc/modules/functions.rst
+++ b/pythonmod/doc/modules/functions.rst
@@ -103,42 +103,67 @@ Inplace callbacks
:param opt_list_out: :class:`edns_option`. EDNS option list to append options to.
:param region: :class:`regional`
-.. function:: register_inplace_cb_reply(py_cb, env)
+.. function:: inplace_cb_query(qinfo, flags, qstate, addr, zone, region)
+
+ Function prototype for callback functions used in
+ `register_inplace_cb_query`_.
+
+ :param qinfo: :class:`query_info`
+ :param flags: query flags (integer)
+ :param qstate: :class:`module_qstate`
+ :param addr: :class:`sockaddr_storage`
+ :param zone: zone name in wire format (bytes)
+ :param region: :class:`regional`
+
+.. function:: register_inplace_cb_reply(py_cb, env, id)
Register py_cb as an inplace reply callback function.
:param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable.
:param env: :class:`module_env`
+ :param id: Module ID.
:return: True on success, False otherwise
:rtype: boolean
-.. function:: register_inplace_cb_reply_cache(py_cb, env)
+.. function:: register_inplace_cb_reply_cache(py_cb, env, id)
Register py_cb as an inplace reply_cache callback function.
:param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable.
:param env: :class:`module_env`
+ :param id: Module ID.
:return: True on success, False otherwise
:rtype: boolean
-.. function:: register_inplace_cb_reply_local(py_cb, env)
+.. function:: register_inplace_cb_reply_local(py_cb, env, id)
Register py_cb as an inplace reply_local callback function.
:param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable.
:param env: :class:`module_env`
+ :param id: Module ID.
:return: True on success, False otherwise
:rtype: boolean
-.. function:: register_inplace_cb_reply_servfail(py_cb, env)
+.. function:: register_inplace_cb_reply_servfail(py_cb, env, id)
Register py_cb as an inplace reply_servfail callback function.
:param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable.
:param env: :class:`module_env`
+ :param id: Module ID.
:return: True on success, False otherwise
:rtype: boolean
+.. function:: register_inplace_cb_query(py_cb, env, id)
+
+ Register py_cb as an inplace query callback function.
+
+ :param py_cb: Python function that follows `inplace_cb_query`_'s prototype. **Must** be callable.
+ :param env: :class:`module_env`
+ :param id: Module ID.
+ :return: True on success, False otherwise
+ :rtype: boolean
Logging
-------
diff --git a/pythonmod/doc/modules/struct.rst b/pythonmod/doc/modules/struct.rst
index c74298b8b75d..de7c084e9008 100644
--- a/pythonmod/doc/modules/struct.rst
+++ b/pythonmod/doc/modules/struct.rst
@@ -514,3 +514,33 @@ pythonmod_qstate
Here you can keep your own private data (each thread has own data object).
+sockaddr_storage
+-------------------------
+
+.. class:: sockaddr_storage
+
+ The :class:`sockaddr_storage` provides these data attributes:
+
+ .. attribute:: family
+
+ Address family name as a string. Possible values are `ip4`, `ip6`, and `unix`.
+
+ .. attribute:: addr
+
+ Address in presentation format.
+
+ .. attribute:: raw_addr
+
+ Address in network wire format.
+
+ .. attribute:: port
+
+ Port number. Invalid for Unix address.
+
+ .. attribute:: flowinfo
+
+ Flow info value. Valid only for IPv6 address.
+
+ .. attribute:: scope_id
+
+ Scope ID value. Valid only for IPv6 address.
diff --git a/pythonmod/examples/inplace_callbacks.py b/pythonmod/examples/inplace_callbacks.py
index e47fc8292be2..776add8c29ad 100644
--- a/pythonmod/examples/inplace_callbacks.py
+++ b/pythonmod/examples/inplace_callbacks.py
@@ -247,6 +247,25 @@ def inplace_servfail_callback(qinfo, qstate, rep, rcode, edns, opt_list_out,
return True
+def inplace_query_callback(qinfo, flags, qstate, addr, zone, region, **kwargs):
+ """
+ Function that will be registered as an inplace callback function.
+ It will be called before sending a query to a backend server.
+
+ :param qinfo: query_info struct;
+ :param flags: flags of the query;
+ :param qstate: module qstate. opt_lists are available here;
+ :param addr: struct sockaddr_storage. Address of the backend server;
+ :param zone: zone name in binary;
+ :param region: region to allocate temporary data. Needs to be used when we
+ want to append a new option to opt_lists.
+ :param **kwargs: Dictionary that may contain parameters added in a future
+ release.
+ """
+ log_info("python: outgoing query to {}@{}".format(addr.addr, addr.port))
+ return True
+
+
def init_standard(id, env):
"""
New version of the init function.
@@ -281,6 +300,11 @@ def init_standard(id, env):
if not register_inplace_cb_reply_servfail(inplace_servfail_callback, env, id):
return False
+ # Register the inplace_query_callback function as an inplace callback
+ # before sending a query to a backend server.
+ if not register_inplace_cb_query(inplace_query_callback, env, id):
+ return False
+
return True
diff --git a/pythonmod/interface.i b/pythonmod/interface.i
index 96accb69cca6..5f2559bacffa 100644
--- a/pythonmod/interface.i
+++ b/pythonmod/interface.i
@@ -12,6 +12,8 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+ #include <netdb.h>
+ #include <sys/un.h>
#include <stdarg.h>
#include "config.h"
#include "util/log.h"
@@ -43,15 +45,21 @@
i = 0;
while (i < len) {
- i += name[i] + 1;
+ i += ((unsigned int)name[i]) + 1;
cnt++;
}
list = PyList_New(cnt);
i = 0; cnt = 0;
while (i < len) {
- PyList_SetItem(list, cnt, PyBytes_FromStringAndSize(name + i + 1, name[i]));
- i += name[i] + 1;
+ char buf[LDNS_MAX_LABELLEN+1];
+ if(((unsigned int)name[i])+1 <= (unsigned int)sizeof(buf) &&
+ i+(int)((unsigned int)name[i]) < len) {
+ memmove(buf, name + i + 1, (unsigned int)name[i]);
+ buf[(unsigned int)name[i]] = 0;
+ PyList_SetItem(list, cnt, PyString_FromString(buf));
+ }
+ i += ((unsigned int)name[i]) + 1;
cnt++;
}
return list;
@@ -159,11 +167,11 @@ struct query_info {
%}
%inline %{
- PyObject* dnameAsStr(const char* dname) {
+ PyObject* dnameAsStr(PyObject* dname) {
char buf[LDNS_MAX_DOMAINLEN+1];
buf[0] = '\0';
- dname_str((uint8_t*)dname, buf);
- return PyBytes_FromString(buf);
+ dname_str((uint8_t*)PyBytes_AsString(dname), buf);
+ return PyString_FromString(buf);
}
%}
@@ -427,63 +435,191 @@ struct dns_msg {
}
/* ************************************************************************************ *
- Structure mesh_state
+ Structure sockaddr_storage
* ************************************************************************************ */
-struct mesh_state {
- struct mesh_reply* reply_list;
-};
-struct mesh_reply {
- struct mesh_reply* next;
- struct comm_reply query_reply;
-};
+struct sockaddr_storage {};
-struct comm_reply {
+%inline %{
+ static size_t _sockaddr_storage_len(const struct sockaddr_storage *ss) {
+ if (ss == NULL) {
+ return 0;
+ }
-};
+ switch (ss->ss_family) {
+ case AF_INET: return sizeof(struct sockaddr_in);
+ case AF_INET6: return sizeof(struct sockaddr_in6);
+ case AF_UNIX: return sizeof(struct sockaddr_un);
+ default:
+ return 0;
+ }
+ }
-%inline %{
+ PyObject *_sockaddr_storage_family(const struct sockaddr_storage *ss) {
+ if (ss == NULL) {
+ return Py_None;
+ }
+
+ switch (ss->ss_family) {
+ case AF_INET: return PyUnicode_FromString("ip4");
+ case AF_INET6: return PyUnicode_FromString("ip6");
+ case AF_UNIX: return PyUnicode_FromString("unix");
+ default:
+ return Py_None;
+ }
+ }
+
+ PyObject *_sockaddr_storage_addr(const struct sockaddr_storage *ss) {
+ const struct sockaddr *sa;
+ size_t sa_len;
+ char name[NI_MAXHOST] = {0};
+
+ if (ss == NULL) {
+ return Py_None;
+ }
+
+ sa = (struct sockaddr *)ss;
+ sa_len = _sockaddr_storage_len(ss);
+ if (sa_len == 0) {
+ return Py_None;
+ }
+
+ if (getnameinfo(sa, sa_len, name, sizeof(name), NULL, 0, NI_NUMERICHOST) != 0) {
+ return Py_None;
+ }
+
+ return PyUnicode_FromString(name);
+ }
+
+ PyObject *_sockaddr_storage_raw_addr(const struct sockaddr_storage *ss) {
+ size_t sa_len;
+
+ if (ss == NULL) {
+ return Py_None;
+ }
+
+ sa_len = _sockaddr_storage_len(ss);
+ if (sa_len == 0) {
+ return Py_None;
+ }
+
+ if (ss->ss_family == AF_INET) {
+ const struct sockaddr_in *sa = (struct sockaddr_in *)ss;
+ const struct in_addr *raw = (struct in_addr *)&sa->sin_addr;
+ return PyBytes_FromStringAndSize((const char *)raw, sizeof(*raw));
+ }
+
+ if (ss->ss_family == AF_INET6) {
+ const struct sockaddr_in6 *sa = (struct sockaddr_in6 *)ss;
+ const struct in6_addr *raw = (struct in6_addr *)&sa->sin6_addr;
+ return PyBytes_FromStringAndSize((const char *)raw, sizeof(*raw));
+ }
+
+ if (ss->ss_family == AF_UNIX) {
+ const struct sockaddr_un *sa = (struct sockaddr_un *)ss;
+ return PyBytes_FromString(sa->sun_path);
+ }
- PyObject* _comm_reply_addr_get(struct comm_reply* reply) {
- char dest[64];
- reply_addr2str(reply, dest, 64);
- if (dest[0] == 0)
return Py_None;
- return PyBytes_FromString(dest);
- }
+ }
- PyObject* _comm_reply_family_get(struct comm_reply* reply) {
+ PyObject *_sockaddr_storage_port(const struct sockaddr_storage *ss) {
+ if (ss == NULL) {
+ return Py_None;
+ }
- int af = (int)((struct sockaddr_in*) &(reply->addr))->sin_family;
+ if (ss->ss_family == AF_INET) {
+ const struct sockaddr_in *sa4 = (struct sockaddr_in *)ss;
+ return PyInt_FromLong(ntohs(sa4->sin_port));
+ }
- switch(af) {
- case AF_INET: return PyBytes_FromString("ip4");
- case AF_INET6: return PyBytes_FromString("ip6");
- case AF_UNIX: return PyBytes_FromString("unix");
+ if (ss->ss_family == AF_INET6) {
+ const struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)ss;
+ return PyInt_FromLong(ntohs(sa6->sin6_port));
}
return Py_None;
- }
+ }
- PyObject* _comm_reply_port_get(struct comm_reply* reply) {
- uint16_t port;
- port = ntohs(((struct sockaddr_in*)&(reply->addr))->sin_port);
- return PyInt_FromLong(port);
- }
+ PyObject *_sockaddr_storage_flowinfo(const struct sockaddr_storage *ss) {
+ const struct sockaddr_in6 *sa6;
+
+ if (ss == NULL || ss->ss_family != AF_INET6) {
+ return Py_None;
+ }
+ sa6 = (struct sockaddr_in6 *)ss;
+ return PyInt_FromLong(ntohl(sa6->sin6_flowinfo));
+ }
+
+ PyObject *_sockaddr_storage_scope_id(const struct sockaddr_storage *ss) {
+ const struct sockaddr_in6 *sa6;
+
+ if (ss == NULL || ss->ss_family != AF_INET6) {
+ return Py_None;
+ }
+
+ sa6 = (struct sockaddr_in6 *)ss;
+ return PyInt_FromLong(ntohl(sa6->sin6_scope_id));
+ }
%}
+%extend sockaddr_storage {
+ %pythoncode %{
+ def _family_get(self): return _sockaddr_storage_family(self)
+ __swig_getmethods__["family"] = _family_get
+ if _newclass: family = _swig_property(_family_get)
+
+ def _addr_get(self): return _sockaddr_storage_addr(self)
+ __swig_getmethods__["addr"] = _addr_get
+ if _newclass: addr = _swig_property(_addr_get)
+
+ def _raw_addr_get(self): return _sockaddr_storage_raw_addr(self)
+ __swig_getmethods__["raw_addr"] = _raw_addr_get
+ if _newclass: raw_addr = _swig_property(_raw_addr_get)
+
+ def _port_get(self): return _sockaddr_storage_port(self)
+ __swig_getmethods__["port"] = _port_get
+ if _newclass: port = _swig_property(_port_get)
+
+ def _flowinfo_get(self): return _sockaddr_storage_flowinfo(self)
+ __swig_getmethods__["flowinfo"] = _flowinfo_get
+ if _newclass: flowinfo = _swig_property(_flowinfo_get)
+
+ def _scope_id_get(self): return _sockaddr_storage_scope_id(self)
+ __swig_getmethods__["scope_id"] = _scope_id_get
+ if _newclass: scope_id = _swig_property(_scope_id_get)
+ %}
+}
+
+/* ************************************************************************************ *
+ Structure mesh_state
+ * ************************************************************************************ */
+struct mesh_state {
+ struct mesh_reply* reply_list;
+};
+
+struct mesh_reply {
+ struct mesh_reply* next;
+ struct comm_reply query_reply;
+};
+
+%rename(_addr) comm_reply::addr;
+struct comm_reply {
+ struct sockaddr_storage addr;
+};
+
%extend comm_reply {
%pythoncode %{
- def _addr_get(self): return _comm_reply_addr_get(self)
+ def _addr_get(self): return _sockaddr_storage_addr(self._addr)
__swig_getmethods__["addr"] = _addr_get
if _newclass:addr = _swig_property(_addr_get)
- def _port_get(self): return _comm_reply_port_get(self)
+ def _port_get(self): return _sockaddr_storage_port(self._addr)
__swig_getmethods__["port"] = _port_get
if _newclass:port = _swig_property(_port_get)
- def _family_get(self): return _comm_reply_family_get(self)
+ def _family_get(self): return _sockaddr_storage_family(self._addr)
__swig_getmethods__["family"] = _family_get
if _newclass:family = _swig_property(_family_get)
%}
@@ -1081,7 +1217,7 @@ int checkList(PyObject *l)
for (i=0; i < PyList_Size(l); i++)
{
item = PyList_GetItem(l, i);
- if (!PyBytes_Check(item))
+ if (!PyBytes_Check(item) && !PyUnicode_Check(item))
return 0;
}
return 1;
@@ -1096,23 +1232,40 @@ int pushRRList(sldns_buffer* qb, PyObject *l, uint32_t default_ttl, int qsec,
PyObject* item;
int i;
size_t len;
+ char* s;
+ PyObject* ascstr;
for (i=0; i < PyList_Size(l); i++)
{
+ ascstr = NULL;
item = PyList_GetItem(l, i);
+ if(PyObject_TypeCheck(item, &PyBytes_Type)) {
+ s = PyBytes_AsString(item);
+ } else {
+ ascstr = PyUnicode_AsASCIIString(item);
+ s = PyBytes_AsString(ascstr);
+ }
len = sldns_buffer_remaining(qb);
if(qsec) {
- if(sldns_str2wire_rr_question_buf(PyBytes_AsString(item),
+ if(sldns_str2wire_rr_question_buf(s,
sldns_buffer_current(qb), &len, NULL, NULL, 0, NULL, 0)
- != 0)
+ != 0) {
+ if(ascstr)
+ Py_DECREF(ascstr);
return 0;
+ }
} else {
- if(sldns_str2wire_rr_buf(PyBytes_AsString(item),
+ if(sldns_str2wire_rr_buf(s,
sldns_buffer_current(qb), &len, NULL, default_ttl,
- NULL, 0, NULL, 0) != 0)
+ NULL, 0, NULL, 0) != 0) {
+ if(ascstr)
+ Py_DECREF(ascstr);
return 0;
+ }
}
+ if(ascstr)
+ Py_DECREF(ascstr);
sldns_buffer_skip(qb, len);
sldns_buffer_write_u16_at(qb, count_offset,
@@ -1437,6 +1590,54 @@ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len,
return python_inplace_cb_register(inplace_cb_reply_servfail,
py_cb, env, id);
}
+
+ int python_inplace_cb_query_generic(
+ struct query_info* qinfo, uint16_t flags, struct module_qstate* qstate,
+ struct sockaddr_storage* addr, socklen_t addrlen,
+ uint8_t* zone, size_t zonelen, struct regional* region, int id,
+ void* python_callback)
+ {
+ int res = 0;
+ PyObject *func = python_callback;
+
+ PyGILState_STATE gstate = PyGILState_Ensure();
+
+ PyObject *py_qinfo = SWIG_NewPointerObj((void*) qinfo, SWIGTYPE_p_query_info, 0);
+ PyObject *py_qstate = SWIG_NewPointerObj((void*) qstate, SWIGTYPE_p_module_qstate, 0);
+ PyObject *py_addr = SWIG_NewPointerObj((void *) addr, SWIGTYPE_p_sockaddr_storage, 0);
+ PyObject *py_zone = PyBytes_FromStringAndSize((const char *)zone, zonelen);
+ PyObject *py_region = SWIG_NewPointerObj((void*) region, SWIGTYPE_p_regional, 0);
+
+ PyObject *py_args = Py_BuildValue("(OiOOOO)", py_qinfo, flags, py_qstate, py_addr, py_zone, py_region);
+ PyObject *py_kwargs = Py_BuildValue("{}");
+ PyObject *result = PyObject_Call(func, py_args, py_kwargs);
+ if (result) {
+ res = PyInt_AsLong(result);
+ }
+
+ Py_XDECREF(py_qinfo);
+ Py_XDECREF(py_qstate);
+ Py_XDECREF(py_addr);
+ Py_XDECREF(py_zone);
+ Py_XDECREF(py_region);
+
+ Py_XDECREF(py_args);
+ Py_XDECREF(py_kwargs);
+ Py_XDECREF(result);
+
+ PyGILState_Release(gstate);
+
+ return res;
+ }
+
+ static int register_inplace_cb_query(PyObject* py_cb,
+ struct module_env* env, int id)
+ {
+ int ret = inplace_cb_register(python_inplace_cb_query_generic,
+ inplace_cb_query, (void*) py_cb, env, id);
+ if (ret) Py_INCREF(py_cb);
+ return ret;
+ }
%}
/* C declarations */
int inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg,
@@ -1451,3 +1652,5 @@ static int register_inplace_cb_reply_local(PyObject* py_cb,
struct module_env* env, int id);
static int register_inplace_cb_reply_servfail(PyObject* py_cb,
struct module_env* env, int id);
+static int register_inplace_cb_query(PyObject *py_cb,
+ struct module_env* env, int id);
diff --git a/pythonmod/pythonmod.c b/pythonmod/pythonmod.c
index 35a20434b935..a668ecc23cc7 100644
--- a/pythonmod/pythonmod.c
+++ b/pythonmod/pythonmod.c
@@ -110,6 +110,136 @@ struct pythonmod_qstate {
#include "pythonmod/interface.h"
#endif
+/** log python error */
+static void
+log_py_err(void)
+{
+ char *result = NULL;
+ const char* iomod = "cStringIO";
+ PyObject *modStringIO = NULL;
+ PyObject *modTB = NULL;
+ PyObject *obFuncStringIO = NULL;
+ PyObject *obStringIO = NULL;
+ PyObject *obFuncTB = NULL;
+ PyObject *argsTB = NULL;
+ PyObject *obResult = NULL;
+ PyObject *ascstr = NULL;
+ PyObject *exc_typ, *exc_val, *exc_tb;
+
+ /* Fetch the error state now before we cruch it */
+ /* exc val contains the error message
+ * exc tb contains stack traceback and other info. */
+ PyErr_Fetch(&exc_typ, &exc_val, &exc_tb);
+ PyErr_NormalizeException(&exc_typ, &exc_val, &exc_tb);
+
+ /* Import the modules we need - cStringIO and traceback */
+ modStringIO = PyImport_ImportModule("cStringIO");
+ if (modStringIO==NULL) {
+ /* python 1.4 and before */
+ modStringIO = PyImport_ImportModule("StringIO");
+ iomod = "StringIO";
+ }
+ if (modStringIO==NULL) {
+ /* python 3 */
+ modStringIO = PyImport_ImportModule("io");
+ iomod = "io";
+ }
+ if (modStringIO==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "cannot ImportModule cStringIO or StringIO or io");
+ goto cleanup;
+ }
+ modTB = PyImport_ImportModule("traceback");
+ if (modTB==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "cannot ImportModule traceback");
+ goto cleanup;
+ }
+
+ /* Construct a cStringIO object */
+ obFuncStringIO = PyObject_GetAttrString(modStringIO, "StringIO");
+ if (obFuncStringIO==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "cannot GetAttrString %s.StringIO", iomod);
+ goto cleanup;
+ }
+ obStringIO = PyObject_CallObject(obFuncStringIO, NULL);
+ if (obStringIO==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "cannot call %s.StringIO()", iomod);
+ goto cleanup;
+ }
+
+ /* Get the traceback.print_exception function, and call it. */
+ obFuncTB = PyObject_GetAttrString(modTB, "print_exception");
+ if (obFuncTB==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "cannot GetAttrString traceback.print_exception");
+ goto cleanup;
+ }
+ argsTB = Py_BuildValue("OOOOO", (exc_typ ? exc_typ : Py_None),
+ (exc_val ? exc_val : Py_None), (exc_tb ? exc_tb : Py_None),
+ Py_None, obStringIO);
+ if (argsTB==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "cannot BuildValue for print_exception");
+ goto cleanup;
+ }
+
+ obResult = PyObject_CallObject(obFuncTB, argsTB);
+ if (obResult==NULL) {
+ PyErr_Print();
+ log_err("pythonmod: cannot print exception, "
+ "call traceback.print_exception() failed");
+ goto cleanup;
+ }
+
+ /* Now call the getvalue() method in the StringIO instance */
+ Py_DECREF(obFuncStringIO);
+ obFuncStringIO = PyObject_GetAttrString(obStringIO, "getvalue");
+ if (obFuncStringIO==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "cannot GetAttrString StringIO.getvalue");
+ goto cleanup;
+ }
+ Py_DECREF(obResult);
+ obResult = PyObject_CallObject(obFuncStringIO, NULL);
+ if (obResult==NULL) {
+ log_err("pythonmod: cannot print exception, "
+ "call StringIO.getvalue() failed");
+ goto cleanup;
+ }
+
+ /* And it should be a string all ready to go - duplicate it. */
+ if (!PyString_Check(obResult) && !PyUnicode_Check(obResult)) {
+ log_err("pythonmod: cannot print exception, "
+ "StringIO.getvalue() result did not String_Check"
+ " or Unicode_Check");
+ goto cleanup;
+ }
+ if(PyString_Check(obResult)) {
+ result = PyString_AsString(obResult);
+ } else {
+ ascstr = PyUnicode_AsASCIIString(obResult);
+ result = PyBytes_AsString(ascstr);
+ }
+ log_err("pythonmod: python error: %s", result);
+
+cleanup:
+ Py_XDECREF(modStringIO);
+ Py_XDECREF(modTB);
+ Py_XDECREF(obFuncStringIO);
+ Py_XDECREF(obStringIO);
+ Py_XDECREF(obFuncTB);
+ Py_XDECREF(argsTB);
+ Py_XDECREF(obResult);
+ Py_XDECREF(ascstr);
+
+ /* clear the exception, by not restoring it */
+ /* Restore the exception state */
+ /* PyErr_Restore(exc_typ, exc_val, exc_tb); */
+}
+
int pythonmod_init(struct module_env* env, int id)
{
/* Initialize module */
@@ -193,13 +323,26 @@ int pythonmod_init(struct module_env* env, int id)
/* TODO: deallocation of pe->... if an error occurs */
- if (PyRun_SimpleFile(script_py, pe->fname) < 0)
- {
+ if (PyRun_SimpleFile(script_py, pe->fname) < 0) {
log_err("pythonmod: can't parse Python script %s", pe->fname);
+ /* print the error to logs too, run it again */
+ fseek(script_py, 0, SEEK_SET);
+ /* we don't run the file, like this, because then side-effects
+ * s = PyRun_File(script_py, pe->fname, Py_file_input,
+ * PyModule_GetDict(PyImport_AddModule("__main__")), pe->dict);
+ * could happen (again). Instead we parse the file again to get
+ * the error string in the logs, for when the daemon has stderr
+ * removed. SimpleFile run already printed to stderr, for then
+ * this is called from unbound-checkconf or unbound -dd the user
+ * has a nice formatted error.
+ */
+ /* ignore the NULL return of _node, it is NULL due to the parse failure
+ * that we are expecting */
+ (void)PyParser_SimpleParseFile(script_py, pe->fname, Py_file_input);
+ log_py_err();
PyGILState_Release(gil);
return 0;
}
-
fclose(script_py);
if ((pe->func_init = PyDict_GetItemString(pe->dict, "init_standard")) == NULL)
@@ -244,7 +387,7 @@ int pythonmod_init(struct module_env* env, int id)
if (PyErr_Occurred())
{
log_err("pythonmod: Exception occurred in function init");
- PyErr_Print();
+ log_py_err();
Py_XDECREF(res);
Py_XDECREF(py_init_arg);
PyGILState_Release(gil);
@@ -274,7 +417,7 @@ void pythonmod_deinit(struct module_env* env, int id)
res = PyObject_CallFunction(pe->func_deinit, "i", id);
if (PyErr_Occurred()) {
log_err("pythonmod: Exception occurred in function deinit");
- PyErr_Print();
+ log_py_err();
}
/* Free result if any */
Py_XDECREF(res);
@@ -312,7 +455,7 @@ void pythonmod_inform_super(struct module_qstate* qstate, int id, struct module_
if (PyErr_Occurred())
{
log_err("pythonmod: Exception occurred in function inform_super");
- PyErr_Print();
+ log_py_err();
qstate->ext_state[id] = module_error;
}
else if ((res == NULL) || (!PyObject_IsTrue(res)))
@@ -353,7 +496,7 @@ void pythonmod_operate(struct module_qstate* qstate, enum module_ev event,
if (PyErr_Occurred())
{
log_err("pythonmod: Exception occurred in function operate, event: %s", strmodulevent(event));
- PyErr_Print();
+ log_py_err();
qstate->ext_state[id] = module_error;
}
else if ((res == NULL) || (!PyObject_IsTrue(res)))
diff --git a/pythonmod/pythonmod.h b/pythonmod/pythonmod.h
index 991ae51a20a7..ae8af27eb22b 100644
--- a/pythonmod/pythonmod.h
+++ b/pythonmod/pythonmod.h
@@ -74,4 +74,12 @@ int python_inplace_cb_reply_generic(struct query_info* qinfo,
struct edns_data* edns, struct edns_option** opt_list_out,
struct comm_reply* repinfo, struct regional* region, int id,
void* python_callback);
+
+/** Declared here for fptr_wlist access. The definition is in interface.i. */
+int python_inplace_cb_query_generic(
+ struct query_info* qinfo, uint16_t flags, struct module_qstate* qstate,
+ struct sockaddr_storage* addr, socklen_t addrlen,
+ uint8_t* zone, size_t zonelen, struct regional* region, int id,
+ void* python_callback);
+
#endif /* PYTHONMOD_H */
diff --git a/respip/respip.c b/respip/respip.c
index aea528f1516e..bcb31f89224d 100644
--- a/respip/respip.c
+++ b/respip/respip.c
@@ -451,7 +451,7 @@ respip_views_apply_cfg(struct views* vs, struct config_file* cfg,
* This function returns the copied rrset key on success, and NULL on memory
* allocation failure.
*/
-struct ub_packed_rrset_key*
+static 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,
diff --git a/services/authzone.c b/services/authzone.c
index 4d0dd1b5ae9c..a87c2274fb9e 100644
--- a/services/authzone.c
+++ b/services/authzone.c
@@ -88,6 +88,9 @@
#define AUTH_HTTPS_PORT 443
/* max depth for nested $INCLUDEs */
#define MAX_INCLUDE_DEPTH 10
+/** number of timeouts before we fallback from IXFR to AXFR,
+ * because some versions of servers (eg. dnsmasq) drop IXFR packets. */
+#define NUM_TIMEOUTS_FALLBACK_IXFR 3
/** pick up nextprobe task to start waiting to perform transfer actions */
static void xfr_set_timeout(struct auth_xfer* xfr, struct module_env* env,
@@ -1450,11 +1453,13 @@ az_remove_rr_decompress(struct auth_zone* z, uint8_t* pkt, size_t pktlen,
* The lineno is set at 1 and then increased by the function.
* @param fname: file name.
* @param depth: recursion depth for includes
+ * @param cfg: config for chroot.
* returns false on failure, has printed an error message
*/
static int
az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen,
- struct sldns_file_parse_state* state, char* fname, int depth)
+ struct sldns_file_parse_state* state, char* fname, int depth,
+ struct config_file* cfg)
{
size_t rr_len, dname_len;
int status;
@@ -1480,6 +1485,11 @@ az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen,
/* skip spaces */
while(*incfile == ' ' || *incfile == '\t')
incfile++;
+ /* adjust for chroot on include file */
+ if(cfg->chrootdir && cfg->chrootdir[0] &&
+ strncmp(incfile, cfg->chrootdir,
+ strlen(cfg->chrootdir)) == 0)
+ incfile += strlen(cfg->chrootdir);
incfile = strdup(incfile);
if(!incfile) {
log_err("malloc failure");
@@ -1490,7 +1500,7 @@ az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen,
inc = fopen(incfile, "r");
if(!inc) {
log_err("%s:%d cannot open include "
- "file %s: %s", z->zonefile,
+ "file %s: %s", fname,
lineno_orig, incfile,
strerror(errno));
free(incfile);
@@ -1498,7 +1508,7 @@ az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen,
}
/* recurse read that file now */
if(!az_parse_file(z, inc, rr, rrbuflen,
- state, incfile, depth+1)) {
+ state, incfile, depth+1, cfg)) {
log_err("%s:%d cannot parse include "
"file %s", fname,
lineno_orig, incfile);
@@ -1538,30 +1548,36 @@ az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen,
}
int
-auth_zone_read_zonefile(struct auth_zone* z)
+auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg)
{
uint8_t rr[LDNS_RR_BUF_SIZE];
struct sldns_file_parse_state state;
+ char* zfilename;
FILE* in;
if(!z || !z->zonefile || z->zonefile[0]==0)
return 1; /* no file, or "", nothing to read */
+
+ zfilename = z->zonefile;
+ if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(zfilename,
+ cfg->chrootdir, strlen(cfg->chrootdir)) == 0)
+ zfilename += strlen(cfg->chrootdir);
if(verbosity >= VERB_ALGO) {
char nm[255+1];
dname_str(z->name, nm);
- verbose(VERB_ALGO, "read zonefile %s for %s", z->zonefile, nm);
+ verbose(VERB_ALGO, "read zonefile %s for %s", zfilename, nm);
}
- in = fopen(z->zonefile, "r");
+ in = fopen(zfilename, "r");
if(!in) {
char* n = sldns_wire2str_dname(z->name, z->namelen);
if(z->zone_is_slave && errno == ENOENT) {
/* we fetch the zone contents later, no file yet */
verbose(VERB_ALGO, "no zonefile %s for %s",
- z->zonefile, n?n:"error");
+ zfilename, n?n:"error");
free(n);
return 1;
}
log_err("cannot open zonefile %s for %s: %s",
- z->zonefile, n?n:"error", strerror(errno));
+ zfilename, n?n:"error", strerror(errno));
free(n);
return 0;
}
@@ -1579,10 +1595,10 @@ auth_zone_read_zonefile(struct auth_zone* z)
state.origin_len = z->namelen;
}
/* parse the (toplevel) file */
- if(!az_parse_file(z, in, rr, sizeof(rr), &state, z->zonefile, 0)) {
+ if(!az_parse_file(z, in, rr, sizeof(rr), &state, zfilename, 0, cfg)) {
char* n = sldns_wire2str_dname(z->name, z->namelen);
log_err("error parsing zonefile %s for %s",
- z->zonefile, n?n:"error");
+ zfilename, n?n:"error");
free(n);
fclose(in);
return 0;
@@ -1710,13 +1726,13 @@ int auth_zone_write_file(struct auth_zone* z, const char* fname)
/** read all auth zones from file (if they have) */
static int
-auth_zones_read_zones(struct auth_zones* az)
+auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg)
{
struct auth_zone* z;
lock_rw_wrlock(&az->lock);
RBTREE_FOR(z, struct auth_zone*, &az->ztree) {
lock_rw_wrlock(&z->lock);
- if(!auth_zone_read_zonefile(z)) {
+ if(!auth_zone_read_zonefile(z, cfg)) {
lock_rw_unlock(&z->lock);
lock_rw_unlock(&az->lock);
return 0;
@@ -1953,7 +1969,7 @@ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg,
}
}
az_delete_deleted_zones(az);
- if(!auth_zones_read_zones(az))
+ if(!auth_zones_read_zones(az, cfg))
return 0;
if(setup) {
if(!auth_zones_setup_zones(az))
@@ -1966,7 +1982,7 @@ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg,
* @param at: transfer structure with chunks list. The chunks and their
* data are freed.
*/
-void
+static void
auth_chunks_delete(struct auth_transfer* at)
{
if(at->chunks_first) {
@@ -2605,7 +2621,7 @@ az_nsec3_hashname(struct auth_zone* z, uint8_t* hashname, size_t* hashnmlen,
}
/** Find the datanode that covers the nsec3hash-name */
-struct auth_data*
+static struct auth_data*
az_nsec3_findnode(struct auth_zone* z, uint8_t* hashnm, size_t hashnmlen)
{
struct query_info qinfo;
@@ -2730,13 +2746,14 @@ az_nsec3_insert(struct auth_zone* z, struct regional* region,
* that is an exact match that should exist for it.
* If that does not exist, a higher exact match + nxproof is enabled
* (for some sort of opt-out empty nonterminal cases).
+ * ceproof: include ce proof NSEC3 (omitted for wildcard replies).
* nxproof: include denial of the qname.
* wcproof: include denial of wildcard (wildcard.ce).
*/
static int
az_add_nsec3_proof(struct auth_zone* z, struct regional* region,
struct dns_msg* msg, uint8_t* cenm, size_t cenmlen, uint8_t* qname,
- size_t qname_len, int nxproof, int wcproof)
+ size_t qname_len, int ceproof, int nxproof, int wcproof)
{
int algo;
size_t iter, saltlen;
@@ -2748,11 +2765,13 @@ az_add_nsec3_proof(struct auth_zone* z, struct regional* region,
if(!az_nsec3_param(z, &algo, &iter, &salt, &saltlen))
return 1; /* no nsec3 */
/* find ce that has an NSEC3 */
- node = az_nsec3_find_ce(z, &cenm, &cenmlen, &no_exact_ce,
- algo, iter, salt, saltlen);
- if(no_exact_ce) nxproof = 1;
- if(!az_nsec3_insert(z, region, msg, node))
- return 0;
+ if(ceproof) {
+ node = az_nsec3_find_ce(z, &cenm, &cenmlen, &no_exact_ce,
+ algo, iter, salt, saltlen);
+ if(no_exact_ce) nxproof = 1;
+ if(!az_nsec3_insert(z, region, msg, node))
+ return 0;
+ }
if(nxproof) {
uint8_t* nx;
@@ -2828,7 +2847,7 @@ az_generate_any_answer(struct auth_zone* z, struct regional* region,
if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0;
added++;
}
- if(added == 0 && node->rrsets) {
+ if(added == 0 && node && node->rrsets) {
if(!msg_add_rrset_an(z, region, msg, node,
node->rrsets)) return 0;
}
@@ -2897,7 +2916,7 @@ az_generate_notype_answer(struct auth_zone* z, struct regional* region,
/* DNSSEC denial NSEC3 */
if(!az_add_nsec3_proof(z, region, msg, node->name,
node->namelen, msg->qinfo.qname,
- msg->qinfo.qname_len, 0, 0))
+ msg->qinfo.qname_len, 1, 0, 0))
return 0;
}
return 1;
@@ -2924,7 +2943,7 @@ az_generate_referral_answer(struct auth_zone* z, struct regional* region,
} else {
if(!az_add_nsec3_proof(z, region, msg, ce->name,
ce->namelen, msg->qinfo.qname,
- msg->qinfo.qname_len, 0, 0))
+ msg->qinfo.qname_len, 1, 0, 0))
return 0;
}
}
@@ -2995,9 +3014,12 @@ az_generate_wildcard_answer(struct auth_zone* z, struct query_info* qinfo,
if((nsec=az_find_nsec_cover(z, &node)) != NULL) {
if(!msg_add_rrset_ns(z, region, msg, node, nsec)) return 0;
} else if(ce) {
- if(!az_add_nsec3_proof(z, region, msg, ce->name,
- ce->namelen, msg->qinfo.qname,
- msg->qinfo.qname_len, 1, 0))
+ uint8_t* wildup = wildcard->name;
+ size_t wilduplen= wildcard->namelen;
+ dname_remove_label(&wildup, &wilduplen);
+ if(!az_add_nsec3_proof(z, region, msg, wildup,
+ wilduplen, msg->qinfo.qname,
+ msg->qinfo.qname_len, 0, 1, 0))
return 0;
}
@@ -3023,7 +3045,7 @@ az_generate_nxdomain_answer(struct auth_zone* z, struct regional* region,
} else if(ce) {
if(!az_add_nsec3_proof(z, region, msg, ce->name,
ce->namelen, msg->qinfo.qname,
- msg->qinfo.qname_len, 1, 1))
+ msg->qinfo.qname_len, 1, 1, 1))
return 0;
}
return 1;
@@ -3163,6 +3185,11 @@ int auth_zones_lookup(struct auth_zones* az, struct query_info* qinfo,
*fallback = 1;
return 0;
}
+ if(z->zone_expired) {
+ *fallback = z->fallback_enabled;
+ lock_rw_unlock(&z->lock);
+ return 0;
+ }
/* see what answer that zone would generate */
r = auth_zone_generate_answer(z, qinfo, region, msg, fallback);
lock_rw_unlock(&z->lock);
@@ -3250,6 +3277,19 @@ int auth_zones_answer(struct auth_zones* az, struct module_env* env,
lock_rw_unlock(&z->lock);
return 0;
}
+ if(z->zone_expired) {
+ if(z->fallback_enabled) {
+ lock_rw_unlock(&z->lock);
+ return 0;
+ }
+ lock_rw_unlock(&z->lock);
+ lock_rw_wrlock(&az->lock);
+ az->num_query_down++;
+ lock_rw_unlock(&az->lock);
+ auth_error_encode(qinfo, env, edns, repinfo, buf, temp,
+ LDNS_RCODE_SERVFAIL);
+ return 1;
+ }
/* answer it from zone z */
r = auth_zone_generate_answer(z, qinfo, temp, &msg, &fallback);
@@ -4773,8 +4813,10 @@ auth_zone_write_chunks(struct auth_xfer* xfr, const char* fname)
static void
xfr_write_after_update(struct auth_xfer* xfr, struct module_env* env)
{
+ struct config_file* cfg = env->cfg;
struct auth_zone* z;
char tmpfile[1024];
+ char* zfilename;
lock_basic_unlock(&xfr->lock);
/* get lock again, so it is a readlock and concurrently queries
@@ -4792,20 +4834,24 @@ xfr_write_after_update(struct auth_xfer* xfr, struct module_env* env)
lock_basic_lock(&xfr->lock);
lock_rw_unlock(&env->auth_zones->lock);
- if(z->zonefile == NULL) {
+ if(z->zonefile == NULL || z->zonefile[0] == 0) {
lock_rw_unlock(&z->lock);
/* no write needed, no zonefile set */
return;
}
+ zfilename = z->zonefile;
+ if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(zfilename,
+ cfg->chrootdir, strlen(cfg->chrootdir)) == 0)
+ zfilename += strlen(cfg->chrootdir);
/* write to tempfile first */
- if((size_t)strlen(z->zonefile) + 16 > sizeof(tmpfile)) {
+ if((size_t)strlen(zfilename) + 16 > sizeof(tmpfile)) {
verbose(VERB_ALGO, "tmpfilename too long, cannot update "
- " zonefile %s", z->zonefile);
+ " zonefile %s", zfilename);
lock_rw_unlock(&z->lock);
return;
}
- snprintf(tmpfile, sizeof(tmpfile), "%s.tmp%u", z->zonefile,
+ snprintf(tmpfile, sizeof(tmpfile), "%s.tmp%u", zfilename,
(unsigned)getpid());
if(xfr->task_transfer->master->http) {
/* use the stored chunk list to write them */
@@ -4818,8 +4864,8 @@ xfr_write_after_update(struct auth_xfer* xfr, struct module_env* env)
lock_rw_unlock(&z->lock);
return;
}
- if(rename(tmpfile, z->zonefile) < 0) {
- log_err("could not rename(%s, %s): %s", tmpfile, z->zonefile,
+ if(rename(tmpfile, zfilename) < 0) {
+ log_err("could not rename(%s, %s): %s", tmpfile, zfilename,
strerror(errno));
unlink(tmpfile);
lock_rw_unlock(&z->lock);
@@ -4951,12 +4997,12 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env)
qinfo.qtype = LDNS_RR_TYPE_AAAA;
qinfo.local_alias = NULL;
if(verbosity >= VERB_ALGO) {
- char buf[512];
+ char buf1[512];
char buf2[LDNS_MAX_DOMAINLEN+1];
dname_str(xfr->name, buf2);
- snprintf(buf, sizeof(buf), "auth zone %s: master lookup"
+ snprintf(buf1, sizeof(buf1), "auth zone %s: master lookup"
" for task_transfer", buf2);
- log_query_info(VERB_ALGO, buf, &qinfo);
+ log_query_info(VERB_ALGO, buf1, &qinfo);
}
edns.edns_present = 1;
edns.ext_rcode = 0;
@@ -5593,15 +5639,33 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err,
* and continue task_transfer*/
verbose(VERB_ALGO, "xfr stopped, connection lost to %s",
xfr->task_transfer->master->host);
+
+ /* see if IXFR caused the failure, if so, try AXFR */
+ if(xfr->task_transfer->on_ixfr) {
+ xfr->task_transfer->ixfr_possible_timeout_count++;
+ if(xfr->task_transfer->ixfr_possible_timeout_count >=
+ NUM_TIMEOUTS_FALLBACK_IXFR) {
+ verbose(VERB_ALGO, "xfr to %s, fallback "
+ "from IXFR to AXFR (because of timeouts)",
+ xfr->task_transfer->master->host);
+ xfr->task_transfer->ixfr_fail = 1;
+ gonextonfail = 0;
+ }
+ }
+
failed:
/* delete transferred data from list */
auth_chunks_delete(xfr->task_transfer);
comm_point_delete(xfr->task_transfer->cp);
xfr->task_transfer->cp = NULL;
- xfr_transfer_nextmaster(xfr);
+ if(gonextonfail)
+ xfr_transfer_nextmaster(xfr);
xfr_transfer_nexttarget_or_end(xfr, env);
return 0;
}
+ /* note that IXFR worked without timeout */
+ if(xfr->task_transfer->on_ixfr)
+ xfr->task_transfer->ixfr_possible_timeout_count = 0;
/* handle returned packet */
/* if it fails, cleanup and end this transfer */
@@ -5973,12 +6037,12 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env)
qinfo.qtype = LDNS_RR_TYPE_AAAA;
qinfo.local_alias = NULL;
if(verbosity >= VERB_ALGO) {
- char buf[512];
+ char buf1[512];
char buf2[LDNS_MAX_DOMAINLEN+1];
dname_str(xfr->name, buf2);
- snprintf(buf, sizeof(buf), "auth zone %s: master lookup"
+ snprintf(buf1, sizeof(buf1), "auth zone %s: master lookup"
" for task_probe", buf2);
- log_query_info(VERB_ALGO, buf, &qinfo);
+ log_query_info(VERB_ALGO, buf1, &qinfo);
}
edns.edns_present = 1;
edns.ext_rcode = 0;
diff --git a/services/authzone.h b/services/authzone.h
index 8c636eaa446c..4706803a86b3 100644
--- a/services/authzone.h
+++ b/services/authzone.h
@@ -378,6 +378,8 @@ struct auth_transfer {
* data or add of duplicate data). Flag is cleared once the retry
* with axfr is done. */
int ixfr_fail;
+ /** we saw an ixfr-indicating timeout, count of them */
+ int ixfr_possible_timeout_count;
/** we are doing IXFR right now */
int on_ixfr;
/** did we detect the current AXFR/IXFR serial number yet, 0 not yet,
@@ -599,7 +601,7 @@ int auth_zones_startprobesequence(struct auth_zones* az,
struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t dclass);
/** read auth zone from zonefile. caller must lock zone. false on failure */
-int auth_zone_read_zonefile(struct auth_zone* z);
+int auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg);
/** find serial number of zone or false if none (no SOA record) */
int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial);
diff --git a/services/cache/dns.c b/services/cache/dns.c
index 01c9a8c5c10a..47611ac5aef5 100644
--- a/services/cache/dns.c
+++ b/services/cache/dns.c
@@ -721,6 +721,17 @@ fill_any(struct module_env* env,
int i, num=6; /* number of RR types to look up */
log_assert(lookup[num] == 0);
+ if(env->cfg->deny_any) {
+ /* return empty message */
+ msg = dns_msg_create(qname, qnamelen, qtype, qclass,
+ region, 0);
+ if(!msg) {
+ return NULL;
+ }
+ msg->rep->security = sec_status_indeterminate;
+ return msg;
+ }
+
for(i=0; i<num; i++) {
/* look up this RR for inclusion in type ANY response */
struct ub_packed_rrset_key* rrset = rrset_cache_lookup(
diff --git a/services/cache/infra.c b/services/cache/infra.c
index 489f939491d7..07c41928d67e 100644
--- a/services/cache/infra.c
+++ b/services/cache/infra.c
@@ -808,7 +808,7 @@ static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra,
}
/** find data item in array for ip addresses */
-struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra,
+static struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra,
struct comm_reply* repinfo, int wr)
{
struct ip_rate_key key;
diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c
index 458bf6f513f2..f86a83d96736 100644
--- a/services/listen_dnsport.c
+++ b/services/listen_dnsport.c
@@ -53,6 +53,9 @@
#include "util/config_file.h"
#include "util/net_help.h"
#include "sldns/sbuffer.h"
+#include "services/mesh.h"
+#include "util/fptr_wlist.h"
+#include "util/locks.h"
#ifdef HAVE_NETDB_H
#include <netdb.h>
@@ -70,6 +73,18 @@
/** number of queued TCP connections for listen() */
#define TCP_BACKLOG 256
+/** number of simultaneous requests a client can have */
+#define TCP_MAX_REQ_SIMULTANEOUS 32
+
+#ifndef THREADS_DISABLED
+/** lock on the counter of stream buffer memory */
+static lock_basic_type stream_wait_count_lock;
+#endif
+/** size (in bytes) of stream wait buffers */
+static size_t stream_wait_count = 0;
+/** is the lock initialised for stream wait buffers */
+static int stream_wait_lock_inited = 0;
+
/**
* Debug print of the getaddrinfo returned address.
* @param addr: the address returned.
@@ -247,6 +262,26 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
}
#endif /* SO_REUSEADDR */
#ifdef SO_REUSEPORT
+# ifdef SO_REUSEPORT_LB
+ /* on FreeBSD 12 we have SO_REUSEPORT_LB that does loadbalance
+ * like SO_REUSEPORT on Linux. This is what the users want
+ * with the config option in unbound.conf; if we actually
+ * need local address and port reuse they'll also need to
+ * have SO_REUSEPORT set for them, assume it was _LB they want.
+ */
+ if (reuseport && *reuseport &&
+ setsockopt(s, SOL_SOCKET, SO_REUSEPORT_LB, (void*)&on,
+ (socklen_t)sizeof(on)) < 0) {
+#ifdef ENOPROTOOPT
+ if(errno != ENOPROTOOPT || verbosity >= 3)
+ log_warn("setsockopt(.. SO_REUSEPORT_LB ..) failed: %s",
+ strerror(errno));
+#endif
+ /* this option is not essential, we can continue */
+ *reuseport = 0;
+ }
+# else /* no SO_REUSEPORT_LB */
+
/* try to set SO_REUSEPORT so that incoming
* queries are distributed evenly among the receiving threads.
* Each thread must have its own socket bound to the same port,
@@ -263,6 +298,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
/* this option is not essential, we can continue */
*reuseport = 0;
}
+# endif /* SO_REUSEPORT_LB */
#else
(void)reuseport;
#endif /* defined(SO_REUSEPORT) */
@@ -565,7 +601,11 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
if(family==AF_INET6 && errno==EINVAL)
*noproto = 1;
else if(errno != EADDRINUSE &&
- !(errno == EACCES && verbosity < 4 && !listen)) {
+ !(errno == EACCES && verbosity < 4 && !listen)
+#ifdef EADDRNOTAVAIL
+ && !(errno == EADDRNOTAVAIL && verbosity < 4 && !listen)
+#endif
+ ) {
log_err_addr("can't bind socket", strerror(errno),
(struct sockaddr_storage*)addr, addrlen);
}
@@ -813,7 +853,11 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
disabled, except when verbosity enabled for debugging */
if(errno != ENOPROTOOPT || verbosity >= 3)
#endif
- log_err("Setting TCP Fast Open as server failed: %s", strerror(errno));
+ if(errno == EPERM) {
+ log_warn("Setting TCP Fast Open as server failed: %s ; this could likely be because sysctl net.inet.tcp.fastopen.enabled, net.inet.tcp.fastopen.server_enable, or net.ipv4.tcp_fastopen is disabled", strerror(errno));
+ } else {
+ log_err("Setting TCP Fast Open as server failed: %s", strerror(errno));
+ }
}
#endif
return s;
@@ -1235,6 +1279,10 @@ listen_create(struct comm_base* base, struct listen_port* ports,
free(front);
return NULL;
}
+ if(!stream_wait_lock_inited) {
+ lock_basic_init(&stream_wait_count_lock);
+ stream_wait_lock_inited = 1;
+ }
/* create comm points as needed */
while(ports) {
@@ -1247,11 +1295,13 @@ listen_create(struct comm_base* base, struct listen_port* ports,
ports->ftype == listen_type_tcp_dnscrypt)
cp = comm_point_create_tcp(base, ports->fd,
tcp_accept_count, tcp_idle_timeout,
- tcp_conn_limit, bufsize, cb, cb_arg);
+ tcp_conn_limit, bufsize, front->udp_buff,
+ cb, cb_arg);
else if(ports->ftype == listen_type_ssl) {
cp = comm_point_create_tcp(base, ports->fd,
tcp_accept_count, tcp_idle_timeout,
- tcp_conn_limit, bufsize, cb, cb_arg);
+ tcp_conn_limit, bufsize, front->udp_buff,
+ cb, cb_arg);
cp->ssl = sslctx;
} else if(ports->ftype == listen_type_udpancil ||
ports->ftype == listen_type_udpancil_dnscrypt)
@@ -1322,6 +1372,10 @@ listen_delete(struct listen_dnsport* front)
#endif
sldns_buffer_free(front->udp_buff);
free(front);
+ if(stream_wait_lock_inited) {
+ stream_wait_lock_inited = 0;
+ lock_basic_destroy(&stream_wait_count_lock);
+ }
}
struct listen_port*
@@ -1479,3 +1533,367 @@ void listen_start_accept(struct listen_dnsport* listen)
}
}
+struct tcp_req_info*
+tcp_req_info_create(struct sldns_buffer* spoolbuf)
+{
+ struct tcp_req_info* req = (struct tcp_req_info*)malloc(sizeof(*req));
+ if(!req) {
+ log_err("malloc failure for new stream outoforder processing structure");
+ return NULL;
+ }
+ memset(req, 0, sizeof(*req));
+ req->spool_buffer = spoolbuf;
+ return req;
+}
+
+void
+tcp_req_info_delete(struct tcp_req_info* req)
+{
+ if(!req) return;
+ tcp_req_info_clear(req);
+ /* cp is pointer back to commpoint that owns this struct and
+ * called delete on us */
+ /* spool_buffer is shared udp buffer, not deleted here */
+ free(req);
+}
+
+void tcp_req_info_clear(struct tcp_req_info* req)
+{
+ struct tcp_req_open_item* open, *nopen;
+ struct tcp_req_done_item* item, *nitem;
+ if(!req) return;
+
+ /* free outstanding request mesh reply entries */
+ open = req->open_req_list;
+ while(open) {
+ nopen = open->next;
+ mesh_state_remove_reply(open->mesh, open->mesh_state, req->cp);
+ free(open);
+ open = nopen;
+ }
+ req->open_req_list = NULL;
+ req->num_open_req = 0;
+
+ /* free pending writable result packets */
+ item = req->done_req_list;
+ while(item) {
+ nitem = item->next;
+ lock_basic_lock(&stream_wait_count_lock);
+ stream_wait_count -= (sizeof(struct tcp_req_done_item)
+ +item->len);
+ lock_basic_unlock(&stream_wait_count_lock);
+ free(item->buf);
+ free(item);
+ item = nitem;
+ }
+ req->done_req_list = NULL;
+ req->num_done_req = 0;
+ req->read_is_closed = 0;
+}
+
+void
+tcp_req_info_remove_mesh_state(struct tcp_req_info* req, struct mesh_state* m)
+{
+ struct tcp_req_open_item* open, *prev = NULL;
+ if(!req || !m) return;
+ open = req->open_req_list;
+ while(open) {
+ if(open->mesh_state == m) {
+ struct tcp_req_open_item* next;
+ if(prev) prev->next = open->next;
+ else req->open_req_list = open->next;
+ /* caller has to manage the mesh state reply entry */
+ next = open->next;
+ free(open);
+ req->num_open_req --;
+
+ /* prev = prev; */
+ open = next;
+ continue;
+ }
+ prev = open;
+ open = open->next;
+ }
+}
+
+/** setup listening for read or write */
+static void
+tcp_req_info_setup_listen(struct tcp_req_info* req)
+{
+ int wr = 0;
+ int rd = 0;
+
+ if(req->cp->tcp_byte_count != 0) {
+ /* cannot change, halfway through */
+ return;
+ }
+
+ if(!req->cp->tcp_is_reading)
+ wr = 1;
+ if(req->num_open_req + req->num_done_req < TCP_MAX_REQ_SIMULTANEOUS &&
+ !req->read_is_closed)
+ rd = 1;
+
+ if(wr) {
+ req->cp->tcp_is_reading = 0;
+ comm_point_start_listening(req->cp, -1,
+ req->cp->tcp_timeout_msec);
+ } else if(rd) {
+ req->cp->tcp_is_reading = 1;
+ comm_point_start_listening(req->cp, -1,
+ req->cp->tcp_timeout_msec);
+ /* and also read it (from SSL stack buffers), so
+ * no event read event is expected since the remainder of
+ * the TLS frame is sitting in the buffers. */
+ req->read_again = 1;
+ } else {
+ comm_point_start_listening(req->cp, -1,
+ req->cp->tcp_timeout_msec);
+ comm_point_listen_for_rw(req->cp, 0, 0);
+ }
+}
+
+/** remove first item from list of pending results */
+static struct tcp_req_done_item*
+tcp_req_info_pop_done(struct tcp_req_info* req)
+{
+ struct tcp_req_done_item* item;
+ log_assert(req->num_done_req > 0 && req->done_req_list);
+ item = req->done_req_list;
+ lock_basic_lock(&stream_wait_count_lock);
+ stream_wait_count -= (sizeof(struct tcp_req_done_item)+item->len);
+ lock_basic_unlock(&stream_wait_count_lock);
+ req->done_req_list = req->done_req_list->next;
+ req->num_done_req --;
+ return item;
+}
+
+/** Send given buffer and setup to write */
+static void
+tcp_req_info_start_write_buf(struct tcp_req_info* req, uint8_t* buf,
+ size_t len)
+{
+ sldns_buffer_clear(req->cp->buffer);
+ sldns_buffer_write(req->cp->buffer, buf, len);
+ sldns_buffer_flip(req->cp->buffer);
+
+ req->cp->tcp_is_reading = 0; /* we are now writing */
+}
+
+/** pick up the next result and start writing it to the channel */
+static void
+tcp_req_pickup_next_result(struct tcp_req_info* req)
+{
+ if(req->num_done_req > 0) {
+ /* unlist the done item from the list of pending results */
+ struct tcp_req_done_item* item = tcp_req_info_pop_done(req);
+ tcp_req_info_start_write_buf(req, item->buf, item->len);
+ free(item->buf);
+ free(item);
+ }
+}
+
+/** the read channel has closed */
+int
+tcp_req_info_handle_read_close(struct tcp_req_info* req)
+{
+ verbose(VERB_ALGO, "tcp channel read side closed %d", req->cp->fd);
+ /* reset byte count for (potential) partial read */
+ req->cp->tcp_byte_count = 0;
+ /* if we still have results to write, pick up next and write it */
+ if(req->num_done_req != 0) {
+ tcp_req_pickup_next_result(req);
+ tcp_req_info_setup_listen(req);
+ return 1;
+ }
+ /* if nothing to do, this closes the connection */
+ if(req->num_open_req == 0 && req->num_done_req == 0)
+ return 0;
+ /* otherwise, we must be waiting for dns resolve, wait with timeout */
+ req->read_is_closed = 1;
+ tcp_req_info_setup_listen(req);
+ return 1;
+}
+
+void
+tcp_req_info_handle_writedone(struct tcp_req_info* req)
+{
+ /* back to reading state, we finished this write event */
+ sldns_buffer_clear(req->cp->buffer);
+ if(req->num_done_req == 0 && req->read_is_closed) {
+ /* no more to write and nothing to read, close it */
+ comm_point_drop_reply(&req->cp->repinfo);
+ return;
+ }
+ req->cp->tcp_is_reading = 1;
+ /* see if another result needs writing */
+ tcp_req_pickup_next_result(req);
+
+ /* see if there is more to write, if not stop_listening for writing */
+ /* see if new requests are allowed, if so, start_listening
+ * for reading */
+ tcp_req_info_setup_listen(req);
+}
+
+void
+tcp_req_info_handle_readdone(struct tcp_req_info* req)
+{
+ struct comm_point* c = req->cp;
+
+ /* we want to read up several requests, unless there are
+ * pending answers */
+
+ req->is_drop = 0;
+ req->is_reply = 0;
+ req->in_worker_handle = 1;
+ /* handle the current request */
+ /* this calls the worker handle request routine that could give
+ * a cache response, or localdata response, or drop the reply,
+ * or schedule a mesh entry for later */
+ fptr_ok(fptr_whitelist_comm_point(c->callback));
+ if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) {
+ req->in_worker_handle = 0;
+ /* there is an answer, put it up. It is already in the
+ * c->buffer, just send it. */
+ /* since we were just reading a query, the channel is
+ * clear to write to */
+ send_it:
+ c->tcp_is_reading = 0;
+ comm_point_start_listening(c, -1, c->tcp_timeout_msec);
+ return;
+ }
+ req->in_worker_handle = 0;
+ /* it should be waiting in the mesh for recursion.
+ * If mesh failed to add a new entry and called commpoint_drop_reply.
+ * Then the mesh state has been cleared. */
+ if(req->is_drop) {
+ /* we can now call drop_reply without recursing into ourselves
+ * whilst in the callback */
+ /* we have to close the stream because there is no reply,
+ * no servfail to send, but the query needs an action, for
+ * a stream that is close the connection */
+ sldns_buffer_clear(c->buffer);
+ comm_point_drop_reply(&c->repinfo);
+ return;
+ }
+ /* If mesh failed(mallocfail) and called commpoint_send_reply with
+ * something like servfail then we pick up that reply below. */
+ if(req->is_reply) {
+ goto send_it;
+ }
+
+ sldns_buffer_clear(c->buffer);
+ /* if pending answers, pick up an answer and start sending it */
+ tcp_req_pickup_next_result(req);
+
+ /* if answers pending, start sending answers */
+ /* read more requests if we can have more requests */
+ tcp_req_info_setup_listen(req);
+}
+
+int
+tcp_req_info_add_meshstate(struct tcp_req_info* req,
+ struct mesh_area* mesh, struct mesh_state* m)
+{
+ struct tcp_req_open_item* item;
+ log_assert(req && mesh && m);
+ item = (struct tcp_req_open_item*)malloc(sizeof(*item));
+ if(!item) return 0;
+ item->next = req->open_req_list;
+ item->mesh = mesh;
+ item->mesh_state = m;
+ req->open_req_list = item;
+ req->num_open_req++;
+ return 1;
+}
+
+/** Add a result to the result list. At the end. */
+static int
+tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len)
+{
+ struct tcp_req_done_item* last = NULL;
+ struct tcp_req_done_item* item;
+ size_t space;
+
+ /* see if we have space */
+ space = sizeof(struct tcp_req_done_item) + len;
+ lock_basic_lock(&stream_wait_count_lock);
+ if(stream_wait_count + space > stream_wait_max) {
+ lock_basic_unlock(&stream_wait_count_lock);
+ verbose(VERB_ALGO, "drop stream reply, no space left, in stream-wait-size");
+ return 0;
+ }
+ stream_wait_count += space;
+ lock_basic_unlock(&stream_wait_count_lock);
+
+ /* find last element */
+ last = req->done_req_list;
+ while(last && last->next)
+ last = last->next;
+
+ /* create new element */
+ item = (struct tcp_req_done_item*)malloc(sizeof(*item));
+ if(!item) {
+ log_err("malloc failure, for stream result list");
+ return 0;
+ }
+ item->next = NULL;
+ item->len = len;
+ item->buf = memdup(buf, len);
+ if(!item->buf) {
+ free(item);
+ log_err("malloc failure, adding reply to stream result list");
+ return 0;
+ }
+
+ /* link in */
+ if(last) last->next = item;
+ else req->done_req_list = item;
+ req->num_done_req++;
+ return 1;
+}
+
+void
+tcp_req_info_send_reply(struct tcp_req_info* req)
+{
+ if(req->in_worker_handle) {
+ /* It is in the right buffer to answer straight away */
+ req->is_reply = 1;
+ return;
+ }
+ /* now that the query has been handled, that mesh_reply entry
+ * should be removed, from the tcp_req_info list,
+ * the mesh state cleanup removes then with region_cleanup and
+ * replies_sent true. */
+ /* see if we can send it straight away (we are not doing
+ * anything else). If so, copy to buffer and start */
+ if(req->cp->tcp_is_reading && req->cp->tcp_byte_count == 0) {
+ /* buffer is free, and was ready to read new query into,
+ * but we are now going to use it to send this answer */
+ tcp_req_info_start_write_buf(req,
+ sldns_buffer_begin(req->spool_buffer),
+ sldns_buffer_limit(req->spool_buffer));
+ /* switch to listen to write events */
+ comm_point_stop_listening(req->cp);
+ comm_point_start_listening(req->cp, -1,
+ req->cp->tcp_timeout_msec);
+ return;
+ }
+ /* queue up the answer behind the others already pending */
+ if(!tcp_req_info_add_result(req, sldns_buffer_begin(req->spool_buffer),
+ sldns_buffer_limit(req->spool_buffer))) {
+ /* drop the connection, we are out of resources */
+ comm_point_drop_reply(&req->cp->repinfo);
+ }
+}
+
+size_t tcp_req_info_get_stream_buffer_size(void)
+{
+ size_t s;
+ if(!stream_wait_lock_inited)
+ return stream_wait_count;
+ lock_basic_lock(&stream_wait_count_lock);
+ s = stream_wait_count;
+ lock_basic_unlock(&stream_wait_count_lock);
+ return s;
+}
diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h
index 46b432d4b934..ad84d8322643 100644
--- a/services/listen_dnsport.h
+++ b/services/listen_dnsport.h
@@ -237,4 +237,134 @@ int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
*/
int create_local_accept_sock(const char* path, int* noproto, int use_systemd);
+/**
+ * TCP request info. List of requests outstanding on the channel, that
+ * are asked for but not yet answered back.
+ */
+struct tcp_req_info {
+ /** the TCP comm point for this. Its buffer is used for read/write */
+ struct comm_point* cp;
+ /** the buffer to use to spool reply from mesh into,
+ * it can then be copied to the result list and written.
+ * it is a pointer to the shared udp buffer. */
+ struct sldns_buffer* spool_buffer;
+ /** are we in worker_handle function call (for recursion callback)*/
+ int in_worker_handle;
+ /** is the comm point dropped (by worker handle).
+ * That means we have to disconnect the channel. */
+ int is_drop;
+ /** is the comm point set to send_reply (by mesh new client in worker
+ * handle), if so answer is available in c.buffer */
+ int is_reply;
+ /** read channel has closed, just write pending results */
+ int read_is_closed;
+ /** read again */
+ int read_again;
+ /** number of outstanding requests */
+ int num_open_req;
+ /** list of outstanding requests */
+ struct tcp_req_open_item* open_req_list;
+ /** number of pending writeable results */
+ int num_done_req;
+ /** list of pending writable result packets, malloced one at a time */
+ struct tcp_req_done_item* done_req_list;
+};
+
+/**
+ * List of open items in TCP channel
+ */
+struct tcp_req_open_item {
+ /** next in list */
+ struct tcp_req_open_item* next;
+ /** the mesh area of the mesh_state */
+ struct mesh_area* mesh;
+ /** the mesh state */
+ struct mesh_state* mesh_state;
+};
+
+/**
+ * List of done items in TCP channel
+ */
+struct tcp_req_done_item {
+ /** next in list */
+ struct tcp_req_done_item* next;
+ /** the buffer with packet contents */
+ uint8_t* buf;
+ /** length of the buffer */
+ size_t len;
+};
+
+/**
+ * Create tcp request info structure that keeps track of open
+ * requests on the TCP channel that are resolved at the same time,
+ * and the pending results that have to get written back to that client.
+ * @param spoolbuf: shared buffer
+ * @return new structure or NULL on alloc failure.
+ */
+struct tcp_req_info* tcp_req_info_create(struct sldns_buffer* spoolbuf);
+
+/**
+ * Delete tcp request structure. Called by owning commpoint.
+ * Removes mesh entry references and stored results from the lists.
+ * @param req: the tcp request info
+ */
+void tcp_req_info_delete(struct tcp_req_info* req);
+
+/**
+ * Clear tcp request structure. Removes list entries, sets it up ready
+ * for the next connection.
+ * @param req: tcp request info structure.
+ */
+void tcp_req_info_clear(struct tcp_req_info* req);
+
+/**
+ * Remove mesh state entry from list in tcp_req_info.
+ * caller has to manage the mesh state reply entry in the mesh state.
+ * @param req: the tcp req info that has the entry removed from the list.
+ * @param m: the state removed from the list.
+ */
+void tcp_req_info_remove_mesh_state(struct tcp_req_info* req,
+ struct mesh_state* m);
+
+/**
+ * Handle write done of the last result packet
+ * @param req: the tcp req info.
+ */
+void tcp_req_info_handle_writedone(struct tcp_req_info* req);
+
+/**
+ * Handle read done of a new request from the client
+ * @param req: the tcp req info.
+ */
+void tcp_req_info_handle_readdone(struct tcp_req_info* req);
+
+/**
+ * Add mesh state to the tcp req list of open requests.
+ * So the comm_reply can be removed off the mesh reply list when
+ * the tcp channel has to be closed (for other reasons then that that
+ * request was done, eg. channel closed by client or some format error).
+ * @param req: tcp req info structure. It keeps track of the simultaneous
+ * requests and results on a tcp (or TLS) channel.
+ * @param mesh: mesh area for the state.
+ * @param m: mesh state to add.
+ * @return 0 on failure (malloc failure).
+ */
+int tcp_req_info_add_meshstate(struct tcp_req_info* req,
+ struct mesh_area* mesh, struct mesh_state* m);
+
+/**
+ * Send reply on tcp simultaneous answer channel. May queue it up.
+ * @param req: request info structure.
+ */
+void tcp_req_info_send_reply(struct tcp_req_info* req);
+
+/** the read channel has closed
+ * @param req: request. remaining queries are looked up and answered.
+ * @return zero if nothing to do, just close the tcp.
+ */
+int tcp_req_info_handle_read_close(struct tcp_req_info* req);
+
+/** get the size of currently used tcp stream wait buffers (in bytes) */
+size_t tcp_req_info_get_stream_buffer_size(void);
+
#endif /* LISTEN_DNSPORT_H */
diff --git a/services/mesh.c b/services/mesh.c
index c6bb9ef2bc63..bee0f76a4ad6 100644
--- a/services/mesh.c
+++ b/services/mesh.c
@@ -61,6 +61,7 @@
#include "services/localzone.h"
#include "util/data/dname.h"
#include "respip/respip.h"
+#include "services/listen_dnsport.h"
/** subtract timers and the values do not overflow or become negative */
static void
@@ -429,6 +430,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
/* add reply to s */
if(!mesh_state_add_reply(s, edns, rep, qid, qflags, qinfo)) {
log_err("mesh_new_client: out of memory; SERVFAIL");
+ servfail_mem:
if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, &s->s,
NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch))
edns->opt_list = NULL;
@@ -439,6 +441,12 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo,
mesh_state_delete(&s->s);
return;
}
+ if(rep->c->tcp_req_info) {
+ if(!tcp_req_info_add_meshstate(rep->c->tcp_req_info, mesh, s)) {
+ log_err("mesh_new_client: out of memory add tcpreqinfo");
+ goto servfail_mem;
+ }
+ }
/* update statistics */
if(was_detached) {
log_assert(mesh->num_detached_states > 0);
@@ -732,9 +740,13 @@ mesh_state_cleanup(struct mesh_state* mstate)
mesh = mstate->s.env->mesh;
/* drop unsent replies */
if(!mstate->replies_sent) {
- struct mesh_reply* rep;
+ struct mesh_reply* rep = mstate->reply_list;
struct mesh_cb* cb;
- for(rep=mstate->reply_list; rep; rep=rep->next) {
+ /* in tcp_req_info, the mstates linked are removed, but
+ * the reply_list is now NULL, so the remove-from-empty-list
+ * takes no time and also it does not do the mesh accounting */
+ mstate->reply_list = NULL;
+ for(; rep; rep=rep->next) {
comm_point_drop_reply(&rep->query_reply);
mesh->num_reply_addrs--;
}
@@ -1031,11 +1043,14 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep,
* @param rcode: if not 0, error code.
* @param rep: reply to send (or NULL if rcode is set).
* @param r: reply entry
+ * @param r_buffer: buffer to use for reply entry.
* @param prev: previous reply, already has its answer encoded in buffer.
+ * @param prev_buffer: buffer for previous reply.
*/
static void
mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
- struct mesh_reply* r, struct mesh_reply* prev)
+ struct mesh_reply* r, struct sldns_buffer* r_buffer,
+ struct mesh_reply* prev, struct sldns_buffer* prev_buffer)
{
struct timeval end_time;
struct timeval duration;
@@ -1063,7 +1078,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
* and still reuse the previous answer if they are the same, but that
* would be complicated and error prone for the relatively minor case.
* So we err on the side of safety. */
- if(prev && prev->qflags == r->qflags &&
+ if(prev && prev_buffer && prev->qflags == r->qflags &&
!prev->local_alias && !r->local_alias &&
prev->edns.edns_present == r->edns.edns_present &&
prev->edns.bits == r->edns.bits &&
@@ -1071,13 +1086,11 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
edns_opt_list_compare(prev->edns.opt_list, r->edns.opt_list)
== 0) {
/* if the previous reply is identical to this one, fix ID */
- if(prev->query_reply.c->buffer != r->query_reply.c->buffer)
- sldns_buffer_copy(r->query_reply.c->buffer,
- prev->query_reply.c->buffer);
- sldns_buffer_write_at(r->query_reply.c->buffer, 0,
- &r->qid, sizeof(uint16_t));
- sldns_buffer_write_at(r->query_reply.c->buffer, 12,
- r->qname, m->s.qinfo.qname_len);
+ if(prev_buffer != r_buffer)
+ sldns_buffer_copy(r_buffer, prev_buffer);
+ sldns_buffer_write_at(r_buffer, 0, &r->qid, sizeof(uint16_t));
+ sldns_buffer_write_at(r_buffer, 12, r->qname,
+ m->s.qinfo.qname_len);
comm_point_send_reply(&r->query_reply);
} else if(rcode) {
m->s.qinfo.qname = r->qname;
@@ -1091,8 +1104,8 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
&r->edns, NULL, m->s.region))
r->edns.opt_list = NULL;
}
- error_encode(r->query_reply.c->buffer, rcode, &m->s.qinfo,
- r->qid, r->qflags, &r->edns);
+ error_encode(r_buffer, rcode, &m->s.qinfo, r->qid,
+ r->qflags, &r->edns);
comm_point_send_reply(&r->query_reply);
} else {
size_t udp_size = r->edns.udp_size;
@@ -1108,16 +1121,15 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
m->s.env->cfg, r->query_reply.c,
m->s.region) ||
!reply_info_answer_encode(&m->s.qinfo, rep, r->qid,
- r->qflags, r->query_reply.c->buffer, 0, 1,
- m->s.env->scratch, udp_size, &r->edns,
- (int)(r->edns.bits & EDNS_DO), secure))
+ r->qflags, r_buffer, 0, 1, m->s.env->scratch,
+ udp_size, &r->edns, (int)(r->edns.bits & EDNS_DO),
+ secure))
{
if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s,
rep, LDNS_RCODE_SERVFAIL, &r->edns, NULL, m->s.region))
r->edns.opt_list = NULL;
- error_encode(r->query_reply.c->buffer,
- LDNS_RCODE_SERVFAIL, &m->s.qinfo, r->qid,
- r->qflags, &r->edns);
+ error_encode(r_buffer, LDNS_RCODE_SERVFAIL,
+ &m->s.qinfo, r->qid, r->qflags, &r->edns);
}
r->edns = edns_bak;
comm_point_send_reply(&r->query_reply);
@@ -1132,19 +1144,17 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
timeval_add(&m->s.env->mesh->replies_sum_wait, &duration);
timehist_insert(m->s.env->mesh->histogram, &duration);
if(m->s.env->cfg->stat_extended) {
- uint16_t rc = FLAGS_GET_RCODE(sldns_buffer_read_u16_at(r->
- query_reply.c->buffer, 2));
+ uint16_t rc = FLAGS_GET_RCODE(sldns_buffer_read_u16_at(
+ r_buffer, 2));
if(secure) m->s.env->mesh->ans_secure++;
m->s.env->mesh->ans_rcode[ rc ] ++;
- if(rc == 0 && LDNS_ANCOUNT(sldns_buffer_begin(r->
- query_reply.c->buffer)) == 0)
+ if(rc == 0 && LDNS_ANCOUNT(sldns_buffer_begin(r_buffer)) == 0)
m->s.env->mesh->ans_nodata++;
}
/* Log reply sent */
if(m->s.env->cfg->log_replies) {
log_reply_info(0, &m->s.qinfo, &r->query_reply.addr,
- r->query_reply.addrlen, duration, 0,
- r->query_reply.c->buffer);
+ r->query_reply.addrlen, duration, 0, r_buffer);
}
}
@@ -1152,6 +1162,7 @@ void mesh_query_done(struct mesh_state* mstate)
{
struct mesh_reply* r;
struct mesh_reply* prev = NULL;
+ struct sldns_buffer* prev_buffer = NULL;
struct mesh_cb* c;
struct reply_info* rep = (mstate->s.return_msg?
mstate->s.return_msg->rep:NULL);
@@ -1180,9 +1191,15 @@ void mesh_query_done(struct mesh_state* mstate)
if(mstate->s.is_drop)
comm_point_drop_reply(&r->query_reply);
else {
+ struct sldns_buffer* r_buffer = r->query_reply.c->buffer;
+ if(r->query_reply.c->tcp_req_info)
+ r_buffer = r->query_reply.c->tcp_req_info->spool_buffer;
mesh_send_reply(mstate, mstate->s.return_rcode, rep,
- r, prev);
+ r, r_buffer, prev, prev_buffer);
+ if(r->query_reply.c->tcp_req_info)
+ tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
prev = r;
+ prev_buffer = r_buffer;
}
}
mstate->replies_sent = 1;
@@ -1392,7 +1409,7 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate,
/* module is looping. Stop it. */
log_err("internal error: looping module (%s) stopped",
mesh->mods.mod[mstate->s.curmod]->name);
- log_query_info(VERB_QUERY, "pass error for qstate",
+ log_query_info(0, "pass error for qstate",
&mstate->s.qinfo);
s = module_error;
}
@@ -1613,3 +1630,38 @@ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp,
m->prev->next = m->next;
else *fp = m->next;
}
+
+void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m,
+ struct comm_point* cp)
+{
+ struct mesh_reply* n, *prev = NULL;
+ n = m->reply_list;
+ /* when in mesh_cleanup, it sets the reply_list to NULL, so that
+ * there is no accounting twice */
+ if(!n) return; /* nothing to remove, also no accounting needed */
+ while(n) {
+ if(n->query_reply.c == cp) {
+ /* unlink it */
+ if(prev) prev->next = n->next;
+ else m->reply_list = n->next;
+ /* delete it, but allocated in m region */
+ mesh->num_reply_addrs--;
+
+ /* prev = prev; */
+ n = n->next;
+ continue;
+ }
+ prev = n;
+ n = n->next;
+ }
+ /* it was not detached (because it had a reply list), could be now */
+ if(!m->reply_list && !m->cb_list
+ && m->super_set.count == 0) {
+ mesh->num_detached_states++;
+ }
+ /* if not replies any more in mstate, it is no longer a reply_state */
+ if(!m->reply_list && !m->cb_list) {
+ log_assert(mesh->num_reply_states > 0);
+ mesh->num_reply_states--;
+ }
+}
diff --git a/services/mesh.h b/services/mesh.h
index b4ce03e7e2a0..a2622844bbf0 100644
--- a/services/mesh.h
+++ b/services/mesh.h
@@ -65,7 +65,7 @@ struct respip_client_info;
* Maximum number of mesh state activations. Any more is likely an
* infinite loop in the module. It is then terminated.
*/
-#define MESH_MAX_ACTIVATION 3000
+#define MESH_MAX_ACTIVATION 10000
/**
* Max number of references-to-references-to-references.. search size.
@@ -633,4 +633,14 @@ void mesh_list_insert(struct mesh_state* m, struct mesh_state** fp,
void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp,
struct mesh_state** lp);
+/**
+ * Remove mesh reply entry from the reply entry list. Searches for
+ * the comm_point pointer.
+ * @param mesh: to update the counters.
+ * @param m: the mesh state.
+ * @param cp: the comm_point to remove from the list.
+ */
+void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m,
+ struct comm_point* cp);
+
#endif /* SERVICES_MESH_H */
diff --git a/services/outside_network.c b/services/outside_network.c
index e2c59c4616dd..8ed5de375852 100644
--- a/services/outside_network.c
+++ b/services/outside_network.c
@@ -63,6 +63,9 @@
#ifdef HAVE_OPENSSL_SSL_H
#include <openssl/ssl.h>
#endif
+#ifdef HAVE_X509_VERIFY_PARAM_SET1_HOST
+#include <openssl/x509v3.h>
+#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
@@ -385,6 +388,22 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len)
return 0;
}
}
+#elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
+ /* openssl 1.0.2 has this function that can be used for
+ * set1_host like verification */
+ if(w->tls_auth_name) {
+ X509_VERIFY_PARAM* param = SSL_get0_param(pend->c->ssl);
+ X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
+ if(!X509_VERIFY_PARAM_set1_host(param, w->tls_auth_name, strlen(w->tls_auth_name))) {
+ log_err("X509_VERIFY_PARAM_set1_host failed");
+ pend->c->fd = s;
+ SSL_free(pend->c->ssl);
+ pend->c->ssl = NULL;
+ comm_point_close(pend->c);
+ return 0;
+ }
+ SSL_set_verify(pend->c->ssl, SSL_VERIFY_PEER, NULL);
+ }
#endif /* HAVE_SSL_SET1_HOST */
}
w->pkt = NULL;
@@ -759,7 +778,7 @@ outside_network_create(struct comm_base *base, size_t bufsize,
outnet->delay_tv.tv_usec = (delayclose%1000)*1000;
}
#endif
- if(numavailports == 0) {
+ if(numavailports == 0 || num_ports == 0) {
log_err("no outgoing ports available");
outside_network_delete(outnet);
return NULL;
@@ -1487,7 +1506,6 @@ serviced_delete(struct serviced_query* sq)
/* clear up the pending query */
if(sq->status == serviced_query_UDP_EDNS ||
sq->status == serviced_query_UDP ||
- sq->status == serviced_query_PROBE_EDNS ||
sq->status == serviced_query_UDP_EDNS_FRAG ||
sq->status == serviced_query_UDP_EDNS_fallback) {
struct pending* p = (struct pending*)sq->pending;
@@ -1614,15 +1632,7 @@ serviced_udp_send(struct serviced_query* sq, sldns_buffer* buff)
sq->last_rtt = rtt;
verbose(VERB_ALGO, "EDNS lookup known=%d vs=%d", edns_lame_known, vs);
if(sq->status == serviced_initial) {
- if(edns_lame_known == 0 && rtt > 5000 && rtt < 10001) {
- /* perform EDNS lame probe - check if server is
- * EDNS lame (EDNS queries to it are dropped) */
- verbose(VERB_ALGO, "serviced query: send probe to see "
- " if use of EDNS causes timeouts");
- /* even 700 msec may be too small */
- rtt = 1000;
- sq->status = serviced_query_PROBE_EDNS;
- } else if(vs != -1) {
+ if(vs != -1) {
sq->status = serviced_query_UDP_EDNS;
} else {
sq->status = serviced_query_UDP;
@@ -1876,7 +1886,7 @@ serviced_tcp_initiate(struct serviced_query* sq, sldns_buffer* buff)
if(!sq->pending) {
/* delete from tree so that a retry by above layer does not
* clash with this entry */
- log_err("serviced_tcp_initiate: failed to send tcp query");
+ verbose(VERB_ALGO, "serviced_tcp_initiate: failed to send tcp query");
serviced_callbacks(sq, NETEVENT_CLOSED, NULL, NULL);
}
}
@@ -1959,12 +1969,6 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
sq->pending = NULL; /* removed after callback */
if(error == NETEVENT_TIMEOUT) {
int rto = 0;
- if(sq->status == serviced_query_PROBE_EDNS) {
- /* non-EDNS probe failed; we do not know its status,
- * keep trying with EDNS, timeout may not be caused
- * by EDNS. */
- sq->status = serviced_query_UDP_EDNS;
- }
if(sq->status == serviced_query_UDP_EDNS && sq->last_rtt < 5000) {
/* fallback to 1480/1280 */
sq->status = serviced_query_UDP_EDNS_FRAG;
@@ -2028,18 +2032,6 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
serviced_callbacks(sq, NETEVENT_CLOSED, c, rep);
}
return 0;
- } else if(sq->status == serviced_query_PROBE_EDNS) {
- /* probe without EDNS succeeds, so we conclude that this
- * host likely has EDNS packets dropped */
- log_addr(VERB_DETAIL, "timeouts, concluded that connection to "
- "host drops EDNS packets", &sq->addr, sq->addrlen);
- /* only store noEDNS in cache if domain is noDNSSEC */
- if(!sq->want_dnssec)
- if(!infra_edns_update(outnet->infra, &sq->addr, sq->addrlen,
- sq->zone, sq->zonelen, -1, (time_t)now.tv_sec)) {
- log_err("Out of memory caching no edns for host");
- }
- sq->status = serviced_query_UDP;
} else if(sq->status == serviced_query_UDP_EDNS &&
!sq->edns_lame_known) {
/* now we know that edns queries received answers store that */
@@ -2403,6 +2395,18 @@ outnet_comm_point_for_http(struct outside_network* outnet,
return NULL;
}
}
+#elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
+ /* openssl 1.0.2 has this function that can be used for
+ * set1_host like verification */
+ if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
+ X509_VERIFY_PARAM* param = SSL_get0_param(cp->ssl);
+ X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
+ if(!X509_VERIFY_PARAM_set1_host(param, host, strlen(host))) {
+ log_err("X509_VERIFY_PARAM_set1_host failed");
+ comm_point_delete(cp);
+ return NULL;
+ }
+ }
#endif /* HAVE_SSL_SET1_HOST */
}
@@ -2508,7 +2512,6 @@ serviced_get_mem(struct serviced_query* sq)
s += sizeof(*sb);
if(sq->status == serviced_query_UDP_EDNS ||
sq->status == serviced_query_UDP ||
- sq->status == serviced_query_PROBE_EDNS ||
sq->status == serviced_query_UDP_EDNS_FRAG ||
sq->status == serviced_query_UDP_EDNS_fallback) {
s += sizeof(struct pending);
diff --git a/services/outside_network.h b/services/outside_network.h
index 01a307417eac..48ef03edba7c 100644
--- a/services/outside_network.h
+++ b/services/outside_network.h
@@ -359,8 +359,6 @@ struct serviced_query {
serviced_query_TCP_EDNS,
/** TCP without EDNS sent */
serviced_query_TCP,
- /** probe to test EDNS lameness (EDNS is dropped) */
- serviced_query_PROBE_EDNS,
/** probe to test noEDNS0 (EDNS gives FORMERRorNOTIMP) */
serviced_query_UDP_EDNS_fallback,
/** probe to test TCP noEDNS0 (EDNS gives FORMERRorNOTIMP) */
diff --git a/sldns/wire2str.c b/sldns/wire2str.c
index 832239f9b76a..01ec84b3c506 100644
--- a/sldns/wire2str.c
+++ b/sldns/wire2str.c
@@ -1908,8 +1908,8 @@ int sldns_wire2str_edns_subnet_print(char** s, size_t* sl, uint8_t* data,
return w;
}
-int sldns_wire2str_edns_keepalive_print(char** s, size_t* sl, uint8_t* data,
- size_t len)
+static int sldns_wire2str_edns_keepalive_print(char** s, size_t* sl,
+ uint8_t* data, size_t len)
{
int w = 0;
uint16_t timeout;
diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c
index ea46479172c0..eddd3e172821 100644
--- a/smallapp/unbound-checkconf.c
+++ b/smallapp/unbound-checkconf.c
@@ -431,7 +431,7 @@ check_modules_exist(const char* module_conf)
/** check configuration for errors */
static void
-morechecks(struct config_file* cfg, const char* fname)
+morechecks(struct config_file* cfg)
{
warn_hosts("stub-host", cfg->stubs);
warn_hosts("forward-host", cfg->forwards);
@@ -463,19 +463,6 @@ morechecks(struct config_file* cfg, const char* fname)
!is_dir(cfg->chrootdir)) {
fatal_exit("bad chroot directory");
}
- if(cfg->chrootdir && cfg->chrootdir[0]) {
- char buf[10240];
- buf[0] = 0;
- if(fname[0] != '/') {
- if(getcwd(buf, sizeof(buf)) == NULL)
- fatal_exit("getcwd: %s", strerror(errno));
- (void)strlcat(buf, "/", sizeof(buf));
- }
- (void)strlcat(buf, fname, sizeof(buf));
- if(strncmp(buf, cfg->chrootdir, strlen(cfg->chrootdir)) != 0)
- fatal_exit("config file %s is not inside chroot %s",
- buf, cfg->chrootdir);
- }
if(cfg->directory && cfg->directory[0]) {
char* ad = fname_after_chroot(cfg->directory, cfg, 0);
if(!ad) fatal_exit("out of memory");
@@ -680,7 +667,7 @@ checkconf(const char* cfgfile, const char* opt, int final)
config_delete(cfg);
return;
}
- morechecks(cfg, cfgfile);
+ morechecks(cfg);
check_mod(cfg, iter_get_funcblock());
check_mod(cfg, val_get_funcblock());
#ifdef WITH_PYTHONMODULE
diff --git a/smallapp/unbound-control-setup.sh.in b/smallapp/unbound-control-setup.sh.in
index 0d759f4413d4..f4024b435530 100644
--- a/smallapp/unbound-control-setup.sh.in
+++ b/smallapp/unbound-control-setup.sh.in
@@ -148,8 +148,8 @@ test -f $CTL_BASE.pem || error "could not create $CTL_BASE.pem"
# echo "empty password is used, simply click OK on the password dialog box."
# openssl pkcs12 -export -in $CTL_BASE"_trust.pem" -inkey $CTL_BASE.key -name "unbound remote control client cert" -out $CTL_BASE"_browser.pfx" -password "pass:" || error "could not create browser certificate"
-# remove unused permissions
-chmod o-rw $SVR_BASE.pem $SVR_BASE.key $CTL_BASE.pem $CTL_BASE.key
+# set desired permissions
+chmod 0640 $SVR_BASE.pem $SVR_BASE.key $CTL_BASE.pem $CTL_BASE.key
# remove crap
rm -f request.cfg
diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c
index 54be62e65dc1..3ea6aa033c08 100644
--- a/smallapp/unbound-control.c
+++ b/smallapp/unbound-control.c
@@ -154,6 +154,8 @@ usage(void)
printf(" view_local_zone view name type add local-zone in view\n");
printf(" view_local_zone_remove view name remove local-zone in view\n");
printf(" view_local_data view RR... add local-data in view\n");
+ printf(" view_local_datas view add list of local-data to view\n");
+ printf(" one entry per line read from stdin\n");
printf(" view_local_data_remove view name remove local-data in view\n");
printf("Version %s\n", PACKAGE_VERSION);
printf("BSD licensed, see LICENSE in source package for details.\n");
@@ -245,7 +247,8 @@ static void print_uptime(struct ub_shm_stat_info* shm_stat)
}
/** print memory usage */
-static void print_mem(struct ub_shm_stat_info* shm_stat)
+static void print_mem(struct ub_shm_stat_info* shm_stat,
+ struct ub_stats_info* s)
{
PR_LL("mem.cache.rrset", shm_stat->mem.rrset);
PR_LL("mem.cache.message", shm_stat->mem.msg);
@@ -264,6 +267,7 @@ static void print_mem(struct ub_shm_stat_info* shm_stat)
PR_LL("mem.cache.dnscrypt_nonce",
shm_stat->mem.dnscrypt_nonce);
#endif
+ PR_LL("mem.streamwait", s->svr.mem_stream_wait);
}
/** print histogram */
@@ -326,6 +330,7 @@ static void print_extended(struct ub_stats_info* s)
PR_UL("num.query.tcp", s->svr.qtcp);
PR_UL("num.query.tcpout", s->svr.qtcp_outgoing);
PR_UL("num.query.tls", s->svr.qtls);
+ PR_UL("num.query.tls_resume", s->svr.qtls_resume);
PR_UL("num.query.ipv6", s->svr.qipv6);
/* flags */
@@ -397,7 +402,7 @@ static void do_stats_shm(struct config_file* cfg, struct ub_stats_info* stats,
pr_stats("total", &stats[0]);
print_uptime(shm_stat);
if(cfg->stat_extended) {
- print_mem(shm_stat);
+ print_mem(shm_stat, &stats[0]);
print_hist(stats);
print_extended(stats);
}
@@ -717,9 +722,10 @@ go_cmd(SSL* ssl, int fd, int quiet, int argc, char* argv[])
if(argc == 1 && strcmp(argv[0], "load_cache") == 0) {
send_file(ssl, fd, stdin, buf, sizeof(buf));
}
- else if(argc == 1 && (strcmp(argv[0], "local_zones") == 0 ||
+ else if(argc >= 1 && (strcmp(argv[0], "local_zones") == 0 ||
strcmp(argv[0], "local_zones_remove") == 0 ||
strcmp(argv[0], "local_datas") == 0 ||
+ strcmp(argv[0], "view_local_datas") == 0 ||
strcmp(argv[0], "local_datas_remove") == 0)) {
send_file(ssl, fd, stdin, buf, sizeof(buf));
send_eof(ssl, fd);
diff --git a/testcode/checklocks.c b/testcode/checklocks.c
index 7e6f0bb5db57..1b5ef282b5e4 100644
--- a/testcode/checklocks.c
+++ b/testcode/checklocks.c
@@ -71,6 +71,9 @@ static pid_t check_lock_pid;
/** print all possible debug info on the state of the system */
static void total_debug_info(void);
+/** print pretty lock error and exit (decl for NORETURN attribute) */
+static void lock_error(struct checked_lock* lock, const char* func,
+ const char* file, int line, const char* err) ATTR_NORETURN;
/** print pretty lock error and exit */
static void lock_error(struct checked_lock* lock,
diff --git a/testcode/fake_event.c b/testcode/fake_event.c
index 777ed7355ed7..4fb9bc8ed683 100644
--- a/testcode/fake_event.c
+++ b/testcode/fake_event.c
@@ -385,7 +385,7 @@ answer_callback_from_entry(struct replay_runtime* runtime,
repinfo.addrlen = pend->addrlen;
memcpy(&repinfo.addr, &pend->addr, pend->addrlen);
if(!pend->serviced) {
- if(entry->reply_list->next &&
+ if(entry && entry->reply_list->next &&
pend->tcp_pkt_counter < count_reply_packets(entry)) {
/* go to next packet next time */
pend->tcp_pkt_counter++;
@@ -509,7 +509,7 @@ fake_pending_callback(struct replay_runtime* runtime,
repinfo.addrlen = p->addrlen;
memcpy(&repinfo.addr, &p->addr, p->addrlen);
if(!p->serviced) {
- if(todo->match->reply_list->next && !error &&
+ if(todo->match && todo->match->reply_list->next && !error &&
p->tcp_pkt_counter < count_reply_packets(todo->match)) {
/* go to next packet next time */
p->tcp_pkt_counter++;
@@ -1802,4 +1802,24 @@ int outnet_tcp_connect(int ATTR_UNUSED(s), struct sockaddr_storage* ATTR_UNUSED(
return 0;
}
+int tcp_req_info_add_meshstate(struct tcp_req_info* ATTR_UNUSED(req),
+ struct mesh_area* ATTR_UNUSED(mesh), struct mesh_state* ATTR_UNUSED(m))
+{
+ log_assert(0);
+ return 0;
+}
+
+void
+tcp_req_info_remove_mesh_state(struct tcp_req_info* ATTR_UNUSED(req),
+ struct mesh_state* ATTR_UNUSED(m))
+{
+ log_assert(0);
+}
+
+size_t
+tcp_req_info_get_stream_buffer_size(void)
+{
+ return 0;
+}
+
/*********** End of Dummy routines ***********/
diff --git a/testcode/perf.c b/testcode/perf.c
index 32a5307edb15..d6d2b05298e8 100644
--- a/testcode/perf.c
+++ b/testcode/perf.c
@@ -513,10 +513,12 @@ qlist_grow_capacity(struct perfinfo* info)
uint8_t** d = (uint8_t**)calloc(sizeof(uint8_t*), newcap);
size_t* l = (size_t*)calloc(sizeof(size_t), newcap);
if(!d || !l) fatal_exit("out of memory");
- memcpy(d, info->qlist_data, sizeof(uint8_t*)*
- info->qlist_capacity);
- memcpy(l, info->qlist_len, sizeof(size_t)*
- info->qlist_capacity);
+ if(info->qlist_data && info->qlist_capacity)
+ memcpy(d, info->qlist_data, sizeof(uint8_t*)*
+ info->qlist_capacity);
+ if(info->qlist_len && info->qlist_capacity)
+ memcpy(l, info->qlist_len, sizeof(size_t)*
+ info->qlist_capacity);
free(info->qlist_data);
free(info->qlist_len);
info->qlist_data = d;
diff --git a/testcode/petal.c b/testcode/petal.c
index e1f5f43417e3..a733017a470b 100644
--- a/testcode/petal.c
+++ b/testcode/petal.c
@@ -323,9 +323,9 @@ file_name_is_safe(char* s)
return 1;
}
-/** adjust host and filename */
+/** adjust host */
static void
-adjust_host_file(char* host, char* file)
+adjust_host(char* host)
{
size_t i, len;
/* remove a port number if present */
@@ -335,6 +335,13 @@ adjust_host_file(char* host, char* file)
len = strlen(host);
for(i=0; i<len; i++)
host[i] = tolower((unsigned char)host[i]);
+}
+
+/** adjust filename */
+static void
+adjust_file(char* file)
+{
+ size_t i, len;
len = strlen(file);
for(i=0; i<len; i++)
file[i] = tolower((unsigned char)file[i]);
@@ -534,7 +541,8 @@ service_ssl(SSL* ssl, struct sockaddr_storage* from, socklen_t falen)
if(!read_http_headers(ssl, file, sizeof(file), host, sizeof(host),
&vs))
return;
- adjust_host_file(host, file);
+ if(host[0] != 0) adjust_host(host);
+ if(file[0] != 0) adjust_file(file);
if(host[0] == 0 || !host_name_is_safe(host))
(void)strlcpy(host, "default", sizeof(host));
if(!file_name_is_safe(file)) {
diff --git a/testcode/replay.c b/testcode/replay.c
index 93a600425ca1..84ce50441b1e 100644
--- a/testcode/replay.c
+++ b/testcode/replay.c
@@ -715,6 +715,7 @@ perform_arith(double x, char op, double y, double* res)
*res = x*y;
break;
default:
+ *res = 0;
return 0;
}
diff --git a/testcode/streamtcp.1 b/testcode/streamtcp.1
index 526c8e1699d4..f02b168d2ac8 100644
--- a/testcode/streamtcp.1
+++ b/testcode/streamtcp.1
@@ -44,6 +44,11 @@ Use UDP instead of TCP. No retries are attempted.
.B \-n
Do not wait for the answer.
.TP
+.B \-a
+Print answers on arrival. This mean queries are sent in sequence without
+waiting for answer but if answers arrive in this time they are printed out.
+After sending queries the program waits and prints the remainder.
+.TP
.B \-s
Use SSL.
.TP
diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c
index 497e3d2888fe..668d6360bb9a 100644
--- a/testcode/streamtcp.c
+++ b/testcode/streamtcp.c
@@ -73,6 +73,7 @@ static void usage(char* argv[])
printf("-f server what ipaddr@portnr to send the queries to\n");
printf("-u use UDP. No retries are attempted.\n");
printf("-n do not wait for an answer.\n");
+ printf("-a print answers as they arrive.\n");
printf("-d secs delay after connection before sending query\n");
printf("-s use ssl\n");
printf("-h this help text\n");
@@ -203,13 +204,22 @@ recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf)
uint16_t len;
if(!udp) {
if(ssl) {
- if(SSL_read(ssl, (void*)&len, (int)sizeof(len)) <= 0) {
+ int sr = SSL_read(ssl, (void*)&len, (int)sizeof(len));
+ if(sr == 0) {
+ printf("ssl: stream closed\n");
+ exit(1);
+ }
+ if(sr < 0) {
log_crypto_err("could not SSL_read");
exit(1);
}
} else {
- if(recv(fd, (void*)&len, sizeof(len), 0) <
- (ssize_t)sizeof(len)) {
+ ssize_t r = recv(fd, (void*)&len, sizeof(len), 0);
+ if(r == 0) {
+ printf("recv: stream closed\n");
+ exit(1);
+ }
+ if(r < (ssize_t)sizeof(len)) {
#ifndef USE_WINSOCK
perror("read() len failed");
#else
@@ -267,6 +277,37 @@ recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf)
free(pktstr);
}
+/** see if we can receive any results */
+static void
+print_any_answers(int fd, int udp, SSL* ssl, sldns_buffer* buf,
+ int* num_answers, int wait_all)
+{
+ /* see if the fd can read, if so, print one answer, repeat */
+ int ret;
+ struct timeval tv, *waittv;
+ fd_set rfd;
+ while(*num_answers > 0) {
+ memset(&rfd, 0, sizeof(rfd));
+ memset(&tv, 0, sizeof(tv));
+ FD_ZERO(&rfd);
+ FD_SET(fd, &rfd);
+ if(wait_all) waittv = NULL;
+ else waittv = &tv;
+ ret = select(fd+1, &rfd, NULL, NULL, waittv);
+ if(ret < 0) {
+ if(errno == EINTR || errno == EAGAIN) continue;
+ perror("select() failed");
+ exit(1);
+ }
+ if(ret == 0) {
+ if(wait_all) continue;
+ return;
+ }
+ (*num_answers) -= 1;
+ recv_one(fd, udp, ssl, buf);
+ }
+}
+
static int get_random(void)
{
int r;
@@ -278,12 +319,12 @@ static int get_random(void)
/** send the TCP queries and print answers */
static void
-send_em(const char* svr, int udp, int usessl, int noanswer, int delay,
- int num, char** qs)
+send_em(const char* svr, int udp, int usessl, int noanswer, int onarrival,
+ int delay, int num, char** qs)
{
sldns_buffer* buf = sldns_buffer_new(65553);
int fd = open_svr(svr, udp);
- int i;
+ int i, wait_results = 0;
SSL_CTX* ctx = NULL;
SSL* ssl = NULL;
if(!buf) fatal_exit("out of memory");
@@ -325,9 +366,15 @@ send_em(const char* svr, int udp, int usessl, int noanswer, int delay,
write_q(fd, udp, ssl, buf, (uint16_t)get_random(), qs[i],
qs[i+1], qs[i+2]);
/* print at least one result */
- if(!noanswer)
+ if(onarrival) {
+ wait_results += 1; /* one more answer to fetch */
+ print_any_answers(fd, udp, ssl, buf, &wait_results, 0);
+ } else if(!noanswer) {
recv_one(fd, udp, ssl, buf);
+ }
}
+ if(onarrival)
+ print_any_answers(fd, udp, ssl, buf, &wait_results, 1);
if(usessl) {
SSL_shutdown(ssl);
@@ -368,6 +415,7 @@ int main(int argc, char** argv)
const char* svr = "127.0.0.1";
int udp = 0;
int noanswer = 0;
+ int onarrival = 0;
int usessl = 0;
int delay = 0;
@@ -394,11 +442,14 @@ int main(int argc, char** argv)
if(argc == 1) {
usage(argv);
}
- while( (c=getopt(argc, argv, "f:hnsud:")) != -1) {
+ while( (c=getopt(argc, argv, "af:hnsud:")) != -1) {
switch(c) {
case 'f':
svr = optarg;
break;
+ case 'a':
+ onarrival = 1;
+ break;
case 'n':
noanswer = 1;
break;
@@ -446,7 +497,7 @@ int main(int argc, char** argv)
(void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);
#endif
}
- send_em(svr, udp, usessl, noanswer, delay, argc, argv);
+ send_em(svr, udp, usessl, noanswer, onarrival, delay, argc, argv);
checklock_stop();
#ifdef USE_WINSOCK
WSACleanup();
diff --git a/testcode/testbound.c b/testcode/testbound.c
index cea74c593540..246bc6735b45 100644
--- a/testcode/testbound.c
+++ b/testcode/testbound.c
@@ -344,6 +344,7 @@ main(int argc, char* argv[])
/* we do not want the test to depend on the timezone */
(void)putenv("TZ=UTC");
+ memset(pass_argv, 0, sizeof(pass_argv));
log_init(NULL, 0, NULL);
/* determine commandline options for the daemon */
diff --git a/testcode/testpkts.c b/testcode/testpkts.c
index 01f23e48ed2e..6c90567aa321 100644
--- a/testcode/testpkts.c
+++ b/testcode/testpkts.c
@@ -236,6 +236,8 @@ static void adjustline(char* line, struct entry* e,
e->copy_query = 1;
} else if(str_keyword(&parse, "copy_ednsdata_assume_clientsubnet")) {
e->copy_ednsdata_assume_clientsubnet = 1;
+ } else if(str_keyword(&parse, "increment_ecs_scope")) {
+ e->increment_ecs_scope = 1;
} else if(str_keyword(&parse, "sleep=")) {
e->sleeptime = (unsigned int) strtol(parse, (char**)&parse, 10);
while(isspace((unsigned char)*parse))
@@ -274,6 +276,7 @@ static struct entry* new_entry(void)
e->copy_id = 0;
e->copy_query = 0;
e->copy_ednsdata_assume_clientsubnet = 0;
+ e->increment_ecs_scope = 0;
e->sleeptime = 0;
e->next = NULL;
return e;
@@ -510,7 +513,8 @@ add_edns(uint8_t* pktbuf, size_t pktsize, int do_flag, uint8_t *ednsdata,
if(*pktlen + sizeof(edns) + ednslen > pktsize)
error("not enough space for EDNS OPT record");
memmove(pktbuf+*pktlen, edns, sizeof(edns));
- memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen);
+ if(ednsdata && ednslen)
+ memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen);
sldns_write_uint16(pktbuf+10, LDNS_ARCOUNT(pktbuf)+1);
*pktlen += (sizeof(edns) + ednslen);
}
@@ -1593,6 +1597,9 @@ adjust_packet(struct entry* match, uint8_t** answer_pkt, size_t *answer_len,
if(walk_qlen >= 15 && walk_plen >= 15) {
walk_p[15] = walk_q[14];
}
+ if(match->increment_ecs_scope) {
+ walk_p[15]++;
+ }
}
if(match->sleeptime > 0) {
diff --git a/testcode/testpkts.h b/testcode/testpkts.h
index b175cab066ab..6e032fa90a65 100644
--- a/testcode/testpkts.h
+++ b/testcode/testpkts.h
@@ -208,6 +208,8 @@ struct entry {
/** copy ednsdata to reply, assume it is clientsubnet and
* adjust scopemask to match sourcemask */
uint8_t copy_ednsdata_assume_clientsubnet;
+ /** increment the ECS scope copied from the sourcemask by one */
+ uint8_t increment_ecs_scope;
/** in seconds */
unsigned int sleeptime;
diff --git a/testcode/unitauth.c b/testcode/unitauth.c
index c162e7ef9648..4b3410c9ef7c 100644
--- a/testcode/unitauth.c
+++ b/testcode/unitauth.c
@@ -42,6 +42,7 @@
#include "testcode/unitmain.h"
#include "util/regional.h"
#include "util/net_help.h"
+#include "util/config_file.h"
#include "util/data/msgreply.h"
#include "services/cache/dns.h"
#include "sldns/str2wire.h"
@@ -522,6 +523,7 @@ addzone(struct auth_zones* az, const char* name, char* fname)
struct auth_zone* z;
size_t nmlen;
uint8_t* nm = sldns_str2wire_dname(name, &nmlen);
+ struct config_file* cfg;
if(!nm) fatal_exit("out of memory");
lock_rw_wrlock(&az->lock);
z = auth_zone_create(az, nm, nmlen, LDNS_RR_CLASS_IN);
@@ -529,12 +531,16 @@ addzone(struct auth_zones* az, const char* name, char* fname)
if(!z) fatal_exit("cannot find zone");
auth_zone_set_zonefile(z, fname);
z->for_upstream = 1;
+ cfg = config_create();
+ free(cfg->chrootdir);
+ cfg->chrootdir = NULL;
- if(!auth_zone_read_zonefile(z)) {
+ if(!auth_zone_read_zonefile(z, cfg)) {
fatal_exit("parse failure for auth zone %s", name);
}
lock_rw_unlock(&z->lock);
free(nm);
+ config_delete(cfg);
return z;
}
diff --git a/testcode/unitecs.c b/testcode/unitecs.c
index 097ae9ebba6a..b240bfcc666e 100644
--- a/testcode/unitecs.c
+++ b/testcode/unitecs.c
@@ -158,7 +158,7 @@ static void consistency_test(void)
{
addrlen_t l;
time_t i;
- unsigned int count;
+ uint32_t count;
addrkey_t *k;
struct addrtree* t;
struct module_env env;
diff --git a/testdata/07-confroot.tdir/07-confroot.test b/testdata/07-confroot.tdir/07-confroot.test
index 5238435167a8..d940aa873d83 100644
--- a/testdata/07-confroot.tdir/07-confroot.test
+++ b/testdata/07-confroot.tdir/07-confroot.test
@@ -153,7 +153,7 @@ server:
EOF
$PRE/unbound-checkconf test.conf
-if test $? -ne 1; then
+if test $? -ne 0; then
echo "Checkconf of config with chroot inside it failed"
exit 1
fi
diff --git a/testdata/auth_nsec3_wild.rpl b/testdata/auth_nsec3_wild.rpl
new file mode 100644
index 000000000000..acfe63bae8ce
--- /dev/null
+++ b/testdata/auth_nsec3_wild.rpl
@@ -0,0 +1,203 @@
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+
+auth-zone:
+ name: "test-ns-signed.dev.internet.nl."
+ ## zonefile (or none).
+ ## zonefile: "example.com.zone"
+ ## master by IP address or hostname
+ ## can list multiple masters, each on one line.
+ ## master:
+ ## url for http fetch
+ ## url:
+ ## queries from downstream clients get authoritative answers.
+ ## for-downstream: yes
+ for-downstream: yes
+ ## queries are used to fetch authoritative answers from this zone,
+ ## instead of unbound itself sending queries there.
+ ## for-upstream: yes
+ for-upstream: yes
+ ## on failures with for-upstream, fallback to sending queries to
+ ## the authority servers
+ ## fallback-enabled: no
+
+ ## this line generates zonefile: \n"/tmp/xxx.example.com"\n
+ zonefile:
+TEMPFILE_NAME test-ns-signed.dev.internet.nl
+ ## this is the inline file /tmp/xxx.test-ns-signed.dev.internet.nl
+ ## the tempfiles are deleted when the testrun is over.
+TEMPFILE_CONTENTS test-ns-signed.dev.internet.nl
+test-ns-signed.dev.internet.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 4 14400 3600 604800 3600
+test-ns-signed.dev.internet.nl. 3600 IN RRSIG SOA 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. ybb0Hc7NC+QOFEEv4cX2+Umlk+miiOAHmeP2Uwvg6lqfxkk+3g7yWBEKMinXjLKz0odWZ6fki6M/3yBPQX8SV0OCRY5gYvAHAjbxAIHozIM+5iwOkRQhNF1DRgQ3BLjL93f6T5e5Z4y1812iOpu4GYswXW/UTOZACXz2UiaCPAg=
+test-ns-signed.dev.internet.nl. 3600 IN NS ns.test-ns-signed.dev.internet.nl.
+test-ns-signed.dev.internet.nl. 3600 IN RRSIG NS 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. KqiwTF3hKm1ZHGbgx6MVzZYHlS1p7+Xrikx4izMHFbWiD6ki6lrJBJsnH9j/hH1cwHxjXslOeJh0hdBdbn8la0meZPsebOyUbEjoLPzRLzKNLDBuA4BUJnRGQJy21CX7XooXAMAmR8YFipO8CojI9EogU2m2o9YkfbpacFWQoTk=
+test-ns-signed.dev.internet.nl. 3600 IN DNSKEY 256 3 8 AwEAAc6c8tpMXBSOFLu/9n4aUUDK43wN4B7A2UDqZi0IOkyptxWCFghleyZeeN5uq6p9MoUt8lS73mFmIYC0ux5zBO3uVaJQ9u+00qRAEVg/RgBwa58y2f/zNtFV/f7mBSPcPTiEjUh0bwHSiTvUn/8JkrvjyAcbQMO0YOsRof5q6tzl ;{id = 32784 (zsk), size = 1024b}
+test-ns-signed.dev.internet.nl. 3600 IN DNSKEY 257 3 8 AwEAAdC0hBJP1U8lbZ6JFXn0ouK6VipiraN7I8oog62SuEd/fqAupys7A/Ih6WK/UoJorjlnccEL8euNMaS4kNogvoBrFx8ciIWKcbot5mtwc4WDr3cnR+HIZNCUFVkIxsMqE7HCD0yn0zhkB60shED+ZHs8zpyU+cjnsOSizxOnIY+F ;{id = 54502 (ksk), size = 1024b}
+test-ns-signed.dev.internet.nl. 3600 IN RRSIG DNSKEY 8 4 3600 20190205132351 20190108132351 54502 test-ns-signed.dev.internet.nl. X3qN+plfjf45FA4pr/tcUqUCR9ajDqwtNe4TS19WOJogVL/Gf/N5/ToOCrs3s+a7VrJl58WvSJquDM8xAS8f4oJggKgHFhopce8tMTGRxkRvJo4y+tt3vCveh/zjHLAnbOaBGA4CJ/IPhRqzHzcX/SjSv0EACWd6XpQIWogRv6c=
+test-ns-signed.dev.internet.nl. 3600 IN NSEC3PARAM 1 0 1 -
+test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3PARAM 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. A/1xUGO46uIz+9vjPGfWVD99akwU9bd/UlnVG9LPfoTzG7TMWSoZ4ksg8k8ub8K1TrkDmQokNHSW0Gt6qwoRh17c+p1h/SFlDVL83wgTc4NqG43OQjgGU9RV035XU+VESlO3lavifhlu8rHWBJTlhiXcMGq6H+zvoz4sx9p5GNM=
+93stp7o7i5n9gb83uu7vv6h8qltk14ig.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - fee0c2kfhi6bnljce6vehaenqq3pbupu NS SOA RRSIG DNSKEY NSEC3PARAM
+93stp7o7i5n9gb83uu7vv6h8qltk14ig.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. YoTRDQ7sSvERcY1WwAH4oRRR7DmaAwA8/H70jdMeSU4wsnM/VM03kDcc2sgq5edmHiZoTWnq7nEb/1Y7Ro0YrqTUQdYFZvXi6UjZQrKI9nqAGnhdXZWlZJHmYpn2+2Emd+bYHkwvKaPnfnnKjUoGVBH8Hly0HBYKPUF1/viquB0=
+kl94uofq16t2vlq0bmampf6e4o9k5hbi.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1
+kl94uofq16t2vlq0bmampf6e4o9k5hbi.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. NI5zJ/k1kPVZ1abms5OoME/wazb77Ltduyk6ZevAnt4tKydZYwSsjEd0Ixknw9xnakCABn5rAYEXctARN0KCwCkNHR7TYlTAJT14hlDYjbad2u2HT9L1kzAnfj3BeLZl/LRADeMbTtzrkTSF3Dnezurb94fMnUnKt2hPfQfj560=
+fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv
+fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. WIb3ISP1nlafbyWoWa4z7sG5IS+V86PyvEMHdD/64hgsFkrCu483XK7VNnBz28SL/631JXA1R19O+UxeWhTUyctp8QSt6cEZcMPY8b7yG97rNFNvhSw75rSXXt+JwgIYHPHQV5oqPtVmEpQM5SfJd+hs+Nn1bJcWB3UaESNNAMQ=
+*.a.b.test-ns-signed.dev.internet.nl. 3600 IN TXT "a"
+*.a.b.test-ns-signed.dev.internet.nl. 3600 IN RRSIG TXT 8 6 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. eNcJkQXdTO1z21od0sXbgqtABhhr/9tNC/Zx8zYbhXkfj7rufN71yk9xqgu6TG0MeJV26ISrqIGRVFJFmTRvO1LLxoKkEPhqe+08nqRztxXZajCV+dDeFoGIDcXJg6tAxB+MJznkKDtZPpIWvyt1WwdYfcMrGtE9AmR3K1/P/xE=
+7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 93stp7o7i5n9gb83uu7vv6h8qltk14ig TXT RRSIG
+7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. gtxoiTa3FRUqoRLvkWSxmWQ+DfijVd26gpKH3+GmGIcNB/sr/Cf8kERRwVVHvgzYIcvdJcys5b2LUXnZJwcdAlx7efZPWgNZzWxJrw6ES25LCWJOrp31isWn9FlAZGIbnpyEXxD2apBSmtyPnKbTgU6lHHS9jrsYHu4G8Zouv3k=
+ns.test-ns-signed.dev.internet.nl. 3600 IN A 185.49.141.11
+ns.test-ns-signed.dev.internet.nl. 3600 IN RRSIG A 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. F9sXEVAmlRn+/84WbuvegiCwstNxMDMQLl0Obv2CTPpee4U6psbmXrlzczjjjkE6aLjsIHYdcXCzEWTrmukT+V9jzaGPRJvxNvC0ASWyzggAoh0Z++Hl4cVa9587o6I9ODayehFI9Pgdem+RVdb4zlWuzi9FmKXgeTlgWN54tPg=
+ns.test-ns-signed.dev.internet.nl. 3600 IN AAAA 2a04:b900:0:100::11
+ns.test-ns-signed.dev.internet.nl. 3600 IN RRSIG AAAA 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. F1XRrx/QgfzJ1RS7d0m23QoIPx1G8WL1SrlTOm7pk5vWTL07w7HEw2TETblkjnitJGKfN9ebsIum/cDPUZc3UqLkguP2UCWpePnlllTJuwmG0Z+wyINIR4xF4PQlqttvzThBkD2JKWb/o0W8dQyXTj+jJ1vCZ0NjjA2N4+iJIQE=
+i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - kl94uofq16t2vlq0bmampf6e4o9k5hbi A AAAA RRSIG
+i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU=
+TEMPFILE_END
+
+stub-zone:
+ name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test authority zone with NSEC3 wildcard
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. IN A 1.2.3.44
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+www.example.net. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+something.a.b.test-ns-signed.dev.internet.nl. IN TXT
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD RA DO NOERROR
+SECTION QUESTION
+something.a.b.test-ns-signed.dev.internet.nl. IN TXT
+SECTION ANSWER
+something.a.b.test-ns-signed.dev.internet.nl. IN TXT "a"
+something.a.b.test-ns-signed.dev.internet.nl. 3600 IN RRSIG TXT 8 6 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. eNcJkQXdTO1z21od0sXbgqtABhhr/9tNC/Zx8zYbhXkfj7rufN71yk9xqgu6TG0MeJV26ISrqIGRVFJFmTRvO1LLxoKkEPhqe+08nqRztxXZajCV+dDeFoGIDcXJg6tAxB+MJznkKDtZPpIWvyt1WwdYfcMrGtE9AmR3K1/P/xE=
+SECTION AUTHORITY
+i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - KL94UOFQ16T2VLQ0BMAMPF6E4O9K5HBI A AAAA RRSIG
+i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU=
+ENTRY_END
+
+SCENARIO_END
diff --git a/testdata/black_ds_entry.rpl b/testdata/black_ds_entry.rpl
index 8b4fa9bd7c23..e2367a980d31 100644
--- a/testdata/black_ds_entry.rpl
+++ b/testdata/black_ds_entry.rpl
@@ -19,7 +19,7 @@ SCENARIO_BEGIN Test validator with blacked key entry for DS and further queries
; until the key entry expires.
; K.ROOT-SERVERS.NET.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 193.0.14.129
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -47,7 +47,7 @@ ENTRY_END
RANGE_END
; a.gtld-servers.net.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 192.5.6.30
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -116,7 +116,7 @@ ENTRY_END
RANGE_END
; ns.example.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.3.4
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -228,7 +228,7 @@ ENTRY_END
RANGE_END
; ns.blabla.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.3.5
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -336,7 +336,7 @@ ENTRY_END
RANGE_END
; ns.sub.example.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.4.6
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -402,7 +402,7 @@ ENTRY_END
RANGE_END
; ns.foo.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.4.7
ENTRY_BEGIN
MATCH opcode qtype qname
diff --git a/testdata/black_key_entry.rpl b/testdata/black_key_entry.rpl
index 4fb3c719d9ad..37946c008cfd 100644
--- a/testdata/black_key_entry.rpl
+++ b/testdata/black_key_entry.rpl
@@ -19,7 +19,7 @@ SCENARIO_BEGIN Test validator with blacked key entry and further queries
; until the key entry expires.
; K.ROOT-SERVERS.NET.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 193.0.14.129
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -47,7 +47,7 @@ ENTRY_END
RANGE_END
; a.gtld-servers.net.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 192.5.6.30
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -116,7 +116,7 @@ ENTRY_END
RANGE_END
; ns.example.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.3.4
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -228,7 +228,7 @@ ENTRY_END
RANGE_END
; ns.blabla.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.3.5
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -336,7 +336,7 @@ ENTRY_END
RANGE_END
; ns.sub.example.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.4.6
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -402,7 +402,7 @@ ENTRY_END
RANGE_END
; ns.foo.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.4.7
ENTRY_BEGIN
MATCH opcode qtype qname
diff --git a/testdata/black_prime_entry.rpl b/testdata/black_prime_entry.rpl
index c3f93266fb10..8221d2db6b58 100644
--- a/testdata/black_prime_entry.rpl
+++ b/testdata/black_prime_entry.rpl
@@ -18,7 +18,7 @@ SCENARIO_BEGIN Test validator with blacklist prime gives bad key entry
; comes from an 'expired signatures' name server.
; K.ROOT-SERVERS.NET.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 193.0.14.129
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -46,7 +46,7 @@ ENTRY_END
RANGE_END
; a.gtld-servers.net.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 192.5.6.30
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -96,7 +96,7 @@ ENTRY_END
RANGE_END
; ns.example.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.3.4
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -177,7 +177,7 @@ ENTRY_END
RANGE_END
; ns.blabla.com.
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 1.2.3.5
ENTRY_BEGIN
MATCH opcode qtype qname
diff --git a/testdata/clang-analysis.tdir/clang-analysis.test b/testdata/clang-analysis.tdir/clang-analysis.test
index de29bb525dbc..09c935860c47 100644
--- a/testdata/clang-analysis.tdir/clang-analysis.test
+++ b/testdata/clang-analysis.tdir/clang-analysis.test
@@ -6,11 +6,21 @@
# common functions
. ../common.sh
+PRE="../.."
if test ! -x "`which clang 2>&1`"; then
echo "No clang in path"
exit 0
fi
#echo "have clang"
+# test if assertions are enabled
+if grep "^#define UNBOUND_DEBUG" $PRE/config.h >/dev/null; then
+ :
+else
+ echo "UNBOUND_DEBUG is not enabled, skip test"
+ # no unbound debug means no assertions, and clang analyzer uses
+ # the assertions to make inferences.
+ exit 0
+fi
# read value from Makefile
# $1: result variable name
@@ -23,7 +33,6 @@ read_value () {
#echo $1"="'"'"`eval echo '$'$1`"'"'
}
-PRE="../.."
# read some values from the Makefile
read_value srcdir '^srcdir=' $PRE/Makefile
read_value CPPFLAGS '^CPPFLAGS=' $PRE/Makefile
@@ -41,17 +50,21 @@ compatfiles=`echo "$LIBOBJS" | sed -e 's?..LIBOBJDIR.?compat/?g' -e 's/.U.o/.c/g
if test "$WITH_PYTHONMODULE" = "yes"; then PYTHONMOD_SRC="pythonmod/*.c"; fi
if test ! -z "$WINAPPS"; then WIN_SRC="winrc/*.c"; fi
-cd $PRE; cd $srcdir
+cd $PRE;
+odir=`pwd`
+cd $srcdir
# check the files in the srcdir
fail="no"
for x in cachedb/*.c daemon/*.c dns64/*.c $DNSCRYPT_SRC $DNSTAP_SRC edns-subnet/*.c ipsecmod/*.c iterator/*.c libunbound/*.c $PYTHONMOD_SRC respip/*.c services/*.c services/*/*.c sldns/*.c smallapp/*.c util/*.c util/*/*.c validator/*.c $WIN_SRC $compatfiles testcode/*.c; do
if test "$x" = "util/configlexer.c"; then continue; fi
if test "$x" = "util/configparser.c"; then continue; fi
if test "$x" = "testcode/signit.c"; then continue; fi
+ if test "$x" = "compat/reallocarray.c"; then continue; fi
echo clang --analyze $CPPFLAGS $x
plist=`basename $x .c`.plist
rm -rf $plist
- clang --analyze $CPPFLAGS $x 2>&1 | tee tmp.$$
+ #echo "(cd $odir; clang --analyze $CPPFLAGS $srcdir/$x 2>&1 ) | tee tmp.$$"
+ (cd "$odir"; clang --analyze $CPPFLAGS $srcdir/$x 2>&1 ) | tee tmp.$$
if grep -e warning -e error tmp.$$ >/dev/null; then
fail="yes"
fails="$fails $x"
diff --git a/testdata/edns_cache.tdir/edns_cache.conf b/testdata/edns_cache.tdir/edns_cache.conf
index 101b9751ffc6..baeee5f54f2c 100644
--- a/testdata/edns_cache.tdir/edns_cache.conf
+++ b/testdata/edns_cache.tdir/edns_cache.conf
@@ -12,9 +12,6 @@ server:
stub-zone:
name: "example.net"
stub-addr: "127.0.0.1@@STUB2_PORT@"
-stub-zone:
- name: "example.com"
- stub-addr: "127.0.0.1@@STUB2_PORT@"
# a k a root hints
stub-zone:
name: "."
diff --git a/testdata/edns_cache.tdir/edns_cache.stub1 b/testdata/edns_cache.tdir/edns_cache.stub1
index 23653c3b3d53..2cce1bd656ad 100644
--- a/testdata/edns_cache.tdir/edns_cache.stub1
+++ b/testdata/edns_cache.tdir/edns_cache.stub1
@@ -17,17 +17,6 @@ SECTION ADDITIONAL
root.server. IN A 127.0.0.1
ENTRY_END
-; referral to example.com
-ENTRY_BEGIN
-MATCH opcode subdomain
-REPLY QR NOERROR
-ADJUST copy_id copy_query
-SECTION QUESTION
-example.com. IN A
-SECTION AUTHORITY
-example.com. IN NS netdns.example.net.
-ENTRY_END
-
; referral to example.net
ENTRY_BEGIN
MATCH opcode subdomain
diff --git a/testdata/edns_cache.tdir/edns_cache.stub2 b/testdata/edns_cache.tdir/edns_cache.stub2
index f70eb98e7456..549560aa0f4c 100644
--- a/testdata/edns_cache.tdir/edns_cache.stub2
+++ b/testdata/edns_cache.tdir/edns_cache.stub2
@@ -1,5 +1,5 @@
; nameserver test file
-$ORIGIN example.com.
+$ORIGIN example.net.
$TTL 3600
ENTRY_BEGIN
@@ -7,9 +7,9 @@ MATCH opcode qtype qname noedns
REPLY QR AA NOERROR
ADJUST copy_id
SECTION QUESTION
-www.example.com. IN A
+www.example.net. IN A
SECTION ANSWER
-www.example.com. IN A 10.20.30.40
+www.example.net. IN A 10.20.30.40
ENTRY_END
ENTRY_BEGIN
diff --git a/testdata/edns_cache.tdir/edns_cache.test b/testdata/edns_cache.tdir/edns_cache.test
index 53931ded2eb7..d154d5277eac 100644
--- a/testdata/edns_cache.tdir/edns_cache.test
+++ b/testdata/edns_cache.tdir/edns_cache.test
@@ -11,8 +11,8 @@ PRE="../.."
# do the test
echo "> dig netdns.example.net."
dig @::1 -p $UNBOUND_PORT netdns.example.net. | tee outfile
-echo "> dig www.example.com."
-dig @::1 -p $UNBOUND_PORT www.example.com. | tee outfile
+echo "> dig www.example.net."
+dig @::1 -p $UNBOUND_PORT www.example.net. | tee outfile
echo "> cat stub1.log"
cat stub1.log
echo "> cat stub2.log"
diff --git a/testdata/edns_lame.tdir/edns_lame.conf b/testdata/edns_lame.tdir/edns_lame.conf
deleted file mode 100644
index 9cd19c0d9d1c..000000000000
--- a/testdata/edns_lame.tdir/edns_lame.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-server:
- verbosity: 2
- # num-threads: 1
- interface: 127.0.0.1
- port: @PORT@
- use-syslog: no
- directory: ""
- pidfile: "unbound.pid"
- chroot: ""
- username: ""
- do-not-query-localhost: no
-forward-zone:
- name: "."
- forward-addr: "127.0.0.1@@TOPORT@"
-
diff --git a/testdata/edns_lame.tdir/edns_lame.dsc b/testdata/edns_lame.tdir/edns_lame.dsc
deleted file mode 100644
index 83f972562b6b..000000000000
--- a/testdata/edns_lame.tdir/edns_lame.dsc
+++ /dev/null
@@ -1,16 +0,0 @@
-BaseName: edns_lame
-Version: 1.0
-Description: Forward UDP but EDNS packets time out
-CreationDate: Mon Sep 29 16:39:15 CEST 2008
-Maintainer: dr. W.C.A. Wijngaards
-Category:
-Component:
-CmdDepends:
-Depends:
-Help:
-Pre: edns_lame.pre
-Post: edns_lame.post
-Test: edns_lame.test
-AuxFiles:
-Passed:
-Failure:
diff --git a/testdata/edns_lame.tdir/edns_lame.test b/testdata/edns_lame.tdir/edns_lame.test
deleted file mode 100644
index 92d669267402..000000000000
--- a/testdata/edns_lame.tdir/edns_lame.test
+++ /dev/null
@@ -1,24 +0,0 @@
-# #-- edns_lame.test --#
-# source the master var file when it's there
-[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
-# use .tpkg.var.test for in test variable passing
-[ -f .tpkg.var.test ] && source .tpkg.var.test
-
-PRE="../.."
-# do the test
-echo "> dig www.example.com."
-dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile
-echo "> dig www.example.com."
-dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile
-echo "> cat logfiles"
-cat fwd.log
-cat unbound.log
-echo "> check answer"
-if grep "10.20.30.40" outfile; then
- echo "OK"
-else
- echo "Not OK"
- exit 1
-fi
-
-exit 0
diff --git a/testdata/edns_lame.tdir/edns_lame.testns b/testdata/edns_lame.tdir/edns_lame.testns
deleted file mode 100644
index cd248c3b37eb..000000000000
--- a/testdata/edns_lame.tdir/edns_lame.testns
+++ /dev/null
@@ -1,14 +0,0 @@
-; nameserver test file
-$ORIGIN example.com.
-$TTL 3600
-
-ENTRY_BEGIN
-MATCH opcode qtype qname noedns
-REPLY QR AA NOERROR
-ADJUST copy_id
-SECTION QUESTION
-www IN A
-SECTION ANSWER
-www IN A 10.20.30.40
-ENTRY_END
-
diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post
index e6dda048d77d..897f8cf70687 100644
--- a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post
+++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post
@@ -8,3 +8,4 @@
. ../common.sh
kill_pid $FWD_PID
kill_pid $UNBOUND_PID
+cat unbound.log
diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test
index 67354d014fff..de4250c3e9eb 100644
--- a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test
+++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test
@@ -6,9 +6,9 @@
# check what sort of netcat we have
if nc -h 2>&1 | grep "q secs"; then
- ncopt="-q 3 -w 2"
+ ncopt="-q 3 -i 2"
else
- ncopt="-w 2"
+ ncopt="-i 2"
fi
PRE="../.."
diff --git a/testdata/fwd_no_cache.rpl b/testdata/fwd_no_cache.rpl
new file mode 100644
index 000000000000..8a68c54618d3
--- /dev/null
+++ b/testdata/fwd_no_cache.rpl
@@ -0,0 +1,78 @@
+; This is a comment.
+; config options go here.
+forward-zone: name: "." forward-addr: 216.0.0.1
+ forward-no-cache: yes
+CONFIG_END
+
+SCENARIO_BEGIN Forward with no_cache set
+RANGE_BEGIN 0 10
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD RA NOERROR
+ SECTION QUESTION
+www.example.com. IN A
+ SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ SECTION AUTHORITY
+www.example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ns.example.com. IN A 10.20.30.50
+ ENTRY_END
+RANGE_END
+RANGE_BEGIN 200 300
+RANGE_END
+
+RANGE_BEGIN 20 100
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD RA NOERROR
+ SECTION QUESTION
+www.example.com. IN A
+ SECTION ANSWER
+www.example.com. IN A 10.20.30.44
+ SECTION AUTHORITY
+www.example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ns.example.com. IN A 10.20.30.50
+ ENTRY_END
+RANGE_END
+RANGE_BEGIN 200 300
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+; make some time pass but not enough to timeout a cached record
+STEP 10 TIME_PASSES ELAPSE 10
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+STEP 24 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA
+MATCH opcode qname qtype all
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.44
+ENTRY_END
+SCENARIO_END
diff --git a/testdata/iter_domain_sale.rpl b/testdata/iter_domain_sale.rpl
index be05e2f4363d..6110148a3c82 100644
--- a/testdata/iter_domain_sale.rpl
+++ b/testdata/iter_domain_sale.rpl
@@ -241,9 +241,9 @@ SECTION ANSWER
SECTION AUTHORITY
; at TTL 5 because TTL is capped at min-ttl of 5 in rdata of SOA
example.com. 5 IN SOA a. b. 1 2 3 4 5
-example.com. 1800 IN NS ns.example.com.
+;example.com. 1800 IN NS ns.example.com.
SECTION ADDITIONAL
-ns.example.com. 1800 IN A 1.2.3.4
+;ns.example.com. 1800 IN A 1.2.3.4
ENTRY_END
; after another 1900 seconds the domain must have timed out.
diff --git a/testdata/iter_domain_sale_nschange.rpl b/testdata/iter_domain_sale_nschange.rpl
index 5af54efb9855..5664855d50b8 100644
--- a/testdata/iter_domain_sale_nschange.rpl
+++ b/testdata/iter_domain_sale_nschange.rpl
@@ -288,9 +288,9 @@ SECTION ANSWER
SECTION AUTHORITY
; at TTL 5 because TTL capped at ttl of minttl in rdata of SOA.
example.com. 5 IN SOA a. b. 1 2 3 4 5
-example.com. 3600 IN NS nsb.example.com.
+;example.com. 3600 IN NS nsb.example.com.
SECTION ADDITIONAL
-nsb.example.com. 3600 IN A 1.2.3.4
+;nsb.example.com. 3600 IN A 1.2.3.4
ENTRY_END
STEP 62 QUERY
@@ -310,9 +310,9 @@ SECTION ANSWER
SECTION AUTHORITY
; at TTL 5 because TTL capped at ttl of minttl in rdata of SOA.
example.com. 5 IN SOA a. b. 1 2 3 4 5
-example.com. 1800 IN NS nsb.example.com.
+;example.com. 1800 IN NS nsb.example.com.
SECTION ADDITIONAL
-nsb.example.com. 3600 IN A 1.2.3.4
+;nsb.example.com. 3600 IN A 1.2.3.4
ENTRY_END
; after another 1900 seconds the domain must have timed out.
diff --git a/testdata/iter_pcnamech.rpl b/testdata/iter_pcnamech.rpl
index 1aba95b07aa7..098ae0bb5449 100644
--- a/testdata/iter_pcnamech.rpl
+++ b/testdata/iter_pcnamech.rpl
@@ -109,8 +109,8 @@ ENTRY_END
RANGE_END
-; the working version, until time 50.
-RANGE_BEGIN 0 50
+; the working version, until time 49.
+RANGE_BEGIN 0 49
ADDRESS 1.2.3.44
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -220,7 +220,7 @@ RANGE_END
; Broken. Does not respond to anything (servfail instead
; of timeouts since this is easier to encode in .rpl file format).
-RANGE_BEGIN 0 50
+RANGE_BEGIN 0 49
ADDRESS 1.2.3.55
ENTRY_BEGIN
MATCH opcode
diff --git a/testdata/iter_pcnamechrec.rpl b/testdata/iter_pcnamechrec.rpl
index 90745fcf3eb2..ca996bb389a5 100644
--- a/testdata/iter_pcnamechrec.rpl
+++ b/testdata/iter_pcnamechrec.rpl
@@ -110,8 +110,8 @@ ENTRY_END
RANGE_END
-; the working version, until time 50.
-RANGE_BEGIN 0 50
+; the working version, until time 49.
+RANGE_BEGIN 0 49
ADDRESS 1.2.3.44
ENTRY_BEGIN
MATCH opcode qtype qname
@@ -221,7 +221,7 @@ RANGE_END
; Broken. Does not respond to anything (servfail instead
; of timeouts since this is easier to encode in .rpl file format).
-RANGE_BEGIN 0 50
+RANGE_BEGIN 0 49
ADDRESS 1.2.3.55
ENTRY_BEGIN
MATCH opcode
diff --git a/testdata/net_signed_servfail.rpl b/testdata/net_signed_servfail.rpl
index 925dceee25ec..ada445574da7 100644
--- a/testdata/net_signed_servfail.rpl
+++ b/testdata/net_signed_servfail.rpl
@@ -19,7 +19,7 @@ SCENARIO_BEGIN Test validator with DS introduction for .net
; after introduction of a .NET DS in the root for a running validator.
; K.ROOT-SERVERS.NET. (before .net DS introduction)
-RANGE_BEGIN 0 100
+RANGE_BEGIN 0 99
ADDRESS 193.0.14.129
ENTRY_BEGIN
MATCH opcode qtype qname
diff --git a/testdata/pylib.tdir/pylib.lookup.py b/testdata/pylib.tdir/pylib.lookup.py
index 5f69c58abd18..114bb49a0902 100755
--- a/testdata/pylib.tdir/pylib.lookup.py
+++ b/testdata/pylib.tdir/pylib.lookup.py
@@ -12,7 +12,7 @@ qname = "www.example.com"
qtype = unbound.RR_TYPE_A
qclass = unbound.RR_CLASS_IN
-def create_context(config_file="ub.lookup.conf", async=False):
+def create_context(config_file="ub.lookup.conf", asyncflag=False):
"""
Create an unbound context to use for testing.
@@ -22,7 +22,7 @@ def create_context(config_file="ub.lookup.conf", async=False):
if status != 0:
print("read config failed with status: {}".format(status))
sys.exit(1)
- ctx.set_async(async)
+ ctx.set_async(asyncflag)
return ctx
@@ -132,10 +132,10 @@ def test_ratelimit_bg_off(ctx):
test_resolve(create_context())
-test_async_resolve(create_context(async=True))
+test_async_resolve(create_context(asyncflag=True))
test_ratelimit_fg_on(create_context())
test_ratelimit_fg_off(create_context())
-test_ratelimit_bg_on(create_context(async=True))
-test_ratelimit_bg_off(create_context(async=True))
+test_ratelimit_bg_on(create_context(asyncflag=True))
+test_ratelimit_bg_off(create_context(asyncflag=True))
sys.exit(0)
diff --git a/testdata/pylib.tdir/pylib.test b/testdata/pylib.tdir/pylib.test
index 9456691aa6e1..893aaf64f252 100644
--- a/testdata/pylib.tdir/pylib.test
+++ b/testdata/pylib.tdir/pylib.test
@@ -19,9 +19,13 @@ fi
#echo export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:../../.libs:."
#export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:../../.libs:."
+if grep "PY_MAJOR_VERSION=3" $PRE/Makefile; then
+ PYTHON="python3"; else PYTHON="python2"; fi
+if test ! -x `which $PYTHON` 2>&1; then PYTHON="python"; fi
+
# do the test
echo "> pylib.lookup.py www.example.com."
-./pylib.lookup.py www.example.com. | tee outfile
+$PYTHON pylib.lookup.py www.example.com. | tee outfile
echo "> cat logfiles"
cat fwd.log
diff --git a/testdata/pymod.tdir/pymod.py b/testdata/pymod.tdir/pymod.py
index 3f6fed1c696b..a8018e7f75e7 100644
--- a/testdata/pymod.tdir/pymod.py
+++ b/testdata/pymod.tdir/pymod.py
@@ -59,12 +59,15 @@ def setTTL(qstate, ttl):
def dataHex(data, prefix=""):
res = ""
- for i in range(0, (len(data)+15)/16):
+ for i in range(0, int((len(data)+15)/16)):
res += "%s0x%02X | " % (prefix, i*16)
- d = map(lambda x:ord(x), data[i*16:i*16+17])
+ if type(data[0]) == type(1):
+ d = map(lambda x:int(x), data[i*16:i*16+17])
+ else:
+ d = map(lambda x:ord(x), data[i*16:i*16+17])
for ch in d:
res += "%02X " % ch
- for i in range(0,17-len(d)):
+ for i in range(0,17-len(data[i*16:i*16+17])):
res += " "
res += "| "
for ch in d:
@@ -76,35 +79,35 @@ def dataHex(data, prefix=""):
return res
def printReturnMsg(qstate):
- print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl)
- print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str
+ print ("Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount, qstate.return_msg.rep.security, qstate.return_msg.rep.ttl))
+ print (" qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str)
if (qstate.return_msg.rep):
- print "RRSets:",qstate.return_msg.rep.rrset_count
+ print ("RRSets:",qstate.return_msg.rep.rrset_count)
prevkey = None
for i in range(0,qstate.return_msg.rep.rrset_count):
r = qstate.return_msg.rep.rrsets[i]
rk = r.rk
- print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags,
- print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class)
+ print (i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags)
+ print ("type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class))
d = r.entry.data
- print " RRDatas:",d.count+d.rrsig_count
+ print (" RRDatas:",d.count+d.rrsig_count)
for j in range(0,d.count+d.rrsig_count):
- print " ",j,":","TTL=",d.rr_ttl[j],"RR data:"
- print dataHex(d.rr_data[j]," ")
+ print (" ",j,":","TTL=",d.rr_ttl[j],"RR data:")
+ print (dataHex(d.rr_data[j]," "))
def operate(id, event, qstate, qdata):
log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event)))
- #print "pythonmod: per query data", qdata
+ #print ("pythonmod: per query data", qdata)
- print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, qstate.qinfo.qname_str,
- print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype,
- print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass
- print
+ print ("Query:", qstate.qinfo.qname, qstate.qinfo.qname_list, qstate.qinfo.qname_str)
+ print ("Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype)
+ print ("Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass)
+ print ()
if (event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS) and (qstate.qinfo.qname_str.endswith("www2.example.com.")):
- print qstate.qinfo.qname_str
+ print (qstate.qinfo.qname_str)
qstate.ext_state[id] = MODULE_FINISHED
@@ -121,6 +124,7 @@ def operate(id, event, qstate, qdata):
if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY):
msg.answer.append("%s 10 IN TXT path=/" % qstate.qinfo.qname_str)
+ print(msg.answer)
if not msg.set_return_msg(qstate):
qstate.ext_state[id] = MODULE_ERROR
return True
diff --git a/testdata/pymod_thread.tdir/pymod_thread.py b/testdata/pymod_thread.tdir/pymod_thread.py
index 31e1d43f64ae..30c2588758f5 100644
--- a/testdata/pymod_thread.tdir/pymod_thread.py
+++ b/testdata/pymod_thread.tdir/pymod_thread.py
@@ -59,12 +59,15 @@ def setTTL(qstate, ttl):
def dataHex(data, prefix=""):
res = ""
- for i in range(0, (len(data)+15)/16):
+ for i in range(0, int((len(data)+15)/16)):
res += "%s0x%02X | " % (prefix, i*16)
- d = map(lambda x:ord(x), data[i*16:i*16+17])
+ if type(data[0]) == type(1):
+ d = map(lambda x:int(x), data[i*16:i*16+17])
+ else:
+ d = map(lambda x:ord(x), data[i*16:i*16+17])
for ch in d:
- res += "%02X " % ch
- for i in range(0,17-len(d)):
+ res += "%02X " % int(ch)
+ for i in range(0,17-len(data[i*16:i*16+17])):
res += " "
res += "| "
for ch in d:
@@ -76,43 +79,43 @@ def dataHex(data, prefix=""):
return res
def printReturnMsg(qstate):
- print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl)
- print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str
+ print ("Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount, qstate.return_msg.rep.security, qstate.return_msg.rep.ttl))
+ print (" qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str)
if (qstate.return_msg.rep):
- print "RRSets:",qstate.return_msg.rep.rrset_count
+ print ("RRSets:",qstate.return_msg.rep.rrset_count)
prevkey = None
for i in range(0,qstate.return_msg.rep.rrset_count):
r = qstate.return_msg.rep.rrsets[i]
rk = r.rk
- print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags,
- print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class)
+ print (i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags)
+ print ("type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class))
d = r.entry.data
- print " RRDatas:",d.count+d.rrsig_count
+ print (" RRDatas:",d.count+d.rrsig_count)
for j in range(0,d.count+d.rrsig_count):
- print " ",j,":","TTL=",d.rr_ttl[j],"RR data:"
- print dataHex(d.rr_data[j]," ")
+ print (" ",j,":","TTL=",d.rr_ttl[j],"RR data:")
+ print (dataHex(d.rr_data[j]," "))
def operate(id, event, qstate, qdata):
log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event)))
- #print "pythonmod: per query data", qdata
+ #print ("pythonmod: per query data", qdata)
- print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, qstate.qinfo.qname_str,
- print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype,
- print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass
- print
+ print ("Query:", qstate.qinfo.qname, qstate.qinfo.qname_list, qstate.qinfo.qname_str)
+ print ("Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype)
+ print ("Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass)
+ print ()
if (event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS) and (qstate.qinfo.qname_str.endswith("example.com.")):
- print qstate.qinfo.qname_str
+ print (qstate.qinfo.qname_str)
qstate.ext_state[id] = MODULE_FINISHED
- # eat time
- y = 20
- for z in range(2, 10000):
- y = y*2 - z/2
- y = y/2 + z
+ # eat time
+ y = 20
+ for z in range(2, 10000):
+ y = y*2 - z/2
+ y = y/2 + z
msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300)
#msg.authority.append("xxx.seznam.cz. 10 IN A 192.168.1.1")
diff --git a/testdata/pymod_thread.tdir/pymod_thread.testns b/testdata/pymod_thread.tdir/pymod_thread.testns
index 55926bb50c9f..c92a07909e7d 100644
--- a/testdata/pymod_thread.tdir/pymod_thread.testns
+++ b/testdata/pymod_thread.tdir/pymod_thread.testns
@@ -22,3 +22,83 @@ SECTION ANSWER
www2 IN A 10.20.30.40
ENTRY_END
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www3 IN A
+SECTION ANSWER
+www3 IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www4 IN A
+SECTION ANSWER
+www4 IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www5 IN A
+SECTION ANSWER
+www5 IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NXDOMAIN
+ADJUST copy_id
+SECTION QUESTION
+www6 IN A
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NXDOMAIN
+ADJUST copy_id
+SECTION QUESTION
+www7 IN A
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NXDOMAIN
+ADJUST copy_id
+SECTION QUESTION
+www8 IN A
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NXDOMAIN
+ADJUST copy_id
+SECTION QUESTION
+www9 IN A
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NXDOMAIN
+ADJUST copy_id
+SECTION QUESTION
+www10 IN A
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600
+ENTRY_END
+
diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.conf b/testdata/ssl_req_order.tdir/ssl_req_order.conf
new file mode 100644
index 000000000000..3b2e2b1b4fa9
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/ssl_req_order.conf
@@ -0,0 +1,25 @@
+server:
+ verbosity: 2
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: .
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ ssl-port: @PORT@
+ ssl-service-key: "unbound_server.key"
+ ssl-service-pem: "unbound_server.pem"
+
+ local-zone: "example.net" static
+ local-data: "www1.example.net. IN A 1.2.3.1"
+ local-data: "www2.example.net. IN A 1.2.3.2"
+ local-data: "www3.example.net. IN A 1.2.3.3"
+ tcp-upstream: yes
+ local-zone: "drop.net" deny
+
+forward-zone:
+ name: "."
+ forward-addr: "127.0.0.1@@TOPORT@"
diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.dsc b/testdata/ssl_req_order.tdir/ssl_req_order.dsc
new file mode 100644
index 000000000000..2259d0c081ea
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/ssl_req_order.dsc
@@ -0,0 +1,16 @@
+BaseName: ssl_req_order
+Version: 1.0
+Description: Test ssl request order processing.
+CreationDate: Mon Jan 21 14:11:00 CET 2018
+Maintainer: Wouter Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: ssl_req_order.pre
+Post: ssl_req_order.post
+Test: ssl_req_order.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.post b/testdata/ssl_req_order.tdir/ssl_req_order.post
new file mode 100644
index 000000000000..bba50e309196
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/ssl_req_order.post
@@ -0,0 +1,11 @@
+# #-- ssl_req_order.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
+cat unbound.log
diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.pre b/testdata/ssl_req_order.tdir/ssl_req_order.pre
new file mode 100644
index 000000000000..5fb11850144e
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/ssl_req_order.pre
@@ -0,0 +1,31 @@
+# #-- ssl_req_order.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT ssl_req_order.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config file
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_order.conf > ub.conf
+# start unbound in the background
+PRE="../.."
+$PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_unbound_up unbound.log
+
diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.test b/testdata/ssl_req_order.tdir/ssl_req_order.test
new file mode 100644
index 000000000000..65981d16cea4
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/ssl_req_order.test
@@ -0,0 +1,341 @@
+# #-- ssl_req_order.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+PRE="../.."
+. ../common.sh
+get_make
+(cd $PRE; $MAKE streamtcp)
+
+# this test query should just work (server is up)
+echo "> query www1.example.net."
+$PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+echo "OK"
+
+# multiple requests (from localdata)
+echo "> query www1.example.net. www2.example.net. www3.example.net."
+$PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# out of order requests, the example.com elements take 2 seconds to wait.
+echo ""
+echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www.example.com" outfile | grep "10.20.30.40"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.com" outfile | grep "10.20.30.42"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# out of order requests, the example.com elements take 2 seconds to wait.
+# www.example.com present twice, answered twice.
+echo ""
+echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www.example.com" outfile | grep "10.20.30.40"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# out of order requests, the example.com elements take 2 seconds to wait.
+# www3.example.com present twice, answered twice.
+echo ""
+echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.com" outfile | grep "10.20.30.43"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+echo ""
+echo "> query www4.example.com. www3.example.net."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www4.example.com" outfile | grep "10.20.30.44"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+echo ""
+echo "> query a1.example.com. - a100.example.com."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN a91.a.example.com. A IN a92.a.example.com. A IN a93.a.example.com. A IN a94.a.example.com. A IN a95.a.example.com. A IN a96.a.example.com. A IN a97.a.example.com. A IN a98.a.example.com. A IN a99.a.example.com. A IN a100.a.example.com. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+grep "a.example.com. IN A" outfile
+
+echo ""
+echo "> query www5.example.net. www3.example.net. www.drop.net."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN www3.example.net A IN www.drop.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "OK"
+exit 0
diff --git a/testdata/ssl_req_order.tdir/ssl_req_order.testns b/testdata/ssl_req_order.tdir/ssl_req_order.testns
new file mode 100644
index 000000000000..c53941b678bc
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/ssl_req_order.testns
@@ -0,0 +1,74 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www IN A
+SECTION ANSWER
+www IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www2 IN A
+SECTION ANSWER
+www2 IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www3 IN A
+SECTION ANSWER
+www3 IN A 10.20.30.43
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www4 IN A
+SECTION ANSWER
+www4 IN A 10.20.30.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www5 IN A
+SECTION ANSWER
+www5 IN A 10.20.30.45
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www6 IN A
+SECTION ANSWER
+www6 IN A 10.20.30.46
+ENTRY_END
+
+; lots of noerror/nodata answers for other queries (a.. queries)
+ENTRY_BEGIN
+MATCH opcode qtype subdomain
+REPLY QR AA NOERROR
+ADJUST copy_id copy_query
+SECTION QUESTION
+a.example.com. IN A
+SECTION AUTHORITY
+example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600
+ENTRY_END
diff --git a/testdata/ssl_req_order.tdir/unbound_server.key b/testdata/ssl_req_order.tdir/unbound_server.key
new file mode 100644
index 000000000000..4256c421dd0d
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/unbound_server.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA
+3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s
+RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB
+AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS
+6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds
+sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi
+XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3
+fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL
+CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP
+0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2
+oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l
+In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S
+LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg==
+-----END RSA PRIVATE KEY-----
diff --git a/testdata/ssl_req_order.tdir/unbound_server.pem b/testdata/ssl_req_order.tdir/unbound_server.pem
new file mode 100644
index 000000000000..aeda3ff11882
--- /dev/null
+++ b/testdata/ssl_req_order.tdir/unbound_server.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
+bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
+AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
+y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
+/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
+g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
+9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
+l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
+Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
+-----END CERTIFICATE-----
diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf
new file mode 100644
index 000000000000..c461db29962a
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf
@@ -0,0 +1,25 @@
+server:
+ verbosity: 2
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: .
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+ ssl-port: @PORT@
+ ssl-service-key: "unbound_server.key"
+ ssl-service-pem: "unbound_server.pem"
+
+ local-zone: "example.net" static
+ local-data: "www1.example.net. IN A 1.2.3.1"
+ local-data: "www2.example.net. IN A 1.2.3.2"
+ local-data: "www3.example.net. IN A 1.2.3.3"
+ tcp-idle-timeout: 2000
+ local-zone: "drop.net" deny
+
+forward-zone:
+ name: "."
+ forward-addr: "127.0.0.1@@TOPORT@"
diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc
new file mode 100644
index 000000000000..1e933274b8a4
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc
@@ -0,0 +1,16 @@
+BaseName: ssl_req_timeout
+Version: 1.0
+Description: Test ssl request order timeouts.
+CreationDate: Mon Jan 21 11:23:00 CET 2018
+Maintainer: Wouter Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: ssl_req_timeout.pre
+Post: ssl_req_timeout.post
+Test: ssl_req_timeout.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.post b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.post
new file mode 100644
index 000000000000..e170f4b6e9fa
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.post
@@ -0,0 +1,12 @@
+# #-- ssl_req_timeout.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
+cat fwd.log
+cat unbound.log
diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre
new file mode 100644
index 000000000000..b13de5b3abbf
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre
@@ -0,0 +1,31 @@
+# #-- ssl_req_timeout.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT ssl_req_timeout.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config file
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_timeout.conf > ub.conf
+# start unbound in the background
+PRE="../.."
+$PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_unbound_up unbound.log
+
diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.test b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.test
new file mode 100644
index 000000000000..5223fc9853b3
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.test
@@ -0,0 +1,136 @@
+# #-- ssl_req_timeout.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+PRE="../.."
+. ../common.sh
+get_make
+(cd $PRE; $MAKE streamtcp)
+# check what sort of netcat we have
+if nc -h 2>&1 | grep "q secs"; then
+ ncopt="-q 3 -i 4"
+else
+ ncopt="-i 4"
+fi
+
+# this test query should just work (server is up)
+echo "> query www1.example.net."
+$PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+echo "OK"
+
+# multiple requests that are answered immediately and then the timeout
+echo "> query www1.example.net. www2.example.net. www3.example.net. www.example.com."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN www.example.com. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "stream closed" outfile; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# multiple requests that are waiting for answers and then the timeout
+echo "> query www2.example.com. www2.example.com. www3.example.com."
+$PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN www2.example.com A IN www3.example.com A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "stream closed" outfile; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# wait a bit
+sleep 2
+
+# echo a couple requests to the other side and then wait for the timeout.
+# this creates waiting answers in the reply queue.
+echo "> nc www.example.net www2.example.net www3.example.net"
+( echo "0021eb410100000100000000000003777777076578616d706c65036e657400000100010022eb41010000010000000000000477777732076578616d706c65036e657400000100010022eb41010000010000000000000477777733076578616d706c65036e65740000010001" | xxd -r -p ; sleep 10 ; echo "") | nc $ncopt --ssl 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile
+
+echo "OK"
+exit 0
diff --git a/testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns
new file mode 100644
index 000000000000..694600974c0b
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns
@@ -0,0 +1,63 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=4
+SECTION QUESTION
+www IN A
+SECTION ANSWER
+www IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=4
+SECTION QUESTION
+www2 IN A
+SECTION ANSWER
+www2 IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=4
+SECTION QUESTION
+www3 IN A
+SECTION ANSWER
+www3 IN A 10.20.30.43
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www4 IN A
+SECTION ANSWER
+www4 IN A 10.20.30.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www5 IN A
+SECTION ANSWER
+www5 IN A 10.20.30.45
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www6 IN A
+SECTION ANSWER
+www6 IN A 10.20.30.46
+ENTRY_END
diff --git a/testdata/ssl_req_timeout.tdir/unbound_server.key b/testdata/ssl_req_timeout.tdir/unbound_server.key
new file mode 100644
index 000000000000..4256c421dd0d
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/unbound_server.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA
+3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s
+RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB
+AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS
+6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds
+sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi
+XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3
+fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL
+CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP
+0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2
+oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l
+In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S
+LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg==
+-----END RSA PRIVATE KEY-----
diff --git a/testdata/ssl_req_timeout.tdir/unbound_server.pem b/testdata/ssl_req_timeout.tdir/unbound_server.pem
new file mode 100644
index 000000000000..aeda3ff11882
--- /dev/null
+++ b/testdata/ssl_req_timeout.tdir/unbound_server.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
+bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
+AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
+y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
+/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
+g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
+9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
+l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
+Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
+-----END CERTIFICATE-----
diff --git a/testdata/stream_ssl.tdir/stream_ssl.post b/testdata/stream_ssl.tdir/stream_ssl.post
index 4cdbe726710f..eed0c0e1b5b2 100644
--- a/testdata/stream_ssl.tdir/stream_ssl.post
+++ b/testdata/stream_ssl.tdir/stream_ssl.post
@@ -8,3 +8,5 @@
. ../common.sh
kill_pid $UNBOUNDSERV_PID
kill_pid $UNBOUNDCLIE_PID
+cat unboundserv.log
+cat unboundclie.log
diff --git a/testdata/stream_ssl.tdir/stream_ssl.serv.conf b/testdata/stream_ssl.tdir/stream_ssl.serv.conf
index 9dd169ff78bf..c77e39fc5d59 100644
--- a/testdata/stream_ssl.tdir/stream_ssl.serv.conf
+++ b/testdata/stream_ssl.tdir/stream_ssl.serv.conf
@@ -13,7 +13,8 @@ server:
ssl-port: @SERVPORT@
ssl-service-key: "unbound_server.key"
ssl-service-pem: "unbound_server.pem"
-
+ tls-session-ticket-keys: "ticket1.dat"
+ tls-session-ticket-keys: "ticket2.dat"
# no other queries should reach here.
forward-zone:
name: "."
diff --git a/testdata/stream_ssl.tdir/ticket1.dat b/testdata/stream_ssl.tdir/ticket1.dat
new file mode 100644
index 000000000000..1cc7902af33b
--- /dev/null
+++ b/testdata/stream_ssl.tdir/ticket1.dat
@@ -0,0 +1 @@
+XÁ„d¨,f}¼Œš;òJ‚qéÌŒÍ ¨ñs%Ã[)œMÎï½éo“Á¶@ðÓÙ5n_wÛ¿ô›ÃÃÅI¢KæâCºšÓúÊè" \ No newline at end of file
diff --git a/testdata/stream_ssl.tdir/ticket2.dat b/testdata/stream_ssl.tdir/ticket2.dat
new file mode 100644
index 000000000000..7cb5ddff76cf
--- /dev/null
+++ b/testdata/stream_ssl.tdir/ticket2.dat
@@ -0,0 +1 @@
+s×߶|ÜNü*Ô2a{IiÒ6ù™'õÐÝ ²Äi9I½ÛÅ+ȵj"WzëÙ)s0“ˆ÷ÔD%õh ³H€“O£é…´K©ëò @ \ No newline at end of file
diff --git a/testdata/subnet_max_source.crpl b/testdata/subnet_max_source.crpl
index e1c6cf5f99f7..f5c7464ed7b2 100644
--- a/testdata/subnet_max_source.crpl
+++ b/testdata/subnet_max_source.crpl
@@ -145,6 +145,29 @@ RANGE_BEGIN 0 100
ns.example.com. IN A 1.2.3.4
ENTRY_END
+ ; client send /17, we return /18
+ ENTRY_BEGIN
+ MATCH opcode qtype qname ednsdata
+ ADJUST copy_id copy_ednsdata_assume_clientsubnet increment_ecs_scope
+ REPLY QR NOERROR
+ SECTION QUESTION
+ www.example.com. IN TXT
+ SECTION ANSWER
+ www.example.com. IN TXT "longer scope"
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ; client is 127.1.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 11 00 ; source mask, scopemask
+ 7f 01 00 ; address
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ ENTRY_END
+
RANGE_END
STEP 1 QUERY
@@ -229,5 +252,46 @@ ENTRY_BEGIN
ns.example.com. IN A 1.2.3.4
ENTRY_END
+STEP 21 QUERY
+ENTRY_BEGIN
+ HEX_ANSWER_BEGIN;
+ 00 00 01 00 00 01 00 00 ;ID 0
+ 00 00 00 01 03 77 77 77 ; www.example.com TXT? (DO)
+ 07 65 78 61 6d 70 6c 65
+ 03 63 6f 6d 00 00 10 00
+ 01 00 00 29 10 00 00 00
+ 80 00 00 0b
+
+ 00 08 00 07 ; OPC, optlen
+ 00 01 11 00 ; ip4, scope 17, source 0
+ 7f 01 00 ;127.1.0.0/17
+ HEX_ANSWER_END
+ENTRY_END
+
+
+
+; server returns /18, since we cache the result to max-client-subnet-ipv4 (/17),
+; the initial answer returned to the client should also be capped to /17.
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH all ednsdata
+ REPLY QR RD RA NOERROR
+ SECTION QUESTION
+ www.example.com. IN TXT
+ SECTION ANSWER
+ www.example.com. IN TXT "longer scope"
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ HEX_EDNSDATA_BEGIN
+ ; client is 127.1.0.1
+ 00 08 ; OPC
+ 00 07 ; option length
+ 00 01 ; Family
+ 11 11 ; source mask, scopemask
+ 7f 01 00 ; address
+ HEX_EDNSDATA_END
+ ns.example.com. IN A 1.2.3.4
+ENTRY_END
SCENARIO_END
diff --git a/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns b/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns
index 14647723fca5..2e240b087be8 100644
--- a/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns
+++ b/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns
@@ -13,7 +13,7 @@ ENTRY_END
ENTRY_BEGIN
MATCH TCP opcode qtype qname
REPLY QR AA NOERROR
-ADJUST copy_id sleep=2
+ADJUST copy_id
SECTION QUESTION
www IN A
SECTION ANSWER
diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.conf b/testdata/tcp_req_order.tdir/tcp_req_order.conf
new file mode 100644
index 000000000000..40d6f55c8cde
--- /dev/null
+++ b/testdata/tcp_req_order.tdir/tcp_req_order.conf
@@ -0,0 +1,22 @@
+server:
+ verbosity: 2
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: .
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+
+ local-zone: "example.net" static
+ local-data: "www1.example.net. IN A 1.2.3.1"
+ local-data: "www2.example.net. IN A 1.2.3.2"
+ local-data: "www3.example.net. IN A 1.2.3.3"
+ tcp-upstream: yes
+ local-zone: "drop.net" deny
+
+forward-zone:
+ name: "."
+ forward-addr: "127.0.0.1@@TOPORT@"
diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.dsc b/testdata/tcp_req_order.tdir/tcp_req_order.dsc
new file mode 100644
index 000000000000..f24e90073427
--- /dev/null
+++ b/testdata/tcp_req_order.tdir/tcp_req_order.dsc
@@ -0,0 +1,16 @@
+BaseName: tcp_req_order
+Version: 1.0
+Description: Test tcp request order processing.
+CreationDate: Mon Jan 14 13:34:00 CET 2018
+Maintainer: Wouter Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: tcp_req_order.pre
+Post: tcp_req_order.post
+Test: tcp_req_order.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.post b/testdata/tcp_req_order.tdir/tcp_req_order.post
new file mode 100644
index 000000000000..43372764c20b
--- /dev/null
+++ b/testdata/tcp_req_order.tdir/tcp_req_order.post
@@ -0,0 +1,11 @@
+# #-- tcp_req_order.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
+cat unbound.log
diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.pre b/testdata/tcp_req_order.tdir/tcp_req_order.pre
new file mode 100644
index 000000000000..b2191f065fa8
--- /dev/null
+++ b/testdata/tcp_req_order.tdir/tcp_req_order.pre
@@ -0,0 +1,31 @@
+# #-- tcp_req_order.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT tcp_req_order.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config file
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_order.conf > ub.conf
+# start unbound in the background
+PRE="../.."
+$PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_unbound_up unbound.log
+
diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.test b/testdata/tcp_req_order.tdir/tcp_req_order.test
new file mode 100644
index 000000000000..ecbde306f266
--- /dev/null
+++ b/testdata/tcp_req_order.tdir/tcp_req_order.test
@@ -0,0 +1,341 @@
+# #-- tcp_req_order.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+PRE="../.."
+. ../common.sh
+get_make
+(cd $PRE; $MAKE streamtcp)
+
+# this test query should just work (server is up)
+echo "> query www1.example.net."
+$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+echo "OK"
+
+# multiple requests (from localdata)
+echo "> query www1.example.net. www2.example.net. www3.example.net."
+$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# out of order requests, the example.com elements take 2 seconds to wait.
+echo ""
+echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www.example.com" outfile | grep "10.20.30.40"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.com" outfile | grep "10.20.30.42"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# out of order requests, the example.com elements take 2 seconds to wait.
+# www.example.com present twice, answered twice.
+echo ""
+echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www.example.com" outfile | grep "10.20.30.40"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# out of order requests, the example.com elements take 2 seconds to wait.
+# www3.example.com present twice, answered twice.
+echo ""
+echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.com" outfile | grep "10.20.30.43"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+echo ""
+echo "> query www4.example.com. www3.example.net."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www4.example.com" outfile | grep "10.20.30.44"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+echo ""
+echo "> query a1.example.com. - a100.example.com."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN a91.a.example.com. A IN a92.a.example.com. A IN a93.a.example.com. A IN a94.a.example.com. A IN a95.a.example.com. A IN a96.a.example.com. A IN a97.a.example.com. A IN a98.a.example.com. A IN a99.a.example.com. A IN a100.a.example.com. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+grep "a.example.com. IN A" outfile
+
+echo ""
+echo "> query www5.example.net. www3.example.net. www.drop.net."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN www3.example.net A IN www.drop.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+
+echo "OK"
+exit 0
diff --git a/testdata/tcp_req_order.tdir/tcp_req_order.testns b/testdata/tcp_req_order.tdir/tcp_req_order.testns
new file mode 100644
index 000000000000..c53941b678bc
--- /dev/null
+++ b/testdata/tcp_req_order.tdir/tcp_req_order.testns
@@ -0,0 +1,74 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www IN A
+SECTION ANSWER
+www IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www2 IN A
+SECTION ANSWER
+www2 IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www3 IN A
+SECTION ANSWER
+www3 IN A 10.20.30.43
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www4 IN A
+SECTION ANSWER
+www4 IN A 10.20.30.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www5 IN A
+SECTION ANSWER
+www5 IN A 10.20.30.45
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www6 IN A
+SECTION ANSWER
+www6 IN A 10.20.30.46
+ENTRY_END
+
+; lots of noerror/nodata answers for other queries (a.. queries)
+ENTRY_BEGIN
+MATCH opcode qtype subdomain
+REPLY QR AA NOERROR
+ADJUST copy_id copy_query
+SECTION QUESTION
+a.example.com. IN A
+SECTION AUTHORITY
+example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600
+ENTRY_END
diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.conf b/testdata/tcp_req_size.tdir/tcp_req_size.conf
new file mode 100644
index 000000000000..d8d63ae90133
--- /dev/null
+++ b/testdata/tcp_req_size.tdir/tcp_req_size.conf
@@ -0,0 +1,25 @@
+server:
+ verbosity: 2
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: .
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+
+ # extremely low number to make connections fail
+ stream-wait-size: 10
+
+ local-zone: "example.net" static
+ local-data: "www1.example.net. IN A 1.2.3.1"
+ local-data: "www2.example.net. IN A 1.2.3.2"
+ local-data: "www3.example.net. IN A 1.2.3.3"
+ tcp-upstream: yes
+ local-zone: "drop.net" deny
+
+forward-zone:
+ name: "."
+ forward-addr: "127.0.0.1@@TOPORT@"
diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.dsc b/testdata/tcp_req_size.tdir/tcp_req_size.dsc
new file mode 100644
index 000000000000..1b7ca143c034
--- /dev/null
+++ b/testdata/tcp_req_size.tdir/tcp_req_size.dsc
@@ -0,0 +1,16 @@
+BaseName: tcp_req_size
+Version: 1.0
+Description: Test tcp request wait size.
+CreationDate: Tue Jan 22 09:37:00 CET 2018
+Maintainer: Wouter Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: tcp_req_size.pre
+Post: tcp_req_size.post
+Test: tcp_req_size.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/edns_lame.tdir/edns_lame.post b/testdata/tcp_req_size.tdir/tcp_req_size.post
index f71e3c4246e6..16fd736423fd 100644
--- a/testdata/edns_lame.tdir/edns_lame.post
+++ b/testdata/tcp_req_size.tdir/tcp_req_size.post
@@ -1,4 +1,4 @@
-# #-- edns_lame.post --#
+# #-- tcp_req_size.post --#
# source the master var file when it's there
[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
# source the test var file when it's there
@@ -8,3 +8,4 @@
. ../common.sh
kill_pid $FWD_PID
kill_pid $UNBOUND_PID
+cat unbound.log
diff --git a/testdata/edns_lame.tdir/edns_lame.pre b/testdata/tcp_req_size.tdir/tcp_req_size.pre
index d8c2c076f470..66469170c6f3 100644
--- a/testdata/edns_lame.tdir/edns_lame.pre
+++ b/testdata/tcp_req_size.tdir/tcp_req_size.pre
@@ -1,4 +1,4 @@
-# #-- edns_lame.pre--#
+# #-- tcp_req_size.pre--#
# source the master var file when it's there
[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
# use .tpkg.var.test for in test variable passing
@@ -13,18 +13,19 @@ echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
# start forwarder
get_ldns_testns
-$LDNS_TESTNS -p $FWD_PORT -v edns_lame.testns >fwd.log 2>&1 &
+$LDNS_TESTNS -p $FWD_PORT tcp_req_size.testns >fwd.log 2>&1 &
FWD_PID=$!
echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
# make config file
-sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < edns_lame.conf > ub.conf
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_size.conf > ub.conf
# start unbound in the background
PRE="../.."
-$PRE/unbound -d -vvvv -c ub.conf >unbound.log 2>&1 &
+$PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 &
UNBOUND_PID=$!
echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
cat .tpkg.var.test
wait_ldns_testns_up fwd.log
wait_unbound_up unbound.log
+
diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.test b/testdata/tcp_req_size.tdir/tcp_req_size.test
new file mode 100644
index 000000000000..0260b2117ff3
--- /dev/null
+++ b/testdata/tcp_req_size.tdir/tcp_req_size.test
@@ -0,0 +1,100 @@
+# #-- tcp_req_size.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+PRE="../.."
+. ../common.sh
+get_make
+(cd $PRE; $MAKE streamtcp)
+
+# this test query should just work (server is up)
+echo "> query www1.example.net."
+$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+echo "OK"
+
+# out of order requests, the example.com elements take 2 seconds to wait.
+# www3.example.com present twice, answered twice.
+# this queues one answer in the wait buffers, and that exceeds the buffer.
+echo ""
+echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "stream closed" outfile; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+echo "OK"
+exit 0
diff --git a/testdata/tcp_req_size.tdir/tcp_req_size.testns b/testdata/tcp_req_size.tdir/tcp_req_size.testns
new file mode 100644
index 000000000000..88219e51f94d
--- /dev/null
+++ b/testdata/tcp_req_size.tdir/tcp_req_size.testns
@@ -0,0 +1,63 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www IN A
+SECTION ANSWER
+www IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id
+SECTION QUESTION
+www2 IN A
+SECTION ANSWER
+www2 IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=1
+SECTION QUESTION
+www3 IN A
+SECTION ANSWER
+www3 IN A 10.20.30.43
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www4 IN A
+SECTION ANSWER
+www4 IN A 10.20.30.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www5 IN A
+SECTION ANSWER
+www5 IN A 10.20.30.45
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www6 IN A
+SECTION ANSWER
+www6 IN A 10.20.30.46
+ENTRY_END
diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf
new file mode 100644
index 000000000000..45db9e17ff1a
--- /dev/null
+++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf
@@ -0,0 +1,22 @@
+server:
+ verbosity: 2
+ # num-threads: 1
+ interface: 127.0.0.1
+ port: @PORT@
+ use-syslog: no
+ directory: .
+ pidfile: "unbound.pid"
+ chroot: ""
+ username: ""
+ do-not-query-localhost: no
+
+ local-zone: "example.net" static
+ local-data: "www1.example.net. IN A 1.2.3.1"
+ local-data: "www2.example.net. IN A 1.2.3.2"
+ local-data: "www3.example.net. IN A 1.2.3.3"
+ tcp-idle-timeout: 2000
+ local-zone: "drop.net" deny
+
+forward-zone:
+ name: "."
+ forward-addr: "127.0.0.1@@TOPORT@"
diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc
new file mode 100644
index 000000000000..fb11517f36ca
--- /dev/null
+++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc
@@ -0,0 +1,16 @@
+BaseName: tcp_req_timeout
+Version: 1.0
+Description: Test tcp request order timeouts.
+CreationDate: Mon Jan 21 11:23:00 CET 2018
+Maintainer: Wouter Wijngaards
+Category:
+Component:
+CmdDepends:
+Depends:
+Help:
+Pre: tcp_req_timeout.pre
+Post: tcp_req_timeout.post
+Test: tcp_req_timeout.test
+AuxFiles:
+Passed:
+Failure:
diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.post b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.post
new file mode 100644
index 000000000000..7e8309238acf
--- /dev/null
+++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.post
@@ -0,0 +1,12 @@
+# #-- tcp_req_timeout.post --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# source the test var file when it's there
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+#
+# do your teardown here
+. ../common.sh
+kill_pid $FWD_PID
+kill_pid $UNBOUND_PID
+cat fwd.log
+cat unbound.log
diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre
new file mode 100644
index 000000000000..d6cfe97ae021
--- /dev/null
+++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre
@@ -0,0 +1,31 @@
+# #-- tcp_req_timeout.pre--#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+. ../common.sh
+get_random_port 2
+UNBOUND_PORT=$RND_PORT
+FWD_PORT=$(($RND_PORT + 1))
+echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
+echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
+
+# start forwarder
+get_ldns_testns
+$LDNS_TESTNS -p $FWD_PORT tcp_req_timeout.testns >fwd.log 2>&1 &
+FWD_PID=$!
+echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
+
+# make config file
+sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_timeout.conf > ub.conf
+# start unbound in the background
+PRE="../.."
+$PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 &
+UNBOUND_PID=$!
+echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
+
+cat .tpkg.var.test
+wait_ldns_testns_up fwd.log
+wait_unbound_up unbound.log
+
diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.test b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.test
new file mode 100644
index 000000000000..831f8a854cbb
--- /dev/null
+++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.test
@@ -0,0 +1,136 @@
+# #-- tcp_req_timeout.test --#
+# source the master var file when it's there
+[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
+# use .tpkg.var.test for in test variable passing
+[ -f .tpkg.var.test ] && source .tpkg.var.test
+
+PRE="../.."
+. ../common.sh
+get_make
+(cd $PRE; $MAKE streamtcp)
+# check what sort of netcat we have
+if nc -h 2>&1 | grep "q secs"; then
+ ncopt="-q 3 -i 4"
+else
+ ncopt="-i 4"
+fi
+
+# this test query should just work (server is up)
+echo "> query www1.example.net."
+$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+echo "OK"
+
+# multiple requests that are answered immediately and then the timeout
+echo "> query www1.example.net. www2.example.net. www3.example.net. www.example.com."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN www.example.com. A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "www1.example.net" outfile | grep "1.2.3.1"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www2.example.net" outfile | grep "1.2.3.2"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "www3.example.net" outfile | grep "1.2.3.3"; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+if grep "stream closed" outfile; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# multiple requests that are waiting for answers and then the timeout
+echo "> query www2.example.com. www2.example.com. www3.example.com."
+$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN www2.example.com A IN www3.example.com A IN >outfile 2>&1
+cat outfile
+if test "$?" -ne 0; then
+ echo "exit status not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "Not OK"
+ exit 1
+fi
+if grep "stream closed" outfile; then
+ echo "content OK"
+else
+ echo "result contents not OK"
+ echo "> cat logfiles"
+ cat outfile
+ cat fwd.log
+ cat unbound.log
+ echo "result contents not OK"
+ exit 1
+fi
+
+# wait a bit
+sleep 2
+
+# echo a couple requests to the other side and then wait for the timeout.
+# this creates waiting answers in the reply queue.
+echo "> nc www.example.net www2.example.net www3.example.net"
+( echo "0021eb410100000100000000000003777777076578616d706c65036e657400000100010022eb41010000010000000000000477777732076578616d706c65036e657400000100010022eb41010000010000000000000477777733076578616d706c65036e65740000010001" | xxd -r -p ; sleep 10 ; echo "") | nc $ncopt 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile
+
+echo "OK"
+exit 0
diff --git a/testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns
new file mode 100644
index 000000000000..694600974c0b
--- /dev/null
+++ b/testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns
@@ -0,0 +1,63 @@
+; nameserver test file
+$ORIGIN example.com.
+$TTL 3600
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=4
+SECTION QUESTION
+www IN A
+SECTION ANSWER
+www IN A 10.20.30.40
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=4
+SECTION QUESTION
+www2 IN A
+SECTION ANSWER
+www2 IN A 10.20.30.42
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=4
+SECTION QUESTION
+www3 IN A
+SECTION ANSWER
+www3 IN A 10.20.30.43
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www4 IN A
+SECTION ANSWER
+www4 IN A 10.20.30.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www5 IN A
+SECTION ANSWER
+www5 IN A 10.20.30.45
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+REPLY QR AA NOERROR
+ADJUST copy_id sleep=2
+SECTION QUESTION
+www6 IN A
+SECTION ANSWER
+www6 IN A 10.20.30.46
+ENTRY_END
diff --git a/testdata/ttl_max.rpl b/testdata/ttl_max.rpl
index 17eaca26c548..32569632123f 100644
--- a/testdata/ttl_max.rpl
+++ b/testdata/ttl_max.rpl
@@ -180,11 +180,11 @@ REPLY QR RD RA CD
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
-www.example.com. 248 IN A 10.20.30.40
+www.example.com. 10 IN A 10.20.30.40
SECTION AUTHORITY
-example.com. IN NS ns.example.com.
+example.com. 10 IN NS ns.example.com.
SECTION ADDITIONAL
-ns.example.com. IN A 1.2.3.4
+ns.example.com. 10 IN A 1.2.3.4
ENTRY_END
; wait
@@ -205,10 +205,10 @@ REPLY QR RA
SECTION QUESTION
www.example.com. IN A
SECTION ANSWER
-. 3600 IN NS K.ROOT-SERVERS.NET.
+. 10 IN NS K.ROOT-SERVERS.NET.
SECTION AUTHORITY
SECTION ADDITIONAL
-K.ROOT-SERVERS.NET. 3600 IN A 193.0.14.129
+K.ROOT-SERVERS.NET. 10 IN A 193.0.14.129
ENTRY_END
SCENARIO_END
diff --git a/util/config_file.c b/util/config_file.c
index e9c312ab0f54..9b60254d7b4e 100644
--- a/util/config_file.c
+++ b/util/config_file.c
@@ -59,6 +59,7 @@
#include "services/cache/infra.h"
#include "sldns/wire2str.h"
#include "sldns/parseutil.h"
+#include "iterator/iterator.h"
#ifdef HAVE_GLOB_H
# include <glob.h>
#endif
@@ -75,6 +76,8 @@ uid_t cfg_uid = (uid_t)-1;
gid_t cfg_gid = (gid_t)-1;
/** for debug allow small timeout values for fast rollovers */
int autr_permit_small_holddown = 0;
+/** size (in bytes) of stream wait buffers max */
+size_t stream_wait_max = 4 * 1024 * 1024;
/** global config during parsing */
struct config_parser_state* cfg_parser = 0;
@@ -118,6 +121,7 @@ config_create(void)
cfg->log_time_ascii = 0;
cfg->log_queries = 0;
cfg->log_replies = 0;
+ cfg->log_tag_queryreply = 0;
cfg->log_local_actions = 0;
cfg->log_servfail = 0;
#ifndef USE_WINSOCK
@@ -138,6 +142,7 @@ config_create(void)
cfg->outgoing_num_tcp = 2; /* leaves 64-52=12 for: 4if,1stop,thread4 */
cfg->incoming_num_tcp = 2;
#endif
+ cfg->stream_wait_size = 4 * 1024 * 1024;
cfg->edns_buffer_size = 4096; /* 4k from rfc recommendation */
cfg->msg_buffer_size = 65552; /* 64 k + a small margin */
cfg->msg_cache_size = 4 * 1024 * 1024;
@@ -152,6 +157,7 @@ config_create(void)
cfg->max_negative_ttl = 3600;
cfg->prefetch = 0;
cfg->prefetch_key = 0;
+ cfg->deny_any = 0;
cfg->infra_cache_slabs = 4;
cfg->infra_cache_numhosts = 10000;
cfg->infra_cache_min_rtt = 50;
@@ -167,8 +173,8 @@ config_create(void)
if(!(cfg->logfile = strdup(""))) goto error_exit;
if(!(cfg->pidfile = strdup(PIDFILE))) goto error_exit;
if(!(cfg->target_fetch_policy = strdup("3 2 1 0 0"))) goto error_exit;
- cfg->low_rtt_permil = 0;
- cfg->low_rtt = 45;
+ cfg->fast_server_permil = 0;
+ cfg->fast_server_num = 3;
cfg->donotqueryaddrs = NULL;
cfg->donotquery_localhost = 1;
cfg->root_hints = NULL;
@@ -194,6 +200,10 @@ config_create(void)
cfg->client_subnet_always_forward = 0;
cfg->max_client_subnet_ipv4 = 24;
cfg->max_client_subnet_ipv6 = 56;
+ cfg->min_client_subnet_ipv4 = 0;
+ cfg->min_client_subnet_ipv6 = 0;
+ cfg->max_ecs_tree_size_ipv4 = 100;
+ cfg->max_ecs_tree_size_ipv6 = 100;
#endif
cfg->views = NULL;
cfg->acls = NULL;
@@ -258,6 +268,7 @@ config_create(void)
cfg->control_use_cert = 1;
cfg->minimal_responses = 1;
cfg->rrset_roundrobin = 0;
+ cfg->unknown_server_time_limit = 376;
cfg->max_udp_size = 4096;
if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key")))
goto error_exit;
@@ -476,6 +487,9 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_STRLIST("additional-tls-port:", tls_additional_port)
else S_STRLIST("tls-additional-ports:", tls_additional_port)
else S_STRLIST("tls-additional-port:", tls_additional_port)
+ else S_STRLIST_APPEND("tls-session-ticket-keys:", tls_session_ticket_keys)
+ else S_STR("tls-ciphers:", tls_ciphers)
+ else S_STR("tls-ciphersuites:", tls_ciphersuites)
else S_YNO("interface-automatic:", if_automatic)
else S_YNO("use-systemd:", use_systemd)
else S_YNO("do-daemonize:", do_daemonize)
@@ -483,6 +497,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_NUMBER_NONZERO("outgoing-range:", outgoing_num_ports)
else S_SIZET_OR_ZERO("outgoing-num-tcp:", outgoing_num_tcp)
else S_SIZET_OR_ZERO("incoming-num-tcp:", incoming_num_tcp)
+ else S_MEMSIZE("stream-wait-size:", stream_wait_size)
else S_SIZET_NONZERO("edns-buffer-size:", edns_buffer_size)
else S_SIZET_NONZERO("msg-buffer-size:", msg_buffer_size)
else S_MEMSIZE("msg-cache-size:", msg_cache_size)
@@ -498,6 +513,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
else S_YNO("prefetch:", prefetch)
else S_YNO("prefetch-key:", prefetch_key)
+ else S_YNO("deny-any:", deny_any)
else if(strcmp(opt, "cache-max-ttl:") == 0)
{ IS_NUMBER_OR_ZERO; cfg->max_ttl = atoi(val); MAX_TTL=(time_t)cfg->max_ttl;}
else if(strcmp(opt, "cache-max-negative-ttl:") == 0)
@@ -552,6 +568,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_YNO("val-log-squelch:", val_log_squelch)
else S_YNO("log-queries:", log_queries)
else S_YNO("log-replies:", log_replies)
+ else S_YNO("log-tag-queryreply:", log_tag_queryreply)
else S_YNO("log-local-actions:", log_local_actions)
else S_YNO("log-servfail:", log_servfail)
else S_YNO("val-permissive-mode:", val_permissive_mode)
@@ -573,6 +590,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_MEMSIZE("neg-cache-size:", neg_cache_size)
else S_YNO("minimal-responses:", minimal_responses)
else S_YNO("rrset-roundrobin:", rrset_roundrobin)
+ else S_NUMBER_OR_ZERO("unknown-server-time-limit:", unknown_server_time_limit)
else S_STRLIST("local-data:", local_data)
else S_YNO("unblock-lan-zones:", unblock_lan_zones)
else S_YNO("insecure-lan-zones:", insecure_lan_zones)
@@ -642,9 +660,8 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_POW2("ratelimit-slabs:", ratelimit_slabs)
else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor)
else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
- else S_NUMBER_OR_ZERO("low-rtt:", low_rtt)
- else S_NUMBER_OR_ZERO("low-rtt-pct:", low_rtt_permil)
- else S_NUMBER_OR_ZERO("low-rtt-permil:", low_rtt_permil)
+ else S_SIZET_NONZERO("fast-server-num:", fast_server_num)
+ else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil)
else S_YNO("qname-minimisation:", qname_minimisation)
else S_YNO("qname-minimisation-strict:", qname_minimisation_strict)
#ifdef USE_IPSECMOD
@@ -683,7 +700,9 @@ int config_set_option(struct config_file* cfg, const char* opt,
* ratelimit-for-domain, ratelimit-below-domain,
* local-zone-tag, access-control-view,
* send-client-subnet, client-subnet-always-forward,
- * max-client-subnet-ipv4, max-client-subnet-ipv6, ipsecmod_hook,
+ * max-client-subnet-ipv4, max-client-subnet-ipv6,
+ * min-client-subnet-ipv4, min-client-subnet-ipv6,
+ * max-ecs-tree-size-ipv4, max-ecs-tree-size-ipv6, ipsecmod_hook,
* ipsecmod_whitelist. */
return 0;
}
@@ -865,6 +884,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_DEC(opt, "outgoing-range", outgoing_num_ports)
else O_DEC(opt, "outgoing-num-tcp", outgoing_num_tcp)
else O_DEC(opt, "incoming-num-tcp", incoming_num_tcp)
+ else O_MEM(opt, "stream-wait-size", stream_wait_size)
else O_DEC(opt, "edns-buffer-size", edns_buffer_size)
else O_DEC(opt, "msg-buffer-size", msg_buffer_size)
else O_MEM(opt, "msg-cache-size", msg_cache_size)
@@ -880,6 +900,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs)
else O_YNO(opt, "prefetch-key", prefetch_key)
else O_YNO(opt, "prefetch", prefetch)
+ else O_YNO(opt, "deny-any", deny_any)
else O_DEC(opt, "cache-max-ttl", max_ttl)
else O_DEC(opt, "cache-max-negative-ttl", max_negative_ttl)
else O_DEC(opt, "cache-min-ttl", min_ttl)
@@ -906,6 +927,9 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_STR(opt, "tls-cert-bundle", tls_cert_bundle)
else O_YNO(opt, "tls-win-cert", tls_win_cert)
else O_LST(opt, "tls-additional-port", tls_additional_port)
+ else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys.first)
+ else O_STR(opt, "tls-ciphers", tls_ciphers)
+ else O_STR(opt, "tls-ciphersuites", tls_ciphersuites)
else O_YNO(opt, "use-systemd", use_systemd)
else O_YNO(opt, "do-daemonize", do_daemonize)
else O_STR(opt, "chroot", chrootdir)
@@ -914,6 +938,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_STR(opt, "logfile", logfile)
else O_YNO(opt, "log-queries", log_queries)
else O_YNO(opt, "log-replies", log_replies)
+ else O_YNO(opt, "log-tag-queryreply", log_tag_queryreply)
else O_YNO(opt, "log-local-actions", log_local_actions)
else O_YNO(opt, "log-servfail", log_servfail)
else O_STR(opt, "pidfile", pidfile)
@@ -977,11 +1002,16 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_UNS(opt, "val-override-date", val_date_override)
else O_YNO(opt, "minimal-responses", minimal_responses)
else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin)
+ else O_DEC(opt, "unknown-server-time-limit", unknown_server_time_limit)
#ifdef CLIENT_SUBNET
else O_LST(opt, "send-client-subnet", client_subnet)
else O_LST(opt, "client-subnet-zone", client_subnet_zone)
else O_DEC(opt, "max-client-subnet-ipv4", max_client_subnet_ipv4)
else O_DEC(opt, "max-client-subnet-ipv6", max_client_subnet_ipv6)
+ else O_DEC(opt, "min-client-subnet-ipv4", min_client_subnet_ipv4)
+ else O_DEC(opt, "min-client-subnet-ipv6", min_client_subnet_ipv6)
+ else O_DEC(opt, "max-ecs-tree-size-ipv4", max_ecs_tree_size_ipv4)
+ else O_DEC(opt, "max-ecs-tree-size-ipv6", max_ecs_tree_size_ipv6)
else O_YNO(opt, "client-subnet-always-forward:",
client_subnet_always_forward)
#endif
@@ -1036,9 +1066,8 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain)
else O_DEC(opt, "ip-ratelimit-factor", ip_ratelimit_factor)
else O_DEC(opt, "ratelimit-factor", ratelimit_factor)
- else O_DEC(opt, "low-rtt", low_rtt)
- else O_DEC(opt, "low-rtt-pct", low_rtt_permil)
- else O_DEC(opt, "low-rtt-permil", low_rtt_permil)
+ else O_DEC(opt, "fast-server-num", fast_server_num)
+ else O_DEC(opt, "fast-server-permil", fast_server_permil)
else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
else O_YNO(opt, "qname-minimisation", qname_minimisation)
@@ -1335,6 +1364,9 @@ config_delete(struct config_file* cfg)
free(cfg->ssl_service_pem);
free(cfg->tls_cert_bundle);
config_delstrlist(cfg->tls_additional_port);
+ config_delstrlist(cfg->tls_session_ticket_keys.first);
+ free(cfg->tls_ciphers);
+ free(cfg->tls_ciphersuites);
free(cfg->log_identity);
config_del_strarray(cfg->ifs, cfg->num_ifs);
config_del_strarray(cfg->out_ifs, cfg->num_out_ifs);
@@ -1888,8 +1920,11 @@ config_apply(struct config_file* config)
EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size;
MINIMAL_RESPONSES = config->minimal_responses;
RRSET_ROUNDROBIN = config->rrset_roundrobin;
+ LOG_TAG_QUERYREPLY = config->log_tag_queryreply;
+ UNKNOWN_SERVER_NICENESS = config->unknown_server_time_limit;
log_set_time_asc(config->log_time_ascii);
autr_permit_small_holddown = config->permit_small_holddown;
+ stream_wait_max = config->stream_wait_size;
}
void config_lookup_uid(struct config_file* cfg)
diff --git a/util/config_file.h b/util/config_file.h
index 8c630b8a109c..3cffdbff9386 100644
--- a/util/config_file.h
+++ b/util/config_file.h
@@ -120,6 +120,12 @@ struct config_file {
int tls_win_cert;
/** additional tls ports */
struct config_strlist* tls_additional_port;
+ /** secret key used to encrypt and decrypt TLS session ticket */
+ struct config_strlist_head tls_session_ticket_keys;
+ /** TLS ciphers */
+ char* tls_ciphers;
+ /** TLS chiphersuites (TLSv1.3) */
+ char* tls_ciphersuites;
/** outgoing port range number of ports (per thread) */
int outgoing_num_ports;
@@ -132,6 +138,8 @@ struct config_file {
/** EDNS buffer size to use */
size_t edns_buffer_size;
+ /** size of the stream wait buffers, max */
+ size_t stream_wait_size;
/** number of bytes buffer size for DNS messages */
size_t msg_buffer_size;
/** size of the message cache */
@@ -159,10 +167,11 @@ struct config_file {
/** the target fetch policy for the iterator */
char* target_fetch_policy;
- /** percent*10, how many times in 1000 to pick low rtt destinations */
- int low_rtt_permil;
- /** what time in msec is a low rtt destination */
- int low_rtt;
+ /** percent*10, how many times in 1000 to pick from the fastest
+ * destinations */
+ int fast_server_permil;
+ /** number of fastest server to select from */
+ size_t fast_server_num;
/** automatic interface for incoming messages. Uses ipv6 remapping,
* and recvmsg/sendmsg ancillary data to detect interfaces, boolean */
@@ -214,6 +223,12 @@ struct config_file {
/** Subnet length we are willing to give up privacy for */
uint8_t max_client_subnet_ipv4;
uint8_t max_client_subnet_ipv6;
+ /** Minimum subnet length we are willing to answer */
+ uint8_t min_client_subnet_ipv4;
+ uint8_t min_client_subnet_ipv6;
+ /** Max number of nodes in the ECS radix tree */
+ uint32_t max_ecs_tree_size_ipv4;
+ uint32_t max_ecs_tree_size_ipv6;
#endif
/** list of access control entries, linked list */
struct config_str2list* acls;
@@ -257,6 +272,8 @@ struct config_file {
int prefetch;
/** if prefetching of DNSKEYs should be performed. */
int prefetch_key;
+ /** deny queries of type ANY with an empty answer */
+ int deny_any;
/** chrootdir, if not "" or chroot will be done */
char* chrootdir;
@@ -277,6 +294,8 @@ struct config_file {
int log_queries;
/** log replies with one line per reply */
int log_replies;
+ /** tag log_queries and log_replies for filtering */
+ int log_tag_queryreply;
/** log every local-zone hit **/
int log_local_actions;
/** log servfails with a reason */
@@ -428,6 +447,9 @@ struct config_file {
/* RRSet roundrobin */
int rrset_roundrobin;
+ /* wait time for unknown server in msec */
+ int unknown_server_time_limit;
+
/* maximum UDP response size */
size_t max_udp_size;
@@ -561,6 +583,8 @@ extern uid_t cfg_uid;
extern gid_t cfg_gid;
/** debug and enable small timeouts */
extern int autr_permit_small_holddown;
+/** size (in bytes) of stream wait buffers max */
+extern size_t stream_wait_max;
/**
* Stub config options
diff --git a/util/configlexer.c b/util/configlexer.c
index 7f388eaec38e..5d93eb71f090 100644
--- a/util/configlexer.c
+++ b/util/configlexer.c
@@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 278
-#define YY_END_OF_BUFFER 279
+#define YY_NUM_RULES 291
+#define YY_END_OF_BUFFER 292
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -372,310 +372,328 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[2750] =
+static yyconst flex_int16_t yy_accept[2905] =
{ 0,
- 1, 1, 260, 260, 264, 264, 268, 268, 272, 272,
- 1, 1, 279, 276, 1, 258, 258, 277, 2, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 277, 260, 261, 261, 262, 277, 264, 265, 265,
- 266, 277, 271, 268, 269, 269, 270, 277, 272, 273,
- 273, 274, 277, 275, 259, 2, 263, 275, 277, 276,
- 0, 1, 2, 2, 2, 2, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 260,
- 0, 264, 0, 271, 0, 268, 272, 0, 275, 0,
- 2, 2, 275, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 275, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 109, 276, 276, 276, 276, 276, 276, 276, 275, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 91, 276, 276,
- 276, 276, 276, 276, 8, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 114, 276, 275,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 275, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 51, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 203, 276, 14, 15, 276, 18, 17, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 108, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 188, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 3, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 275,
- 276, 276, 276, 276, 276, 276, 276, 251, 276, 276,
- 250, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 267, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 54, 276, 227, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 55, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 177, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 20, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 129, 276, 276, 267,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 233, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 150, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 128, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 89, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 31, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 32, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 52, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 107, 276, 276, 276, 276, 276,
-
- 106, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 53, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 151, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 42, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 218, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 46, 276, 47, 276,
- 276, 276, 276, 92, 276, 93, 276, 276, 276, 276,
- 90, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 7, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 196, 276, 276, 276, 276, 131,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 43, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 169, 276, 168, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 16, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 56, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 176, 276, 276, 276, 276, 276, 95, 276, 94, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 161, 276, 276, 276,
- 276, 276, 276, 276, 276, 115, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 74, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 78, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 50, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 164, 165, 276, 276,
- 228, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 6, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 231, 276, 276, 276, 252, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 40, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 157, 276, 276, 276, 110, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 181,
- 276, 158, 276, 276, 276, 193, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 41, 276, 276, 276, 276, 276, 276, 276,
- 112, 100, 276, 101, 276, 276, 276, 99, 276, 276,
- 276, 276, 276, 276, 276, 276, 126, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 217, 276,
- 276, 276, 276, 276, 276, 276, 276, 159, 276, 276,
- 276, 276, 276, 162, 276, 167, 276, 276, 276, 192,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 88, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 48, 276, 276, 276, 25,
- 276, 276, 276, 276, 276, 276, 276, 276, 19, 276,
- 276, 276, 276, 26, 35, 276, 136, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 63, 65, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 235, 276, 276, 276, 204, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 102, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 125, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 246, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 130, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 187, 276, 276,
- 276, 276, 276, 276, 276, 276, 255, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 147, 276, 276, 276,
- 276, 276, 276, 276, 96, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 142, 276, 152, 276, 276, 276, 276, 276, 118,
- 276, 276, 276, 276, 276, 84, 276, 276, 276, 276,
- 179, 276, 276, 276, 276, 276, 276, 194, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 209, 276, 276, 276, 276, 276, 276, 276, 111, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 146,
- 276, 276, 276, 276, 276, 66, 67, 276, 276, 276,
- 276, 276, 49, 276, 276, 276, 276, 276, 73, 153,
- 276, 170, 276, 197, 276, 163, 229, 276, 276, 276,
-
- 59, 276, 155, 276, 276, 276, 276, 276, 9, 276,
- 276, 276, 87, 276, 276, 276, 276, 222, 276, 276,
- 276, 178, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 145, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 132, 276, 234, 276, 276, 276,
- 276, 208, 276, 276, 276, 276, 276, 276, 276, 276,
- 189, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 249, 276,
- 154, 276, 276, 276, 276, 58, 60, 276, 276, 276,
- 276, 276, 276, 276, 86, 276, 276, 276, 276, 220,
- 276, 276, 276, 230, 276, 276, 276, 276, 276, 276,
- 276, 183, 33, 27, 29, 276, 276, 276, 276, 276,
- 276, 276, 276, 34, 28, 30, 276, 276, 276, 276,
- 276, 276, 83, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 185, 182, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 57, 276, 276, 113,
- 103, 276, 276, 276, 276, 276, 276, 276, 276, 127,
- 13, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 244, 276, 247, 276, 276, 276, 276, 276, 276, 276,
- 12, 276, 276, 21, 276, 276, 276, 226, 276, 276,
- 276, 232, 276, 61, 276, 191, 276, 276, 184, 276,
- 276, 276, 276, 276, 276, 22, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 141, 140, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 186, 180,
- 276, 195, 276, 276, 236, 276, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 68, 276,
- 276, 276, 221, 276, 276, 276, 276, 166, 276, 190,
- 276, 276, 276, 276, 276, 276, 276, 276, 253, 254,
- 138, 62, 276, 276, 148, 276, 276, 97, 98, 276,
- 276, 276, 133, 276, 135, 276, 171, 276, 276, 276,
- 139, 276, 276, 198, 276, 276, 276, 276, 276, 276,
- 276, 120, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 205, 276, 276, 276, 23, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
-
- 172, 276, 276, 219, 276, 248, 276, 276, 276, 44,
- 276, 276, 276, 276, 4, 276, 276, 119, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 201, 36, 37, 276, 276, 276, 276, 276,
- 276, 276, 237, 276, 276, 276, 276, 276, 276, 207,
- 276, 276, 276, 175, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 71, 276, 45, 225, 276, 202, 276,
- 276, 11, 276, 276, 276, 276, 276, 276, 276, 173,
- 75, 276, 39, 276, 276, 276, 276, 276, 276, 144,
- 276, 276, 276, 276, 276, 122, 276, 276, 276, 276,
-
- 276, 276, 276, 276, 276, 206, 116, 276, 276, 104,
- 105, 276, 276, 276, 77, 81, 76, 276, 69, 276,
- 276, 276, 10, 276, 276, 276, 223, 276, 276, 257,
- 38, 276, 276, 276, 143, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 82, 80, 276, 70, 245, 276, 276,
- 276, 160, 276, 276, 276, 174, 276, 276, 276, 276,
- 276, 276, 134, 64, 276, 276, 276, 276, 276, 238,
- 276, 276, 276, 276, 276, 276, 276, 117, 276, 79,
- 123, 124, 72, 276, 224, 276, 137, 276, 276, 276,
-
- 276, 200, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 149, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 85, 276, 199, 276,
- 216, 242, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 5, 276, 276, 276, 243, 276, 276, 276,
- 276, 276, 276, 276, 276, 24, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 121,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 156,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 239,
-
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 276, 276, 276, 276, 276, 256, 276, 276,
- 212, 276, 276, 276, 276, 276, 240, 276, 276, 276,
- 276, 276, 276, 241, 276, 276, 276, 210, 276, 213,
- 214, 276, 276, 276, 276, 276, 211, 215, 0
+ 1, 1, 273, 273, 277, 277, 281, 281, 285, 285,
+ 1, 1, 292, 289, 1, 271, 271, 290, 2, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 290, 273, 274, 274, 275, 290, 277, 278, 278,
+ 279, 290, 284, 281, 282, 282, 283, 290, 285, 286,
+ 286, 287, 290, 288, 272, 2, 276, 288, 290, 289,
+ 0, 1, 2, 2, 2, 2, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 273,
+ 0, 277, 0, 284, 0, 281, 285, 0, 288, 0,
+ 2, 2, 288, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 288, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 114,
+ 289, 289, 289, 289, 289, 289, 289, 288, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 96, 289, 289, 289, 289, 289, 289, 8, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 119, 289, 288, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 288, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 54,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 214, 289, 14, 15, 289, 18,
+ 17, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 113, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 198, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 3, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 288, 289, 289, 289, 289, 289, 289, 289, 264,
+ 289, 289, 263, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 280, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 57, 289, 238, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 58, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 187, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 20,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 138, 289, 289,
+ 280, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 94, 289, 289, 289, 289, 289, 289, 289, 246,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 159, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 137, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 93, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 31, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 32, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 55, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 112, 289, 289, 289, 289, 289,
+ 111, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 56, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 160, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 45, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 229, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 49, 289, 50, 289, 289, 289, 289, 289, 97, 289,
+ 98, 289, 289, 289, 289, 95, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 7, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 207, 289, 289, 289, 289, 140, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 46, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 179, 289, 178, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 16, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 59, 289, 289, 289, 289, 289, 289,
+ 289, 289, 186, 289, 289, 289, 289, 289, 289, 100,
+ 289, 99, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 170, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 120, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 78, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 82, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 53, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 173, 174, 289, 289, 289, 240, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 6, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 244, 289, 289, 289, 265, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 41, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 43, 289, 289, 289, 289, 289, 289, 289, 289, 166,
+ 289, 289, 289, 115, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 191, 289, 167, 289, 289, 289,
+
+ 204, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 44, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 117, 105, 289,
+ 106, 289, 289, 289, 104, 289, 289, 289, 289, 289,
+ 289, 289, 289, 135, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 228, 289, 289, 289, 289,
+ 289, 289, 289, 289, 168, 289, 289, 289, 289, 289,
+ 171, 289, 177, 289, 289, 289, 289, 289, 203, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 92, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 51, 289, 289, 289, 25,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 19,
+ 289, 289, 289, 289, 289, 289, 26, 35, 289, 145,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 67,
+ 69, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 248, 289, 289, 289, 215, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 107, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 134, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 259, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 139, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 197, 289, 289, 289,
+ 289, 289, 289, 289, 289, 268, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 156, 289, 289, 289, 289,
+ 289, 289, 289, 289, 101, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 151, 289, 161, 289, 289, 289,
+ 289, 289, 123, 289, 289, 289, 289, 289, 88, 289,
+ 289, 289, 289, 189, 289, 289, 289, 289, 289, 289,
+ 205, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 220, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 116, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 155, 289, 289, 289, 289, 289,
+ 70, 71, 289, 289, 289, 289, 289, 52, 289, 289,
+ 289, 289, 289, 77, 162, 289, 180, 289, 208, 289,
+ 289, 172, 241, 289, 289, 289, 289, 289, 63, 289,
+
+ 164, 289, 289, 289, 289, 289, 9, 289, 289, 289,
+ 91, 289, 289, 289, 289, 233, 289, 289, 289, 188,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 154, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 141, 289, 247, 289,
+ 289, 289, 289, 219, 289, 289, 289, 289, 289, 289,
+ 289, 289, 199, 289, 289, 289, 289, 239, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 262, 289, 163, 289, 289, 289, 289, 289,
+ 289, 289, 62, 64, 289, 289, 289, 289, 289, 289,
+ 289, 90, 289, 289, 289, 289, 231, 289, 289, 289,
+ 243, 289, 289, 289, 289, 289, 289, 289, 193, 33,
+ 27, 29, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 34, 289, 28, 30, 289, 289, 289, 289, 289,
+ 289, 289, 289, 87, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+
+ 289, 195, 192, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 61, 289, 289,
+ 118, 289, 108, 289, 289, 289, 289, 289, 289, 289,
+ 289, 136, 13, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 257, 289, 260, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 12, 289, 289, 21, 289,
+ 289, 289, 237, 289, 289, 289, 245, 289, 65, 289,
+ 201, 289, 289, 194, 289, 289, 60, 289, 289, 289,
+ 289, 22, 289, 42, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 150, 149, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 196, 190, 289,
+ 206, 289, 289, 249, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 72, 289,
+ 289, 289, 232, 289, 289, 289, 289, 176, 289, 289,
+ 289, 289, 200, 289, 289, 289, 289, 289, 289, 289,
+ 289, 266, 267, 147, 66, 289, 289, 157, 289, 289,
+ 102, 103, 289, 289, 289, 289, 142, 289, 144, 289,
+ 181, 289, 289, 289, 289, 148, 289, 289, 209, 289,
+ 289, 289, 289, 289, 289, 289, 125, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 289, 289, 216, 289,
+ 289, 289, 23, 289, 242, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 182, 289, 289, 230,
+ 289, 261, 289, 175, 289, 289, 289, 289, 47, 289,
+ 289, 289, 289, 4, 289, 289, 124, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 212, 36, 37, 289, 289, 289, 289,
+ 289, 289, 289, 250, 289, 289, 289, 289, 289, 289,
+ 218, 289, 289, 289, 185, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 75, 289, 48, 236, 289, 213,
+
+ 289, 289, 289, 289, 11, 289, 289, 289, 289, 289,
+ 289, 289, 183, 79, 289, 39, 289, 289, 289, 289,
+ 289, 289, 289, 289, 153, 289, 289, 289, 289, 289,
+ 127, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 217, 121, 289, 289, 109, 110, 289, 289, 289, 81,
+ 85, 80, 289, 73, 289, 289, 289, 289, 289, 10,
+ 289, 289, 289, 234, 289, 289, 270, 38, 289, 289,
+ 289, 289, 289, 152, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 86, 84, 289, 74, 258, 289, 289, 289,
+
+ 289, 289, 289, 289, 169, 289, 289, 289, 184, 289,
+ 289, 289, 289, 289, 289, 289, 289, 143, 68, 289,
+ 289, 289, 289, 289, 251, 289, 289, 289, 289, 289,
+ 289, 289, 122, 289, 83, 128, 129, 132, 133, 130,
+ 131, 76, 289, 235, 289, 289, 146, 289, 289, 289,
+ 289, 289, 211, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 158, 40, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 89, 289, 210, 289, 227, 255, 289, 289, 289, 289,
+
+ 289, 289, 289, 289, 289, 289, 5, 289, 202, 289,
+ 289, 256, 289, 289, 289, 289, 289, 289, 289, 289,
+ 24, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 126, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 165, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 252, 289, 289, 289, 289, 289,
+ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289,
+ 289, 289, 269, 289, 289, 223, 289, 289, 289, 289,
+ 289, 253, 289, 289, 289, 289, 289, 289, 254, 289,
+ 289, 289, 221, 289, 224, 225, 289, 289, 289, 289,
+
+ 289, 222, 226, 0
} ;
static yyconst YY_CHAR yy_ec[256] =
@@ -721,623 +739,657 @@ static yyconst YY_CHAR yy_meta[67] =
1, 1, 1, 1, 1, 1
} ;
-static yyconst flex_uint16_t yy_base[2764] =
+static yyconst flex_uint16_t yy_base[2919] =
{ 0,
0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
- 131, 137, 352, 307, 96, 7896, 7896, 7896, 109, 171,
+ 131, 137, 352, 307, 96, 8293, 8293, 8293, 109, 171,
85, 142, 215, 83, 117, 152, 207, 50, 110, 75,
167, 231, 112, 275, 121, 259, 323, 243, 291, 320,
- 170, 368, 289, 7896, 7896, 7896, 104, 288, 7896, 7896,
- 7896, 147, 286, 289, 7896, 7896, 7896, 305, 239, 7896,
- 7896, 7896, 160, 210, 7896, 372, 7896, 177, 382, 201,
+ 170, 368, 289, 8293, 8293, 8293, 104, 288, 8293, 8293,
+ 8293, 147, 286, 289, 8293, 8293, 8293, 305, 239, 8293,
+ 8293, 8293, 160, 210, 8293, 372, 8293, 177, 382, 201,
386, 115, 0, 390, 0, 0, 160, 162, 199, 204,
188, 169, 303, 222, 256, 248, 377, 369, 254, 226,
- 313, 271, 365, 382, 296, 327, 391, 392, 384, 420,
-
- 408, 386, 424, 434, 409, 417, 403, 317, 425, 435,
- 432, 443, 453, 469, 456, 470, 458, 476, 461, 503,
- 467, 468, 509, 486, 212, 498, 490, 497, 504, 502,
- 514, 517, 530, 528, 541, 539, 534, 558, 531, 190,
- 164, 138, 231, 122, 592, 158, 79, 277, 66, 600,
- 604, 0, 572, 577, 561, 583, 585, 598, 576, 597,
- 588, 593, 611, 599, 609, 622, 624, 620, 340, 638,
- 682, 643, 633, 634, 637, 645, 660, 649, 662, 663,
- 666, 680, 655, 693, 694, 726, 701, 704, 718, 627,
- 687, 710, 635, 715, 722, 729, 720, 745, 731, 753,
-
- 755, 750, 739, 754, 747, 758, 748, 761, 763, 773,
- 774, 771, 777, 772, 784, 788, 670, 780, 800, 790,
- 817, 794, 816, 815, 828, 829, 807, 830, 819, 836,
- 492, 833, 835, 846, 827, 834, 820, 849, 844, 847,
- 864, 857, 843, 845, 876, 877, 888, 870, 872, 871,
- 873, 893, 892, 899, 903, 909, 173, 900, 920, 922,
- 895, 916, 930, 935, 915, 898, 926, 946, 932, 948,
- 953, 950, 951, 936, 947, 943, 958, 967, 973, 966,
- 982, 970, 989, 981, 998, 975, 977, 1002, 994, 1025,
- 1003, 1004, 1014, 1032, 1011, 1028, 1054, 712, 1020, 1046,
-
- 1033, 1049, 1059, 1027, 1060, 1073, 1062, 1083, 1067, 1072,
- 1076, 1082, 1087, 1078, 1102, 1113, 1106, 1115, 1114, 1108,
- 1129, 1103, 1133, 1131, 1152, 1200, 1137, 1141, 1139, 1153,
- 7896, 1166, 1156, 1249, 1163, 1177, 1207, 1110, 1187, 1172,
- 1183, 1197, 1190, 1220, 1205, 1202, 1212, 1250, 1217, 1235,
- 1239, 1242, 1266, 1245, 1243, 1253, 1262, 1269, 1280, 1272,
- 1278, 1298, 1310, 1284, 1286, 1290, 1300, 1316, 1308, 1315,
- 1321, 1305, 1324, 1326, 1338, 1346, 1345, 1351, 1353, 1349,
- 1333, 1343, 1363, 1370, 1372, 1367, 1361, 1373, 1393, 1379,
- 1401, 1380, 1399, 1390, 1388, 1406, 1407, 1413, 1311, 1396,
-
- 1400, 1419, 1417, 1423, 1430, 1420, 1436, 7896, 1451, 1432,
- 1434, 1445, 1440, 1443, 7896, 1456, 1446, 1457, 1461, 1468,
- 1470, 1480, 1472, 1481, 1495, 1482, 1488, 1499, 1496, 1500,
- 1484, 1493, 1520, 1516, 1513, 1525, 1515, 1519, 1565, 1529,
- 1535, 1532, 1526, 1551, 1556, 1563, 1555, 1569, 1559, 1580,
- 1604, 1587, 1602, 1590, 1612, 1594, 1614, 1607, 1608, 1611,
- 1542, 1601, 1628, 1616, 1629, 1630, 1638, 7896, 1642, 1650,
- 1632, 1646, 1647, 1649, 1652, 1655, 1665, 1657, 1667, 1684,
- 1679, 1663, 1669, 1688, 1672, 1689, 1695, 1676, 1697, 1705,
- 1714, 1693, 1717, 1713, 1704, 1719, 1710, 1721, 1734, 1743,
-
- 1718, 1744, 1737, 1732, 1741, 1752, 1731, 1746, 1758, 1748,
- 1759, 1766, 1767, 1760, 1761, 1778, 1777, 1794, 1782, 1795,
- 1785, 1793, 1808, 1787, 1804, 1820, 1807, 1814, 1822, 1827,
- 1833, 1834, 1829, 1824, 1825, 1850, 1837, 1858, 1853, 1851,
- 1856, 1875, 1865, 1870, 1876, 1869, 1863, 1872, 1892, 1883,
- 1896, 1890, 1899, 1912, 1898, 1901, 1902, 1910, 1897, 1900,
- 1913, 1929, 1935, 1930, 1928, 1951, 1943, 1925, 1952, 1934,
- 1956, 1945, 1946, 1948, 1949, 1962, 1961, 1975, 1971, 1972,
- 1976, 1977, 1985, 1990, 1940, 1992, 1988, 1989, 1991, 2003,
- 2002, 2004, 2018, 2019, 2012, 2024, 2037, 2021, 2017, 2045,
-
- 2027, 2039, 2029, 2052, 2055, 2054, 2057, 2066, 2056, 2068,
- 2064, 2076, 2069, 2080, 2089, 2096, 2093, 2095, 2101, 2091,
- 2098, 2087, 2104, 2129, 2113, 2118, 7896, 2115, 2116, 2121,
- 2128, 2135, 2126, 2151, 2142, 2145, 2131, 2139, 2140, 2187,
- 7896, 2148, 7896, 7896, 2153, 7896, 7896, 2174, 2167, 2168,
- 2177, 2185, 2188, 2191, 2193, 2178, 2190, 2236, 2217, 2203,
- 2214, 2220, 2239, 2231, 2246, 2234, 2241, 2249, 2247, 2257,
- 2266, 2276, 2273, 2267, 2284, 2269, 2272, 2282, 2294, 2277,
- 2283, 2300, 2296, 2308, 2280, 2321, 2306, 2330, 7896, 2327,
- 2313, 2336, 2331, 2333, 2329, 2335, 2324, 2340, 2348, 2319,
-
- 2344, 2341, 2365, 2354, 2357, 7896, 2369, 2370, 2375, 2374,
- 2382, 2381, 2377, 2362, 2389, 2384, 2396, 2410, 2371, 2417,
- 7896, 2422, 2394, 2404, 2427, 2408, 2413, 2414, 2416, 2430,
- 2436, 2435, 2440, 2449, 2453, 2455, 2457, 2451, 2459, 2465,
- 2460, 2476, 2475, 2463, 2479, 2484, 2485, 2467, 2487, 2498,
- 2495, 2518, 2497, 2523, 2515, 2501, 2521, 2494, 2508, 2526,
- 2528, 2534, 2512, 2525, 2545, 2531, 2543, 2544, 2554, 2549,
- 2548, 2565, 2566, 2552, 2553, 2572, 2564, 7896, 2558, 2570,
- 7896, 2568, 2581, 2627, 2586, 2594, 2591, 2592, 2608, 2607,
- 2610, 2615, 2614, 2631, 2626, 2619, 2637, 2651, 2655, 2647,
-
- 2641, 2657, 2663, 2650, 2677, 2673, 993, 2681, 2667, 2674,
- 2719, 2668, 2694, 2683, 2679, 2684, 2704, 2695, 2688, 2713,
- 2715, 2714, 2724, 7896, 2710, 2740, 2729, 2722, 2749, 2752,
- 2731, 2744, 2754, 2758, 2769, 2759, 2764, 2773, 2762, 2779,
- 2767, 2776, 2789, 2790, 2786, 2802, 7896, 2791, 7896, 2794,
- 2785, 2805, 2809, 2806, 2817, 2825, 2818, 2836, 2833, 2826,
- 7896, 2831, 2846, 2855, 2840, 2828, 2841, 2844, 2852, 2857,
- 2853, 2858, 2880, 2873, 2860, 2885, 2886, 2877, 2889, 2892,
- 2883, 7896, 2896, 2882, 2900, 2901, 2911, 2905, 2908, 2912,
- 2913, 2917, 2910, 2940, 2921, 2950, 2951, 2942, 2944, 2954,
-
- 2955, 7896, 2938, 2946, 2957, 2960, 2953, 2961, 2965, 2969,
- 2964, 2967, 2978, 3002, 3003, 2986, 2995, 3004, 2988, 2994,
- 2997, 1124, 2992, 3005, 2999, 2998, 7896, 3019, 3016, 61,
- 3006, 3024, 3028, 3037, 3035, 3048, 3029, 3057, 3058, 3054,
- 3061, 3055, 3056, 3064, 3067, 3053, 3073, 3082, 3081, 3074,
- 3077, 3084, 3085, 3087, 3100, 3090, 3126, 7896, 3120, 3117,
- 3125, 3114, 3133, 3116, 3129, 3119, 3135, 3152, 3139, 3149,
- 7896, 3164, 3165, 3151, 3169, 3176, 3166, 3158, 3167, 3185,
- 3178, 3172, 3179, 3196, 3191, 3194, 3193, 3213, 3201, 3202,
- 3205, 3217, 7896, 3112, 3220, 3228, 3221, 3240, 3212, 3259,
-
- 3231, 3242, 3244, 3261, 3285, 3247, 3255, 3238, 3269, 3268,
- 3283, 3280, 3274, 3297, 3310, 3312, 3300, 3289, 3306, 3317,
- 3314, 3316, 3319, 3323, 3321, 3341, 3364, 3358, 1768, 3336,
- 7896, 3348, 3339, 3338, 3360, 3362, 3349, 3365, 3363, 3379,
- 3374, 3375, 3387, 3385, 3398, 3396, 3404, 3390, 3391, 3414,
- 3424, 3412, 3428, 3430, 7896, 3426, 3431, 3415, 3433, 3418,
- 3444, 3446, 3443, 3441, 3445, 3449, 3457, 3461, 3458, 3474,
- 3460, 3465, 7896, 3480, 3476, 3485, 3487, 3492, 3493, 3499,
- 3484, 3503, 3506, 3505, 7896, 3455, 3504, 3510, 3521, 3514,
- 3516, 3517, 3534, 3519, 7896, 3527, 3526, 3543, 3556, 3546,
-
- 7896, 3561, 3544, 3540, 3545, 3551, 3541, 3562, 3555, 3568,
- 3576, 3572, 3569, 3574, 3595, 7896, 3579, 3610, 3589, 3599,
- 3601, 3603, 3596, 3614, 3634, 3616, 3619, 3585, 3627, 3636,
- 3621, 3623, 3635, 3646, 3637, 3652, 3645, 7896, 3654, 3659,
- 3669, 3667, 3672, 3656, 3586, 3673, 3674, 3689, 3691, 3692,
- 3686, 3682, 3681, 3716, 3704, 3701, 3723, 3696, 3719, 3708,
- 3731, 3732, 3744, 3739, 3741, 7896, 3726, 3743, 3745, 3737,
- 3746, 3750, 3768, 3756, 3758, 3753, 3771, 3772, 3770, 3796,
- 3806, 3773, 3803, 3788, 3790, 3785, 3791, 3799, 3811, 3784,
- 3798, 3795, 3821, 3813, 3816, 3820, 3823, 3825, 3818, 3828,
-
- 3838, 3856, 3855, 3848, 3861, 3859, 3863, 3865, 3868, 3866,
- 3894, 7896, 3876, 3874, 3882, 3883, 3870, 3893, 3906, 3903,
- 3908, 3895, 3901, 3897, 3923, 3914, 7896, 3918, 7896, 3910,
- 3927, 3942, 3952, 7896, 3948, 7896, 3946, 3951, 3937, 3939,
- 7896, 3954, 3940, 3947, 3961, 3950, 3964, 3963, 3970, 3975,
- 3979, 3974, 3995, 3986, 3998, 3989, 4005, 4006, 3987, 4008,
- 3997, 4017, 4011, 4020, 4013, 7896, 4029, 4023, 4034, 4032,
- 4035, 4033, 4042, 4059, 4045, 4047, 4044, 4068, 4057, 4061,
- 4076, 4062, 4078, 4087, 7896, 4069, 4093, 4080, 4091, 7896,
- 4096, 4082, 4110, 4112, 4088, 4103, 4104, 4114, 4115, 4120,
-
- 4107, 4146, 4140, 4131, 4141, 4148, 4130, 4142, 4156, 4157,
- 4159, 4165, 4169, 4158, 4143, 4175, 4170, 4178, 4183, 4200,
- 4198, 4204, 4184, 4201, 4209, 4208, 4196, 4192, 4195, 4202,
- 4210, 4220, 4225, 4223, 4226, 4228, 4230, 4233, 7896, 4245,
- 4229, 4253, 4260, 4247, 4250, 4239, 4251, 4259, 4252, 4275,
- 4288, 4276, 7896, 4278, 7896, 4274, 4280, 4284, 4304, 4294,
- 4305, 4312, 4301, 4303, 4311, 4302, 4325, 4317, 4328, 4333,
- 4351, 4323, 4327, 4335, 4338, 4339, 4341, 4346, 7896, 4345,
- 4359, 4375, 4355, 4372, 4374, 4390, 4380, 4369, 4367, 4382,
- 4395, 7896, 4396, 4398, 4393, 4412, 4418, 4416, 4429, 4420,
-
- 7896, 4408, 4417, 4434, 4423, 4437, 7896, 4422, 7896, 4414,
- 4432, 4444, 4445, 4449, 4453, 4455, 4456, 4447, 4464, 4448,
- 4467, 4465, 4473, 4492, 4472, 4480, 7896, 4490, 4481, 4499,
- 4497, 4500, 4504, 4507, 4483, 7896, 4508, 4514, 4518, 4526,
- 4520, 4521, 4528, 4533, 4532, 4534, 4530, 4531, 4525, 4550,
- 4536, 4564, 4556, 4565, 4572, 7896, 4569, 4566, 4584, 4580,
- 4573, 4586, 4579, 4567, 4576, 4590, 4592, 4599, 4596, 4606,
- 4601, 4615, 4612, 4602, 4609, 4627, 4635, 4617, 4631, 4625,
- 4626, 4653, 4639, 4656, 4657, 4643, 4659, 4668, 4651, 4654,
- 4660, 4667, 4679, 4661, 7896, 4681, 4674, 4684, 4678, 4682,
-
- 4689, 4696, 4698, 4701, 4680, 4690, 4709, 4702, 7896, 4726,
- 4704, 4730, 4723, 4724, 4738, 4735, 4728, 4725, 4743, 4737,
- 4753, 4740, 4747, 4755, 4758, 4752, 7896, 7896, 4768, 4767,
- 7896, 4775, 4765, 4777, 4773, 4771, 4780, 4782, 4790, 4793,
- 4785, 7896, 4805, 4798, 4794, 4799, 4802, 4827, 4823, 4825,
- 4815, 4811, 4817, 4822, 4837, 4821, 4829, 4842, 4832, 4833,
- 4847, 4861, 7896, 4848, 4852, 4857, 7896, 4858, 4869, 4870,
- 4874, 4878, 4882, 4891, 4887, 4885, 4897, 4888, 4896, 4899,
- 4895, 4910, 4912, 4894, 4926, 4924, 4920, 4930, 4932, 4940,
- 4946, 4947, 4922, 4933, 4955, 7896, 4944, 4957, 4950, 4939,
-
- 4970, 4954, 4973, 4966, 7896, 4967, 4968, 4975, 7896, 4982,
- 4989, 4969, 4986, 4972, 5003, 4995, 4999, 5002, 5006, 7896,
- 5005, 7896, 5017, 5009, 5022, 7896, 5012, 5013, 5029, 5011,
- 5018, 5036, 5038, 5046, 5033, 5048, 5037, 5039, 5063, 5054,
- 5074, 5062, 7896, 5071, 5060, 5068, 5087, 5070, 5080, 5089,
- 7896, 7896, 5091, 7896, 5090, 5084, 5096, 7896, 5094, 5099,
- 5101, 5105, 5107, 5123, 5124, 5129, 7896, 5126, 5111, 5140,
- 5121, 5134, 5132, 5135, 5142, 5119, 5148, 5159, 7896, 5146,
- 5158, 5176, 5161, 5157, 5180, 5182, 5169, 7896, 5186, 5192,
- 5181, 5190, 5193, 7896, 5202, 7896, 5203, 5213, 5221, 7896,
-
- 5201, 5224, 5205, 5228, 5232, 5230, 5236, 5219, 5227, 5248,
- 5239, 5240, 5257, 7896, 5250, 5256, 5245, 5272, 5261, 5258,
- 5254, 5274, 5280, 5286, 5287, 5277, 5290, 5292, 5299, 5303,
- 5296, 5301, 5332, 5324, 5319, 7896, 5325, 5329, 5335, 7896,
- 5323, 5318, 5341, 5326, 5330, 5327, 5352, 5354, 7896, 5360,
- 5361, 5350, 5371, 7896, 7896, 5378, 7896, 5368, 5362, 5365,
- 5377, 5381, 5383, 5382, 5386, 5387, 5411, 5389, 5407, 5427,
- 5424, 5428, 5422, 5418, 5410, 7896, 7896, 5431, 5435, 5432,
- 5439, 5442, 5444, 5446, 5433, 5460, 5447, 5440, 5467, 5449,
- 7896, 5474, 5459, 5476, 7896, 5457, 5484, 5458, 5475, 5488,
-
- 5477, 5494, 5496, 5508, 5498, 5492, 5500, 5502, 5509, 5525,
- 5518, 7896, 5523, 5515, 5519, 5520, 5524, 5535, 5539, 5532,
- 5542, 7896, 5541, 5549, 5561, 5559, 5553, 5565, 5573, 5577,
- 5579, 5569, 5576, 5581, 5586, 5585, 5588, 7896, 5592, 5587,
- 5590, 5606, 5602, 5621, 5604, 5626, 5609, 5628, 5615, 5632,
- 5635, 5624, 5620, 7896, 5636, 5640, 5625, 5643, 5631, 5650,
- 5657, 5645, 5664, 5655, 5654, 5659, 5675, 7896, 5665, 5666,
- 5679, 5676, 5690, 5681, 5682, 5683, 7896, 5695, 5684, 5692,
- 5701, 5687, 5717, 5711, 5721, 5709, 7896, 5722, 5725, 5727,
- 5708, 5724, 5741, 5738, 7896, 5748, 5750, 5731, 5505, 5742,
-
- 5744, 5761, 5747, 5754, 5769, 5770, 5774, 5775, 5771, 5781,
- 5782, 7896, 5780, 7896, 5794, 5790, 5792, 5813, 5804, 7896,
- 5807, 5809, 5815, 5801, 5811, 7896, 5817, 5819, 5818, 5827,
- 7896, 5834, 5843, 5838, 5845, 5832, 5854, 7896, 5863, 5864,
- 5866, 5873, 5874, 5876, 5865, 5877, 5868, 5869, 5870, 5885,
- 7896, 5884, 5896, 5887, 5897, 5900, 5898, 5904, 7896, 5912,
- 5901, 5910, 5905, 5916, 5913, 5929, 5927, 5932, 5923, 7896,
- 5926, 5944, 5956, 5947, 5950, 7896, 7896, 5948, 5957, 5960,
- 5940, 5969, 7896, 5968, 5978, 5974, 5964, 5971, 7896, 7896,
- 5981, 7896, 5976, 7896, 5988, 7896, 7896, 5987, 5995, 6004,
-
- 7896, 6006, 7896, 5983, 6008, 5996, 5989, 6013, 7896, 5998,
- 6014, 6020, 7896, 6015, 6033, 6016, 6022, 7896, 6030, 6027,
- 6032, 7896, 6047, 6052, 6051, 6053, 6060, 6041, 6049, 6045,
- 6061, 6067, 6069, 6070, 6071, 6072, 6068, 6080, 6090, 6088,
- 6089, 6082, 6087, 6104, 6105, 6106, 6098, 6112, 6108, 6114,
- 6116, 6118, 6122, 6115, 6126, 6130, 6127, 6131, 6142, 6135,
- 6151, 6144, 6149, 7896, 6148, 6146, 6147, 6169, 6167, 6175,
- 6179, 6185, 6188, 6189, 7896, 6191, 7896, 6197, 6182, 6193,
- 6186, 7896, 6183, 6196, 6199, 6202, 6219, 6213, 6216, 6235,
- 7896, 6237, 6217, 6229, 6242, 6245, 6232, 6240, 6244, 6253,
-
- 6252, 6255, 6259, 6257, 6247, 6254, 6117, 6265, 6272, 6269,
- 6284, 6271, 6274, 6285, 6302, 6293, 6303, 6306, 7896, 6300,
- 7896, 6298, 6309, 6315, 6318, 7896, 7896, 6320, 6321, 6322,
- 6311, 6323, 6339, 6348, 7896, 6329, 6350, 6343, 6345, 7896,
- 6349, 6353, 6357, 7896, 6347, 6360, 6363, 6361, 6378, 6377,
- 6365, 7896, 7896, 7896, 7896, 6390, 6371, 6381, 6384, 6386,
- 6392, 6399, 6387, 7896, 7896, 7896, 6398, 6409, 6407, 6419,
- 6413, 6425, 7896, 6416, 6410, 6430, 6426, 6438, 6444, 6440,
- 6443, 6437, 6445, 6450, 6446, 6460, 6454, 6471, 6456, 6466,
- 7896, 7896, 6467, 6479, 6481, 6491, 6487, 6490, 6494, 6493,
-
- 6496, 6500, 6489, 6502, 6507, 6503, 7896, 6508, 6522, 7896,
- 7896, 6521, 6527, 6520, 6528, 6524, 6534, 6544, 6537, 7896,
- 7896, 6531, 6536, 6547, 6557, 6548, 6553, 6554, 6576, 6559,
- 7896, 6564, 7896, 6565, 6583, 6582, 6593, 6590, 6589, 6594,
- 7896, 6586, 6588, 7896, 6596, 6584, 6592, 7896, 6603, 6602,
- 6608, 7896, 6618, 7896, 6632, 7896, 6613, 6641, 7896, 6617,
- 6638, 6642, 6643, 6644, 6635, 7896, 6628, 6649, 6650, 6652,
- 6657, 6653, 6636, 6668, 6661, 6658, 6663, 7896, 7896, 6691,
- 6660, 6669, 6673, 6686, 6702, 6676, 6694, 6704, 7896, 7896,
- 6700, 7896, 6699, 6703, 7896, 6687, 6708, 6719, 6717, 6697,
-
- 6720, 6727, 6723, 6724, 6744, 6753, 6738, 6754, 6758, 6760,
- 6765, 6729, 6764, 6756, 6747, 6768, 6770, 6774, 7896, 6762,
- 6772, 6780, 7896, 6778, 6799, 6808, 6804, 7896, 6801, 7896,
- 6793, 6812, 6814, 6807, 6800, 6819, 6817, 6813, 7896, 7896,
- 7896, 7896, 6823, 6829, 7896, 6839, 6840, 7896, 7896, 6826,
- 6845, 6835, 7896, 6846, 7896, 6838, 7896, 6856, 6862, 6860,
- 7896, 6865, 6867, 7896, 6864, 6876, 6877, 6875, 6873, 6880,
- 6896, 7896, 6885, 6900, 6903, 6906, 6891, 6889, 6912, 6895,
- 6919, 6904, 6915, 7896, 6922, 6923, 6925, 7896, 6921, 6930,
- 6934, 6949, 6942, 6939, 6935, 6950, 6959, 6957, 6960, 6944,
-
- 7896, 6967, 6973, 7896, 6968, 7896, 6975, 6972, 6974, 7896,
- 6992, 6976, 6970, 6985, 7896, 6997, 6991, 7896, 7002, 6986,
- 7009, 7011, 6994, 7026, 7013, 7010, 7020, 7015, 7023, 7017,
- 7025, 7032, 7896, 7896, 7896, 7034, 7031, 7053, 7056, 7059,
- 7068, 7047, 7896, 7064, 7066, 7048, 7073, 7070, 7076, 7896,
- 7077, 7063, 7072, 7896, 7079, 7084, 7080, 7091, 7096, 7102,
- 7110, 7113, 7111, 7896, 7117, 7896, 7896, 7100, 7896, 7098,
- 7121, 7896, 7124, 7112, 7114, 7127, 7130, 7123, 7128, 7896,
- 7896, 7131, 7896, 7135, 7138, 7150, 7148, 7159, 7161, 7896,
- 7144, 7147, 7163, 7158, 7172, 7896, 7165, 7157, 7160, 7162,
-
- 7183, 7186, 7194, 7177, 7191, 7896, 7896, 7188, 7193, 7896,
- 7896, 7214, 7216, 7213, 7896, 7896, 7896, 7219, 7896, 7222,
- 7228, 7220, 7896, 7230, 7218, 7223, 7896, 7226, 7232, 7896,
- 7896, 7227, 7238, 7233, 7896, 7244, 7243, 7255, 7266, 7267,
- 7253, 7269, 7264, 7277, 7283, 7259, 7270, 7260, 7287, 7293,
- 7280, 7288, 7297, 7896, 7896, 7290, 7896, 7896, 7305, 7306,
- 7309, 7896, 7304, 7316, 7301, 7896, 7318, 7307, 7311, 7326,
- 7315, 7335, 7896, 7896, 7319, 7336, 7325, 7340, 7329, 7896,
- 7352, 7349, 7344, 7354, 7342, 7357, 7356, 7896, 7350, 7896,
- 7896, 7896, 7896, 7367, 7896, 7360, 7896, 7366, 7369, 7371,
-
- 7376, 7896, 7378, 7384, 7399, 7405, 7393, 7409, 7400, 7387,
- 7394, 7403, 7398, 7414, 7417, 7422, 7896, 7431, 7424, 7434,
- 7447, 7451, 7448, 7453, 7435, 7437, 7456, 7450, 7458, 7441,
- 7461, 7465, 7473, 7469, 7467, 7472, 7896, 7480, 7896, 7479,
- 7896, 7896, 7471, 7500, 7494, 7485, 7478, 7513, 7496, 7498,
- 7490, 7515, 7896, 7499, 7506, 7526, 7896, 7512, 7529, 7516,
- 7528, 7531, 7533, 7540, 7543, 7896, 7536, 7546, 7549, 7559,
- 7555, 7550, 7561, 7569, 7575, 7568, 7588, 7579, 7585, 7896,
- 7586, 7570, 7591, 7581, 7601, 7599, 7602, 7592, 7603, 7896,
- 7609, 7625, 7617, 7614, 7616, 7611, 7638, 7618, 7627, 7896,
-
- 7629, 7641, 7644, 7645, 7652, 7654, 7650, 7651, 7658, 7669,
- 7673, 7676, 7680, 7681, 7664, 7684, 7679, 7896, 7692, 7685,
- 7896, 7690, 7694, 7686, 7701, 7708, 7896, 7718, 7710, 7711,
- 7722, 7724, 7726, 7896, 7727, 7734, 7732, 7896, 7735, 7896,
- 7896, 7736, 7725, 7745, 7742, 7743, 7896, 7896, 7896, 7804,
- 7811, 7818, 7825, 7832, 83, 7839, 7846, 7853, 7860, 7867,
- 7874, 7881, 7888
+ 313, 271, 365, 382, 296, 327, 396, 392, 381, 423,
+
+ 411, 386, 420, 428, 417, 419, 444, 317, 427, 432,
+ 452, 453, 456, 457, 458, 472, 462, 463, 466, 483,
+ 479, 478, 504, 485, 212, 499, 514, 501, 500, 517,
+ 512, 521, 545, 528, 525, 538, 543, 546, 539, 190,
+ 164, 138, 231, 122, 590, 158, 79, 277, 66, 598,
+ 602, 0, 572, 571, 591, 579, 586, 596, 594, 599,
+ 589, 595, 609, 592, 606, 645, 618, 620, 629, 340,
+ 651, 695, 647, 634, 650, 657, 637, 638, 656, 659,
+ 661, 544, 676, 685, 642, 687, 696, 719, 702, 713,
+ 678, 407, 729, 743, 718, 721, 740, 756, 723, 758,
+
+ 727, 760, 763, 754, 759, 767, 742, 768, 753, 769,
+ 766, 786, 788, 783, 787, 785, 802, 790, 812, 799,
+ 814, 801, 827, 811, 818, 834, 826, 832, 842, 825,
+ 845, 837, 841, 850, 617, 847, 861, 860, 843, 868,
+ 863, 864, 859, 876, 880, 874, 886, 889, 893, 894,
+ 909, 890, 900, 901, 904, 903, 908, 913, 912, 920,
+ 928, 173, 916, 936, 943, 932, 935, 949, 947, 945,
+ 958, 953, 962, 963, 971, 978, 968, 979, 973, 966,
+ 970, 980, 989, 990, 1000, 992, 1004, 994, 1013, 1005,
+ 1017, 1021, 1009, 1019, 1026, 1057, 1015, 1007, 1040, 1058,
+
+ 1051, 1030, 1044, 1084, 668, 1065, 1080, 1067, 1053, 1089,
+ 784, 1094, 1090, 1093, 1105, 1103, 1104, 1092, 1107, 1078,
+ 1109, 1128, 1143, 1135, 1136, 1148, 1130, 1163, 1137, 1158,
+ 1150, 1149, 1186, 1234, 1145, 1167, 1176, 1181, 1173, 8293,
+ 1198, 1183, 1283, 1204, 1193, 1232, 1206, 1215, 1221, 1239,
+ 1229, 1222, 1203, 1225, 1249, 1231, 1284, 1220, 1267, 1273,
+ 1274, 1300, 1276, 1265, 1303, 1301, 1296, 1292, 1280, 1309,
+ 1322, 1312, 1342, 1323, 1329, 1330, 1333, 1335, 1348, 1349,
+ 1350, 1339, 1344, 1365, 1366, 1369, 1378, 1379, 1362, 1386,
+ 1382, 1402, 1380, 1393, 1408, 1411, 1403, 1418, 1409, 1426,
+
+ 1420, 1436, 1407, 1417, 1425, 1430, 1427, 1450, 1460, 1429,
+ 1445, 1444, 1454, 1467, 1471, 1464, 1472, 1474, 1459, 1482,
+ 8293, 1484, 1487, 1496, 1486, 1497, 1493, 8293, 1498, 1499,
+ 1501, 1447, 1512, 1532, 1524, 1520, 1522, 1541, 1535, 1537,
+ 1557, 1536, 1549, 1531, 1544, 1562, 1564, 1558, 1567, 1563,
+ 1551, 1561, 1606, 1583, 1571, 1600, 1589, 1601, 1611, 1631,
+ 1628, 1618, 1621, 1642, 1661, 1630, 1657, 1645, 1634, 1664,
+ 1649, 1670, 1662, 1663, 1667, 1680, 1678, 1681, 1676, 1687,
+ 1695, 1690, 8293, 1702, 1712, 1592, 1703, 1704, 1701, 1707,
+ 1709, 1714, 1731, 1727, 1723, 1736, 1718, 1754, 1741, 1760,
+
+ 1745, 1758, 1742, 1749, 1765, 1763, 1780, 1759, 1778, 1781,
+ 1774, 1777, 1784, 1782, 1795, 1803, 1779, 1807, 1808, 1793,
+ 1806, 1815, 1819, 1802, 1809, 1827, 1820, 1834, 1826, 1843,
+ 1829, 1837, 1845, 1846, 1854, 1841, 1868, 1856, 1858, 1873,
+ 1853, 1864, 1887, 1883, 1885, 1894, 1897, 1896, 1903, 1891,
+ 1886, 1909, 1914, 1906, 1912, 1917, 1913, 1918, 1926, 1919,
+ 1936, 1955, 1945, 1949, 1953, 1957, 1940, 1946, 1966, 1963,
+ 1970, 1971, 1972, 1986, 1975, 1978, 1987, 1976, 1973, 1985,
+ 2003, 1993, 2014, 1998, 2012, 2027, 2015, 1999, 2026, 2013,
+ 2029, 2018, 2030, 2034, 2041, 2042, 2051, 2043, 2040, 2050,
+
+ 2056, 2046, 2053, 2054, 2067, 2089, 2074, 2073, 2076, 2077,
+ 2086, 2079, 2091, 2084, 2101, 2106, 2094, 2104, 2110, 2111,
+ 2115, 2113, 2131, 2123, 2124, 2132, 2137, 2150, 2141, 2151,
+ 2157, 2142, 2154, 2140, 2159, 2165, 2167, 2175, 2182, 2186,
+ 2177, 2184, 2181, 2183, 2178, 2195, 2218, 2198, 2194, 8293,
+ 2209, 2220, 2211, 2210, 2217, 2207, 2215, 2221, 2235, 2242,
+ 2234, 2226, 2230, 2275, 8293, 2248, 8293, 8293, 2247, 8293,
+ 8293, 2256, 2262, 2255, 2269, 2239, 2285, 2261, 2283, 2279,
+ 2288, 2290, 2335, 2298, 2295, 2300, 2304, 2330, 2305, 2331,
+ 2322, 2319, 2340, 2343, 2349, 2346, 2357, 2360, 2358, 2367,
+
+ 2362, 2364, 2380, 2389, 2378, 2381, 2391, 2379, 2384, 2399,
+ 2405, 2398, 2401, 2434, 8293, 2408, 2417, 2419, 2422, 2436,
+ 2430, 2431, 2435, 2439, 2423, 2440, 2444, 2446, 2442, 2450,
+ 2448, 2457, 2460, 8293, 2467, 2471, 2477, 2472, 2485, 2484,
+ 2483, 2466, 2494, 2475, 2486, 2487, 2501, 2516, 8293, 2518,
+ 2526, 2508, 2528, 2509, 2511, 2514, 2515, 2524, 2539, 2536,
+ 2545, 2547, 2543, 2458, 2541, 2555, 2554, 2564, 2563, 2566,
+ 2574, 2583, 2568, 2575, 2577, 2590, 2589, 2581, 2593, 2594,
+ 2592, 2599, 2604, 2602, 2623, 2628, 2629, 2608, 2625, 2638,
+ 2611, 2641, 2639, 2644, 2630, 2640, 2649, 2631, 2646, 2659,
+
+ 2656, 2662, 2664, 2678, 2680, 2663, 2667, 2688, 2665, 8293,
+ 2671, 2683, 8293, 2676, 2692, 2738, 2698, 2717, 2703, 2700,
+ 2704, 2724, 2719, 2723, 2730, 2725, 2758, 2746, 2763, 2756,
+ 2764, 2770, 2766, 2715, 2768, 2772, 2706, 2777, 2784, 1156,
+ 2793, 2781, 2773, 2783, 2830, 2800, 2808, 2802, 2806, 2814,
+ 2819, 2826, 2833, 2835, 2840, 2821, 2848, 8293, 2828, 2861,
+ 2851, 2853, 2842, 2863, 2865, 2873, 2876, 2871, 2877, 2880,
+ 2875, 2891, 2879, 2901, 2890, 2893, 2904, 2916, 2902, 2907,
+ 2906, 8293, 2903, 8293, 2922, 2918, 2920, 2927, 2926, 2933,
+ 2945, 2951, 2952, 2946, 2958, 2963, 2949, 8293, 2953, 2992,
+
+ 2966, 2961, 2981, 2954, 2980, 2986, 2985, 3007, 2983, 3009,
+ 3002, 2990, 3001, 3010, 3004, 3013, 3016, 3012, 8293, 3008,
+ 3028, 3040, 3054, 3023, 3043, 3035, 3055, 3056, 3041, 3042,
+ 3045, 3060, 3051, 3071, 3079, 3070, 3072, 3084, 3081, 8293,
+ 3076, 3073, 3100, 3091, 3101, 3098, 3103, 3087, 3106, 3110,
+ 3104, 3099, 3123, 3119, 3124, 3127, 3114, 3140, 3143, 3128,
+ 3134, 3137, 410, 3139, 3144, 3133, 3156, 8293, 3150, 3158,
+ 61, 3159, 3163, 3170, 3183, 3180, 3168, 3167, 3164, 3197,
+ 3193, 3199, 3206, 3190, 3205, 3207, 3203, 3194, 3195, 3208,
+ 3217, 8293, 3227, 3228, 3225, 3222, 3235, 3231, 3260, 8293,
+
+ 3255, 3248, 3250, 3245, 3258, 3263, 3262, 3268, 3272, 3288,
+ 3283, 3277, 8293, 3297, 3300, 3302, 3289, 3306, 3308, 3304,
+ 3299, 3310, 3303, 3316, 3327, 3337, 3333, 3329, 3326, 3332,
+ 3340, 3336, 3338, 3341, 3353, 8293, 3371, 3343, 3368, 3359,
+ 3377, 3369, 3392, 3364, 3380, 3384, 3389, 3420, 3386, 3391,
+ 3407, 3404, 3388, 3413, 3417, 3409, 3418, 3434, 3421, 3436,
+ 3448, 3438, 3441, 3445, 3447, 3452, 3462, 3455, 3482, 3488,
+ 3466, 3483, 3507, 3490, 1584, 3481, 8293, 3493, 3480, 3484,
+ 3503, 3501, 3477, 3508, 3517, 3524, 3518, 3519, 3528, 3535,
+ 3542, 3539, 3532, 3543, 3546, 3551, 3505, 3552, 3557, 3570,
+
+ 8293, 3574, 3576, 3563, 3566, 3585, 3569, 3586, 3590, 3587,
+ 3579, 3584, 3595, 3601, 3604, 3603, 3610, 3611, 3622, 3608,
+ 8293, 3630, 3614, 3631, 3634, 3617, 3635, 3638, 3644, 3641,
+ 3637, 3648, 3652, 3656, 8293, 3679, 3681, 3672, 3683, 3671,
+ 3665, 3674, 3687, 3668, 8293, 3670, 3666, 3696, 3699, 3694,
+ 8293, 3707, 3704, 3693, 3710, 3705, 3711, 3708, 3721, 3678,
+ 3715, 3720, 3728, 3716, 3745, 8293, 3734, 3759, 3740, 3735,
+ 3749, 3751, 3748, 3755, 3783, 3767, 3760, 3784, 3777, 3778,
+ 3776, 3772, 3775, 3801, 3794, 3802, 3797, 8293, 3799, 3796,
+ 3809, 3818, 3826, 3820, 3816, 3836, 3825, 3823, 3834, 3840,
+
+ 3841, 3832, 3844, 3853, 3861, 3852, 3863, 3857, 3859, 3867,
+ 3868, 3876, 3882, 3896, 3891, 3897, 8293, 3902, 3900, 3901,
+ 3887, 3893, 3906, 3908, 3911, 3916, 3914, 3925, 3899, 3926,
+ 3951, 3955, 3927, 3943, 3937, 3939, 3950, 3957, 3941, 3949,
+ 3961, 3966, 3968, 3954, 3970, 3948, 3984, 3996, 3982, 3983,
+ 3985, 3986, 3989, 3971, 3993, 3998, 4011, 4006, 4015, 4016,
+ 4020, 4009, 4025, 4026, 4038, 8293, 4032, 4031, 4035, 4047,
+ 4027, 4045, 4051, 4064, 4065, 4059, 4058, 4060, 4075, 4081,
+ 8293, 4070, 8293, 4072, 4084, 4097, 4099, 4085, 8293, 4100,
+ 8293, 4101, 4109, 4094, 4102, 8293, 4111, 4103, 4108, 4112,
+
+ 4107, 4121, 4124, 4128, 4132, 4151, 4129, 4138, 4136, 4156,
+ 4140, 4144, 4159, 4160, 4158, 4168, 4170, 4165, 4155, 4183,
+ 4192, 4179, 4195, 8293, 4176, 4187, 4193, 4189, 4197, 4188,
+ 4217, 4221, 4210, 4219, 4220, 4223, 4222, 4231, 4236, 4248,
+ 4232, 4256, 8293, 4240, 4261, 4243, 4258, 8293, 4260, 4247,
+ 4272, 4275, 4263, 4266, 4267, 4283, 4279, 4285, 4281, 4311,
+ 4300, 4291, 4306, 4316, 4295, 4322, 4310, 4326, 4318, 4333,
+ 4335, 4327, 4323, 4337, 4338, 4346, 4348, 4340, 4344, 4363,
+ 4345, 4347, 4364, 4376, 4372, 4361, 4360, 4365, 4367, 4375,
+ 4371, 4373, 4406, 4391, 4394, 4395, 4396, 8293, 4405, 4399,
+
+ 4410, 4423, 4412, 4416, 4401, 4402, 4422, 4433, 4428, 4444,
+ 4418, 8293, 4449, 8293, 4438, 4465, 4440, 4459, 4454, 4452,
+ 4471, 4472, 4460, 4458, 4479, 4483, 4475, 4462, 4498, 4489,
+ 4500, 4504, 4487, 4503, 4497, 4505, 4501, 4506, 4510, 4511,
+ 8293, 4516, 4524, 4521, 4536, 4545, 4550, 4556, 4549, 4546,
+ 4538, 4548, 4567, 8293, 4560, 4565, 4562, 4529, 4575, 4573,
+ 4595, 4590, 8293, 4577, 4585, 4600, 4593, 4605, 4615, 8293,
+ 4601, 8293, 4584, 4594, 4610, 4607, 4612, 4631, 4624, 4632,
+ 4629, 4620, 4636, 4635, 4633, 4637, 4630, 4641, 4666, 4645,
+ 4658, 4651, 8293, 4670, 4659, 4680, 4678, 4682, 4685, 4686,
+
+ 4665, 8293, 4676, 4689, 4681, 4692, 4701, 4698, 4707, 4716,
+ 4712, 4714, 4710, 4713, 4735, 4730, 4718, 4732, 4744, 4743,
+ 4749, 8293, 4747, 4745, 4737, 4755, 4756, 4759, 4763, 4757,
+ 4753, 4740, 4760, 4784, 4782, 4780, 4779, 4793, 4788, 4776,
+ 4785, 4799, 4806, 4787, 4803, 4801, 4809, 4811, 4818, 4830,
+ 4839, 4841, 4823, 4842, 4845, 4826, 4827, 4851, 4856, 4857,
+ 4852, 8293, 4867, 4853, 4868, 4840, 4861, 4876, 4880, 4882,
+ 4887, 4866, 4869, 4890, 4877, 8293, 4910, 4888, 4909, 4907,
+ 4904, 4895, 4903, 4905, 4914, 4920, 4916, 4922, 4924, 4926,
+ 4939, 4954, 4936, 8293, 8293, 4955, 4932, 4949, 8293, 4951,
+
+ 4943, 4966, 4965, 4947, 4962, 4972, 4971, 4970, 4985, 4974,
+ 4978, 8293, 4983, 4995, 4982, 5001, 5016, 5019, 5003, 5012,
+ 5009, 5004, 5006, 5014, 5029, 5020, 5022, 5033, 5042, 5030,
+ 5039, 5051, 8293, 5043, 5045, 5047, 8293, 5049, 5069, 5052,
+ 5074, 5040, 5076, 5077, 5084, 5065, 5085, 5075, 5082, 5096,
+ 5097, 5102, 5091, 5100, 5108, 5118, 5121, 8293, 5113, 5120,
+ 5110, 5128, 5134, 5156, 5143, 5144, 5115, 5145, 5142, 5158,
+ 8293, 5147, 5160, 5153, 5148, 5167, 5157, 5171, 5166, 8293,
+ 5170, 5169, 5184, 8293, 5187, 5175, 5195, 5199, 5181, 5209,
+ 5204, 5202, 5206, 5211, 8293, 5208, 8293, 5215, 5229, 5222,
+
+ 8293, 5231, 5232, 5219, 5221, 5245, 5225, 5248, 5255, 5240,
+ 5252, 5246, 5247, 5258, 5271, 5268, 5251, 8293, 5282, 5259,
+ 5275, 5289, 5287, 5285, 5278, 5295, 5288, 8293, 8293, 5306,
+ 8293, 5304, 5292, 5302, 8293, 5298, 5316, 5325, 5315, 5335,
+ 5337, 5338, 5333, 8293, 5340, 5324, 5345, 5349, 5327, 5343,
+ 5357, 5365, 5352, 5366, 5380, 8293, 5363, 5375, 5353, 5370,
+ 5371, 5392, 5384, 5374, 8293, 5398, 5404, 5382, 5407, 5410,
+ 8293, 5411, 8293, 5405, 5415, 5416, 5427, 5421, 8293, 5433,
+ 5422, 5441, 5419, 5447, 5451, 5454, 5456, 5439, 5438, 5469,
+ 5465, 5460, 5463, 8293, 5472, 5462, 5475, 5481, 5478, 5474,
+
+ 5500, 5499, 5505, 5498, 5510, 5501, 5511, 5515, 5508, 5536,
+ 5520, 5502, 5524, 5537, 5540, 8293, 5541, 5549, 5550, 8293,
+ 5543, 5538, 5551, 5530, 5544, 5566, 5570, 5547, 5575, 8293,
+ 5579, 5580, 5574, 5593, 5595, 5587, 8293, 8293, 5597, 8293,
+ 5599, 5581, 5613, 5611, 5585, 5606, 5609, 5625, 5635, 5620,
+ 5637, 5640, 5631, 5651, 5653, 5654, 5647, 5649, 5643, 8293,
+ 8293, 5659, 5668, 5664, 5660, 5674, 5670, 5661, 5658, 5684,
+ 5691, 5693, 5698, 5704, 8293, 5701, 5687, 5708, 8293, 5688,
+ 5717, 5700, 5709, 5721, 5711, 5725, 5733, 5738, 5728, 5732,
+ 5719, 5735, 5739, 5749, 5744, 5755, 5761, 8293, 5759, 5756,
+
+ 5760, 5766, 5753, 5771, 5770, 5780, 5774, 8293, 5781, 5778,
+ 5800, 5786, 5797, 5801, 5808, 5810, 5812, 5805, 5802, 5824,
+ 5822, 5821, 5828, 8293, 5835, 5823, 5826, 5832, 5845, 5854,
+ 5837, 5857, 5847, 5863, 5851, 5864, 5868, 5875, 5862, 5870,
+ 5871, 5861, 8293, 5872, 5882, 5867, 5887, 5883, 5894, 5902,
+ 5907, 5911, 5897, 5903, 5898, 5915, 8293, 5899, 5910, 5921,
+ 5927, 5920, 5922, 5924, 5925, 8293, 5953, 5935, 5949, 5943,
+ 5938, 5958, 5952, 5967, 5951, 8293, 5960, 5968, 5970, 5965,
+ 5976, 5980, 5988, 5978, 8293, 6003, 6005, 5991, 5982, 5992,
+ 6016, 6007, 6009, 5996, 6011, 6019, 6017, 6018, 6020, 6033,
+
+ 6036, 6030, 6057, 6051, 8293, 6038, 8293, 6052, 6063, 6067,
+ 6065, 6048, 8293, 6056, 6060, 6059, 6081, 6062, 8293, 6088,
+ 6086, 6089, 6093, 8293, 6103, 6107, 6090, 6097, 6080, 6113,
+ 8293, 6111, 6115, 6116, 6124, 6127, 6125, 6130, 6134, 6137,
+ 6132, 6128, 6152, 8293, 6154, 6157, 6150, 6151, 6159, 6143,
+ 6161, 6166, 6162, 8293, 6164, 6174, 6177, 6184, 6178, 6179,
+ 6195, 6208, 6201, 6192, 8293, 6196, 6209, 6213, 6221, 6215,
+ 8293, 8293, 6204, 6219, 6227, 6206, 6237, 8293, 6239, 6254,
+ 6240, 6250, 6242, 8293, 8293, 6253, 8293, 6244, 8293, 6241,
+ 6245, 8293, 8293, 6258, 6247, 6270, 6271, 6260, 8293, 6283,
+
+ 8293, 6289, 6285, 6277, 6269, 6287, 8293, 6280, 6282, 6295,
+ 8293, 6296, 6306, 6290, 6300, 8293, 6311, 6309, 6307, 8293,
+ 6323, 6329, 6326, 6332, 6338, 6316, 6327, 6319, 6342, 6344,
+ 6345, 6348, 6349, 6350, 6343, 6355, 6372, 6377, 6367, 6368,
+ 6363, 6365, 6384, 6366, 6386, 6391, 6387, 6389, 6390, 6403,
+ 6376, 6404, 6399, 6400, 6402, 6412, 6406, 6414, 6422, 6413,
+ 6424, 6442, 6436, 6429, 6439, 8293, 6440, 6428, 6430, 6449,
+ 6446, 6463, 6469, 6475, 6478, 6481, 8293, 6483, 8293, 6485,
+ 6470, 6480, 6473, 8293, 6479, 6471, 6495, 6494, 6511, 6503,
+ 6506, 6526, 8293, 6504, 6507, 6516, 6528, 8293, 6530, 6532,
+
+ 6518, 6519, 6533, 6534, 6544, 6547, 6542, 6551, 6548, 6568,
+ 6508, 6554, 6564, 6561, 6577, 6563, 6566, 6589, 6571, 6584,
+ 6585, 6596, 8293, 6598, 8293, 6592, 6599, 6593, 6588, 6597,
+ 6607, 6603, 8293, 8293, 6611, 6630, 6636, 6624, 6619, 6640,
+ 6638, 8293, 6626, 6643, 6648, 6646, 8293, 6635, 6651, 6650,
+ 8293, 6649, 6652, 6653, 6656, 6676, 6673, 6684, 8293, 8293,
+ 8293, 8293, 6686, 6667, 6690, 6678, 6679, 6688, 6693, 6695,
+ 6694, 8293, 6696, 8293, 8293, 6699, 6705, 6711, 6722, 6720,
+ 6714, 6721, 6726, 8293, 6724, 6735, 6737, 6729, 6743, 6745,
+ 6751, 6741, 6732, 6747, 6768, 6770, 6778, 6761, 6777, 6780,
+
+ 6781, 8293, 8293, 6771, 6783, 6786, 6791, 6785, 6788, 6792,
+ 6795, 6796, 6805, 6806, 6816, 6820, 6815, 8293, 6826, 6832,
+ 8293, 6817, 8293, 6833, 6834, 6818, 6837, 6840, 6846, 6856,
+ 6859, 8293, 8293, 6851, 6852, 6861, 6869, 6862, 6865, 6860,
+ 6871, 6866, 8293, 6876, 8293, 6884, 6886, 6894, 6889, 6905,
+ 6910, 6911, 6909, 6907, 6917, 8293, 6916, 6906, 8293, 6920,
+ 6912, 6908, 8293, 6927, 6929, 6930, 8293, 6940, 8293, 6945,
+ 8293, 6938, 6964, 8293, 6941, 6947, 8293, 6960, 6962, 6963,
+ 6956, 8293, 6952, 8293, 6951, 6973, 6975, 6977, 6965, 6981,
+ 6982, 6983, 6972, 6987, 6984, 6990, 8293, 8293, 7020, 6989,
+
+ 6998, 6999, 7000, 7010, 7004, 7026, 7023, 8293, 8293, 7027,
+ 8293, 7016, 7031, 8293, 7011, 7037, 7048, 7044, 7017, 7021,
+ 7028, 7052, 7051, 7064, 7082, 7054, 7060, 7079, 7083, 7085,
+ 7087, 7058, 7089, 7075, 7077, 7081, 7078, 7099, 8293, 7096,
+ 7115, 7102, 8293, 7124, 7121, 7127, 7126, 8293, 7132, 7125,
+ 7129, 7130, 8293, 7117, 7133, 7136, 7141, 7122, 7174, 7157,
+ 7162, 8293, 8293, 8293, 8293, 7172, 7155, 8293, 7166, 7164,
+ 8293, 8293, 7153, 7177, 7161, 7184, 8293, 7180, 8293, 7169,
+ 8293, 7182, 7189, 7205, 7201, 8293, 7207, 7214, 8293, 7195,
+ 7220, 7223, 7216, 7204, 7208, 7221, 8293, 7234, 7231, 7233,
+
+ 7230, 7222, 7235, 7239, 7228, 7264, 7243, 7269, 8293, 7253,
+ 7259, 7255, 8293, 7276, 8293, 7265, 7266, 7273, 7280, 7271,
+ 7290, 7286, 7283, 7258, 7281, 7293, 8293, 7297, 7318, 8293,
+ 7298, 8293, 7322, 8293, 7307, 7310, 7311, 7324, 8293, 7328,
+ 7313, 7308, 7325, 8293, 7340, 7316, 8293, 7337, 7339, 7332,
+ 7347, 7343, 7362, 7364, 7356, 7352, 7353, 7357, 7366, 7367,
+ 7373, 7374, 7384, 8293, 8293, 8293, 7370, 7386, 7391, 7395,
+ 7393, 7403, 7389, 8293, 7405, 7412, 7400, 7420, 7408, 7421,
+ 8293, 7424, 7409, 7422, 8293, 7429, 7438, 7435, 7427, 7437,
+ 7443, 7445, 7450, 7452, 8293, 7459, 8293, 8293, 7444, 8293,
+
+ 7439, 7451, 7453, 7480, 8293, 7460, 7462, 7465, 7474, 7482,
+ 7472, 7488, 8293, 8293, 7494, 8293, 7495, 7492, 7484, 7479,
+ 7501, 7496, 7505, 7509, 8293, 7506, 7507, 7511, 7517, 7524,
+ 8293, 7531, 7518, 7515, 7528, 7532, 7533, 7551, 7525, 7556,
+ 8293, 8293, 7543, 7552, 8293, 8293, 7547, 7567, 7576, 8293,
+ 8293, 8293, 7571, 8293, 7572, 7583, 7586, 7588, 7585, 8293,
+ 7591, 7575, 7587, 8293, 7592, 7600, 8293, 8293, 7579, 7598,
+ 7607, 7599, 7594, 8293, 7612, 7613, 7616, 7623, 7629, 7618,
+ 7632, 7639, 7646, 7647, 7627, 7638, 7634, 7657, 7658, 7649,
+ 7667, 7664, 8293, 8293, 7670, 8293, 8293, 7671, 7672, 7677,
+
+ 7681, 7683, 7686, 7687, 8293, 7679, 7692, 7673, 8293, 7682,
+ 7702, 7690, 7694, 7691, 7710, 7697, 7716, 8293, 8293, 7704,
+ 7720, 7699, 7726, 7715, 8293, 7732, 7741, 7730, 7740, 7729,
+ 7728, 7742, 8293, 7736, 8293, 8293, 8293, 8293, 8293, 8293,
+ 8293, 8293, 7761, 8293, 7765, 7766, 8293, 7747, 7767, 7773,
+ 7759, 7768, 8293, 7757, 7772, 7784, 7785, 7775, 7795, 7788,
+ 7786, 7800, 7792, 7799, 7806, 7804, 7809, 8293, 8293, 7816,
+ 7814, 7820, 7828, 7838, 7839, 7842, 7844, 7827, 7833, 7847,
+ 7854, 7857, 7843, 7848, 7877, 7864, 7856, 7858, 7860, 7882,
+ 8293, 7873, 8293, 7874, 8293, 8293, 7893, 7895, 7886, 7880,
+
+ 7902, 7903, 7897, 7901, 7889, 7910, 8293, 7898, 8293, 7913,
+ 7928, 8293, 7916, 7907, 7923, 7904, 7920, 7929, 7941, 7944,
+ 8293, 7934, 7938, 7951, 7953, 7967, 7963, 7961, 7965, 7969,
+ 7962, 7972, 7977, 7983, 8293, 7991, 7979, 7980, 7984, 7986,
+ 8007, 7993, 8002, 7999, 8293, 8016, 8019, 8018, 8014, 8017,
+ 8008, 8037, 8035, 8034, 8293, 8025, 8048, 8050, 8052, 8055,
+ 8054, 8061, 8065, 8066, 8067, 8071, 8070, 8078, 8080, 8082,
+ 8086, 8083, 8293, 8089, 8096, 8293, 8098, 8099, 8100, 8105,
+ 8107, 8293, 8090, 8114, 8117, 8120, 8122, 8130, 8293, 8138,
+ 8139, 8143, 8293, 8135, 8293, 8293, 8147, 8126, 8142, 8154,
+
+ 8155, 8293, 8293, 8293, 8201, 8208, 8215, 8222, 8229, 83,
+ 8236, 8243, 8250, 8257, 8264, 8271, 8278, 8285
} ;
-static yyconst flex_int16_t yy_def[2764] =
+static yyconst flex_int16_t yy_def[2919] =
{ 0,
- 2749, 1, 2750, 2750, 2751, 2751, 2752, 2752, 2753, 2753,
- 2754, 2754, 2749, 2755, 2749, 2749, 2749, 2749, 2756, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2757, 2749, 2749, 2749, 2757, 2758, 2749, 2749,
- 2749, 2758, 2759, 2749, 2749, 2749, 2749, 2759, 2760, 2749,
- 2749, 2749, 2760, 2761, 2749, 2762, 2749, 2761, 2761, 2755,
- 2755, 2749, 2763, 2756, 2763, 2756, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2757,
- 2757, 2758, 2758, 2759, 2759, 2749, 2760, 2760, 2761, 2761,
- 2762, 2762, 2761, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2761, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2761, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2761,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2761, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2749, 2749, 2755, 2749, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2761,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2761,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
-
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2749, 2755,
- 2755, 2755, 2755, 2749, 2755, 2749, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2749, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2749, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2749, 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2749, 2755, 2755, 2755, 2749,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2749, 2749, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2749, 2749, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2749, 2749,
- 2755, 2749, 2755, 2749, 2755, 2749, 2749, 2755, 2755, 2755,
-
- 2749, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2749, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2749, 2755, 2755, 2755, 2755, 2749, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2749, 2749, 2749, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2749, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2749,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2749, 2755, 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2749, 2755, 2749, 2755, 2749, 2755, 2755, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2749, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2749,
- 2755, 2749, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2749, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2749,
- 2749, 2749, 2755, 2755, 2749, 2755, 2755, 2749, 2749, 2755,
- 2755, 2755, 2749, 2755, 2749, 2755, 2749, 2755, 2755, 2755,
- 2749, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
-
- 2749, 2755, 2755, 2749, 2755, 2749, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2749, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2749, 2749, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2749, 2749, 2755, 2749, 2755,
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2749, 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
-
- 2755, 2755, 2755, 2755, 2755, 2749, 2749, 2755, 2755, 2749,
- 2749, 2755, 2755, 2755, 2749, 2749, 2749, 2755, 2749, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755, 2749,
- 2749, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2749, 2755, 2749, 2749, 2755, 2755,
- 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2749, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2749,
- 2749, 2749, 2749, 2755, 2749, 2755, 2749, 2755, 2755, 2755,
-
- 2755, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2749, 2755,
- 2749, 2749, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749,
-
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
- 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755,
- 2749, 2755, 2755, 2755, 2755, 2755, 2749, 2755, 2755, 2755,
- 2755, 2755, 2755, 2749, 2755, 2755, 2755, 2749, 2755, 2749,
- 2749, 2755, 2755, 2755, 2755, 2755, 2749, 2749, 0, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749
+ 2904, 1, 2905, 2905, 2906, 2906, 2907, 2907, 2908, 2908,
+ 2909, 2909, 2904, 2910, 2904, 2904, 2904, 2904, 2911, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2912, 2904, 2904, 2904, 2912, 2913, 2904, 2904,
+ 2904, 2913, 2914, 2904, 2904, 2904, 2904, 2914, 2915, 2904,
+ 2904, 2904, 2915, 2916, 2904, 2917, 2904, 2916, 2916, 2910,
+ 2910, 2904, 2918, 2911, 2918, 2911, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2912,
+ 2912, 2913, 2913, 2914, 2914, 2904, 2915, 2915, 2916, 2916,
+ 2917, 2917, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2916, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2916, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2916, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910,
+
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
+ 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2904,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2904, 2910,
+ 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+
+ 2904, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904,
+ 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+
+ 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
+ 2904, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
+ 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2904, 2904, 2904, 2910, 2910, 2904, 2910, 2910,
+ 2904, 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2904,
+ 2910, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2904, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2904,
+
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2904, 2910, 2910, 2904, 2904, 2910, 2910, 2910, 2904,
+ 2904, 2904, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2904,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2904, 2904, 2910, 2910,
+ 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2904, 2910, 2904, 2904, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2904, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910,
+
+ 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910, 2904, 2910,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2904, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+ 2910, 2910, 2904, 2910, 2910, 2904, 2910, 2910, 2910, 2910,
+ 2910, 2904, 2910, 2910, 2910, 2910, 2910, 2910, 2904, 2910,
+ 2910, 2910, 2904, 2910, 2904, 2904, 2910, 2910, 2910, 2910,
+
+ 2910, 2904, 2904, 0, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904
} ;
-static yyconst flex_uint16_t yy_nxt[7963] =
+static yyconst flex_uint16_t yy_nxt[8360] =
{ 0,
14, 15, 16, 17, 18, 19, 18, 14, 14, 14,
14, 14, 18, 20, 21, 22, 23, 24, 25, 14,
@@ -1358,866 +1410,909 @@ static yyconst flex_uint16_t yy_nxt[7963] =
142, 71, 68, 142, 103, 83, 71, 94, 68, 146,
71, 145, 84, 147, 147, 96, 85, 140, 140, 86,
69, 95, 112, 97, 118, 154, 69, 143, 155, 68,
- 105, 71, 83, 359, 159, 68, 77, 78, 106, 84,
+ 105, 71, 83, 369, 159, 68, 77, 78, 106, 84,
79, 71, 96, 85, 107, 80, 86, 139, 108, 71,
97, 71, 154, 153, 81, 155, 71, 105, 71, 71,
- 71, 159, 71, 77, 78, 106, 150, 79, 156, 220,
+ 71, 159, 71, 77, 78, 106, 150, 79, 156, 222,
158, 107, 80, 98, 139, 108, 99, 71, 157, 141,
153, 81, 87, 100, 142, 101, 88, 142, 71, 89,
71, 90, 91, 71, 109, 156, 71, 158, 110, 150,
- 98, 71, 162, 99, 71, 157, 128, 170, 129, 87,
+ 98, 71, 162, 99, 71, 157, 128, 171, 129, 87,
100, 71, 101, 88, 111, 71, 89, 130, 90, 91,
71, 109, 119, 131, 164, 110, 120, 163, 148, 162,
- 147, 147, 71, 128, 170, 129, 121, 71, 169, 122,
- 146, 111, 113, 71, 130, 71, 114, 173, 71, 119,
+ 147, 147, 71, 128, 171, 129, 121, 71, 170, 122,
+ 146, 111, 113, 71, 130, 71, 114, 174, 71, 119,
131, 164, 115, 120, 163, 116, 144, 132, 144, 144,
- 71, 144, 117, 121, 71, 169, 122, 133, 160, 113,
- 171, 134, 135, 114, 173, 145, 177, 143, 141, 115,
- 71, 161, 116, 136, 132, 71, 198, 137, 172, 117,
- 123, 138, 71, 124, 133, 160, 71, 256, 134, 135,
- 125, 2749, 71, 177, 126, 127, 71, 178, 161, 71,
- 136, 2749, 71, 198, 137, 172, 71, 123, 138, 70,
+ 71, 144, 117, 121, 71, 170, 122, 133, 160, 113,
+ 172, 134, 135, 114, 174, 145, 179, 143, 141, 115,
+ 71, 161, 116, 136, 132, 71, 200, 137, 173, 117,
+ 123, 138, 71, 124, 133, 160, 71, 261, 134, 135,
+ 125, 2904, 71, 179, 126, 127, 71, 180, 161, 71,
+ 136, 2904, 71, 200, 137, 173, 71, 123, 138, 70,
124, 70, 70, 75, 70, 75, 75, 125, 75, 71,
- 70, 126, 127, 149, 178, 149, 149, 70, 149, 70,
- 70, 75, 70, 75, 75, 165, 75, 174, 70, 167,
-
- 168, 166, 75, 2749, 71, 175, 176, 179, 71, 180,
- 181, 152, 2749, 2749, 2749, 186, 71, 188, 2749, 197,
- 2749, 71, 165, 71, 174, 71, 167, 168, 166, 76,
- 71, 71, 175, 176, 179, 182, 180, 181, 183, 187,
- 194, 189, 71, 196, 188, 195, 197, 71, 71, 191,
- 199, 184, 185, 192, 200, 2749, 71, 201, 2749, 71,
- 2749, 190, 182, 71, 71, 183, 187, 194, 189, 193,
- 196, 71, 195, 71, 71, 202, 191, 199, 184, 185,
- 192, 200, 71, 203, 201, 204, 205, 206, 190, 209,
- 208, 207, 71, 210, 214, 71, 193, 71, 2749, 215,
-
- 71, 2749, 202, 222, 331, 2749, 71, 71, 71, 71,
- 203, 219, 204, 205, 206, 71, 209, 208, 207, 211,
- 210, 214, 221, 223, 216, 71, 215, 224, 212, 71,
- 222, 71, 225, 226, 213, 217, 71, 71, 219, 218,
- 2749, 71, 71, 71, 229, 228, 211, 227, 71, 221,
- 223, 216, 231, 71, 224, 212, 71, 236, 232, 225,
- 226, 213, 217, 233, 234, 230, 218, 71, 239, 71,
- 71, 229, 228, 71, 227, 235, 2749, 2749, 71, 231,
- 71, 2749, 240, 2749, 236, 232, 2749, 237, 2749, 2749,
- 233, 234, 230, 144, 238, 144, 144, 71, 144, 245,
-
- 71, 149, 235, 149, 149, 75, 149, 75, 75, 240,
- 75, 150, 242, 241, 237, 71, 71, 246, 243, 247,
- 248, 238, 71, 2749, 71, 244, 245, 71, 249, 252,
- 251, 250, 71, 255, 288, 253, 71, 71, 71, 242,
- 241, 254, 292, 152, 246, 243, 247, 248, 71, 257,
- 71, 267, 244, 258, 268, 249, 265, 251, 250, 71,
- 255, 71, 253, 71, 266, 272, 71, 270, 254, 269,
- 259, 2749, 71, 71, 71, 2749, 71, 71, 267, 273,
- 258, 268, 71, 265, 71, 278, 316, 2749, 71, 274,
- 2749, 266, 272, 275, 71, 271, 269, 259, 260, 71,
-
- 289, 71, 71, 261, 276, 71, 273, 277, 262, 71,
- 279, 280, 278, 316, 263, 264, 274, 290, 285, 71,
- 275, 71, 271, 2749, 408, 260, 71, 289, 291, 294,
- 261, 276, 71, 71, 277, 262, 286, 279, 280, 281,
- 71, 263, 264, 71, 282, 285, 287, 293, 298, 71,
- 295, 71, 297, 296, 71, 291, 283, 71, 284, 71,
- 299, 71, 300, 286, 302, 71, 281, 2749, 71, 301,
- 71, 282, 303, 287, 293, 298, 305, 295, 71, 304,
- 296, 307, 306, 283, 71, 284, 71, 71, 308, 71,
- 309, 302, 71, 71, 71, 310, 301, 71, 311, 303,
-
- 71, 314, 71, 305, 313, 312, 304, 318, 307, 306,
- 71, 71, 71, 71, 317, 308, 71, 309, 315, 71,
- 319, 320, 310, 71, 321, 311, 322, 71, 314, 71,
- 323, 313, 312, 71, 324, 325, 326, 328, 327, 71,
- 332, 317, 334, 329, 339, 315, 71, 319, 320, 330,
- 345, 338, 346, 322, 71, 71, 71, 323, 71, 150,
- 335, 324, 337, 333, 341, 327, 71, 71, 71, 71,
- 329, 339, 71, 71, 71, 71, 330, 336, 338, 342,
- 340, 343, 71, 71, 71, 71, 71, 335, 71, 337,
- 333, 341, 344, 347, 348, 349, 71, 350, 351, 353,
-
- 2749, 352, 2749, 71, 336, 368, 342, 340, 343, 71,
- 71, 71, 71, 354, 356, 71, 71, 357, 2749, 344,
- 347, 348, 358, 363, 350, 351, 353, 71, 352, 355,
- 360, 71, 71, 361, 71, 362, 367, 71, 71, 71,
- 354, 356, 71, 364, 357, 365, 371, 2749, 71, 358,
- 363, 366, 369, 370, 71, 71, 355, 360, 376, 71,
- 361, 71, 362, 367, 372, 71, 374, 375, 377, 71,
- 364, 71, 365, 371, 71, 71, 379, 378, 366, 369,
- 381, 373, 71, 380, 390, 71, 71, 71, 382, 71,
- 71, 372, 71, 374, 375, 377, 383, 71, 384, 389,
-
- 385, 972, 386, 379, 378, 71, 71, 381, 373, 71,
- 380, 387, 71, 388, 71, 382, 71, 391, 392, 2749,
- 71, 71, 2749, 383, 399, 384, 389, 385, 71, 386,
- 2749, 401, 71, 71, 400, 409, 404, 71, 387, 415,
- 388, 71, 71, 71, 391, 392, 393, 402, 2749, 394,
- 71, 399, 405, 71, 395, 396, 397, 398, 401, 71,
- 412, 400, 409, 404, 71, 403, 71, 71, 406, 407,
- 413, 71, 71, 393, 402, 410, 394, 416, 411, 405,
- 414, 395, 396, 397, 398, 71, 417, 412, 71, 418,
- 2749, 420, 403, 71, 424, 406, 407, 413, 71, 71,
-
- 419, 71, 410, 421, 416, 411, 71, 414, 422, 423,
- 425, 71, 71, 417, 2749, 71, 418, 71, 420, 426,
- 427, 71, 71, 428, 438, 2749, 71, 419, 469, 431,
- 421, 432, 429, 1089, 433, 422, 423, 425, 430, 2749,
- 439, 71, 71, 2749, 434, 71, 426, 71, 440, 71,
- 428, 438, 71, 71, 71, 469, 431, 435, 432, 429,
- 436, 433, 437, 71, 2749, 430, 453, 441, 71, 451,
- 71, 434, 71, 442, 452, 440, 71, 443, 71, 454,
- 71, 455, 457, 2749, 435, 444, 2749, 436, 2749, 437,
- 465, 71, 71, 453, 441, 71, 451, 456, 466, 2749,
-
- 442, 452, 71, 471, 443, 71, 454, 2749, 455, 457,
- 472, 71, 444, 445, 467, 446, 71, 465, 473, 468,
- 470, 474, 71, 2749, 456, 466, 150, 475, 447, 71,
- 471, 448, 2749, 449, 477, 450, 71, 472, 478, 71,
- 445, 71, 446, 476, 71, 473, 71, 470, 474, 2749,
- 487, 71, 481, 2749, 2749, 447, 71, 479, 448, 71,
- 449, 477, 450, 458, 459, 478, 480, 482, 2749, 484,
- 476, 483, 486, 460, 71, 461, 462, 463, 71, 481,
- 464, 71, 71, 485, 71, 488, 489, 491, 71, 71,
- 458, 459, 71, 480, 482, 490, 484, 2749, 483, 486,
-
- 460, 71, 461, 462, 463, 71, 493, 464, 71, 492,
- 485, 71, 488, 489, 498, 494, 497, 71, 499, 71,
- 495, 496, 490, 71, 503, 71, 500, 2749, 2749, 71,
- 501, 504, 507, 493, 506, 536, 492, 71, 2749, 71,
- 518, 498, 494, 497, 71, 499, 505, 71, 502, 71,
- 71, 503, 508, 500, 71, 71, 509, 501, 504, 507,
- 71, 506, 536, 71, 510, 71, 514, 511, 515, 516,
- 517, 2749, 71, 505, 524, 502, 519, 71, 512, 508,
- 513, 520, 71, 509, 71, 71, 521, 529, 71, 522,
- 71, 510, 71, 514, 511, 515, 516, 517, 525, 523,
-
- 71, 524, 71, 519, 527, 512, 71, 513, 520, 71,
- 526, 71, 71, 521, 528, 530, 522, 531, 71, 71,
- 2749, 532, 2749, 533, 534, 525, 523, 71, 537, 71,
- 538, 527, 71, 540, 535, 71, 541, 526, 71, 71,
- 71, 528, 530, 539, 531, 71, 71, 542, 532, 544,
- 533, 534, 71, 543, 547, 537, 71, 538, 71, 71,
- 540, 535, 71, 541, 545, 546, 548, 550, 555, 71,
- 539, 71, 549, 71, 542, 71, 544, 557, 553, 71,
- 543, 547, 71, 554, 71, 71, 551, 2749, 552, 556,
- 71, 545, 546, 548, 550, 71, 71, 558, 559, 549,
-
- 71, 560, 562, 564, 561, 553, 565, 71, 2749, 71,
- 554, 71, 2749, 551, 563, 552, 556, 568, 569, 71,
- 71, 71, 567, 71, 558, 559, 570, 71, 560, 566,
- 564, 561, 71, 572, 71, 71, 571, 2749, 71, 71,
- 573, 563, 574, 575, 568, 569, 2749, 2749, 587, 567,
- 576, 2749, 71, 570, 71, 71, 566, 588, 71, 71,
- 572, 585, 586, 571, 71, 71, 2749, 573, 71, 574,
- 575, 71, 590, 607, 71, 587, 2749, 576, 577, 589,
- 591, 71, 592, 578, 588, 579, 593, 594, 585, 586,
- 71, 580, 2749, 581, 71, 71, 582, 583, 71, 590,
-
- 607, 595, 71, 584, 71, 577, 589, 591, 71, 592,
- 578, 596, 579, 593, 594, 598, 2749, 599, 580, 71,
- 581, 597, 600, 582, 583, 601, 71, 603, 595, 71,
- 584, 602, 605, 71, 604, 608, 2749, 610, 606, 616,
- 71, 71, 598, 71, 599, 609, 71, 71, 597, 600,
- 71, 71, 601, 71, 603, 71, 613, 612, 602, 605,
- 611, 604, 608, 614, 610, 606, 615, 71, 71, 71,
- 617, 71, 609, 623, 618, 627, 628, 71, 620, 630,
- 619, 71, 621, 613, 612, 71, 71, 611, 71, 150,
- 614, 71, 624, 615, 71, 622, 71, 617, 625, 626,
-
- 623, 618, 71, 633, 71, 620, 71, 619, 71, 621,
- 632, 71, 629, 631, 634, 71, 643, 645, 71, 624,
- 635, 639, 622, 71, 640, 625, 626, 71, 71, 641,
- 633, 644, 71, 646, 71, 636, 71, 632, 642, 629,
- 631, 634, 637, 71, 71, 638, 647, 635, 639, 71,
- 648, 649, 71, 71, 651, 658, 71, 71, 71, 650,
- 71, 653, 636, 652, 2749, 642, 655, 654, 663, 637,
- 71, 71, 638, 71, 657, 659, 71, 656, 649, 1205,
- 71, 651, 71, 71, 661, 71, 650, 71, 653, 2749,
- 652, 71, 662, 655, 654, 664, 660, 71, 71, 71,
-
- 71, 657, 659, 665, 656, 71, 71, 71, 670, 666,
- 672, 661, 669, 674, 667, 671, 71, 71, 668, 662,
- 2749, 71, 664, 660, 71, 673, 71, 676, 677, 678,
- 665, 675, 71, 71, 71, 670, 666, 672, 679, 669,
- 674, 667, 671, 71, 681, 668, 71, 71, 682, 2749,
- 686, 683, 673, 71, 685, 677, 678, 684, 675, 71,
- 680, 71, 2749, 71, 71, 679, 71, 687, 71, 688,
- 689, 681, 71, 71, 690, 682, 71, 686, 683, 691,
- 692, 685, 693, 694, 684, 695, 697, 680, 2749, 71,
- 71, 696, 71, 698, 687, 71, 688, 71, 699, 700,
-
- 701, 690, 71, 702, 71, 703, 691, 692, 71, 71,
- 694, 71, 695, 697, 71, 71, 704, 711, 696, 705,
- 698, 713, 71, 707, 706, 699, 708, 701, 712, 71,
- 714, 71, 703, 709, 710, 71, 71, 71, 71, 71,
- 71, 71, 717, 704, 715, 719, 2749, 740, 713, 71,
- 707, 71, 71, 708, 718, 712, 722, 714, 720, 716,
- 709, 710, 723, 721, 71, 725, 724, 71, 71, 71,
- 726, 715, 719, 71, 71, 727, 728, 732, 729, 71,
- 730, 718, 71, 722, 71, 71, 716, 71, 71, 723,
- 71, 71, 725, 724, 731, 71, 733, 726, 734, 735,
-
- 71, 71, 727, 728, 732, 729, 736, 730, 737, 738,
- 71, 71, 742, 2749, 71, 71, 71, 739, 741, 745,
- 743, 731, 744, 733, 71, 734, 735, 71, 71, 71,
- 71, 71, 746, 736, 747, 737, 738, 751, 750, 742,
- 754, 71, 71, 71, 739, 741, 745, 743, 748, 744,
- 749, 71, 753, 752, 758, 756, 71, 71, 71, 746,
- 71, 747, 755, 71, 751, 750, 71, 754, 71, 2749,
- 757, 759, 760, 761, 762, 748, 71, 749, 71, 753,
- 752, 758, 756, 763, 71, 766, 764, 765, 2749, 755,
- 768, 71, 2749, 71, 71, 71, 71, 757, 759, 760,
-
- 761, 762, 767, 71, 769, 71, 770, 71, 71, 772,
- 763, 771, 766, 764, 765, 71, 778, 768, 775, 71,
- 777, 773, 774, 784, 776, 781, 71, 2749, 150, 767,
- 71, 769, 71, 770, 71, 71, 772, 71, 771, 782,
- 71, 2749, 779, 71, 786, 775, 783, 777, 773, 774,
- 780, 776, 71, 785, 71, 71, 788, 71, 789, 787,
- 71, 792, 790, 2749, 791, 71, 782, 71, 71, 779,
- 71, 786, 794, 783, 71, 800, 793, 780, 71, 71,
- 785, 71, 801, 788, 71, 803, 787, 71, 792, 790,
- 71, 791, 71, 805, 2749, 802, 804, 811, 806, 794,
-
- 2749, 807, 800, 793, 795, 2749, 71, 71, 796, 801,
- 810, 797, 803, 71, 808, 2749, 71, 71, 798, 809,
- 805, 799, 802, 804, 71, 806, 71, 71, 807, 71,
- 71, 795, 71, 2749, 819, 796, 820, 810, 797, 2749,
- 2749, 808, 71, 824, 821, 798, 809, 826, 799, 812,
- 813, 2749, 814, 71, 823, 815, 71, 822, 2749, 71,
- 816, 819, 828, 820, 829, 825, 817, 818, 827, 2749,
- 71, 821, 830, 71, 826, 71, 812, 813, 71, 814,
- 71, 823, 815, 831, 822, 71, 71, 816, 71, 828,
- 832, 829, 825, 817, 818, 827, 71, 833, 834, 830,
-
- 835, 836, 838, 837, 840, 71, 71, 839, 71, 841,
- 831, 71, 71, 842, 845, 71, 71, 832, 847, 71,
- 851, 71, 71, 71, 833, 834, 843, 835, 836, 838,
- 837, 840, 844, 71, 839, 71, 841, 848, 846, 71,
- 842, 845, 849, 852, 850, 71, 853, 71, 2749, 855,
- 860, 854, 71, 843, 857, 856, 861, 858, 71, 844,
- 71, 864, 862, 71, 2749, 846, 71, 859, 71, 71,
- 71, 850, 71, 853, 71, 71, 855, 860, 854, 71,
- 71, 857, 856, 71, 858, 863, 2749, 71, 865, 862,
- 866, 867, 868, 71, 859, 869, 71, 870, 871, 873,
-
- 2749, 71, 874, 872, 71, 2749, 882, 878, 71, 71,
- 71, 875, 863, 71, 71, 865, 71, 866, 867, 868,
- 71, 71, 869, 71, 870, 871, 873, 876, 71, 874,
- 872, 877, 879, 71, 878, 71, 881, 883, 875, 2749,
- 880, 885, 2749, 71, 884, 886, 887, 71, 2749, 71,
- 888, 891, 71, 71, 876, 71, 71, 890, 877, 879,
- 894, 71, 889, 881, 883, 2749, 71, 880, 885, 71,
- 892, 884, 886, 887, 71, 71, 895, 888, 891, 71,
- 893, 896, 897, 899, 890, 898, 900, 902, 71, 889,
- 71, 2749, 71, 901, 71, 903, 71, 892, 71, 71,
-
- 904, 907, 71, 895, 71, 909, 71, 893, 896, 897,
- 899, 918, 898, 900, 71, 71, 905, 906, 71, 908,
- 901, 910, 903, 71, 71, 911, 71, 904, 907, 912,
- 913, 914, 915, 71, 71, 921, 71, 71, 918, 920,
- 71, 919, 923, 905, 906, 916, 908, 71, 910, 922,
- 924, 71, 925, 917, 71, 927, 912, 71, 914, 915,
- 71, 930, 71, 926, 71, 71, 920, 71, 919, 923,
- 71, 929, 916, 71, 928, 931, 922, 924, 2749, 933,
- 917, 932, 71, 71, 71, 935, 934, 71, 150, 936,
- 926, 71, 71, 71, 938, 937, 939, 71, 929, 948,
-
- 940, 928, 931, 71, 71, 71, 933, 71, 932, 71,
- 949, 71, 935, 934, 941, 2749, 936, 2749, 950, 2749,
- 71, 938, 937, 939, 952, 71, 948, 940, 2749, 951,
- 71, 71, 955, 71, 953, 960, 954, 949, 957, 2749,
- 956, 941, 942, 958, 943, 950, 71, 71, 944, 71,
- 945, 952, 959, 71, 71, 946, 951, 969, 71, 955,
- 947, 953, 960, 954, 961, 71, 71, 956, 962, 942,
- 71, 943, 964, 965, 966, 944, 71, 945, 963, 959,
- 71, 968, 946, 967, 970, 971, 71, 947, 973, 71,
- 71, 961, 983, 2749, 71, 962, 71, 987, 974, 964,
-
- 965, 966, 71, 986, 975, 963, 71, 71, 968, 985,
- 967, 984, 71, 71, 990, 989, 71, 995, 71, 983,
- 71, 988, 71, 71, 987, 974, 993, 71, 2749, 2749,
- 986, 975, 976, 71, 71, 2749, 985, 977, 984, 978,
- 994, 990, 989, 71, 991, 979, 992, 998, 988, 71,
- 980, 981, 71, 71, 71, 996, 999, 982, 71, 976,
- 997, 71, 1001, 71, 977, 1002, 978, 994, 71, 1000,
- 71, 991, 979, 992, 998, 1003, 1005, 980, 981, 71,
- 1006, 2749, 996, 71, 982, 2749, 1004, 997, 71, 1001,
- 1008, 71, 1002, 71, 1009, 1007, 1000, 71, 71, 1011,
-
- 1012, 71, 1003, 71, 1015, 1010, 71, 1006, 71, 1016,
- 1013, 1014, 71, 1004, 2749, 71, 1019, 1008, 71, 1017,
- 1018, 1009, 1007, 1022, 71, 71, 1011, 1012, 71, 71,
- 71, 1015, 1010, 71, 1023, 1020, 1021, 1013, 1014, 1025,
- 1027, 71, 1024, 1019, 71, 71, 1017, 1018, 71, 1026,
- 1022, 1028, 2749, 1030, 1035, 1034, 71, 71, 1031, 1029,
- 1040, 1023, 1020, 1021, 71, 71, 1025, 71, 1032, 1024,
- 71, 1033, 71, 1036, 1037, 71, 1026, 1038, 1028, 71,
- 71, 1035, 1034, 71, 1039, 71, 1029, 1042, 1043, 2749,
- 1041, 71, 71, 1044, 71, 1032, 71, 71, 1033, 71,
-
- 1036, 1037, 1045, 1046, 1038, 1047, 1048, 1050, 1054, 1049,
- 1052, 1039, 71, 2749, 1051, 1043, 71, 1041, 1053, 71,
- 1044, 71, 71, 1055, 71, 71, 1056, 1058, 71, 1045,
- 1046, 71, 1047, 1048, 1050, 71, 1049, 1052, 1057, 71,
- 71, 1051, 1061, 1059, 71, 1053, 1063, 71, 1060, 71,
- 71, 71, 71, 1056, 1058, 1062, 71, 1064, 1065, 1066,
- 71, 1067, 1069, 2749, 1072, 1057, 2749, 2749, 1070, 1061,
- 1059, 1068, 1073, 1063, 1074, 1060, 2749, 71, 1071, 71,
- 1076, 71, 1062, 71, 1077, 71, 1066, 1078, 1067, 71,
- 71, 1075, 71, 71, 71, 1070, 71, 1079, 1068, 71,
-
- 71, 1074, 1080, 71, 71, 1071, 71, 1076, 71, 1081,
- 1082, 1077, 1084, 1083, 1078, 2749, 1085, 71, 1075, 1086,
- 1087, 1088, 1090, 2749, 1079, 71, 1091, 71, 1095, 1080,
- 1092, 71, 1096, 71, 71, 1093, 71, 71, 71, 1084,
- 1083, 71, 71, 71, 71, 71, 1086, 1087, 1088, 1090,
- 1094, 1097, 1098, 1091, 1099, 71, 1100, 1092, 71, 1096,
- 1101, 1102, 1093, 71, 1103, 1104, 2749, 71, 71, 2749,
- 2749, 1105, 1107, 2749, 71, 1106, 71, 1094, 1097, 1098,
- 1111, 1099, 1108, 1100, 1110, 2749, 2749, 71, 1102, 1116,
- 1109, 2749, 71, 71, 71, 71, 71, 71, 1105, 1107,
-
- 71, 1113, 1106, 71, 1112, 1115, 71, 1111, 1114, 1108,
- 1117, 1110, 71, 71, 1119, 1118, 71, 1109, 1120, 1159,
- 71, 71, 1121, 71, 71, 2749, 71, 2749, 1113, 71,
- 2749, 1112, 1115, 1126, 1127, 1114, 1133, 1117, 2749, 71,
- 1129, 1119, 1118, 1122, 1128, 1120, 1131, 2749, 1130, 1121,
- 1132, 71, 1123, 71, 1124, 71, 71, 1125, 71, 71,
- 1126, 1127, 1136, 1133, 71, 71, 1134, 1129, 71, 1135,
- 1122, 1128, 71, 1131, 71, 1130, 1138, 1132, 71, 1123,
- 1137, 1124, 1139, 1140, 1125, 1144, 1141, 1143, 71, 1136,
- 71, 71, 1142, 1134, 1145, 2749, 1135, 71, 1149, 1148,
-
- 2749, 2749, 1147, 71, 71, 71, 71, 1137, 71, 1139,
- 1140, 71, 1144, 1141, 1143, 71, 1146, 71, 71, 1142,
- 1150, 1145, 1151, 1153, 71, 1149, 1148, 1152, 1155, 1147,
- 71, 1154, 71, 71, 1156, 71, 1164, 1157, 1158, 2749,
- 71, 71, 2749, 1146, 71, 1179, 1160, 1150, 1161, 1151,
- 1153, 71, 71, 1162, 1152, 1155, 71, 1163, 1154, 71,
- 71, 1156, 1167, 1164, 1157, 1158, 1165, 71, 1168, 1169,
- 71, 1166, 1177, 1160, 1170, 1161, 1178, 71, 2749, 71,
- 1162, 71, 1180, 71, 1163, 1181, 71, 1183, 2749, 1167,
- 2749, 1184, 2749, 2749, 71, 1168, 1169, 2749, 71, 1177,
-
- 71, 1170, 1171, 1178, 1182, 1172, 1173, 71, 71, 1180,
- 1174, 2749, 1181, 71, 1185, 1188, 1175, 1189, 1184, 71,
- 1176, 1190, 71, 1186, 71, 1187, 1195, 1191, 71, 1171,
- 1196, 1182, 1172, 1173, 1192, 2749, 71, 1174, 1197, 71,
- 1193, 1185, 1188, 1175, 1189, 71, 1194, 1176, 1190, 71,
- 1186, 71, 1187, 71, 1191, 71, 71, 1198, 71, 1206,
- 71, 1192, 71, 2749, 1207, 1197, 1208, 1193, 1209, 1211,
- 2749, 1204, 2749, 1194, 1212, 71, 2749, 71, 71, 2749,
- 71, 1210, 1214, 1213, 1198, 1199, 1206, 71, 71, 1215,
- 1200, 1207, 1201, 1208, 1202, 1209, 1203, 71, 1204, 71,
-
- 1216, 71, 71, 71, 71, 1217, 1218, 1219, 1210, 1214,
- 1213, 1220, 1199, 71, 71, 1221, 1215, 1200, 71, 1201,
- 1224, 1202, 1222, 1203, 71, 1223, 71, 1216, 1225, 71,
- 71, 1226, 1217, 1218, 1219, 71, 1227, 71, 1220, 1228,
- 1229, 1231, 1221, 71, 1230, 1234, 1233, 1224, 1232, 1222,
- 1235, 71, 1223, 71, 71, 1225, 1236, 71, 1226, 1237,
- 1238, 1241, 1259, 71, 2749, 71, 1228, 71, 1231, 71,
- 71, 1230, 71, 1233, 1239, 1232, 1243, 1235, 1240, 1247,
- 71, 1246, 71, 71, 71, 71, 1237, 1238, 71, 1242,
- 1244, 1245, 2749, 1249, 71, 1248, 71, 71, 2749, 71,
-
- 71, 1239, 1250, 1243, 71, 1240, 1247, 1251, 1246, 1252,
- 1253, 1260, 1254, 71, 1255, 71, 1242, 1244, 1245, 71,
- 1249, 1256, 1248, 71, 71, 1257, 71, 1261, 1262, 1250,
- 1258, 71, 71, 2749, 1251, 1263, 1252, 1253, 71, 1254,
- 1265, 1255, 71, 71, 71, 71, 1266, 1264, 1256, 71,
- 1270, 1267, 1257, 71, 1261, 71, 71, 1258, 71, 1268,
- 71, 1269, 1263, 1271, 1272, 71, 71, 1265, 1273, 1277,
- 1274, 1279, 1276, 71, 1264, 1280, 1275, 1278, 1267, 71,
- 71, 1285, 71, 71, 71, 71, 1268, 1281, 1269, 1284,
- 71, 1272, 1302, 1318, 71, 71, 1277, 1274, 1279, 1276,
-
- 71, 71, 1280, 1275, 1278, 1282, 1283, 71, 71, 1286,
- 1288, 71, 1287, 71, 1281, 71, 1284, 1289, 71, 1291,
- 1292, 1293, 1290, 1295, 71, 71, 2749, 2749, 71, 1294,
- 1300, 2749, 1282, 1283, 71, 71, 1286, 1288, 71, 1287,
- 71, 1296, 71, 1303, 1297, 1301, 1291, 1292, 1293, 71,
- 1295, 1298, 1305, 71, 1299, 71, 1294, 1300, 71, 1304,
- 71, 1306, 71, 1308, 2749, 1307, 71, 1309, 1296, 1310,
- 1303, 1297, 1301, 71, 71, 71, 71, 1311, 1298, 1305,
- 1312, 1299, 1314, 1315, 71, 71, 1304, 1317, 1306, 1313,
- 1308, 71, 1307, 71, 1309, 71, 1310, 1319, 71, 1325,
-
- 1326, 2749, 1316, 2749, 1311, 1320, 71, 1312, 71, 1314,
- 1315, 71, 71, 71, 1317, 1321, 1313, 1324, 1322, 1323,
- 71, 71, 1329, 1331, 1319, 71, 1325, 1326, 71, 1316,
- 71, 71, 1320, 1327, 1328, 71, 1330, 1332, 1339, 1335,
- 71, 1333, 1321, 71, 1324, 1322, 1323, 71, 1334, 1329,
- 1331, 1336, 1337, 2749, 1338, 71, 2749, 2749, 71, 1340,
- 1327, 1328, 71, 1330, 1332, 71, 1341, 1342, 1333, 1346,
- 71, 71, 1343, 1348, 2749, 1334, 71, 1344, 71, 1337,
- 71, 1338, 71, 71, 71, 71, 1340, 1345, 1349, 71,
- 1347, 1364, 71, 1341, 1342, 71, 1346, 71, 1350, 1343,
-
- 1348, 1351, 2749, 1352, 1344, 1356, 1360, 71, 1353, 71,
- 71, 71, 71, 1354, 1345, 1349, 1357, 1347, 1355, 1358,
- 1368, 1359, 1361, 71, 71, 1350, 1366, 71, 1351, 71,
- 71, 1362, 1356, 1360, 71, 71, 1365, 71, 71, 1367,
- 2749, 1363, 71, 1357, 1373, 71, 1358, 1369, 1359, 1361,
- 71, 1370, 71, 1366, 1371, 71, 1372, 71, 1362, 71,
- 71, 1374, 71, 1365, 71, 1375, 1367, 71, 1363, 1376,
- 1377, 1373, 1378, 1379, 1369, 2749, 1380, 71, 1370, 1381,
- 2749, 1371, 1392, 1372, 2749, 2749, 2749, 71, 1374, 1383,
- 1382, 1384, 1375, 1388, 71, 71, 1376, 1377, 71, 1378,
-
- 71, 1389, 71, 1380, 71, 71, 1381, 71, 1385, 71,
- 1393, 1391, 1386, 71, 1390, 71, 1383, 1382, 1384, 1395,
- 1388, 71, 71, 1394, 1396, 1387, 1401, 1397, 1389, 1399,
- 1400, 1398, 71, 71, 71, 1385, 71, 1393, 1391, 1386,
- 71, 1390, 71, 1403, 1404, 71, 1395, 71, 1402, 71,
- 1394, 1396, 1387, 71, 1397, 1405, 1399, 71, 1398, 1406,
- 1407, 1408, 71, 1409, 2749, 1410, 71, 1411, 1414, 1412,
- 1403, 1404, 1413, 2749, 1415, 1402, 71, 1416, 71, 71,
- 1418, 71, 1405, 1419, 2749, 71, 71, 71, 1408, 71,
- 71, 71, 1410, 71, 1411, 1414, 1412, 1417, 2749, 1413,
-
- 71, 1415, 71, 71, 1416, 1420, 1421, 1418, 1423, 71,
- 1419, 1422, 1424, 71, 71, 1425, 1426, 1427, 71, 1429,
- 2749, 1430, 1428, 2749, 1417, 71, 71, 1433, 71, 2749,
- 1435, 1431, 1420, 1421, 71, 1423, 71, 71, 1422, 1424,
- 1432, 1436, 1425, 1426, 71, 71, 1429, 71, 1430, 1428,
- 71, 1434, 71, 1437, 1433, 1443, 71, 1435, 1431, 71,
- 1438, 1441, 71, 1439, 1440, 1447, 2749, 1432, 71, 1452,
- 1442, 71, 71, 71, 71, 1450, 1444, 1445, 1434, 1446,
- 1437, 71, 1443, 71, 71, 1448, 71, 1438, 1441, 1449,
- 1439, 1440, 1447, 1451, 1454, 1455, 71, 1442, 71, 2749,
-
- 71, 71, 1450, 1444, 1445, 1456, 1446, 71, 71, 1458,
- 1453, 1457, 1448, 1459, 1463, 71, 1449, 71, 1460, 71,
- 1451, 71, 1455, 1461, 2749, 1462, 71, 71, 1467, 1466,
- 71, 1465, 71, 1464, 2749, 71, 1458, 1453, 1457, 1469,
- 1459, 1463, 71, 71, 1468, 1460, 71, 1473, 1474, 71,
- 1461, 71, 1462, 71, 71, 1467, 1466, 1478, 1465, 71,
- 1464, 1470, 1475, 1479, 1471, 1476, 1469, 1477, 2749, 71,
- 71, 1468, 1481, 1485, 1480, 1474, 1472, 2749, 1482, 71,
- 71, 71, 71, 1484, 1478, 71, 1483, 71, 1470, 1475,
- 1489, 1471, 1476, 1488, 1477, 71, 71, 71, 71, 1481,
-
- 1485, 1480, 1487, 1472, 71, 1482, 1486, 1490, 71, 71,
- 1484, 1492, 2749, 1483, 71, 1491, 2749, 71, 1494, 1493,
- 1488, 1495, 71, 71, 1498, 1496, 1497, 1499, 1500, 1487,
- 1504, 71, 2749, 1486, 71, 71, 1501, 71, 2749, 71,
- 71, 71, 1491, 71, 1502, 1494, 1493, 71, 71, 71,
- 1503, 1498, 1496, 1497, 1499, 1500, 1507, 1509, 1505, 71,
- 1506, 1510, 71, 1501, 71, 71, 1508, 71, 71, 71,
- 1511, 1502, 71, 1512, 1513, 1515, 1514, 1503, 71, 1518,
- 1517, 1516, 2749, 1507, 71, 1505, 71, 1506, 1510, 71,
- 71, 71, 71, 1508, 1519, 1526, 1527, 1511, 71, 71,
-
- 1512, 1513, 1515, 1514, 1522, 1523, 1518, 1517, 1516, 1520,
- 1524, 1525, 1521, 71, 71, 71, 1528, 71, 1529, 71,
- 1530, 1519, 1526, 71, 1531, 2749, 1532, 71, 1534, 2749,
- 1535, 1522, 1523, 71, 1533, 1542, 1520, 1524, 1525, 1521,
- 71, 71, 71, 71, 71, 1529, 1536, 1530, 1537, 1538,
- 71, 71, 1539, 1532, 1540, 1534, 71, 1535, 1541, 1543,
- 1544, 1533, 71, 2749, 71, 1546, 71, 71, 1545, 1547,
- 1548, 2749, 71, 1536, 71, 1537, 1538, 71, 71, 1539,
- 71, 1540, 1549, 1552, 71, 71, 1543, 1544, 1551, 1550,
- 71, 1554, 1546, 1553, 71, 1545, 1547, 1548, 71, 1559,
-
- 1560, 1557, 1562, 1555, 1558, 1565, 71, 1563, 71, 1549,
- 1552, 71, 1561, 71, 71, 1551, 1550, 1556, 1554, 71,
- 1553, 71, 1564, 1566, 1567, 1568, 1559, 1560, 1557, 71,
- 1555, 1558, 71, 1569, 71, 71, 1570, 71, 1571, 1561,
- 1572, 1574, 1578, 1573, 1556, 1579, 2749, 71, 1575, 1564,
- 1566, 71, 1576, 71, 1587, 71, 71, 71, 1577, 71,
- 1569, 71, 71, 1580, 1581, 1571, 1582, 1572, 71, 1578,
- 1573, 71, 1579, 71, 1583, 1575, 71, 2749, 1584, 1576,
- 1589, 1585, 1586, 71, 71, 1577, 71, 71, 71, 1588,
- 1580, 1581, 71, 1582, 71, 71, 1591, 1590, 1592, 1593,
-
- 1594, 1583, 1596, 71, 71, 1584, 71, 1589, 1585, 1586,
- 1595, 71, 71, 1597, 1599, 1598, 1588, 1600, 1603, 71,
- 71, 1601, 71, 1591, 1590, 1592, 1605, 1594, 1602, 71,
- 2749, 71, 1616, 1609, 2749, 1604, 71, 1595, 71, 71,
- 1597, 1599, 1598, 71, 1600, 1603, 71, 71, 1601, 1606,
- 1607, 1608, 1611, 71, 1610, 1602, 1612, 71, 1613, 71,
- 71, 1614, 1604, 1615, 71, 71, 1618, 71, 1620, 71,
- 71, 71, 71, 71, 1617, 71, 1606, 1607, 1608, 1611,
- 1621, 1610, 1619, 1612, 1622, 1613, 1623, 1624, 1614, 71,
- 1615, 1625, 1626, 1618, 1629, 71, 2749, 1627, 2749, 1630,
-
- 1628, 1617, 2749, 71, 71, 71, 71, 1621, 71, 1619,
- 1631, 71, 71, 1623, 1624, 71, 1634, 1635, 71, 71,
- 1632, 1629, 1633, 71, 1627, 71, 1630, 1628, 1637, 71,
- 1636, 71, 1638, 1639, 1641, 71, 1642, 1631, 71, 1643,
- 71, 71, 1644, 1634, 1635, 71, 1640, 1632, 71, 1633,
- 1645, 71, 1650, 1647, 71, 1637, 71, 1636, 1648, 1638,
- 1639, 1641, 1646, 1642, 71, 71, 71, 1649, 1651, 1652,
- 71, 1654, 1658, 1640, 71, 1653, 1661, 1645, 71, 1650,
- 1647, 1655, 71, 1659, 1656, 1648, 1660, 1657, 1662, 1646,
- 71, 1664, 71, 71, 1649, 71, 71, 1666, 71, 71,
-
- 71, 1667, 1653, 1661, 1663, 1669, 71, 71, 1655, 1668,
- 1659, 1656, 1674, 71, 1657, 1665, 1676, 71, 71, 71,
- 71, 71, 1675, 71, 1666, 1670, 1671, 1672, 71, 71,
- 1680, 1663, 1673, 1678, 1677, 71, 1668, 71, 1679, 1674,
- 71, 71, 1665, 71, 1681, 1684, 1682, 2749, 71, 1675,
- 2749, 1683, 1670, 1671, 1672, 1688, 1685, 1680, 1687, 1673,
- 1686, 1677, 71, 71, 71, 71, 1690, 71, 1693, 71,
- 1694, 1681, 1691, 1682, 71, 1689, 71, 71, 1683, 71,
- 1696, 1692, 71, 1685, 1695, 1687, 71, 1686, 1697, 1700,
- 1702, 71, 71, 1690, 71, 1693, 1698, 71, 1699, 1691,
-
- 1701, 1703, 1689, 1705, 71, 1709, 71, 71, 1692, 1712,
- 71, 1695, 71, 1707, 71, 1697, 71, 1702, 1711, 71,
- 1704, 71, 1708, 1698, 71, 1699, 1710, 1701, 1703, 71,
- 1705, 1706, 71, 71, 1713, 1714, 1716, 71, 71, 1724,
- 1707, 71, 1715, 1717, 71, 1711, 1719, 1704, 1718, 1708,
- 71, 1721, 1720, 1710, 71, 1723, 71, 2749, 1706, 2749,
- 71, 71, 71, 1716, 71, 1725, 71, 1722, 71, 1715,
- 1717, 71, 71, 1719, 1726, 1718, 71, 1727, 1721, 1720,
- 1729, 71, 1723, 1730, 1731, 1733, 71, 71, 1734, 1732,
- 1736, 71, 1725, 1728, 1722, 1735, 71, 71, 1737, 1740,
-
- 71, 1726, 1746, 2749, 1727, 1743, 1749, 1729, 71, 71,
- 1730, 1731, 1733, 71, 1738, 1734, 1732, 71, 1741, 1739,
- 1728, 71, 1735, 1742, 71, 1737, 71, 71, 1744, 1748,
- 71, 1745, 1743, 71, 71, 71, 71, 1747, 71, 1750,
- 1751, 1738, 1754, 1752, 1755, 1741, 1739, 1756, 1753, 71,
- 1742, 71, 1757, 1758, 1759, 1744, 1748, 1761, 1745, 71,
- 1760, 71, 1762, 71, 1747, 71, 1750, 1751, 1763, 71,
- 1752, 71, 71, 1764, 1765, 1753, 1766, 1767, 71, 71,
- 1769, 1776, 2749, 71, 1761, 71, 71, 1760, 1768, 71,
- 1770, 1771, 1773, 71, 71, 1763, 71, 1774, 1777, 1772,
-
- 1764, 1765, 1775, 1766, 1778, 71, 71, 71, 71, 71,
- 1779, 71, 71, 1780, 71, 1768, 1781, 1770, 1771, 1773,
- 1782, 71, 1784, 1791, 1774, 71, 1772, 1783, 71, 1775,
- 2749, 1778, 1785, 1786, 71, 1787, 1788, 1789, 71, 1792,
- 1780, 71, 71, 1781, 71, 71, 1790, 1782, 71, 1784,
- 71, 71, 71, 1793, 1783, 1794, 71, 71, 1795, 1785,
- 1786, 71, 1787, 1788, 1789, 1796, 1792, 1798, 71, 1797,
- 1799, 1801, 71, 1790, 2749, 71, 71, 71, 71, 1800,
- 1793, 1802, 1794, 2749, 1804, 71, 2749, 71, 1803, 1807,
- 1806, 1809, 1796, 71, 1798, 1805, 1797, 1799, 1801, 71,
-
- 1808, 71, 71, 1812, 1810, 1813, 1800, 71, 1818, 71,
- 71, 1804, 1814, 71, 1811, 1803, 1807, 1806, 1809, 71,
- 1820, 1816, 1805, 71, 1815, 1817, 71, 1808, 71, 71,
- 71, 1810, 1813, 71, 1819, 71, 1822, 1821, 71, 1814,
- 71, 1811, 1827, 1825, 71, 1824, 71, 1820, 1816, 1823,
- 71, 1815, 1817, 1826, 2749, 2749, 1829, 1832, 71, 1830,
- 71, 1819, 71, 71, 1821, 71, 1831, 1828, 71, 1827,
- 1825, 71, 1824, 71, 71, 1833, 1823, 1834, 1836, 71,
- 1826, 71, 1837, 1829, 1832, 71, 1830, 71, 1838, 1840,
- 1835, 1839, 2749, 1831, 1828, 1841, 71, 71, 71, 1842,
-
- 71, 1843, 1833, 1844, 1834, 1836, 1845, 1847, 71, 1837,
- 2749, 1846, 1848, 2749, 2749, 71, 1840, 1835, 1839, 71,
- 71, 71, 1841, 1849, 1850, 71, 1842, 1853, 1843, 71,
- 1844, 71, 71, 1845, 1847, 1852, 1854, 1851, 1846, 1848,
- 71, 71, 71, 1855, 71, 1856, 1857, 1858, 2749, 1860,
- 1849, 1850, 71, 1859, 1853, 1862, 1863, 1868, 71, 1861,
- 71, 1872, 1852, 71, 1851, 1864, 71, 71, 2749, 71,
- 1855, 71, 1856, 1857, 1858, 71, 1860, 1865, 71, 71,
- 1859, 1866, 1867, 1863, 71, 1869, 1861, 71, 1870, 71,
- 1871, 1873, 1864, 71, 1874, 71, 71, 71, 2749, 1877,
-
- 71, 1878, 2749, 1879, 1865, 1880, 1875, 2749, 1866, 1867,
- 1884, 71, 1869, 71, 1876, 1870, 71, 1871, 1873, 71,
- 1881, 1874, 2749, 2749, 1882, 71, 71, 1883, 1878, 71,
- 1879, 71, 1880, 1875, 1885, 71, 2749, 1884, 71, 1886,
- 71, 1876, 71, 1889, 1887, 1888, 1891, 1881, 1893, 1890,
- 1894, 1882, 1892, 1895, 1883, 1898, 1896, 71, 71, 2749,
- 1897, 1885, 71, 71, 71, 71, 71, 1903, 71, 71,
- 1889, 71, 1888, 1891, 71, 1893, 1890, 1894, 1899, 1892,
- 71, 1900, 1898, 1896, 1901, 1902, 1907, 1897, 1904, 71,
- 2749, 71, 1909, 71, 1903, 1912, 1905, 1908, 1914, 71,
-
- 71, 71, 1911, 1913, 71, 1899, 1917, 71, 1900, 1906,
- 71, 1901, 1902, 1907, 1910, 1904, 71, 71, 1915, 1909,
- 71, 71, 71, 1905, 1908, 71, 71, 1916, 71, 1911,
- 1913, 1921, 1918, 1917, 1919, 1922, 1906, 1923, 1924, 1920,
- 1935, 1910, 1925, 1926, 2749, 1915, 71, 2749, 1927, 71,
- 71, 1931, 1938, 1930, 1916, 1932, 1940, 71, 2749, 1918,
- 1937, 71, 1928, 71, 1923, 1924, 71, 71, 1933, 1925,
- 71, 71, 71, 1929, 71, 1927, 1934, 1936, 71, 71,
- 1930, 71, 1932, 71, 1939, 71, 71, 1937, 71, 1928,
- 1941, 1942, 1943, 1946, 1944, 1933, 71, 71, 71, 71,
-
- 1929, 1945, 1947, 1934, 1936, 1948, 71, 1949, 1951, 1954,
- 2749, 1939, 2041, 71, 71, 71, 71, 1941, 1942, 1943,
- 1946, 1944, 1950, 71, 1952, 1953, 1956, 71, 1945, 1947,
- 1959, 71, 1948, 71, 1949, 71, 1954, 71, 1955, 71,
- 1957, 71, 1958, 1960, 71, 2749, 1961, 71, 71, 1950,
- 1962, 1952, 1953, 1956, 71, 1963, 1967, 71, 71, 71,
- 1964, 1970, 71, 71, 71, 1955, 1965, 1957, 1969, 1958,
- 1960, 71, 1966, 1961, 71, 1968, 1971, 1962, 71, 1973,
- 71, 71, 1963, 1967, 1972, 2749, 1975, 1964, 71, 1976,
- 1974, 1977, 71, 1965, 1980, 1969, 1978, 1983, 71, 1966,
-
- 71, 1979, 1968, 1971, 71, 1984, 1973, 1981, 71, 1985,
- 1982, 1972, 71, 1975, 1989, 71, 71, 1974, 71, 1986,
- 71, 1980, 1987, 1978, 71, 71, 71, 71, 1979, 71,
- 1988, 71, 1984, 1990, 1981, 1991, 1985, 1982, 1992, 1993,
- 1994, 71, 1995, 71, 1996, 71, 1986, 1997, 71, 1987,
- 1998, 1999, 2001, 2000, 71, 2003, 2002, 1988, 2007, 71,
- 71, 2004, 1991, 71, 71, 71, 1993, 71, 2005, 1995,
- 71, 71, 2006, 2008, 71, 71, 2009, 1998, 1999, 71,
- 2000, 2011, 71, 2002, 71, 2007, 2010, 2013, 2004, 71,
- 2012, 2749, 2017, 71, 71, 2005, 71, 2014, 71, 2006,
-
- 2008, 2015, 2018, 71, 71, 71, 2016, 2022, 2011, 2020,
- 2021, 2024, 2019, 2010, 71, 71, 2023, 2012, 71, 2017,
- 71, 71, 71, 71, 2014, 2026, 71, 2025, 2015, 71,
- 2027, 71, 2028, 2016, 71, 2029, 2020, 2021, 2024, 2019,
- 71, 2030, 2032, 2023, 2033, 2034, 2031, 71, 71, 2035,
- 71, 2043, 2026, 2749, 2025, 2037, 71, 2027, 2040, 2028,
- 71, 71, 2029, 71, 71, 2038, 71, 2039, 2030, 2032,
- 71, 2033, 2034, 2031, 2036, 2042, 2035, 71, 2044, 2046,
- 71, 71, 2037, 71, 2045, 2040, 71, 71, 2052, 71,
- 2047, 2048, 2038, 71, 2039, 2049, 2050, 2051, 2053, 2057,
-
- 71, 2036, 2042, 2056, 2749, 2044, 2046, 2749, 71, 71,
- 71, 2045, 2054, 71, 71, 2055, 2749, 2047, 2048, 71,
- 71, 71, 2049, 2050, 2051, 2053, 2058, 2064, 2065, 71,
- 2056, 71, 2066, 71, 2059, 2062, 2060, 2063, 2061, 2054,
- 71, 2067, 2055, 71, 2075, 2069, 71, 2068, 71, 2071,
- 71, 2070, 71, 2058, 71, 2065, 71, 71, 71, 2066,
- 2072, 2059, 2062, 2060, 2063, 2061, 71, 2076, 2067, 2074,
- 2073, 71, 2069, 71, 2068, 2077, 2071, 71, 2070, 2078,
- 2080, 2081, 71, 2079, 71, 2749, 2749, 2072, 2082, 2749,
- 2084, 2083, 2085, 71, 2076, 2086, 2074, 2073, 2088, 2091,
-
- 2089, 2087, 71, 71, 71, 71, 2078, 71, 71, 71,
- 2079, 2090, 71, 71, 2092, 71, 71, 2084, 2083, 2085,
- 2095, 2093, 2086, 71, 71, 2088, 71, 2089, 2087, 2096,
- 2094, 2099, 2100, 2097, 2103, 71, 71, 71, 2090, 71,
- 71, 2092, 2098, 71, 71, 2101, 2102, 2095, 2093, 71,
- 2104, 71, 71, 2105, 2106, 71, 2096, 2094, 2099, 2100,
- 2097, 2107, 71, 2108, 2110, 71, 71, 2109, 71, 2098,
- 2112, 71, 2101, 2102, 2111, 2113, 2119, 2104, 2114, 71,
- 2105, 2106, 2115, 71, 2116, 2117, 71, 71, 2107, 71,
- 2128, 2110, 2120, 2121, 2109, 71, 71, 2112, 2118, 71,
-
- 2749, 2111, 2113, 71, 2124, 2114, 2122, 71, 71, 2115,
- 71, 2116, 2125, 71, 2123, 71, 2126, 71, 2127, 2120,
- 71, 2129, 71, 2131, 2130, 2118, 71, 71, 71, 2133,
- 2132, 2124, 2135, 2122, 71, 71, 2136, 71, 2134, 2125,
- 2137, 2123, 2140, 71, 2749, 71, 2138, 71, 2129, 2139,
- 2131, 2130, 71, 71, 71, 71, 2133, 2132, 2141, 71,
- 2143, 71, 2142, 2136, 2144, 2134, 71, 2148, 2145, 71,
- 2146, 71, 71, 2138, 2147, 2149, 2139, 2150, 2151, 2152,
- 71, 2153, 2154, 2155, 71, 2141, 71, 2143, 71, 2142,
- 71, 71, 71, 2158, 2148, 2145, 2156, 2146, 2157, 71,
-
- 71, 2147, 2149, 2159, 2150, 2151, 71, 71, 71, 71,
- 71, 71, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 71,
- 2158, 71, 2167, 2156, 2222, 2157, 71, 71, 71, 71,
- 2159, 2168, 2169, 2171, 2173, 2749, 2174, 71, 2749, 2160,
- 2161, 2162, 2163, 71, 71, 71, 2170, 71, 2180, 2167,
- 2172, 71, 2177, 71, 71, 71, 71, 71, 2168, 2169,
- 2171, 71, 2176, 2174, 2175, 71, 71, 2178, 2179, 71,
- 71, 2182, 2181, 2170, 71, 2180, 2183, 2172, 2184, 2177,
- 2185, 71, 2186, 71, 2187, 71, 71, 71, 71, 2176,
- 71, 2175, 2189, 2188, 2178, 2179, 2190, 2191, 2182, 2181,
-
- 2192, 2749, 2193, 2183, 2194, 2184, 71, 2185, 71, 2186,
- 2195, 2187, 2196, 2749, 71, 2199, 2197, 2198, 71, 2189,
- 2188, 71, 71, 2190, 71, 71, 2200, 71, 71, 2193,
- 71, 2194, 71, 2201, 2202, 71, 71, 2195, 71, 2196,
- 2203, 71, 2199, 2197, 2198, 2204, 2205, 2749, 2206, 2207,
- 2209, 2208, 71, 2200, 2210, 71, 71, 2211, 71, 2220,
- 2201, 2202, 2212, 2214, 2749, 2749, 2221, 2203, 71, 2749,
- 2213, 71, 2204, 2205, 71, 2206, 71, 2209, 2208, 71,
- 2215, 71, 2216, 71, 71, 2217, 71, 2218, 2219, 2212,
- 2214, 71, 71, 71, 71, 2223, 71, 2213, 71, 2224,
-
- 2225, 2226, 2229, 2227, 71, 2231, 2228, 2215, 71, 2216,
- 71, 71, 2217, 71, 2218, 2219, 2230, 2232, 2233, 2235,
- 2749, 2749, 2223, 71, 71, 2749, 2224, 2225, 2226, 2229,
- 2227, 2234, 71, 2228, 2241, 2749, 2240, 71, 2242, 71,
- 2236, 71, 71, 2230, 2232, 71, 2235, 2237, 71, 2238,
- 71, 2244, 2239, 2243, 71, 2248, 2246, 71, 2234, 71,
- 71, 71, 71, 2240, 2245, 2242, 2247, 2236, 71, 2252,
- 2249, 2253, 2254, 2256, 2237, 2749, 2238, 2259, 71, 2239,
- 2243, 2250, 71, 2246, 71, 2251, 71, 71, 71, 71,
- 2749, 2245, 71, 2247, 2255, 2257, 71, 2249, 2253, 71,
-
- 71, 2258, 71, 2260, 71, 2261, 2262, 2264, 2250, 2263,
- 71, 2266, 2251, 2265, 2267, 2268, 71, 71, 2749, 2749,
- 71, 2255, 2257, 71, 2270, 71, 71, 2275, 2258, 71,
- 2260, 71, 2261, 2262, 2264, 2269, 2263, 71, 71, 2271,
- 2265, 2267, 2268, 2274, 2272, 2273, 71, 2276, 71, 71,
- 2278, 2270, 71, 2277, 2275, 71, 2279, 2284, 71, 2280,
- 2281, 2749, 2269, 2285, 71, 71, 2271, 2282, 2289, 71,
- 2274, 2272, 2273, 2286, 2276, 2283, 71, 71, 2290, 71,
- 2277, 2287, 71, 71, 71, 71, 2280, 2281, 2288, 71,
- 2285, 2292, 2291, 71, 2282, 71, 2293, 2749, 2294, 71,
-
- 2286, 2298, 2283, 2295, 2296, 71, 71, 2297, 2287, 2299,
- 71, 2749, 2749, 2300, 2749, 2288, 2302, 2749, 71, 2291,
- 71, 2301, 2303, 2293, 2304, 2306, 71, 2305, 71, 71,
- 71, 2296, 71, 71, 2297, 71, 2299, 2307, 2308, 71,
- 2300, 71, 71, 2302, 2309, 2312, 71, 71, 2301, 2303,
- 2310, 2304, 2306, 2311, 2305, 2313, 2749, 2314, 2315, 71,
- 71, 71, 2316, 71, 2307, 2308, 71, 71, 2317, 2319,
- 71, 2309, 2312, 71, 2321, 71, 71, 2310, 2318, 2320,
- 2311, 2322, 2313, 71, 2314, 2315, 71, 71, 2323, 2316,
- 2324, 2325, 71, 71, 2328, 2317, 71, 2326, 71, 2327,
-
- 2329, 2321, 2330, 71, 71, 2318, 2320, 2333, 2322, 2331,
- 2336, 2332, 2335, 2334, 2339, 71, 2338, 2324, 2325, 2337,
- 2340, 71, 71, 71, 2326, 71, 2327, 71, 71, 71,
- 2341, 71, 71, 71, 2333, 71, 2331, 2336, 2332, 2335,
- 2334, 71, 71, 2338, 2342, 2343, 2337, 71, 2344, 2346,
- 2749, 2347, 71, 2345, 2348, 2349, 71, 71, 2352, 2350,
- 2351, 2353, 2749, 2354, 2355, 2357, 2358, 71, 2360, 2749,
- 2361, 71, 2343, 2749, 71, 71, 2346, 71, 2347, 2362,
- 71, 71, 71, 71, 2356, 2352, 2350, 2351, 71, 71,
- 2354, 71, 71, 2358, 2359, 2365, 71, 71, 2363, 71,
-
- 71, 2366, 71, 2364, 2368, 2367, 2362, 71, 71, 2369,
- 2371, 2356, 71, 2370, 2749, 71, 2372, 2373, 2375, 2374,
- 2749, 2359, 2365, 2377, 2376, 71, 71, 2381, 2366, 2749,
- 71, 2368, 2367, 71, 2380, 2384, 71, 2371, 71, 71,
- 2370, 71, 71, 71, 2373, 2375, 2374, 71, 2378, 2379,
- 2377, 2376, 2382, 2383, 2381, 2385, 71, 2394, 71, 71,
- 2387, 2380, 71, 71, 2386, 2388, 71, 2390, 71, 2389,
- 2749, 2391, 2749, 2392, 2401, 2378, 2379, 71, 2393, 2382,
- 2383, 2395, 2385, 71, 2394, 2397, 71, 2402, 2396, 2398,
- 2404, 2386, 71, 71, 2390, 71, 2389, 71, 2391, 71,
-
- 2392, 71, 2399, 71, 71, 2393, 2400, 71, 2395, 71,
- 2403, 71, 2397, 71, 2402, 2396, 2398, 71, 2405, 71,
- 2406, 2407, 2408, 2409, 2410, 2749, 2414, 2413, 2412, 2399,
- 2411, 2415, 71, 2400, 2417, 2418, 2749, 2403, 71, 71,
- 71, 2749, 2416, 71, 2749, 2405, 71, 71, 2407, 2408,
- 2409, 71, 71, 71, 2413, 2412, 71, 2411, 71, 2419,
- 2420, 2417, 71, 2422, 2421, 71, 2423, 2424, 71, 2416,
- 2425, 2426, 2749, 2427, 71, 2428, 2433, 71, 71, 71,
- 2431, 2429, 2430, 2432, 71, 71, 2419, 2420, 2434, 2435,
- 2422, 2421, 2440, 2423, 2424, 71, 2436, 2425, 2426, 71,
-
- 2427, 71, 2428, 71, 71, 2437, 71, 2431, 2429, 2430,
- 2432, 2438, 71, 2439, 71, 71, 71, 2441, 2443, 71,
- 2442, 2444, 2445, 2436, 71, 2447, 2448, 2450, 71, 2446,
- 71, 2749, 2437, 2454, 71, 71, 2749, 2749, 2438, 71,
- 2439, 2449, 71, 71, 2441, 71, 2749, 2442, 2444, 2445,
- 2452, 71, 2447, 2451, 71, 2455, 2446, 2453, 71, 2456,
- 71, 71, 71, 2458, 71, 2457, 2460, 2459, 2449, 71,
- 2461, 2749, 2464, 71, 71, 2465, 2462, 2452, 71, 2466,
- 2451, 71, 2455, 71, 2453, 2467, 2456, 2469, 71, 71,
- 2458, 2471, 2457, 2460, 2459, 2463, 71, 2461, 71, 71,
-
- 2470, 2468, 2465, 2462, 2472, 2474, 71, 71, 2473, 71,
- 2476, 71, 71, 71, 71, 71, 2475, 2477, 2471, 2478,
- 2479, 2480, 2463, 2481, 71, 71, 2482, 2470, 2468, 2490,
- 71, 71, 2474, 71, 2485, 2473, 71, 2476, 2483, 2488,
- 2491, 71, 2486, 2475, 2477, 2492, 2478, 2479, 71, 71,
- 71, 2487, 71, 2482, 71, 2489, 71, 2484, 2493, 71,
- 2495, 2485, 71, 2494, 71, 71, 2488, 2491, 2496, 2486,
- 71, 71, 2492, 71, 2497, 2498, 2749, 2499, 2487, 2502,
- 2503, 2500, 2489, 2501, 2484, 2493, 71, 71, 2506, 2507,
- 2494, 2510, 71, 2509, 2508, 71, 2511, 2512, 71, 2504,
-
- 2505, 2497, 71, 71, 2499, 71, 2502, 71, 2500, 71,
- 2501, 71, 71, 2514, 2515, 71, 71, 2513, 71, 71,
- 2509, 2508, 2516, 71, 2512, 2517, 2504, 2505, 2518, 2519,
- 71, 2520, 2521, 2749, 2522, 71, 2523, 71, 2524, 71,
- 2514, 71, 2527, 2530, 2513, 2529, 2525, 2531, 2526, 71,
- 71, 71, 71, 71, 2528, 2518, 71, 2533, 2520, 2521,
- 71, 2522, 71, 71, 2532, 2524, 71, 71, 2534, 71,
- 71, 2535, 2529, 2525, 71, 2526, 2537, 71, 2536, 2538,
- 2539, 2528, 2540, 71, 2749, 2542, 71, 71, 2543, 71,
- 2541, 2532, 2544, 2749, 2545, 2534, 71, 71, 71, 71,
-
- 71, 71, 71, 2537, 71, 2536, 2538, 2539, 2551, 2540,
- 2550, 71, 2542, 2546, 2547, 2543, 71, 2541, 2553, 2544,
- 2552, 2545, 71, 2548, 2549, 71, 2554, 71, 2555, 2556,
- 71, 2557, 71, 71, 2558, 2551, 2561, 2550, 2559, 2560,
- 2546, 2547, 2562, 2565, 2566, 2553, 2567, 2552, 2563, 2564,
- 2548, 2549, 71, 71, 2568, 71, 2556, 71, 71, 71,
- 2569, 71, 71, 2561, 2571, 71, 71, 71, 2572, 71,
- 2565, 71, 71, 2567, 2570, 2563, 2564, 71, 2573, 2574,
- 2575, 2568, 71, 71, 2579, 2577, 2576, 2569, 2578, 2580,
- 2581, 2571, 71, 2584, 71, 2572, 2582, 2583, 71, 71,
-
- 2588, 2570, 2590, 71, 2585, 71, 71, 2575, 71, 71,
- 2586, 2587, 2577, 2576, 2589, 2578, 71, 2591, 2592, 71,
- 2584, 2593, 71, 2582, 2583, 2594, 71, 71, 2595, 71,
- 2597, 2585, 71, 2596, 2598, 2599, 71, 2586, 2587, 2600,
- 71, 2589, 2601, 71, 71, 71, 71, 2602, 71, 2603,
- 71, 2604, 2594, 2606, 71, 71, 2609, 71, 71, 2607,
- 2596, 2598, 2599, 2605, 71, 71, 2600, 2608, 71, 2601,
- 2610, 2611, 2617, 2612, 71, 71, 2603, 2615, 2604, 71,
- 2606, 71, 2616, 71, 2614, 2619, 2607, 2613, 71, 71,
- 2605, 71, 2749, 71, 2608, 71, 71, 2610, 2611, 71,
-
- 2612, 2618, 2621, 2620, 2615, 71, 71, 2623, 71, 2616,
- 71, 2614, 2619, 2622, 2613, 71, 2624, 71, 2629, 2625,
- 2626, 2749, 2627, 71, 2630, 2628, 71, 2749, 2618, 2621,
- 2620, 2631, 71, 71, 2623, 2632, 2637, 71, 71, 71,
- 2622, 2633, 71, 2624, 71, 2629, 2625, 2626, 71, 2627,
- 2634, 2630, 2628, 71, 2635, 2638, 71, 2636, 2631, 2639,
- 2641, 71, 2632, 71, 2640, 2642, 2643, 2646, 2633, 2644,
- 71, 2645, 2650, 71, 71, 2647, 71, 2634, 2648, 2653,
- 71, 2635, 2638, 2657, 2636, 2661, 71, 71, 2649, 71,
- 71, 2640, 71, 2643, 2646, 71, 2644, 71, 2645, 2651,
-
- 71, 2652, 2647, 2654, 71, 2648, 71, 2655, 71, 2656,
- 71, 71, 71, 2658, 2659, 2649, 2660, 71, 71, 71,
- 2662, 2665, 2663, 2664, 71, 2749, 2651, 2666, 2652, 71,
- 2654, 2667, 2668, 71, 2655, 71, 2656, 71, 71, 71,
- 2658, 2659, 2669, 2660, 2670, 71, 2671, 2672, 2665, 2663,
- 2664, 71, 71, 2673, 71, 71, 2674, 2676, 2667, 2668,
- 2677, 2680, 2682, 2683, 2675, 71, 2678, 71, 71, 2669,
- 71, 2670, 71, 2671, 2672, 71, 2681, 2679, 2684, 71,
- 2673, 2749, 71, 2674, 2676, 71, 2685, 2677, 71, 71,
- 2683, 2675, 2686, 2678, 71, 2688, 2689, 2690, 71, 2687,
-
- 71, 2692, 2691, 2681, 2679, 2684, 2696, 71, 71, 71,
- 2693, 2749, 2694, 2685, 71, 2749, 2699, 2698, 71, 2686,
- 71, 2700, 2749, 2689, 71, 71, 2687, 71, 2692, 2691,
- 71, 71, 2695, 2697, 2703, 2708, 2706, 2693, 71, 2694,
- 71, 71, 71, 2699, 2698, 2704, 2701, 2705, 71, 2702,
- 71, 2707, 2709, 71, 2711, 71, 71, 71, 2713, 2695,
- 2697, 2703, 2708, 2706, 71, 2714, 71, 2710, 71, 2716,
- 2718, 2715, 2704, 2701, 2705, 2712, 2702, 71, 2707, 2709,
- 71, 2711, 2717, 71, 71, 2713, 2719, 2720, 2721, 71,
- 71, 71, 2714, 71, 2710, 2724, 2716, 71, 2715, 2722,
-
- 2723, 2725, 2712, 71, 2727, 2749, 2749, 2729, 71, 2717,
- 2726, 2730, 71, 2719, 2720, 71, 2728, 2731, 71, 71,
- 71, 2733, 2724, 71, 71, 71, 2722, 2723, 2725, 71,
- 2734, 71, 2732, 71, 2729, 2737, 2738, 2726, 2730, 2740,
- 71, 2735, 2736, 2728, 2731, 2739, 2741, 71, 2733, 71,
- 71, 2742, 2743, 2744, 2747, 2748, 2745, 71, 2749, 2732,
- 2749, 71, 2737, 71, 71, 71, 71, 2749, 2735, 2736,
- 2749, 71, 2739, 71, 71, 71, 2746, 2749, 2742, 2743,
- 2744, 71, 71, 2745, 71, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
-
- 2749, 2749, 2749, 2746, 43, 43, 43, 43, 43, 43,
- 43, 48, 48, 48, 48, 48, 48, 48, 53, 53,
- 53, 53, 53, 53, 53, 59, 59, 59, 59, 59,
- 59, 59, 64, 64, 64, 64, 64, 64, 64, 74,
- 74, 2749, 74, 74, 74, 74, 140, 140, 2749, 2749,
- 2749, 140, 140, 142, 142, 2749, 2749, 142, 2749, 142,
- 144, 2749, 2749, 2749, 2749, 2749, 144, 147, 147, 2749,
- 2749, 2749, 147, 147, 149, 2749, 2749, 2749, 2749, 2749,
- 149, 151, 151, 2749, 151, 151, 151, 151, 75, 75,
- 2749, 75, 75, 75, 75, 13, 2749, 2749, 2749, 2749,
-
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749
+ 70, 126, 127, 149, 180, 149, 149, 70, 149, 70,
+ 70, 75, 70, 75, 75, 165, 75, 175, 70, 168,
+
+ 169, 166, 75, 167, 71, 176, 177, 183, 71, 182,
+ 2904, 152, 181, 178, 294, 2904, 71, 190, 188, 1139,
+ 71, 71, 165, 2904, 175, 71, 168, 169, 166, 76,
+ 167, 71, 176, 177, 183, 71, 182, 191, 184, 181,
+ 178, 185, 189, 193, 190, 198, 71, 194, 196, 71,
+ 71, 202, 201, 197, 186, 187, 71, 192, 71, 71,
+ 199, 2904, 71, 195, 191, 184, 71, 71, 185, 189,
+ 193, 71, 198, 206, 194, 196, 211, 203, 202, 201,
+ 197, 186, 187, 71, 192, 204, 205, 199, 207, 208,
+ 195, 71, 71, 209, 210, 71, 71, 71, 212, 213,
+
+ 206, 71, 71, 211, 203, 71, 216, 2904, 214, 217,
+ 221, 71, 204, 205, 215, 207, 208, 71, 71, 218,
+ 209, 210, 71, 223, 71, 212, 213, 224, 228, 2904,
+ 219, 227, 2904, 216, 220, 214, 217, 221, 71, 71,
+ 71, 215, 236, 71, 225, 230, 218, 226, 229, 231,
+ 223, 71, 235, 71, 224, 228, 71, 219, 227, 232,
+ 71, 220, 237, 239, 71, 240, 2904, 71, 233, 236,
+ 280, 225, 230, 238, 226, 229, 231, 71, 71, 235,
+ 234, 2904, 71, 71, 71, 71, 232, 241, 242, 237,
+ 239, 144, 240, 144, 144, 233, 144, 280, 243, 149,
+
+ 238, 149, 149, 75, 149, 75, 75, 234, 75, 245,
+ 71, 150, 244, 246, 241, 242, 247, 249, 71, 250,
+ 251, 2904, 252, 248, 254, 71, 253, 255, 71, 340,
+ 71, 71, 2904, 71, 71, 71, 245, 259, 71, 244,
+ 246, 152, 260, 247, 249, 71, 250, 251, 71, 252,
+ 248, 254, 256, 253, 255, 258, 71, 71, 257, 71,
+ 270, 274, 262, 276, 259, 271, 263, 272, 71, 260,
+ 275, 2904, 284, 71, 273, 278, 71, 71, 279, 2904,
+ 421, 71, 258, 264, 71, 257, 71, 270, 274, 71,
+ 71, 277, 271, 263, 272, 71, 71, 275, 71, 284,
+
+ 71, 273, 278, 281, 285, 279, 293, 71, 2904, 282,
+ 264, 265, 283, 286, 2904, 71, 266, 71, 277, 291,
+ 2904, 267, 2904, 2904, 71, 298, 71, 268, 269, 2904,
+ 281, 285, 287, 293, 71, 71, 282, 288, 265, 283,
+ 286, 71, 295, 266, 305, 292, 291, 300, 267, 289,
+ 296, 290, 71, 299, 268, 269, 303, 71, 71, 287,
+ 71, 297, 71, 301, 288, 304, 71, 306, 71, 295,
+ 307, 305, 292, 308, 311, 2904, 289, 302, 290, 71,
+ 299, 71, 71, 303, 309, 310, 312, 313, 297, 314,
+ 2904, 315, 71, 71, 2904, 71, 428, 71, 71, 71,
+
+ 308, 311, 71, 316, 302, 71, 71, 71, 71, 317,
+ 318, 309, 310, 312, 313, 319, 314, 320, 315, 321,
+ 322, 325, 71, 71, 71, 71, 71, 71, 323, 71,
+ 316, 326, 327, 324, 328, 330, 317, 318, 71, 333,
+ 71, 71, 319, 329, 320, 332, 321, 322, 331, 334,
+ 71, 71, 336, 71, 341, 323, 335, 71, 326, 327,
+ 324, 337, 330, 339, 71, 71, 71, 338, 343, 2904,
+ 329, 71, 332, 71, 344, 331, 71, 342, 346, 350,
+ 71, 71, 71, 335, 71, 347, 71, 348, 337, 71,
+ 339, 345, 2904, 354, 338, 349, 355, 352, 71, 71,
+
+ 71, 344, 150, 71, 342, 346, 350, 71, 351, 353,
+ 356, 357, 347, 71, 348, 71, 358, 359, 345, 71,
+ 365, 2904, 349, 363, 352, 71, 360, 366, 71, 71,
+ 362, 361, 71, 71, 367, 351, 353, 356, 357, 71,
+ 71, 368, 71, 71, 359, 364, 370, 71, 71, 371,
+ 363, 71, 71, 360, 366, 71, 372, 362, 361, 71,
+ 373, 367, 374, 376, 375, 378, 377, 71, 368, 380,
+ 2904, 71, 364, 370, 71, 71, 371, 381, 382, 379,
+ 387, 385, 71, 372, 71, 2904, 71, 373, 71, 374,
+ 376, 375, 71, 377, 383, 2904, 386, 71, 388, 2904,
+
+ 389, 71, 71, 392, 381, 71, 379, 71, 385, 71,
+ 71, 384, 71, 390, 391, 393, 401, 71, 71, 71,
+ 395, 383, 394, 386, 396, 388, 397, 389, 71, 71,
+ 392, 71, 399, 71, 402, 398, 410, 411, 384, 71,
+ 390, 391, 393, 71, 71, 400, 71, 395, 71, 394,
+ 403, 396, 71, 397, 71, 417, 71, 412, 71, 399,
+ 71, 402, 398, 410, 411, 71, 416, 2904, 418, 71,
+ 2904, 2904, 400, 413, 426, 414, 2904, 403, 404, 71,
+ 422, 405, 417, 71, 412, 437, 406, 407, 408, 409,
+ 71, 415, 71, 416, 425, 418, 71, 71, 419, 420,
+
+ 413, 426, 414, 430, 71, 404, 71, 422, 405, 423,
+ 427, 429, 424, 406, 407, 408, 409, 71, 415, 71,
+ 431, 425, 432, 71, 435, 419, 420, 433, 71, 71,
+ 430, 71, 71, 71, 436, 434, 423, 427, 429, 424,
+ 2904, 438, 71, 71, 71, 439, 71, 431, 71, 432,
+ 440, 435, 441, 442, 433, 2904, 446, 453, 451, 443,
+ 2904, 436, 434, 444, 1014, 445, 454, 71, 438, 71,
+ 2904, 452, 439, 2904, 71, 71, 71, 465, 447, 441,
+ 442, 2904, 71, 446, 71, 451, 443, 71, 71, 71,
+ 444, 448, 445, 454, 449, 71, 450, 71, 452, 469,
+
+ 466, 455, 71, 467, 465, 447, 71, 456, 468, 472,
+ 490, 457, 71, 470, 481, 71, 2904, 2904, 448, 458,
+ 71, 449, 71, 450, 484, 71, 469, 466, 455, 471,
+ 467, 480, 71, 2904, 456, 468, 472, 71, 457, 482,
+ 470, 481, 71, 71, 483, 71, 458, 459, 485, 460,
+ 488, 484, 486, 489, 150, 496, 471, 493, 480, 71,
+ 71, 71, 461, 491, 71, 462, 487, 463, 71, 464,
+ 71, 71, 502, 71, 459, 485, 460, 488, 71, 486,
+ 489, 492, 496, 2904, 493, 2904, 2904, 507, 71, 461,
+ 491, 494, 462, 487, 463, 2904, 464, 473, 474, 497,
+
+ 495, 499, 2904, 501, 71, 498, 71, 475, 492, 476,
+ 477, 478, 71, 71, 479, 71, 503, 500, 506, 71,
+ 505, 2904, 71, 71, 473, 474, 497, 495, 499, 510,
+ 501, 71, 498, 504, 475, 71, 476, 477, 478, 71,
+ 71, 479, 71, 503, 500, 506, 508, 505, 71, 517,
+ 509, 71, 511, 512, 2904, 513, 510, 514, 515, 516,
+ 504, 71, 71, 522, 519, 520, 2904, 518, 71, 71,
+ 523, 524, 71, 508, 71, 2904, 517, 509, 71, 532,
+ 521, 71, 513, 71, 514, 515, 516, 71, 71, 71,
+ 522, 519, 520, 525, 518, 527, 526, 523, 524, 528,
+
+ 531, 71, 533, 534, 71, 71, 532, 521, 71, 535,
+ 529, 537, 530, 536, 546, 2904, 2904, 71, 71, 71,
+ 525, 71, 527, 526, 538, 71, 528, 531, 539, 533,
+ 534, 541, 71, 547, 542, 540, 2904, 529, 537, 530,
+ 536, 71, 71, 543, 550, 544, 71, 71, 71, 545,
+ 71, 538, 548, 554, 575, 539, 71, 71, 541, 71,
+ 547, 542, 540, 549, 71, 71, 71, 551, 71, 71,
+ 543, 550, 544, 552, 556, 71, 545, 555, 557, 548,
+ 554, 553, 558, 71, 71, 561, 71, 559, 560, 71,
+ 549, 562, 563, 71, 551, 564, 2904, 565, 71, 71,
+
+ 552, 556, 2904, 71, 555, 557, 71, 568, 553, 558,
+ 71, 71, 561, 71, 559, 560, 567, 570, 562, 563,
+ 566, 71, 564, 71, 565, 71, 71, 574, 571, 569,
+ 572, 573, 71, 576, 568, 71, 71, 71, 71, 577,
+ 71, 578, 580, 567, 570, 581, 579, 566, 582, 2904,
+ 2904, 71, 584, 2904, 574, 571, 569, 572, 573, 71,
+ 576, 71, 587, 71, 585, 589, 588, 583, 578, 580,
+ 71, 71, 581, 579, 71, 71, 71, 590, 591, 584,
+ 71, 592, 596, 71, 594, 593, 597, 586, 71, 587,
+ 71, 595, 589, 588, 583, 1259, 71, 71, 607, 639,
+
+ 71, 71, 71, 71, 590, 591, 71, 2904, 592, 596,
+ 71, 594, 593, 597, 586, 606, 608, 2904, 595, 598,
+ 609, 2904, 71, 71, 599, 607, 600, 611, 71, 610,
+ 2904, 71, 601, 2904, 602, 615, 2904, 603, 604, 71,
+ 71, 2904, 606, 608, 605, 71, 598, 609, 612, 616,
+ 71, 599, 613, 600, 611, 614, 610, 71, 620, 601,
+ 71, 602, 615, 617, 603, 604, 623, 71, 618, 71,
+ 71, 605, 621, 71, 2904, 612, 616, 624, 619, 613,
+ 622, 71, 614, 626, 71, 620, 625, 628, 71, 627,
+ 617, 2904, 2904, 623, 629, 2904, 71, 633, 632, 621,
+
+ 71, 71, 71, 71, 624, 619, 71, 622, 636, 71,
+ 626, 630, 631, 625, 628, 71, 627, 71, 634, 71,
+ 71, 629, 635, 637, 633, 632, 71, 640, 638, 71,
+ 650, 641, 642, 643, 71, 636, 644, 648, 630, 631,
+ 71, 71, 71, 71, 645, 634, 71, 646, 71, 635,
+ 637, 150, 647, 71, 640, 638, 649, 71, 641, 642,
+ 643, 651, 71, 644, 648, 652, 71, 653, 656, 654,
+ 71, 645, 2904, 655, 646, 71, 657, 2904, 659, 647,
+ 71, 71, 658, 649, 71, 664, 667, 663, 71, 668,
+ 665, 669, 652, 71, 670, 656, 654, 71, 71, 71,
+
+ 655, 660, 71, 657, 71, 659, 666, 671, 661, 658,
+ 672, 662, 673, 71, 663, 2904, 71, 71, 71, 71,
+ 71, 71, 674, 71, 676, 675, 677, 683, 660, 2904,
+ 678, 2904, 71, 666, 71, 661, 679, 680, 662, 673,
+ 681, 71, 71, 682, 688, 71, 71, 71, 71, 674,
+ 684, 676, 675, 677, 71, 2904, 685, 678, 71, 71,
+ 686, 687, 689, 679, 680, 71, 71, 681, 71, 691,
+ 682, 694, 690, 71, 692, 697, 71, 684, 693, 699,
+ 71, 695, 71, 685, 71, 71, 696, 686, 687, 689,
+ 698, 700, 71, 71, 701, 71, 691, 71, 694, 690,
+
+ 703, 692, 697, 71, 702, 693, 699, 71, 695, 2904,
+ 704, 707, 71, 696, 706, 2904, 710, 698, 700, 709,
+ 708, 2904, 71, 713, 71, 71, 71, 703, 711, 715,
+ 71, 702, 705, 71, 716, 71, 71, 704, 707, 712,
+ 719, 706, 71, 710, 714, 71, 709, 708, 71, 717,
+ 713, 71, 71, 71, 718, 711, 71, 71, 71, 705,
+ 720, 716, 721, 722, 723, 71, 712, 719, 724, 2904,
+ 726, 714, 727, 728, 725, 71, 717, 730, 2904, 71,
+ 729, 718, 2904, 739, 71, 71, 731, 720, 71, 732,
+ 722, 723, 71, 733, 71, 724, 71, 726, 734, 727,
+
+ 735, 725, 71, 736, 740, 71, 741, 729, 743, 71,
+ 71, 71, 71, 731, 71, 71, 732, 71, 737, 738,
+ 742, 745, 746, 744, 71, 71, 71, 735, 750, 747,
+ 736, 740, 71, 741, 748, 743, 751, 71, 71, 749,
+ 752, 2904, 71, 754, 753, 737, 738, 742, 755, 746,
+ 744, 71, 71, 71, 71, 750, 747, 71, 760, 761,
+ 756, 762, 2904, 751, 757, 71, 71, 752, 71, 71,
+ 754, 753, 758, 71, 759, 755, 765, 763, 767, 71,
+ 71, 71, 71, 764, 766, 71, 761, 756, 762, 71,
+ 71, 757, 71, 71, 768, 71, 769, 771, 2904, 758,
+
+ 770, 759, 774, 765, 763, 767, 71, 772, 773, 775,
+ 764, 766, 71, 71, 777, 71, 71, 782, 71, 776,
+ 781, 768, 2904, 71, 771, 71, 783, 770, 71, 774,
+ 71, 778, 779, 71, 772, 773, 775, 780, 785, 786,
+ 71, 777, 784, 71, 782, 71, 776, 781, 787, 71,
+ 71, 788, 71, 783, 71, 789, 791, 790, 778, 779,
+ 793, 798, 71, 71, 780, 785, 786, 792, 794, 784,
+ 71, 71, 796, 797, 795, 787, 71, 2904, 788, 71,
+ 71, 71, 789, 791, 790, 799, 800, 793, 798, 71,
+ 71, 801, 802, 71, 792, 794, 71, 803, 71, 796,
+
+ 797, 795, 804, 805, 71, 806, 71, 810, 807, 808,
+ 813, 809, 799, 800, 150, 814, 71, 71, 801, 802,
+ 71, 71, 71, 71, 803, 71, 818, 816, 822, 804,
+ 805, 811, 806, 71, 71, 807, 808, 71, 809, 812,
+ 815, 819, 814, 817, 820, 821, 71, 2904, 71, 71,
+ 71, 2904, 839, 818, 71, 823, 71, 71, 811, 71,
+ 71, 824, 827, 826, 825, 71, 812, 815, 819, 71,
+ 817, 820, 821, 71, 71, 833, 834, 835, 71, 839,
+ 836, 71, 823, 837, 841, 838, 71, 71, 824, 827,
+ 826, 825, 828, 2904, 71, 71, 829, 845, 840, 830,
+
+ 71, 71, 833, 834, 835, 843, 831, 836, 71, 832,
+ 837, 841, 838, 842, 71, 853, 2904, 858, 71, 828,
+ 844, 2904, 71, 829, 71, 840, 830, 71, 854, 71,
+ 855, 2904, 843, 831, 71, 860, 832, 71, 2904, 71,
+ 842, 856, 853, 71, 71, 857, 861, 844, 846, 847,
+ 859, 848, 2904, 862, 849, 854, 2904, 855, 71, 850,
+ 863, 71, 860, 865, 864, 851, 852, 2904, 856, 71,
+ 71, 866, 857, 861, 71, 846, 847, 859, 848, 71,
+ 862, 849, 71, 869, 867, 71, 850, 863, 71, 868,
+ 865, 864, 851, 852, 870, 871, 71, 71, 866, 71,
+
+ 872, 71, 873, 71, 876, 874, 71, 875, 878, 877,
+ 869, 867, 880, 882, 2904, 881, 868, 71, 71, 71,
+ 71, 870, 871, 71, 886, 885, 887, 872, 71, 873,
+ 71, 876, 874, 879, 875, 878, 877, 71, 71, 888,
+ 71, 883, 881, 889, 71, 890, 884, 71, 2904, 891,
+ 2904, 2904, 885, 894, 898, 892, 71, 895, 71, 893,
+ 879, 71, 71, 896, 901, 932, 888, 2904, 900, 71,
+ 71, 899, 890, 71, 71, 71, 891, 897, 71, 71,
+ 894, 71, 892, 71, 895, 71, 893, 71, 903, 71,
+ 896, 902, 904, 906, 905, 900, 71, 71, 899, 71,
+
+ 907, 908, 912, 910, 897, 71, 71, 911, 914, 909,
+ 71, 71, 2904, 2904, 71, 903, 71, 913, 902, 904,
+ 906, 905, 71, 71, 71, 71, 71, 907, 908, 912,
+ 910, 916, 918, 71, 911, 914, 909, 915, 919, 917,
+ 71, 920, 922, 923, 913, 921, 924, 71, 71, 925,
+ 71, 2904, 2904, 71, 71, 71, 926, 71, 916, 918,
+ 927, 929, 933, 71, 915, 71, 917, 71, 920, 922,
+ 923, 928, 921, 924, 931, 71, 925, 930, 71, 934,
+ 71, 937, 71, 926, 71, 935, 71, 927, 929, 933,
+ 936, 939, 938, 71, 71, 940, 942, 2904, 928, 949,
+
+ 941, 931, 71, 71, 930, 71, 934, 71, 937, 943,
+ 944, 951, 935, 71, 71, 946, 71, 936, 939, 938,
+ 71, 945, 71, 942, 947, 950, 948, 941, 71, 71,
+ 953, 71, 71, 71, 952, 954, 943, 944, 71, 956,
+ 2904, 71, 946, 71, 960, 955, 962, 71, 945, 957,
+ 71, 947, 950, 948, 961, 959, 966, 958, 968, 963,
+ 964, 952, 71, 967, 71, 965, 956, 71, 71, 71,
+ 71, 960, 955, 970, 971, 2904, 957, 71, 71, 71,
+ 71, 961, 959, 71, 958, 71, 963, 964, 71, 969,
+ 967, 972, 965, 974, 973, 71, 978, 975, 71, 976,
+
+ 970, 150, 71, 71, 71, 977, 71, 979, 981, 980,
+ 71, 989, 992, 1011, 2904, 71, 969, 71, 972, 71,
+ 974, 973, 71, 978, 975, 982, 976, 71, 2904, 2904,
+ 991, 71, 977, 990, 979, 981, 980, 71, 989, 71,
+ 994, 993, 71, 71, 2904, 71, 995, 997, 1008, 996,
+ 2904, 998, 982, 983, 71, 984, 71, 991, 71, 985,
+ 990, 986, 71, 71, 71, 999, 987, 994, 993, 71,
+ 1000, 988, 1001, 995, 997, 1008, 996, 71, 998, 1002,
+ 983, 1004, 984, 1003, 1012, 71, 985, 1006, 986, 2904,
+ 1010, 1005, 1007, 987, 1009, 71, 1013, 71, 988, 1001,
+
+ 1015, 2904, 71, 71, 1017, 71, 1002, 71, 1004, 71,
+ 1003, 71, 71, 1018, 1006, 1016, 71, 1010, 1005, 1007,
+ 71, 1009, 71, 71, 1026, 1027, 2904, 1030, 1028, 2904,
+ 1029, 1017, 71, 1036, 2904, 1038, 1031, 2904, 2904, 71,
+ 1018, 71, 1016, 1019, 2904, 71, 1032, 71, 1020, 1042,
+ 1021, 1026, 1027, 71, 1030, 1028, 1022, 1029, 71, 1033,
+ 71, 1023, 1024, 1031, 1037, 71, 1034, 71, 1025, 71,
+ 1019, 1035, 71, 1032, 71, 1020, 1039, 1021, 1041, 71,
+ 1043, 71, 1040, 1022, 1048, 2904, 1033, 71, 1023, 1024,
+ 71, 1037, 71, 1034, 1045, 1025, 1044, 1046, 1035, 1047,
+
+ 71, 1049, 71, 1039, 71, 1041, 1050, 1043, 1051, 1040,
+ 71, 1052, 71, 1060, 71, 71, 71, 1055, 71, 71,
+ 1058, 1045, 1054, 1044, 1046, 1056, 1047, 1053, 1049, 71,
+ 71, 1061, 71, 1050, 2904, 1051, 1059, 1057, 1052, 2904,
+ 71, 71, 71, 71, 1055, 71, 71, 1058, 1062, 1054,
+ 1063, 1064, 1056, 1065, 1053, 71, 1066, 71, 1061, 71,
+ 1067, 71, 1068, 1059, 1057, 71, 71, 1071, 1069, 1070,
+ 1073, 1072, 71, 2904, 1074, 1062, 1080, 1063, 1064, 1078,
+ 1065, 1075, 1079, 1066, 71, 71, 1082, 1067, 71, 1068,
+ 71, 71, 71, 71, 1071, 1069, 1070, 71, 1072, 1076,
+
+ 71, 1074, 71, 1080, 1077, 71, 1078, 1081, 1075, 1079,
+ 1083, 1084, 1085, 1082, 1086, 1087, 1088, 1089, 1091, 71,
+ 71, 2904, 71, 1090, 71, 71, 1097, 1092, 2904, 71,
+ 1094, 71, 1093, 1095, 1081, 1101, 1096, 1083, 1084, 1085,
+ 71, 71, 1087, 71, 1089, 1091, 71, 71, 71, 71,
+ 1090, 71, 71, 1097, 1092, 71, 1098, 1094, 1099, 1093,
+ 1095, 1100, 71, 1096, 1102, 1103, 2904, 71, 2904, 1105,
+ 1104, 1106, 2904, 1107, 71, 1109, 1110, 1108, 1111, 71,
+ 71, 71, 71, 1098, 71, 1099, 1112, 1113, 1116, 1114,
+ 71, 1102, 1103, 71, 71, 71, 1105, 1104, 1106, 71,
+
+ 1107, 1115, 1109, 1110, 1108, 1118, 1117, 1119, 1120, 71,
+ 71, 71, 71, 1121, 1113, 71, 1114, 1124, 71, 1122,
+ 71, 1125, 2904, 71, 1123, 1126, 71, 1127, 1115, 1128,
+ 71, 1131, 1118, 1117, 1132, 1120, 2904, 71, 71, 71,
+ 71, 1133, 71, 71, 1124, 71, 1122, 1129, 1125, 71,
+ 1130, 1123, 1126, 71, 1127, 1135, 1128, 1134, 71, 1136,
+ 1137, 1138, 71, 71, 1142, 1141, 71, 71, 1133, 1140,
+ 1145, 1153, 71, 71, 1129, 2904, 71, 1130, 71, 71,
+ 1151, 1144, 71, 71, 1134, 1146, 1136, 1137, 1138, 71,
+ 1147, 1142, 1141, 1143, 1148, 71, 1140, 71, 71, 1152,
+
+ 1149, 1150, 71, 71, 1154, 2904, 71, 71, 1144, 71,
+ 1155, 2904, 1146, 1156, 1163, 2904, 1158, 1147, 2904, 71,
+ 1143, 1148, 71, 1157, 1160, 1162, 1152, 1149, 1150, 71,
+ 1161, 1159, 71, 71, 71, 1164, 71, 1155, 71, 1166,
+ 1156, 1163, 71, 1158, 71, 71, 71, 71, 1165, 1169,
+ 1157, 1160, 1162, 1170, 1167, 1168, 71, 1161, 1159, 2904,
+ 2904, 71, 1164, 1171, 71, 1177, 71, 71, 1176, 1178,
+ 71, 1179, 2904, 1180, 71, 1165, 1169, 1172, 2904, 2904,
+ 1170, 1167, 1168, 1182, 71, 1183, 1173, 71, 1174, 71,
+ 1171, 1175, 1177, 1181, 71, 1176, 1178, 71, 1179, 71,
+
+ 1180, 71, 71, 1184, 1172, 1185, 1186, 71, 1187, 1188,
+ 1182, 71, 1183, 1173, 2904, 1174, 71, 1189, 1175, 1190,
+ 1181, 1191, 71, 1192, 1193, 1194, 1195, 71, 71, 2904,
+ 1184, 2904, 1185, 1186, 1197, 1187, 71, 1196, 71, 71,
+ 1198, 71, 71, 71, 1189, 71, 1190, 71, 1191, 71,
+ 1192, 1193, 1194, 1195, 1199, 71, 1200, 1201, 1205, 1203,
+ 1202, 1197, 1204, 1206, 1196, 71, 71, 1198, 71, 1211,
+ 1207, 71, 71, 1208, 1209, 71, 71, 71, 1210, 71,
+ 71, 1199, 71, 1200, 1201, 1205, 1203, 1202, 1212, 1204,
+ 1206, 1213, 71, 1215, 1214, 1218, 1211, 1207, 71, 1216,
+
+ 1208, 1209, 1221, 71, 1217, 1232, 1219, 71, 71, 1220,
+ 71, 1228, 1229, 2904, 1230, 1212, 71, 1231, 1213, 71,
+ 1215, 1214, 1218, 71, 1234, 71, 1235, 71, 71, 1221,
+ 71, 71, 1232, 1219, 1233, 1236, 1220, 1222, 1228, 1229,
+ 1223, 1224, 2904, 71, 1231, 1225, 71, 1237, 71, 1239,
+ 2904, 1226, 71, 1235, 1238, 1227, 71, 71, 2904, 71,
+ 71, 1233, 1236, 1240, 1222, 1241, 1244, 1223, 1224, 1246,
+ 1242, 1243, 1225, 71, 1237, 71, 1239, 71, 1226, 1245,
+ 71, 1238, 1227, 1251, 71, 1248, 71, 71, 1247, 1249,
+ 1240, 71, 1241, 1244, 71, 1250, 1246, 1242, 1243, 1252,
+
+ 2904, 71, 2904, 1258, 1260, 71, 1245, 1262, 1265, 1261,
+ 1251, 1267, 1248, 1266, 1263, 1247, 71, 1281, 2904, 71,
+ 71, 71, 71, 71, 1264, 1268, 1252, 71, 1253, 71,
+ 1258, 1260, 71, 1254, 1262, 1255, 1261, 1256, 1267, 1257,
+ 71, 1263, 71, 1269, 71, 1270, 71, 71, 1273, 1271,
+ 1272, 1264, 1268, 1277, 2904, 1253, 71, 71, 71, 1275,
+ 1254, 1274, 1255, 71, 1256, 1276, 1257, 71, 1280, 1283,
+ 1269, 71, 1270, 1278, 71, 1273, 1271, 1272, 71, 1282,
+ 1277, 71, 71, 1279, 1284, 71, 1275, 1288, 1274, 1285,
+ 71, 71, 1276, 1286, 1287, 1280, 71, 1289, 1291, 2904,
+
+ 1278, 1290, 71, 1292, 1293, 71, 1282, 1296, 71, 71,
+ 1279, 1284, 1294, 71, 1288, 71, 1285, 1295, 71, 1298,
+ 1286, 1287, 2904, 71, 71, 71, 71, 1300, 1290, 71,
+ 1292, 1293, 1301, 1297, 71, 1299, 1302, 1308, 1303, 1294,
+ 71, 1305, 71, 71, 1295, 1304, 1298, 71, 1306, 71,
+ 71, 1307, 1309, 71, 1300, 1310, 71, 1311, 1312, 1301,
+ 1297, 71, 1299, 1302, 1308, 1303, 1314, 1313, 1305, 71,
+ 71, 1315, 1304, 71, 71, 1306, 71, 71, 1307, 1309,
+ 71, 1316, 1310, 71, 1311, 1312, 1317, 71, 1318, 1319,
+ 1320, 71, 1321, 1314, 1313, 71, 1322, 1323, 1315, 1324,
+
+ 1325, 1327, 1326, 1328, 71, 71, 1329, 71, 1316, 71,
+ 71, 71, 1330, 71, 1331, 1340, 1319, 71, 71, 1321,
+ 71, 1338, 71, 1322, 1323, 1334, 71, 1325, 1327, 1326,
+ 1332, 1336, 71, 71, 1335, 71, 1333, 1342, 71, 1330,
+ 1343, 1337, 1340, 71, 71, 1341, 71, 71, 1338, 71,
+ 71, 1344, 1334, 1339, 71, 71, 1350, 1332, 1336, 71,
+ 71, 1335, 1345, 1333, 1342, 1346, 1347, 71, 1337, 1351,
+ 1349, 1348, 1341, 71, 71, 1353, 2904, 1352, 1344, 71,
+ 1339, 1358, 1354, 1350, 71, 1355, 1359, 71, 71, 1345,
+ 71, 1360, 1346, 1361, 71, 2904, 1351, 1349, 71, 71,
+
+ 1356, 1362, 1353, 1357, 1352, 1365, 71, 1363, 1358, 1354,
+ 1364, 71, 1355, 1359, 71, 71, 71, 71, 1366, 1368,
+ 1361, 2904, 71, 71, 1367, 1370, 1371, 1356, 1362, 1369,
+ 1357, 1373, 1365, 71, 1363, 71, 71, 1364, 71, 1372,
+ 71, 71, 1374, 1377, 2904, 1366, 1368, 1376, 71, 1378,
+ 1375, 1367, 1370, 1371, 1379, 71, 1369, 71, 1373, 71,
+ 1380, 1384, 71, 1383, 71, 71, 1372, 1381, 1382, 1374,
+ 1389, 71, 1385, 71, 1376, 71, 1378, 1375, 1386, 71,
+ 71, 1379, 1387, 71, 1388, 1391, 1390, 1380, 1384, 1394,
+ 1383, 71, 71, 1393, 1381, 1382, 71, 1389, 71, 1385,
+
+ 71, 1392, 71, 1395, 1396, 1386, 71, 71, 2904, 1387,
+ 1397, 1388, 1391, 1390, 1398, 71, 1399, 1401, 2904, 1402,
+ 1393, 71, 1400, 2904, 1405, 1409, 71, 1404, 1392, 2904,
+ 71, 1396, 71, 1403, 1407, 71, 71, 1397, 71, 71,
+ 71, 71, 1408, 1399, 1401, 71, 1402, 71, 1406, 1400,
+ 71, 1405, 1409, 71, 1404, 71, 1416, 1410, 1411, 1415,
+ 1403, 1407, 1413, 1412, 71, 71, 71, 1414, 1417, 1408,
+ 1418, 1419, 1421, 1424, 1420, 1406, 71, 1427, 71, 1428,
+ 71, 1422, 71, 1416, 1410, 1425, 1415, 71, 71, 71,
+ 71, 1423, 1426, 71, 71, 1417, 71, 1418, 1419, 1421,
+
+ 71, 1420, 1429, 1430, 1436, 71, 1428, 71, 1422, 71,
+ 71, 1438, 1425, 1431, 1432, 1435, 1433, 1434, 1423, 1426,
+ 1437, 71, 71, 71, 71, 71, 1439, 1441, 71, 1429,
+ 1440, 1436, 71, 1442, 1444, 71, 1443, 71, 1438, 1454,
+ 1431, 1432, 1435, 1433, 1434, 71, 1445, 1437, 71, 1450,
+ 71, 1446, 1447, 1439, 71, 71, 1448, 1440, 1451, 71,
+ 1442, 1444, 1455, 1443, 71, 71, 71, 1452, 1456, 1449,
+ 71, 71, 2904, 1445, 71, 1453, 1450, 71, 1446, 1447,
+ 1457, 1458, 1462, 1448, 71, 1451, 71, 2904, 1460, 1455,
+ 71, 1459, 1461, 1463, 1452, 1456, 1449, 71, 71, 71,
+
+ 1464, 1466, 1453, 71, 71, 1465, 1468, 1457, 1458, 71,
+ 1467, 71, 1470, 2904, 71, 1460, 1471, 1469, 1459, 1461,
+ 71, 1472, 1473, 71, 71, 1478, 1475, 1464, 1466, 1477,
+ 1474, 2904, 1465, 71, 1479, 1476, 71, 1467, 71, 71,
+ 71, 71, 71, 1471, 1469, 1482, 71, 71, 71, 1473,
+ 71, 71, 1478, 1475, 1480, 1481, 1477, 1474, 1483, 1485,
+ 71, 1479, 1476, 71, 1484, 1486, 1489, 71, 71, 1488,
+ 1493, 71, 1482, 1487, 1490, 71, 1491, 71, 1496, 71,
+ 2904, 1480, 1481, 71, 1494, 1483, 1485, 1492, 1502, 1497,
+ 71, 1484, 1486, 1489, 71, 71, 1488, 71, 71, 71,
+
+ 1487, 1490, 1495, 1491, 71, 1496, 1498, 71, 1499, 71,
+ 1500, 1494, 1501, 2904, 1492, 71, 1497, 1503, 71, 1504,
+ 1505, 1506, 71, 1507, 2904, 1508, 71, 71, 71, 1495,
+ 1509, 71, 71, 1498, 71, 1499, 71, 1500, 1510, 1501,
+ 1514, 1513, 1511, 2904, 1503, 1516, 1504, 1505, 1506, 71,
+ 1507, 1512, 1508, 1517, 1515, 1518, 71, 1509, 71, 71,
+ 71, 71, 71, 1520, 1519, 1510, 1521, 1514, 1513, 1511,
+ 71, 71, 1516, 1522, 1523, 71, 1524, 1525, 1512, 71,
+ 1517, 1515, 71, 1526, 2904, 1527, 71, 71, 1528, 1529,
+ 2904, 1519, 1533, 1521, 1531, 71, 1530, 71, 1532, 71,
+
+ 71, 1523, 71, 1524, 1525, 71, 71, 1539, 1540, 1534,
+ 1526, 71, 1527, 1535, 71, 1528, 1529, 1545, 71, 1533,
+ 71, 1531, 71, 1530, 71, 1532, 1536, 1541, 2904, 1537,
+ 71, 1547, 1543, 1542, 71, 1540, 1534, 1544, 2904, 71,
+ 1535, 1538, 1549, 1546, 1550, 71, 1548, 1556, 1551, 71,
+ 71, 1557, 1559, 1536, 1541, 71, 1537, 71, 1547, 1543,
+ 1542, 71, 71, 1555, 1544, 71, 71, 1552, 1538, 1553,
+ 1546, 1550, 71, 1548, 71, 1551, 71, 71, 1554, 71,
+ 1558, 1561, 1560, 71, 71, 71, 71, 71, 1562, 1563,
+ 1555, 1564, 1565, 1567, 1552, 1569, 1553, 1566, 1570, 71,
+
+ 71, 1568, 71, 71, 71, 1554, 71, 1558, 1561, 1560,
+ 71, 71, 71, 1571, 71, 71, 1563, 1576, 1564, 1565,
+ 1567, 1574, 1569, 1572, 1566, 1570, 1573, 1578, 1568, 1575,
+ 71, 1577, 1583, 71, 71, 71, 1579, 1582, 71, 1580,
+ 71, 71, 1581, 1584, 71, 71, 1589, 1586, 1574, 71,
+ 1572, 71, 1594, 1573, 1578, 71, 1575, 71, 1577, 1583,
+ 1585, 71, 71, 1579, 1582, 1587, 1580, 71, 1588, 1581,
+ 1584, 1595, 71, 1589, 1586, 1592, 1590, 71, 1596, 71,
+ 1593, 1591, 1597, 71, 1599, 1600, 1598, 1585, 71, 1601,
+ 1605, 71, 1587, 71, 1611, 1588, 1602, 71, 71, 71,
+
+ 1603, 71, 1592, 1590, 71, 1596, 1604, 1593, 1591, 1597,
+ 71, 71, 1600, 1598, 71, 1612, 1601, 1605, 71, 1606,
+ 1607, 1608, 71, 1602, 1609, 1610, 71, 1603, 71, 1613,
+ 1614, 1615, 1616, 1604, 1621, 1618, 71, 71, 1617, 71,
+ 71, 1637, 71, 71, 71, 71, 1606, 1607, 1608, 71,
+ 71, 1609, 1610, 1619, 1620, 71, 1613, 1614, 1615, 1616,
+ 71, 1621, 1618, 71, 1622, 1617, 1623, 1624, 71, 1625,
+ 1627, 1630, 1635, 1628, 1632, 71, 1629, 71, 1631, 1633,
+ 1619, 1620, 1638, 1626, 71, 71, 1634, 71, 71, 71,
+ 1639, 1622, 1636, 1623, 1624, 71, 1625, 1627, 1630, 71,
+
+ 1628, 71, 1640, 1629, 71, 1631, 71, 1644, 1641, 1642,
+ 1626, 1643, 71, 1634, 71, 1650, 71, 1639, 1645, 1636,
+ 1646, 1649, 1648, 71, 71, 1651, 1647, 1660, 1653, 71,
+ 1652, 2904, 71, 71, 71, 1641, 1642, 1654, 1643, 71,
+ 71, 1658, 1650, 1661, 71, 1645, 71, 1646, 1649, 71,
+ 1656, 71, 1651, 1647, 71, 1653, 1655, 1652, 1657, 71,
+ 1662, 1665, 1659, 71, 1654, 1663, 1666, 1664, 71, 71,
+ 71, 71, 71, 1667, 71, 71, 71, 1656, 2904, 1668,
+ 71, 1670, 1671, 1655, 71, 1657, 1669, 1662, 1665, 1659,
+ 71, 1672, 1663, 1666, 1664, 1674, 1673, 71, 71, 1675,
+
+ 1678, 1680, 1676, 1679, 71, 71, 1668, 1677, 1670, 71,
+ 1684, 2904, 1681, 1669, 2904, 71, 1682, 71, 1672, 71,
+ 71, 71, 1674, 1673, 71, 71, 1675, 1678, 71, 1676,
+ 1679, 71, 1683, 1685, 1677, 1686, 1687, 71, 1688, 1681,
+ 71, 1689, 1691, 1682, 1700, 1690, 71, 2904, 1693, 71,
+ 1694, 71, 71, 71, 1692, 71, 1695, 71, 1696, 1683,
+ 1685, 1697, 1686, 1687, 1698, 1688, 1699, 1701, 1689, 71,
+ 1707, 71, 1690, 1703, 71, 1693, 71, 1694, 1704, 71,
+ 1702, 1692, 71, 71, 71, 1696, 71, 1706, 71, 1705,
+ 1708, 1698, 71, 1699, 71, 71, 71, 1707, 71, 71,
+
+ 1703, 1709, 71, 1710, 1711, 1704, 1712, 1702, 1716, 1714,
+ 1713, 1718, 1717, 1719, 1706, 71, 1705, 1708, 71, 71,
+ 1720, 71, 1715, 71, 71, 1724, 71, 71, 1709, 1722,
+ 1710, 1711, 71, 1712, 1721, 1716, 1714, 1713, 71, 1717,
+ 71, 1723, 71, 1727, 1725, 71, 1726, 1720, 71, 1715,
+ 71, 1728, 1724, 1729, 1731, 1730, 1722, 71, 1732, 1733,
+ 1734, 1721, 71, 1735, 1737, 71, 71, 1738, 1723, 71,
+ 1727, 1725, 1736, 1726, 1739, 1741, 1743, 1742, 71, 71,
+ 71, 71, 1730, 1740, 71, 1732, 1733, 1734, 1744, 1746,
+ 71, 71, 71, 1745, 1738, 71, 71, 1753, 1751, 1736,
+
+ 71, 1752, 1761, 1743, 1742, 71, 71, 71, 71, 1754,
+ 1740, 1747, 1748, 1749, 1757, 71, 71, 1755, 1750, 71,
+ 1745, 71, 1756, 1758, 1762, 1751, 71, 71, 1752, 71,
+ 1759, 1760, 1765, 2904, 71, 1767, 1754, 1763, 1747, 1748,
+ 1749, 1757, 71, 71, 71, 1750, 71, 1764, 71, 71,
+ 1758, 1762, 1770, 71, 1766, 71, 1768, 1759, 1760, 71,
+ 1769, 71, 1767, 71, 1763, 71, 1771, 1773, 1772, 1774,
+ 1775, 71, 1776, 1778, 1764, 71, 1777, 1779, 71, 1770,
+ 1780, 1766, 71, 1768, 2904, 2904, 71, 1769, 71, 1781,
+ 71, 1782, 1783, 71, 71, 1772, 1774, 1775, 1785, 1776,
+
+ 1788, 71, 1789, 1777, 71, 71, 1787, 1780, 1784, 71,
+ 71, 71, 1786, 71, 1790, 1794, 1781, 71, 1782, 1783,
+ 1791, 71, 71, 1792, 71, 1785, 1793, 1788, 2904, 1795,
+ 1796, 2904, 2904, 1787, 71, 1784, 1797, 1798, 1799, 1786,
+ 71, 1790, 71, 71, 1800, 71, 1803, 1791, 71, 1804,
+ 1801, 71, 1816, 71, 2904, 71, 1795, 1796, 71, 71,
+ 1802, 71, 1805, 1797, 1798, 1799, 1806, 1807, 71, 71,
+ 1814, 1800, 71, 1803, 1811, 1809, 1810, 1801, 71, 71,
+ 1812, 71, 71, 1808, 71, 1813, 71, 1802, 71, 1805,
+ 71, 71, 1817, 1806, 1807, 1815, 1820, 1814, 1821, 1824,
+
+ 1818, 1811, 1809, 1810, 71, 1819, 1823, 1812, 71, 1827,
+ 1808, 1822, 1813, 71, 71, 71, 71, 1829, 1828, 1817,
+ 1830, 71, 1815, 71, 71, 1821, 1824, 1818, 1825, 1826,
+ 71, 1831, 1819, 1823, 1833, 71, 71, 1832, 1822, 71,
+ 1837, 71, 1836, 1834, 1829, 1828, 1838, 71, 1835, 71,
+ 1841, 1842, 71, 1843, 71, 1825, 1826, 71, 1831, 71,
+ 71, 1833, 1844, 1839, 1832, 1846, 1845, 71, 1840, 1836,
+ 1834, 1847, 2904, 71, 1851, 1835, 1848, 1849, 1853, 2904,
+ 1843, 71, 71, 71, 71, 1850, 71, 71, 1859, 1844,
+ 1854, 1852, 71, 1845, 1855, 71, 71, 71, 1847, 71,
+
+ 1856, 1857, 1858, 1848, 1849, 71, 71, 1860, 71, 71,
+ 71, 1861, 1850, 1862, 71, 1859, 1863, 1854, 1852, 1865,
+ 71, 1855, 1864, 71, 1866, 1868, 71, 1856, 1857, 1858,
+ 1869, 2904, 1867, 1875, 71, 1871, 1874, 2904, 71, 2904,
+ 1862, 71, 1877, 71, 2904, 71, 1865, 71, 71, 1864,
+ 71, 1866, 1868, 1870, 71, 1872, 1873, 1869, 71, 1867,
+ 71, 71, 1871, 1874, 71, 1878, 1876, 1879, 71, 1877,
+ 71, 71, 1880, 1881, 1884, 1886, 1882, 1887, 1883, 71,
+ 1870, 2904, 1872, 1873, 71, 71, 71, 71, 1885, 1890,
+ 71, 71, 1878, 1876, 71, 1888, 1891, 71, 71, 1880,
+
+ 1881, 1884, 1892, 1882, 1887, 1883, 1889, 71, 1893, 1894,
+ 71, 1895, 1896, 1897, 71, 1885, 1890, 71, 1898, 1899,
+ 1900, 71, 1888, 1891, 71, 1902, 71, 71, 71, 1892,
+ 1901, 71, 1904, 1889, 71, 1893, 1894, 71, 1895, 1896,
+ 1897, 71, 1903, 71, 1905, 71, 1899, 1900, 1906, 2904,
+ 1908, 1907, 1902, 1909, 71, 71, 1911, 1901, 1912, 1910,
+ 1914, 2904, 2904, 71, 71, 1924, 71, 1915, 2904, 1903,
+ 1913, 1905, 71, 2904, 71, 1906, 71, 71, 1907, 71,
+ 1909, 1916, 71, 1911, 71, 1912, 1910, 1914, 71, 1917,
+ 1918, 71, 71, 1919, 1915, 1922, 71, 1913, 1920, 1923,
+
+ 1925, 1928, 71, 1926, 71, 71, 1929, 1927, 1916, 71,
+ 71, 1921, 1932, 71, 71, 1930, 1917, 1918, 1931, 71,
+ 1919, 71, 1922, 71, 1933, 1920, 1923, 1925, 1928, 1934,
+ 1926, 71, 1935, 1929, 1927, 1936, 1937, 71, 1921, 1932,
+ 1938, 1939, 1930, 71, 71, 1931, 71, 1941, 1942, 71,
+ 71, 1933, 1940, 1943, 71, 71, 1934, 1944, 71, 1935,
+ 71, 71, 1936, 1937, 1945, 1946, 71, 1938, 1939, 1949,
+ 1950, 1947, 71, 1948, 1941, 1942, 1951, 71, 71, 1940,
+ 71, 2904, 1952, 1954, 1944, 1953, 71, 1957, 1956, 2904,
+ 71, 1945, 1946, 71, 1958, 71, 1949, 1950, 1947, 71,
+
+ 1948, 71, 71, 1955, 71, 1959, 1960, 1961, 71, 1952,
+ 1954, 71, 1953, 71, 71, 1956, 1962, 71, 1964, 1963,
+ 71, 1958, 1966, 2904, 1968, 1967, 1965, 2904, 1969, 1970,
+ 1955, 1975, 1959, 1960, 1973, 1974, 1976, 71, 71, 71,
+ 71, 71, 1985, 1962, 71, 1964, 1963, 71, 2904, 71,
+ 71, 1968, 1967, 1965, 71, 1969, 1970, 1971, 1977, 71,
+ 1972, 1973, 1974, 71, 1978, 1979, 1980, 1981, 1982, 71,
+ 1983, 2904, 1984, 1989, 1986, 71, 71, 71, 2904, 71,
+ 71, 2904, 71, 71, 1971, 1977, 71, 1972, 71, 71,
+ 71, 1978, 1979, 1980, 1981, 1982, 1987, 1983, 1988, 1984,
+
+ 1989, 1986, 1990, 1991, 1992, 71, 1993, 2904, 1996, 71,
+ 1994, 2904, 1995, 71, 71, 1997, 2000, 1999, 71, 71,
+ 71, 2005, 2003, 1987, 71, 1988, 71, 2004, 1998, 1990,
+ 1991, 1992, 71, 1993, 71, 1996, 71, 1994, 71, 1995,
+ 2001, 2002, 1997, 2000, 1999, 71, 2006, 2007, 71, 2003,
+ 71, 2008, 71, 2009, 2004, 1998, 2011, 2010, 2012, 71,
+ 2014, 2015, 2016, 2013, 71, 2028, 2904, 2001, 2002, 2017,
+ 71, 2019, 2024, 2006, 71, 2018, 71, 2904, 2008, 71,
+ 2009, 2020, 71, 2011, 2010, 2023, 71, 2025, 71, 2016,
+ 71, 2027, 71, 71, 2026, 2021, 2017, 71, 71, 71,
+
+ 71, 2029, 2018, 71, 2030, 2031, 2022, 71, 2020, 71,
+ 2904, 2033, 2023, 71, 2025, 2032, 2904, 2034, 2027, 2035,
+ 2904, 2026, 2021, 71, 2036, 2037, 71, 71, 2029, 2904,
+ 71, 2030, 71, 2022, 2038, 2039, 2040, 71, 2041, 71,
+ 71, 2042, 2032, 71, 2034, 2044, 2035, 71, 71, 2047,
+ 71, 2036, 2037, 2043, 2045, 2046, 71, 2048, 71, 2049,
+ 71, 2038, 2039, 2040, 71, 2041, 2051, 71, 2042, 2052,
+ 2050, 71, 71, 2054, 71, 2904, 2047, 71, 71, 2055,
+ 2043, 2045, 2046, 71, 2048, 2053, 2049, 2056, 71, 2059,
+ 2065, 2057, 71, 2051, 71, 71, 2052, 2050, 71, 71,
+
+ 71, 2058, 2060, 2061, 2062, 71, 2055, 2063, 2064, 71,
+ 71, 2067, 2053, 71, 2056, 2066, 2059, 71, 2057, 71,
+ 71, 2070, 2071, 2068, 2072, 71, 2069, 2074, 2058, 2060,
+ 2061, 2062, 2073, 2078, 2063, 2064, 71, 2075, 2067, 71,
+ 71, 71, 2066, 2076, 71, 2079, 2077, 71, 2070, 71,
+ 2068, 71, 2080, 2069, 2074, 2081, 2083, 2084, 2082, 2073,
+ 71, 71, 71, 71, 2075, 71, 2085, 71, 2086, 2087,
+ 2076, 71, 2079, 2077, 71, 2089, 71, 2088, 2090, 2080,
+ 2092, 2091, 2081, 2083, 71, 2082, 71, 2093, 2094, 2098,
+ 71, 2095, 2097, 71, 2099, 2086, 71, 2096, 2100, 2101,
+
+ 71, 71, 71, 71, 2088, 2090, 71, 71, 2091, 71,
+ 71, 71, 2103, 2102, 71, 2094, 2098, 2104, 2095, 2097,
+ 2105, 71, 71, 2107, 2096, 2100, 71, 2111, 2108, 2110,
+ 2109, 2112, 2116, 71, 2904, 2106, 71, 71, 71, 2103,
+ 2102, 71, 71, 2115, 2104, 2113, 71, 2105, 2114, 71,
+ 71, 2118, 2119, 2117, 71, 2108, 2110, 2109, 2112, 71,
+ 71, 71, 2106, 71, 71, 2120, 71, 2121, 2122, 2123,
+ 2115, 2125, 2113, 2126, 71, 2114, 2124, 71, 2118, 2119,
+ 2117, 2127, 71, 2128, 2129, 2130, 2904, 2131, 71, 2140,
+ 71, 71, 71, 2904, 2121, 2122, 2123, 71, 2125, 71,
+
+ 2126, 2133, 2132, 2124, 71, 2135, 71, 71, 2127, 71,
+ 2128, 2129, 2130, 2134, 2131, 71, 2136, 71, 2139, 71,
+ 2137, 71, 2138, 2142, 2143, 2141, 2144, 71, 2133, 2132,
+ 71, 71, 2135, 2145, 2147, 71, 2146, 2153, 2148, 2149,
+ 2134, 2150, 71, 2136, 71, 2139, 71, 2137, 71, 2138,
+ 71, 2143, 2141, 2144, 2151, 71, 71, 71, 71, 71,
+ 2145, 2147, 2152, 2146, 2154, 2148, 2149, 2155, 2150, 71,
+ 2156, 2166, 71, 2157, 2159, 71, 2158, 71, 2160, 2904,
+ 2162, 2151, 2163, 2168, 2164, 2904, 2161, 71, 2165, 2152,
+ 71, 71, 2177, 2904, 2155, 71, 71, 2156, 71, 71,
+
+ 2157, 71, 71, 2158, 71, 2160, 71, 2162, 2167, 2163,
+ 2168, 2164, 2169, 2161, 2170, 2165, 2171, 2172, 2173, 71,
+ 71, 2176, 2175, 2179, 2174, 71, 2178, 71, 71, 71,
+ 2180, 2182, 71, 2181, 2183, 2167, 71, 2184, 2904, 2169,
+ 2904, 2170, 71, 2171, 2172, 2173, 71, 2186, 2176, 2175,
+ 71, 2174, 71, 2178, 71, 71, 2185, 2180, 2188, 2189,
+ 2181, 2187, 2193, 71, 71, 2190, 71, 71, 2194, 71,
+ 2191, 71, 2192, 71, 2186, 2196, 71, 2197, 2198, 2904,
+ 2195, 2200, 71, 2185, 2904, 2188, 2189, 2199, 2187, 71,
+ 71, 71, 2190, 71, 2204, 2194, 71, 2191, 71, 2192,
+
+ 71, 71, 2196, 71, 2197, 71, 2201, 2195, 2200, 2202,
+ 2203, 2205, 2206, 71, 2199, 2207, 71, 71, 71, 2208,
+ 2212, 2204, 2209, 71, 2210, 2904, 2211, 2904, 2904, 2214,
+ 2215, 71, 2216, 2201, 71, 71, 2202, 2203, 2205, 2206,
+ 71, 2213, 2217, 71, 2218, 71, 2208, 71, 71, 2209,
+ 2219, 2210, 71, 2211, 71, 2220, 2214, 2215, 71, 2216,
+ 71, 2221, 2223, 2224, 2222, 2225, 71, 2227, 2213, 2217,
+ 2904, 2218, 2233, 2228, 2226, 2229, 71, 2219, 71, 71,
+ 71, 71, 2220, 71, 71, 2230, 71, 2231, 2232, 71,
+ 2224, 2222, 71, 71, 2227, 2234, 2235, 71, 2236, 71,
+
+ 2228, 2226, 2229, 2238, 2239, 2237, 2241, 2242, 71, 71,
+ 71, 2240, 2230, 2244, 2231, 2232, 71, 2243, 2904, 71,
+ 2245, 71, 71, 2247, 71, 2236, 71, 2246, 71, 71,
+ 2238, 2239, 2237, 2241, 71, 71, 2250, 2249, 2240, 71,
+ 2248, 2251, 2255, 2252, 2243, 71, 71, 2245, 71, 2253,
+ 71, 2257, 2254, 2256, 2246, 71, 2259, 2260, 71, 2258,
+ 2261, 2262, 71, 2250, 2249, 71, 71, 2248, 71, 2255,
+ 2252, 71, 2265, 2264, 2263, 2904, 2253, 71, 2257, 2254,
+ 2256, 71, 71, 71, 71, 2266, 2258, 71, 71, 71,
+ 2267, 2268, 2269, 2271, 71, 2270, 2272, 2273, 2274, 2265,
+
+ 2264, 2263, 71, 2275, 71, 71, 71, 71, 2280, 2278,
+ 2276, 71, 2266, 2277, 2284, 71, 71, 2267, 2268, 2269,
+ 2271, 2281, 2270, 71, 2273, 71, 71, 2279, 71, 71,
+ 71, 2282, 2283, 2285, 2904, 2280, 2278, 2276, 71, 71,
+ 2277, 71, 71, 71, 2286, 71, 2287, 2288, 2281, 2289,
+ 2290, 71, 71, 71, 2279, 2291, 2293, 2292, 2282, 2283,
+ 2285, 71, 2296, 71, 2298, 2297, 2294, 71, 71, 71,
+ 2295, 2286, 2299, 2287, 2288, 71, 2289, 2290, 71, 71,
+ 2300, 71, 2291, 2293, 2292, 71, 2301, 2302, 71, 2296,
+ 2303, 2298, 2297, 2294, 2304, 2904, 2305, 2295, 2306, 2299,
+
+ 2307, 2311, 71, 2308, 2309, 2904, 2904, 2300, 71, 71,
+ 71, 2310, 71, 2301, 71, 2334, 2318, 71, 71, 71,
+ 71, 2304, 71, 2305, 71, 2306, 2313, 2307, 2311, 2312,
+ 2308, 2309, 2314, 71, 71, 2315, 2316, 2320, 2310, 2317,
+ 2321, 2319, 71, 71, 2323, 71, 71, 71, 2324, 2325,
+ 71, 2322, 2326, 2313, 2904, 71, 2312, 71, 71, 2314,
+ 2332, 2327, 2315, 2316, 2320, 71, 2317, 71, 2319, 71,
+ 2330, 71, 71, 71, 2328, 2324, 2325, 2329, 2322, 2326,
+ 2333, 71, 2331, 71, 2335, 2342, 71, 71, 2327, 2904,
+ 71, 2336, 2337, 71, 2338, 2339, 2343, 2330, 2340, 2344,
+
+ 71, 2328, 71, 71, 2329, 71, 2341, 71, 2345, 2331,
+ 71, 2335, 2342, 2347, 2351, 2904, 71, 2349, 2336, 2337,
+ 2350, 2338, 2339, 71, 71, 2340, 2344, 71, 71, 2346,
+ 2348, 71, 71, 2341, 2353, 71, 71, 71, 71, 2352,
+ 2347, 2351, 71, 2354, 2349, 2355, 71, 2350, 2356, 2358,
+ 71, 2357, 2359, 2361, 2360, 2904, 2346, 2348, 71, 2362,
+ 2363, 2353, 2367, 71, 2369, 71, 2352, 2365, 2371, 71,
+ 2354, 2364, 2355, 2368, 71, 71, 2358, 71, 2357, 71,
+ 2361, 2360, 71, 2366, 2370, 71, 2362, 71, 71, 71,
+ 71, 71, 71, 2372, 2365, 71, 2374, 2373, 2364, 2375,
+
+ 2368, 2376, 2377, 2378, 2379, 2904, 71, 2382, 2384, 2380,
+ 2366, 2370, 71, 2904, 2381, 71, 2385, 71, 71, 2904,
+ 2372, 2383, 2386, 71, 2373, 71, 2375, 71, 2376, 71,
+ 2378, 2379, 71, 71, 71, 71, 2380, 2387, 71, 2388,
+ 2389, 2381, 2391, 2385, 71, 2390, 2392, 2904, 2383, 2386,
+ 71, 2393, 2394, 71, 2395, 2397, 2396, 2398, 2400, 71,
+ 71, 71, 2401, 71, 2387, 71, 2388, 2389, 71, 2391,
+ 2399, 71, 2390, 2392, 71, 2403, 71, 2402, 2393, 2394,
+ 71, 2395, 71, 2396, 71, 2400, 71, 2404, 2406, 2401,
+ 71, 2405, 2408, 2409, 2407, 2411, 2410, 2399, 2413, 2417,
+
+ 71, 2412, 2415, 2414, 2402, 2416, 2904, 71, 2904, 71,
+ 71, 2418, 2904, 2419, 2404, 2406, 71, 71, 2405, 71,
+ 71, 2407, 71, 2410, 71, 71, 2420, 71, 2412, 2415,
+ 71, 71, 2416, 2421, 71, 71, 2422, 2423, 2418, 2424,
+ 2419, 2427, 2904, 2425, 71, 71, 2904, 2426, 2430, 2904,
+ 2428, 2429, 2904, 2420, 71, 71, 71, 71, 2904, 71,
+ 2421, 2432, 2431, 2422, 2423, 71, 2424, 2433, 2427, 2434,
+ 2425, 71, 71, 71, 2426, 2430, 71, 2428, 2429, 71,
+ 2435, 2439, 2436, 2443, 2437, 71, 2441, 2442, 2432, 2431,
+ 71, 71, 2438, 2440, 2433, 71, 2434, 2444, 71, 71,
+
+ 71, 71, 2447, 2445, 71, 71, 2448, 2435, 71, 2436,
+ 71, 2437, 2450, 2441, 2442, 71, 2446, 2451, 2452, 2438,
+ 2440, 2453, 2904, 71, 2444, 71, 2449, 2454, 71, 2447,
+ 2445, 2457, 2904, 71, 2455, 2460, 2458, 2456, 2459, 2904,
+ 2461, 2462, 2463, 2446, 71, 71, 71, 71, 71, 71,
+ 71, 71, 2464, 2449, 2454, 71, 71, 2465, 2457, 71,
+ 2470, 2455, 2460, 2458, 2456, 2459, 71, 2461, 71, 71,
+ 2466, 2467, 2471, 2469, 2472, 2904, 2468, 71, 2473, 71,
+ 71, 2474, 2475, 2476, 71, 2477, 71, 2470, 2478, 2479,
+ 71, 71, 2480, 2481, 2485, 71, 2486, 2466, 2484, 71,
+
+ 2469, 71, 71, 71, 71, 2473, 2487, 2482, 2474, 2475,
+ 2476, 71, 71, 2483, 71, 2478, 71, 2494, 2493, 2480,
+ 71, 71, 71, 71, 2490, 2484, 71, 2488, 71, 71,
+ 2491, 2492, 2489, 2487, 2482, 2497, 2499, 71, 71, 71,
+ 2483, 2495, 2496, 71, 2498, 2493, 2500, 2506, 2501, 71,
+ 71, 2490, 2502, 2507, 2508, 71, 71, 2491, 2492, 71,
+ 71, 2505, 71, 2499, 2509, 71, 71, 71, 2495, 2496,
+ 71, 2498, 2515, 2500, 2506, 2501, 71, 2503, 2504, 2502,
+ 2507, 2508, 2510, 71, 2511, 2514, 2520, 71, 2505, 2512,
+ 71, 71, 2516, 71, 2513, 2904, 2517, 71, 2518, 71,
+
+ 2519, 2904, 2524, 71, 2503, 2504, 2521, 2522, 2527, 2510,
+ 2525, 2511, 2514, 2520, 71, 2523, 71, 71, 71, 2516,
+ 71, 71, 71, 2517, 71, 2518, 71, 2519, 71, 2524,
+ 2528, 2526, 2529, 2521, 2522, 71, 2530, 2525, 71, 2532,
+ 2531, 71, 2523, 2533, 2534, 2539, 2535, 2538, 2904, 2542,
+ 2536, 2537, 2540, 2904, 71, 2904, 71, 2528, 2526, 2529,
+ 71, 71, 2541, 71, 71, 71, 71, 2531, 71, 71,
+ 2533, 71, 71, 2535, 2538, 71, 2542, 2536, 2537, 2540,
+ 71, 2543, 2545, 2546, 2547, 2548, 2544, 2549, 2550, 2541,
+ 2551, 2554, 71, 2553, 71, 2904, 71, 2904, 2552, 2557,
+
+ 71, 71, 2556, 71, 2555, 71, 2558, 2564, 71, 2545,
+ 2546, 71, 2548, 71, 2549, 2550, 71, 2551, 2559, 71,
+ 2553, 71, 2560, 71, 2561, 2552, 2557, 2562, 71, 2556,
+ 2563, 2555, 2565, 2558, 71, 2566, 2568, 2567, 2570, 2569,
+ 71, 2571, 2574, 71, 71, 2559, 71, 71, 2572, 2560,
+ 2573, 2561, 2575, 71, 2562, 71, 2577, 2563, 2578, 71,
+ 71, 71, 71, 2568, 2567, 2570, 2569, 71, 2576, 71,
+ 71, 2579, 71, 71, 71, 2572, 2904, 2573, 71, 2575,
+ 2580, 2581, 71, 2577, 2582, 2578, 2583, 2584, 2585, 2588,
+ 2586, 2587, 71, 2595, 71, 2576, 2594, 71, 71, 2590,
+
+ 2593, 2589, 2904, 71, 71, 71, 2592, 2580, 71, 2597,
+ 71, 2582, 71, 2583, 2584, 71, 2588, 2586, 2587, 71,
+ 71, 2591, 71, 2594, 2596, 71, 2590, 2593, 2589, 71,
+ 2598, 2599, 71, 2592, 2600, 2601, 71, 71, 2602, 2603,
+ 2605, 2604, 2610, 2607, 2613, 2606, 71, 71, 2591, 71,
+ 71, 2596, 71, 2609, 2611, 71, 2608, 71, 2599, 2614,
+ 2621, 71, 2601, 71, 71, 2602, 2603, 71, 2604, 2610,
+ 2607, 71, 2606, 2612, 2616, 2615, 71, 2619, 71, 71,
+ 2609, 2611, 71, 2608, 2620, 2625, 71, 2618, 2622, 2626,
+ 2623, 71, 71, 2617, 2628, 71, 71, 2627, 2630, 2624,
+
+ 2612, 71, 2615, 71, 2619, 71, 71, 2631, 2632, 71,
+ 2633, 2620, 71, 71, 2618, 2622, 2626, 2623, 2629, 2634,
+ 2617, 2628, 2635, 71, 2627, 71, 2624, 2638, 71, 2636,
+ 71, 2637, 71, 2641, 71, 2632, 2642, 2639, 2640, 71,
+ 2643, 2645, 71, 2644, 71, 2629, 2634, 71, 71, 2635,
+ 2646, 71, 2647, 2648, 2649, 2650, 2636, 2651, 2637, 71,
+ 71, 71, 2652, 71, 2639, 2640, 71, 2643, 71, 2653,
+ 2644, 2654, 2660, 2656, 71, 2655, 71, 71, 71, 2647,
+ 2648, 2649, 71, 71, 71, 2657, 2671, 2658, 2661, 71,
+ 71, 71, 71, 2659, 2664, 2663, 2653, 2662, 71, 71,
+
+ 2656, 71, 2655, 2665, 71, 2666, 2667, 2668, 2904, 2669,
+ 2670, 71, 2657, 71, 2658, 2661, 2673, 2674, 71, 71,
+ 2659, 71, 2663, 71, 2662, 2672, 2675, 71, 2678, 2904,
+ 2665, 71, 2666, 71, 71, 71, 2669, 2670, 2676, 2677,
+ 71, 2679, 2680, 2673, 71, 71, 71, 2683, 71, 2682,
+ 71, 2681, 2672, 2675, 71, 2678, 71, 71, 2689, 2693,
+ 2684, 2686, 2685, 71, 71, 2676, 2677, 71, 2679, 2680,
+ 71, 71, 71, 2690, 2683, 2691, 2682, 2692, 2681, 2694,
+ 2687, 2688, 71, 2696, 2697, 2689, 71, 2684, 2686, 2685,
+ 71, 71, 2695, 2698, 2699, 71, 2700, 2701, 2702, 2703,
+
+ 2690, 2704, 2691, 2705, 2692, 2706, 71, 2687, 2688, 2708,
+ 71, 71, 2709, 2707, 71, 71, 2710, 2711, 71, 2695,
+ 2713, 2714, 71, 2712, 71, 71, 71, 71, 2704, 2717,
+ 71, 71, 2706, 71, 2716, 2718, 2708, 71, 71, 71,
+ 2707, 2719, 2715, 2710, 2711, 2720, 71, 2713, 2714, 2721,
+ 2712, 71, 71, 2724, 2726, 71, 2717, 71, 2725, 2904,
+ 2722, 2716, 71, 2723, 2727, 2728, 71, 2729, 71, 2715,
+ 2904, 71, 2720, 71, 2730, 2731, 2721, 71, 71, 2733,
+ 2732, 2734, 2735, 2736, 2737, 71, 71, 2722, 71, 2738,
+ 2723, 2727, 2728, 2739, 2729, 2740, 71, 71, 2741, 2742,
+
+ 2743, 2730, 2731, 71, 2744, 2745, 71, 2732, 2734, 71,
+ 71, 71, 71, 2746, 2747, 2750, 71, 2748, 71, 2749,
+ 71, 71, 71, 2751, 2752, 71, 71, 2743, 2753, 71,
+ 71, 71, 2745, 71, 2754, 2755, 71, 2756, 71, 2757,
+ 2746, 71, 2750, 71, 2748, 2758, 2749, 2759, 2760, 71,
+ 2751, 2752, 2904, 2904, 71, 71, 2761, 2762, 2764, 71,
+ 2763, 2754, 2755, 2766, 2756, 71, 2757, 71, 71, 71,
+ 2765, 71, 2758, 2904, 2759, 71, 2767, 2768, 2769, 71,
+ 71, 71, 2770, 2761, 2762, 2764, 71, 2763, 2771, 2772,
+ 2766, 2773, 2775, 2904, 2774, 2776, 71, 2765, 71, 2778,
+
+ 71, 2777, 2779, 2767, 71, 71, 71, 71, 2780, 2770,
+ 2904, 71, 71, 2781, 71, 2771, 2772, 2782, 2773, 2775,
+ 2784, 2774, 2776, 71, 71, 71, 2778, 71, 2777, 2779,
+ 2783, 71, 2791, 2786, 71, 2780, 2785, 2787, 71, 71,
+ 2781, 2788, 2789, 71, 2782, 71, 2790, 2784, 71, 2792,
+ 2793, 2904, 2794, 71, 2795, 71, 2796, 2783, 2797, 71,
+ 2786, 2904, 2799, 2785, 2787, 2798, 71, 71, 2788, 2789,
+ 2807, 2800, 71, 2790, 2801, 2803, 2792, 71, 71, 2794,
+ 2802, 71, 71, 71, 2804, 2797, 71, 71, 2806, 2799,
+ 2805, 2808, 2798, 71, 2809, 71, 71, 71, 2800, 71,
+
+ 2810, 2801, 2803, 71, 2811, 2812, 2814, 2802, 2813, 2816,
+ 2817, 2815, 71, 71, 2904, 2806, 71, 2805, 2808, 71,
+ 2820, 71, 2821, 2818, 2826, 71, 2819, 2810, 71, 2828,
+ 2822, 2811, 71, 2814, 71, 2813, 71, 71, 2815, 2823,
+ 71, 71, 71, 71, 2824, 2829, 71, 2820, 2825, 71,
+ 2818, 2826, 71, 2819, 2827, 71, 2828, 2822, 2831, 71,
+ 2830, 2832, 71, 2835, 2833, 2904, 2823, 71, 71, 2834,
+ 2836, 2824, 2829, 71, 2837, 2825, 2838, 71, 2839, 2843,
+ 71, 2827, 2840, 71, 2904, 2831, 2841, 2830, 2832, 2904,
+ 71, 2833, 71, 2842, 2844, 2845, 2834, 2836, 2904, 2848,
+
+ 71, 71, 71, 2838, 71, 2839, 71, 2846, 71, 2840,
+ 2847, 71, 2854, 2841, 2851, 2849, 71, 2850, 71, 71,
+ 2842, 2844, 71, 71, 2852, 71, 2848, 2853, 2855, 2904,
+ 71, 2904, 71, 2861, 2846, 2858, 2904, 2847, 71, 2854,
+ 2856, 71, 2849, 2857, 2850, 2859, 71, 71, 2860, 2904,
+ 2862, 2852, 2863, 71, 2853, 71, 71, 71, 71, 2864,
+ 2861, 2866, 2858, 2865, 71, 2868, 2904, 2856, 2869, 2904,
+ 2857, 2870, 2859, 71, 71, 2860, 71, 2862, 2873, 2863,
+ 2871, 2867, 2876, 2904, 2874, 2875, 2864, 71, 2866, 71,
+ 2865, 71, 2868, 71, 71, 2869, 2872, 2877, 2870, 2878,
+
+ 71, 2882, 2889, 2880, 71, 71, 71, 2871, 2867, 71,
+ 71, 2874, 2875, 2879, 2881, 2884, 2885, 71, 2904, 71,
+ 2888, 71, 71, 2872, 2877, 71, 2878, 2883, 71, 71,
+ 2880, 2886, 2904, 2892, 2893, 71, 2887, 71, 71, 71,
+ 2879, 2881, 2884, 2885, 71, 2890, 71, 2888, 2891, 2894,
+ 2895, 2896, 2898, 71, 2883, 2904, 71, 2900, 2886, 71,
+ 2892, 71, 2897, 2887, 2899, 71, 2902, 2903, 2904, 71,
+ 2904, 2904, 2890, 2901, 71, 2891, 2894, 71, 71, 2898,
+ 2904, 71, 71, 2904, 2900, 2904, 71, 2904, 2904, 2897,
+ 2904, 2899, 2904, 71, 71, 2904, 2904, 2904, 2904, 2904,
+
+ 2901, 43, 43, 43, 43, 43, 43, 43, 48, 48,
+ 48, 48, 48, 48, 48, 53, 53, 53, 53, 53,
+ 53, 53, 59, 59, 59, 59, 59, 59, 59, 64,
+ 64, 64, 64, 64, 64, 64, 74, 74, 2904, 74,
+ 74, 74, 74, 140, 140, 2904, 2904, 2904, 140, 140,
+ 142, 142, 2904, 2904, 142, 2904, 142, 144, 2904, 2904,
+ 2904, 2904, 2904, 144, 147, 147, 2904, 2904, 2904, 147,
+ 147, 149, 2904, 2904, 2904, 2904, 2904, 149, 151, 151,
+ 2904, 151, 151, 151, 151, 75, 75, 2904, 75, 75,
+ 75, 75, 13, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904
} ;
-static yyconst flex_int16_t yy_chk[7963] =
+static yyconst flex_int16_t yy_chk[8360] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -2227,10 +2322,10 @@ static yyconst flex_int16_t yy_chk[7963] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 3, 3, 3, 4,
4, 4, 5, 5, 6, 6, 5, 28, 6, 7,
- 7, 7, 7, 2755, 7, 8, 8, 8, 8, 28,
+ 7, 7, 7, 2910, 7, 8, 8, 8, 8, 28,
8, 9, 9, 9, 10, 10, 10, 15, 21, 24,
- 930, 15, 30, 3, 28, 149, 4, 47, 47, 5,
+ 971, 15, 30, 3, 28, 149, 4, 47, 47, 5,
19, 6, 19, 19, 30, 19, 72, 7, 147, 24,
72, 19, 24, 8, 21, 21, 24, 29, 9, 30,
25, 10, 11, 11, 11, 11, 11, 11, 12, 12,
@@ -2238,11 +2333,11 @@ static yyconst flex_int16_t yy_chk[7963] =
52, 33, 11, 52, 29, 22, 25, 25, 12, 146,
35, 144, 22, 63, 63, 26, 22, 141, 141, 22,
11, 25, 33, 26, 35, 77, 12, 142, 78, 11,
- 31, 22, 22, 257, 82, 12, 20, 20, 31, 22,
+ 31, 22, 22, 262, 82, 12, 20, 20, 31, 22,
20, 26, 26, 22, 31, 20, 22, 41, 31, 77,
26, 78, 77, 68, 20, 78, 31, 31, 82, 41,
- 20, 82, 257, 20, 20, 31, 68, 20, 79, 125,
+ 20, 82, 262, 20, 20, 31, 68, 20, 79, 125,
81, 31, 20, 27, 41, 31, 27, 81, 80, 140,
68, 20, 23, 27, 143, 27, 23, 143, 79, 23,
70, 23, 23, 80, 32, 79, 27, 81, 32, 64,
@@ -2256,845 +2351,888 @@ static yyconst flex_int16_t yy_chk[7963] =
92, 58, 34, 36, 34, 89, 36, 39, 83, 34,
91, 39, 39, 34, 92, 53, 95, 48, 43, 34,
39, 83, 34, 40, 39, 95, 108, 40, 91, 34,
- 37, 40, 83, 37, 39, 83, 14, 169, 39, 39,
+ 37, 40, 83, 37, 39, 83, 14, 170, 39, 39,
37, 13, 91, 95, 37, 37, 108, 96, 83, 40,
40, 0, 37, 108, 40, 91, 96, 37, 40, 42,
- 37, 42, 42, 66, 42, 66, 66, 37, 66, 169,
+ 37, 42, 42, 66, 42, 66, 66, 37, 66, 170,
42, 37, 37, 69, 96, 69, 69, 71, 69, 71,
71, 74, 71, 74, 74, 87, 74, 93, 71, 88,
- 88, 87, 74, 0, 93, 94, 94, 97, 88, 98,
- 99, 66, 0, 0, 0, 101, 87, 102, 0, 107,
- 0, 94, 87, 99, 93, 102, 88, 88, 87, 74,
- 97, 98, 94, 94, 97, 100, 98, 99, 100, 101,
- 105, 103, 107, 106, 102, 105, 107, 101, 105, 104,
- 109, 100, 100, 104, 110, 0, 106, 111, 0, 100,
- 0, 103, 100, 103, 109, 100, 101, 105, 103, 104,
- 106, 111, 105, 104, 110, 112, 104, 109, 100, 100,
- 104, 110, 112, 113, 111, 114, 115, 116, 103, 118,
- 117, 116, 113, 119, 121, 115, 104, 117, 0, 122,
-
- 119, 0, 112, 127, 231, 0, 121, 122, 114, 116,
- 113, 124, 114, 115, 116, 118, 118, 117, 116, 120,
- 119, 121, 126, 127, 123, 124, 122, 128, 120, 127,
- 127, 231, 129, 130, 120, 123, 128, 126, 124, 123,
- 0, 130, 120, 129, 133, 132, 120, 131, 123, 126,
- 127, 123, 134, 131, 128, 120, 132, 139, 135, 129,
- 130, 120, 123, 136, 137, 133, 123, 134, 155, 133,
- 139, 133, 132, 137, 131, 138, 0, 0, 136, 134,
- 135, 0, 155, 0, 139, 135, 0, 153, 0, 0,
- 136, 137, 133, 145, 154, 145, 145, 138, 145, 159,
-
- 155, 150, 138, 150, 150, 151, 150, 151, 151, 155,
- 151, 153, 157, 156, 153, 159, 154, 160, 158, 161,
- 162, 154, 156, 0, 157, 158, 159, 161, 163, 166,
- 165, 164, 162, 168, 190, 166, 160, 158, 164, 157,
- 156, 167, 193, 151, 160, 158, 161, 162, 165, 170,
- 163, 174, 158, 170, 175, 163, 172, 165, 164, 168,
- 168, 166, 166, 167, 173, 178, 190, 177, 167, 176,
- 170, 0, 173, 174, 193, 0, 175, 170, 174, 179,
- 170, 175, 172, 172, 176, 183, 217, 0, 178, 180,
- 0, 173, 178, 181, 183, 177, 176, 170, 171, 177,
-
- 191, 179, 180, 171, 182, 181, 179, 182, 171, 217,
- 184, 185, 183, 217, 171, 171, 180, 192, 187, 182,
- 181, 171, 177, 0, 298, 171, 191, 191, 192, 195,
- 171, 182, 184, 185, 182, 171, 188, 184, 185, 186,
- 187, 171, 171, 188, 186, 187, 189, 194, 199, 192,
- 196, 298, 198, 197, 194, 192, 186, 189, 186, 197,
- 200, 195, 201, 188, 203, 186, 186, 0, 196, 202,
- 199, 186, 204, 189, 194, 199, 206, 196, 203, 205,
- 197, 208, 207, 186, 198, 186, 205, 207, 209, 202,
- 210, 203, 200, 204, 201, 211, 202, 206, 212, 204,
-
- 208, 215, 209, 206, 214, 213, 205, 219, 208, 207,
- 212, 214, 210, 211, 218, 209, 213, 210, 216, 218,
- 220, 220, 211, 215, 221, 212, 222, 216, 215, 220,
- 223, 214, 213, 222, 224, 225, 226, 228, 227, 219,
- 232, 218, 233, 229, 237, 216, 227, 220, 220, 230,
- 243, 236, 244, 222, 224, 223, 221, 223, 229, 237,
- 234, 224, 235, 232, 239, 227, 235, 225, 226, 228,
- 229, 237, 232, 236, 233, 230, 230, 234, 236, 240,
- 238, 241, 243, 239, 244, 234, 240, 234, 238, 235,
- 232, 239, 242, 245, 246, 247, 242, 248, 249, 251,
-
- 0, 250, 0, 241, 234, 266, 240, 238, 241, 248,
- 250, 249, 251, 252, 254, 245, 246, 255, 0, 242,
- 245, 246, 256, 261, 248, 249, 251, 247, 250, 253,
- 258, 253, 252, 259, 261, 260, 265, 266, 254, 258,
- 252, 254, 255, 262, 255, 263, 269, 0, 256, 256,
- 261, 264, 267, 268, 265, 262, 253, 258, 273, 259,
- 259, 260, 260, 265, 270, 267, 271, 272, 274, 263,
- 262, 269, 263, 269, 264, 274, 276, 275, 264, 267,
- 278, 270, 276, 277, 287, 268, 275, 270, 279, 272,
- 273, 270, 271, 271, 272, 274, 280, 277, 281, 286,
-
- 282, 807, 283, 276, 275, 280, 278, 278, 270, 282,
- 277, 284, 279, 285, 286, 279, 287, 288, 289, 0,
- 284, 281, 0, 280, 291, 281, 286, 282, 283, 283,
- 0, 293, 807, 289, 292, 299, 295, 285, 284, 304,
- 285, 288, 291, 292, 288, 289, 290, 294, 0, 290,
- 295, 291, 296, 293, 290, 290, 290, 290, 293, 299,
- 301, 292, 299, 295, 290, 294, 304, 296, 297, 297,
- 302, 294, 301, 290, 294, 300, 290, 305, 300, 296,
- 303, 290, 290, 290, 290, 300, 306, 301, 302, 307,
- 0, 309, 294, 297, 313, 297, 297, 302, 303, 305,
-
- 308, 307, 300, 310, 305, 300, 309, 303, 311, 312,
- 314, 310, 306, 306, 0, 311, 307, 314, 309, 315,
- 316, 312, 308, 317, 322, 0, 313, 308, 338, 319,
- 310, 319, 318, 922, 320, 311, 312, 314, 318, 0,
- 323, 315, 322, 0, 321, 317, 315, 320, 324, 338,
- 317, 322, 316, 319, 318, 338, 319, 321, 319, 318,
- 321, 320, 321, 922, 0, 318, 329, 325, 321, 327,
- 324, 321, 323, 325, 328, 324, 327, 325, 329, 330,
- 328, 332, 333, 0, 321, 325, 0, 321, 0, 321,
- 335, 325, 330, 329, 325, 333, 327, 332, 336, 0,
-
- 325, 328, 335, 340, 325, 332, 330, 0, 332, 333,
- 341, 340, 325, 326, 337, 326, 336, 335, 342, 337,
- 339, 343, 341, 0, 332, 336, 339, 344, 326, 343,
- 340, 326, 0, 326, 346, 326, 342, 341, 347, 326,
- 326, 346, 326, 345, 345, 342, 337, 339, 343, 0,
- 355, 347, 349, 0, 0, 326, 349, 348, 326, 344,
- 326, 346, 326, 334, 334, 347, 348, 350, 0, 352,
- 345, 351, 354, 334, 350, 334, 334, 334, 351, 349,
- 334, 352, 355, 353, 354, 356, 357, 359, 334, 348,
- 334, 334, 356, 348, 350, 358, 352, 0, 351, 354,
-
- 334, 357, 334, 334, 334, 353, 361, 334, 358, 360,
- 353, 360, 356, 357, 365, 362, 364, 361, 366, 359,
- 363, 363, 358, 364, 369, 365, 367, 0, 0, 366,
- 368, 370, 372, 361, 371, 399, 360, 362, 0, 367,
- 381, 365, 362, 364, 372, 366, 370, 369, 368, 363,
- 399, 369, 373, 367, 370, 368, 374, 368, 370, 372,
- 371, 371, 399, 373, 375, 374, 377, 376, 378, 379,
- 380, 0, 381, 370, 387, 368, 382, 375, 376, 373,
- 376, 383, 382, 374, 377, 376, 384, 392, 380, 385,
- 378, 375, 379, 377, 376, 378, 379, 380, 388, 386,
-
- 387, 387, 383, 382, 390, 376, 386, 376, 383, 384,
- 389, 385, 388, 384, 391, 393, 385, 394, 390, 392,
- 0, 395, 0, 396, 397, 388, 386, 395, 400, 394,
- 401, 390, 389, 403, 398, 400, 404, 389, 393, 401,
- 391, 391, 393, 402, 394, 396, 397, 405, 395, 407,
- 396, 397, 398, 406, 411, 400, 403, 401, 402, 406,
- 403, 398, 404, 404, 409, 410, 412, 414, 419, 405,
- 402, 410, 413, 411, 405, 407, 407, 421, 417, 413,
- 406, 411, 414, 418, 412, 417, 416, 0, 416, 420,
- 409, 409, 410, 412, 414, 416, 418, 422, 423, 413,
-
- 419, 424, 425, 427, 424, 417, 428, 420, 0, 421,
- 418, 423, 0, 416, 426, 416, 420, 430, 431, 422,
- 424, 426, 429, 431, 422, 423, 432, 427, 424, 428,
- 427, 424, 432, 434, 425, 429, 433, 0, 428, 430,
- 435, 426, 436, 437, 430, 431, 0, 0, 442, 429,
- 438, 0, 435, 432, 437, 434, 428, 443, 438, 433,
- 434, 440, 441, 433, 436, 443, 0, 435, 440, 436,
- 437, 442, 445, 461, 441, 442, 0, 438, 439, 444,
- 446, 461, 447, 439, 443, 439, 448, 449, 440, 441,
- 444, 439, 0, 439, 447, 445, 439, 439, 449, 445,
-
- 461, 450, 446, 439, 439, 439, 444, 446, 448, 447,
- 439, 451, 439, 448, 449, 452, 0, 453, 439, 450,
- 439, 451, 454, 439, 439, 455, 452, 457, 450, 454,
- 439, 456, 459, 456, 458, 462, 0, 464, 460, 471,
- 462, 453, 452, 451, 453, 463, 458, 459, 451, 454,
- 460, 455, 455, 457, 457, 464, 467, 466, 456, 459,
- 465, 458, 462, 469, 464, 460, 470, 463, 465, 466,
- 472, 471, 463, 478, 473, 482, 483, 467, 475, 485,
- 474, 469, 476, 467, 466, 472, 473, 465, 474, 470,
- 469, 475, 479, 470, 476, 477, 478, 472, 480, 481,
-
- 478, 473, 482, 488, 477, 475, 479, 474, 483, 476,
- 487, 485, 484, 486, 489, 488, 495, 497, 481, 479,
- 490, 492, 477, 480, 493, 480, 481, 484, 486, 493,
- 488, 496, 492, 498, 487, 491, 489, 487, 494, 484,
- 486, 489, 491, 495, 490, 491, 499, 490, 492, 497,
- 500, 501, 494, 491, 503, 510, 493, 501, 496, 502,
- 498, 505, 491, 504, 0, 494, 507, 506, 515, 491,
- 507, 504, 491, 499, 509, 511, 503, 508, 501, 1029,
- 505, 503, 500, 502, 513, 508, 502, 510, 505, 0,
- 504, 506, 514, 507, 506, 516, 512, 509, 511, 514,
-
- 515, 509, 511, 517, 508, 512, 513, 1029, 520, 518,
- 522, 513, 519, 524, 518, 521, 517, 516, 518, 514,
- 0, 519, 516, 512, 521, 523, 524, 526, 527, 528,
- 517, 525, 522, 518, 520, 520, 518, 522, 529, 519,
- 524, 518, 521, 525, 530, 518, 527, 523, 531, 0,
- 535, 532, 523, 528, 534, 527, 528, 533, 525, 526,
- 529, 529, 0, 534, 535, 529, 530, 536, 533, 537,
- 538, 530, 531, 532, 539, 531, 537, 535, 532, 540,
- 541, 534, 542, 543, 533, 544, 546, 529, 0, 536,
- 540, 545, 539, 547, 536, 541, 537, 538, 548, 549,
-
- 550, 539, 547, 551, 543, 552, 540, 541, 546, 544,
- 543, 548, 544, 546, 542, 545, 553, 558, 545, 554,
- 547, 560, 550, 555, 554, 548, 556, 550, 559, 552,
- 561, 549, 552, 557, 557, 551, 559, 555, 553, 560,
- 556, 557, 563, 553, 562, 565, 0, 585, 560, 558,
- 555, 554, 561, 556, 564, 559, 567, 561, 566, 562,
- 557, 557, 568, 566, 568, 570, 569, 565, 562, 564,
- 571, 562, 565, 570, 563, 572, 573, 577, 574, 585,
- 575, 564, 567, 567, 572, 573, 562, 574, 575, 568,
- 566, 569, 570, 569, 576, 571, 578, 571, 579, 580,
-
- 577, 576, 572, 573, 577, 574, 581, 575, 582, 583,
- 579, 580, 587, 0, 578, 581, 582, 584, 586, 590,
- 588, 576, 589, 578, 583, 579, 580, 587, 588, 584,
- 589, 586, 591, 581, 592, 582, 583, 596, 595, 587,
- 599, 591, 590, 592, 584, 586, 590, 588, 593, 589,
- 594, 595, 598, 597, 603, 601, 599, 593, 594, 591,
- 598, 592, 600, 596, 596, 595, 601, 599, 603, 0,
- 602, 604, 605, 606, 607, 593, 597, 594, 602, 598,
- 597, 603, 601, 608, 600, 611, 609, 610, 0, 600,
- 613, 604, 0, 606, 605, 609, 607, 602, 604, 605,
-
- 606, 607, 612, 611, 614, 608, 615, 610, 613, 617,
- 608, 616, 611, 609, 610, 612, 623, 613, 620, 614,
- 622, 618, 619, 629, 621, 625, 622, 0, 615, 612,
- 620, 614, 617, 615, 618, 616, 617, 621, 616, 626,
- 619, 0, 624, 623, 631, 620, 628, 622, 618, 619,
- 624, 621, 625, 630, 628, 629, 633, 626, 634, 632,
- 630, 637, 635, 0, 636, 633, 626, 631, 624, 624,
- 637, 631, 639, 628, 632, 642, 638, 624, 638, 639,
- 630, 635, 645, 633, 636, 649, 632, 642, 637, 635,
- 634, 636, 645, 651, 0, 648, 650, 657, 652, 639,
-
- 0, 653, 642, 638, 640, 0, 649, 650, 640, 645,
- 656, 640, 649, 648, 654, 0, 651, 656, 640, 655,
- 651, 640, 648, 650, 652, 652, 640, 653, 653, 657,
- 654, 640, 655, 0, 659, 640, 660, 656, 640, 0,
- 0, 654, 660, 664, 661, 640, 655, 666, 640, 658,
- 658, 0, 658, 661, 663, 658, 659, 662, 0, 662,
- 658, 659, 668, 660, 669, 665, 658, 658, 667, 0,
- 664, 661, 670, 666, 666, 658, 658, 658, 663, 658,
- 667, 663, 658, 671, 662, 665, 669, 658, 668, 668,
- 672, 669, 665, 658, 658, 667, 670, 673, 674, 670,
-
- 675, 676, 678, 677, 680, 671, 674, 679, 676, 681,
- 671, 677, 673, 682, 685, 672, 680, 672, 687, 685,
- 691, 678, 681, 675, 673, 674, 683, 675, 676, 678,
- 677, 680, 684, 679, 679, 683, 681, 688, 686, 682,
- 682, 685, 688, 692, 690, 687, 693, 684, 0, 695,
- 700, 694, 691, 683, 697, 696, 701, 698, 700, 684,
- 686, 704, 702, 697, 0, 686, 690, 699, 695, 688,
- 693, 690, 694, 693, 696, 692, 695, 700, 694, 698,
- 702, 697, 696, 701, 698, 703, 0, 699, 705, 702,
- 707, 708, 709, 704, 699, 710, 705, 711, 712, 714,
-
- 0, 714, 715, 713, 703, 0, 723, 719, 707, 708,
- 719, 716, 703, 710, 709, 705, 713, 707, 708, 709,
- 712, 711, 710, 716, 711, 712, 714, 717, 715, 715,
- 713, 718, 720, 723, 719, 717, 722, 724, 716, 0,
- 720, 726, 0, 724, 725, 727, 728, 726, 0, 718,
- 729, 732, 727, 728, 717, 729, 720, 731, 718, 720,
- 735, 722, 730, 722, 724, 0, 725, 720, 726, 730,
- 733, 725, 727, 728, 732, 731, 736, 729, 732, 733,
- 734, 737, 738, 740, 731, 739, 741, 743, 734, 730,
- 738, 0, 735, 742, 736, 744, 737, 733, 739, 741,
-
- 745, 748, 744, 736, 740, 750, 748, 734, 737, 738,
- 740, 758, 739, 741, 743, 742, 746, 747, 745, 749,
- 742, 751, 744, 746, 747, 752, 749, 745, 748, 753,
- 754, 755, 756, 758, 751, 761, 753, 750, 758, 760,
- 756, 759, 763, 746, 747, 757, 749, 759, 751, 762,
- 764, 763, 765, 757, 755, 767, 753, 752, 755, 756,
- 757, 770, 754, 766, 764, 760, 760, 761, 759, 763,
- 766, 769, 757, 762, 768, 771, 762, 764, 0, 773,
- 757, 772, 767, 768, 765, 775, 774, 771, 770, 776,
- 766, 774, 775, 769, 779, 777, 780, 779, 769, 785,
-
- 782, 768, 771, 777, 772, 773, 773, 782, 772, 780,
- 786, 776, 775, 774, 783, 0, 776, 0, 787, 0,
- 783, 779, 777, 780, 789, 785, 785, 782, 0, 788,
- 787, 788, 792, 786, 790, 796, 791, 786, 794, 0,
- 793, 783, 784, 794, 784, 787, 790, 789, 784, 791,
- 784, 789, 795, 793, 792, 784, 788, 804, 796, 792,
- 784, 790, 796, 791, 797, 795, 784, 793, 798, 784,
- 794, 784, 799, 800, 801, 784, 797, 784, 798, 795,
- 801, 803, 784, 802, 805, 806, 800, 784, 808, 804,
- 798, 797, 812, 0, 799, 798, 802, 816, 809, 799,
-
- 800, 801, 803, 815, 810, 798, 809, 812, 803, 814,
- 802, 813, 806, 810, 819, 818, 805, 825, 815, 812,
- 808, 817, 814, 816, 816, 809, 822, 819, 0, 0,
- 815, 810, 811, 813, 818, 0, 814, 811, 813, 811,
- 823, 819, 818, 817, 820, 811, 821, 828, 817, 825,
- 811, 811, 820, 822, 821, 826, 829, 811, 811, 811,
- 827, 828, 831, 823, 811, 832, 811, 823, 827, 830,
- 831, 820, 811, 821, 828, 833, 835, 811, 811, 826,
- 836, 0, 826, 832, 811, 0, 834, 827, 829, 831,
- 838, 830, 832, 833, 839, 837, 830, 834, 836, 841,
-
- 842, 839, 833, 837, 845, 840, 841, 836, 835, 846,
- 843, 844, 838, 834, 0, 842, 851, 838, 840, 848,
- 850, 839, 837, 854, 851, 845, 841, 842, 843, 844,
- 848, 845, 840, 850, 855, 852, 853, 843, 844, 857,
- 859, 846, 856, 851, 852, 854, 848, 850, 853, 858,
- 854, 860, 0, 863, 866, 865, 855, 857, 863, 862,
- 871, 855, 852, 853, 856, 860, 857, 866, 864, 856,
- 862, 864, 859, 867, 868, 858, 858, 869, 860, 865,
- 867, 866, 865, 868, 870, 863, 862, 873, 874, 0,
- 872, 869, 871, 875, 864, 864, 870, 872, 864, 875,
-
- 867, 868, 876, 877, 869, 878, 879, 881, 886, 880,
- 884, 870, 874, 0, 883, 874, 878, 872, 885, 873,
- 875, 884, 881, 887, 876, 877, 888, 890, 879, 876,
- 877, 880, 878, 879, 881, 883, 880, 884, 889, 885,
- 886, 883, 893, 891, 888, 885, 895, 889, 892, 893,
- 887, 890, 891, 888, 890, 894, 892, 896, 897, 898,
- 895, 899, 901, 0, 905, 889, 0, 0, 903, 893,
- 891, 900, 906, 895, 907, 892, 0, 903, 904, 894,
- 909, 898, 894, 899, 910, 904, 898, 911, 899, 896,
- 897, 908, 907, 900, 901, 903, 905, 912, 900, 906,
-
- 908, 907, 913, 911, 909, 904, 912, 909, 910, 914,
- 915, 910, 917, 916, 911, 0, 918, 913, 908, 919,
- 920, 921, 923, 0, 912, 916, 924, 919, 929, 913,
- 925, 923, 931, 920, 917, 926, 921, 926, 925, 917,
- 916, 914, 915, 918, 924, 931, 919, 920, 921, 923,
- 928, 932, 933, 924, 934, 929, 935, 925, 928, 931,
- 936, 937, 926, 932, 938, 939, 0, 933, 937, 0,
- 0, 940, 942, 0, 935, 941, 934, 928, 932, 933,
- 946, 934, 943, 935, 945, 0, 0, 936, 937, 951,
- 944, 0, 946, 940, 942, 943, 938, 939, 940, 942,
-
- 941, 948, 941, 944, 947, 950, 945, 946, 949, 943,
- 952, 945, 947, 950, 954, 953, 951, 944, 955, 994,
- 949, 948, 956, 952, 953, 0, 954, 0, 948, 956,
- 0, 947, 950, 959, 960, 949, 966, 952, 0, 955,
- 962, 954, 953, 957, 961, 955, 964, 0, 963, 956,
- 965, 994, 957, 962, 957, 964, 960, 957, 966, 959,
- 959, 960, 969, 966, 961, 957, 967, 962, 965, 968,
- 957, 961, 963, 964, 967, 963, 972, 965, 969, 957,
- 970, 957, 973, 974, 957, 978, 975, 977, 970, 969,
- 974, 968, 976, 967, 979, 0, 968, 978, 983, 982,
-
- 0, 0, 981, 972, 973, 977, 979, 970, 975, 973,
- 974, 982, 978, 975, 977, 976, 980, 981, 983, 976,
- 984, 979, 985, 987, 980, 983, 982, 986, 989, 981,
- 985, 988, 987, 986, 990, 984, 999, 991, 992, 0,
- 989, 990, 0, 980, 991, 1008, 995, 984, 996, 985,
- 987, 999, 988, 997, 986, 989, 992, 998, 988, 995,
- 997, 990, 1001, 999, 991, 992, 1000, 996, 1002, 1003,
- 1001, 1000, 1006, 995, 1004, 996, 1007, 1008, 0, 998,
- 997, 1002, 1009, 1003, 998, 1010, 1006, 1012, 0, 1001,
- 0, 1013, 0, 0, 1007, 1002, 1003, 0, 1000, 1006,
-
- 1004, 1004, 1005, 1007, 1011, 1005, 1005, 1010, 1009, 1009,
- 1005, 0, 1010, 1013, 1014, 1017, 1005, 1017, 1013, 1012,
- 1005, 1018, 1011, 1015, 1005, 1016, 1023, 1019, 1018, 1005,
- 1024, 1011, 1005, 1005, 1020, 0, 1014, 1005, 1025, 1017,
- 1021, 1014, 1017, 1005, 1017, 1019, 1022, 1005, 1018, 1015,
- 1015, 1016, 1016, 1021, 1019, 1022, 1020, 1026, 1023, 1030,
- 1025, 1020, 1024, 0, 1032, 1025, 1033, 1021, 1034, 1036,
- 0, 1028, 0, 1022, 1036, 1030, 0, 1034, 1033, 0,
- 1026, 1035, 1038, 1037, 1026, 1027, 1030, 1032, 1037, 1039,
- 1027, 1032, 1027, 1033, 1027, 1034, 1027, 1028, 1028, 1035,
-
- 1040, 1036, 1039, 1027, 1038, 1041, 1042, 1043, 1035, 1038,
- 1037, 1044, 1027, 1041, 1042, 1045, 1039, 1027, 1040, 1027,
- 1048, 1027, 1046, 1027, 1044, 1047, 1043, 1040, 1049, 1048,
- 1049, 1050, 1041, 1042, 1043, 1046, 1051, 1045, 1044, 1052,
- 1053, 1056, 1045, 1047, 1054, 1059, 1058, 1048, 1057, 1046,
- 1060, 1052, 1047, 1050, 1058, 1049, 1061, 1060, 1050, 1062,
- 1063, 1066, 1086, 1051, 0, 1056, 1052, 1053, 1056, 1054,
- 1057, 1054, 1059, 1058, 1064, 1057, 1068, 1060, 1065, 1072,
- 1064, 1071, 1063, 1061, 1065, 1062, 1062, 1063, 1066, 1067,
- 1069, 1070, 0, 1075, 1086, 1074, 1067, 1069, 0, 1071,
-
- 1068, 1064, 1076, 1068, 1072, 1065, 1072, 1077, 1071, 1078,
- 1079, 1087, 1080, 1070, 1081, 1075, 1067, 1069, 1070, 1074,
- 1075, 1082, 1074, 1081, 1076, 1083, 1077, 1088, 1089, 1076,
- 1084, 1078, 1079, 0, 1077, 1090, 1078, 1079, 1080, 1080,
- 1092, 1081, 1082, 1087, 1084, 1083, 1093, 1091, 1082, 1088,
- 1098, 1094, 1083, 1090, 1088, 1091, 1092, 1084, 1094, 1096,
- 1089, 1097, 1090, 1099, 1100, 1097, 1096, 1092, 1102, 1105,
- 1103, 1107, 1104, 1093, 1091, 1108, 1103, 1106, 1094, 1104,
- 1107, 1113, 1098, 1103, 1105, 1100, 1096, 1109, 1097, 1112,
- 1106, 1100, 1128, 1145, 1109, 1099, 1105, 1103, 1107, 1104,
-
- 1102, 1108, 1108, 1103, 1106, 1110, 1111, 1110, 1113, 1114,
- 1117, 1112, 1115, 1114, 1109, 1111, 1112, 1118, 1117, 1119,
- 1120, 1121, 1118, 1123, 1128, 1145, 0, 0, 1119, 1122,
- 1126, 0, 1110, 1111, 1115, 1123, 1114, 1117, 1120, 1115,
- 1121, 1124, 1122, 1129, 1124, 1127, 1119, 1120, 1121, 1118,
- 1123, 1125, 1131, 1124, 1125, 1126, 1122, 1126, 1127, 1130,
- 1131, 1132, 1132, 1134, 0, 1133, 1129, 1135, 1124, 1136,
- 1129, 1124, 1127, 1125, 1133, 1130, 1135, 1137, 1125, 1131,
- 1139, 1125, 1141, 1142, 1137, 1134, 1130, 1144, 1132, 1140,
- 1134, 1136, 1133, 1139, 1135, 1144, 1136, 1146, 1140, 1152,
-
- 1153, 0, 1143, 0, 1137, 1147, 1142, 1139, 1141, 1141,
- 1142, 1143, 1146, 1147, 1144, 1148, 1140, 1151, 1149, 1150,
- 1153, 1152, 1156, 1158, 1146, 1151, 1152, 1153, 1148, 1143,
- 1149, 1150, 1147, 1154, 1155, 1158, 1157, 1159, 1167, 1162,
- 1156, 1160, 1148, 1155, 1151, 1149, 1150, 1160, 1161, 1156,
- 1158, 1163, 1164, 0, 1165, 1154, 0, 0, 1159, 1168,
- 1154, 1155, 1157, 1157, 1159, 1167, 1169, 1170, 1160, 1174,
- 1161, 1162, 1171, 1176, 0, 1161, 1170, 1172, 1164, 1164,
- 1165, 1165, 1168, 1163, 1169, 1171, 1168, 1173, 1177, 1172,
- 1175, 1190, 1176, 1169, 1170, 1174, 1174, 1175, 1178, 1171,
-
- 1176, 1179, 0, 1180, 1172, 1182, 1186, 1173, 1180, 1179,
- 1177, 1178, 1182, 1181, 1173, 1177, 1183, 1175, 1181, 1184,
- 1194, 1185, 1187, 1190, 1186, 1178, 1192, 1184, 1179, 1185,
- 1187, 1188, 1182, 1186, 1192, 1180, 1191, 1191, 1188, 1193,
- 0, 1189, 1183, 1183, 1199, 1181, 1184, 1195, 1185, 1187,
- 1189, 1196, 1194, 1192, 1197, 1195, 1198, 1199, 1188, 1196,
- 1193, 1200, 1197, 1191, 1198, 1201, 1193, 1200, 1189, 1202,
- 1203, 1199, 1204, 1205, 1195, 0, 1206, 1201, 1196, 1207,
- 0, 1197, 1217, 1198, 0, 0, 0, 1204, 1200, 1209,
- 1208, 1210, 1201, 1213, 1203, 1202, 1202, 1203, 1206, 1204,
-
- 1205, 1214, 1207, 1206, 1208, 1210, 1207, 1209, 1211, 1217,
- 1218, 1216, 1211, 1214, 1215, 1213, 1209, 1208, 1210, 1220,
- 1213, 1215, 1216, 1219, 1221, 1211, 1226, 1222, 1214, 1224,
- 1225, 1223, 1218, 1211, 1222, 1211, 1224, 1218, 1216, 1211,
- 1223, 1215, 1220, 1230, 1231, 1219, 1220, 1221, 1228, 1230,
- 1219, 1221, 1211, 1226, 1222, 1232, 1224, 1228, 1223, 1233,
- 1235, 1237, 1225, 1238, 0, 1239, 1231, 1240, 1244, 1242,
- 1230, 1231, 1243, 0, 1245, 1228, 1239, 1246, 1240, 1243,
- 1248, 1232, 1232, 1249, 0, 1237, 1244, 1235, 1237, 1246,
- 1238, 1233, 1239, 1242, 1240, 1244, 1242, 1247, 0, 1243,
-
- 1245, 1245, 1248, 1247, 1246, 1250, 1251, 1248, 1253, 1249,
- 1249, 1252, 1254, 1252, 1250, 1255, 1256, 1257, 1251, 1259,
- 0, 1260, 1258, 0, 1247, 1254, 1259, 1263, 1256, 0,
- 1265, 1261, 1250, 1251, 1253, 1253, 1261, 1255, 1252, 1254,
- 1262, 1267, 1255, 1256, 1257, 1258, 1259, 1260, 1260, 1258,
- 1263, 1264, 1265, 1268, 1263, 1273, 1262, 1265, 1261, 1264,
- 1269, 1271, 1268, 1270, 1270, 1277, 0, 1262, 1267, 1282,
- 1272, 1270, 1272, 1269, 1271, 1280, 1274, 1275, 1264, 1276,
- 1268, 1273, 1273, 1277, 1275, 1278, 1276, 1269, 1271, 1279,
- 1270, 1270, 1277, 1281, 1284, 1286, 1279, 1272, 1274, 0,
-
- 1280, 1282, 1280, 1274, 1275, 1287, 1276, 1278, 1286, 1289,
- 1283, 1288, 1278, 1291, 1295, 1281, 1279, 1283, 1292, 1288,
- 1281, 1292, 1286, 1293, 0, 1294, 1284, 1295, 1299, 1298,
- 1289, 1297, 1287, 1296, 0, 1291, 1289, 1283, 1288, 1301,
- 1291, 1295, 1296, 1297, 1300, 1292, 1301, 1303, 1304, 1293,
- 1293, 1294, 1294, 1298, 1299, 1299, 1298, 1308, 1297, 1300,
- 1296, 1302, 1305, 1309, 1302, 1306, 1301, 1307, 0, 1307,
- 1304, 1300, 1311, 1315, 1310, 1304, 1302, 0, 1312, 1303,
- 1305, 1308, 1315, 1314, 1308, 1302, 1313, 1306, 1302, 1305,
- 1319, 1302, 1306, 1318, 1307, 1309, 1310, 1314, 1311, 1311,
-
- 1315, 1310, 1317, 1302, 1312, 1312, 1316, 1320, 1313, 1317,
- 1314, 1322, 0, 1313, 1316, 1321, 0, 1318, 1324, 1323,
- 1318, 1325, 1319, 1323, 1328, 1326, 1327, 1329, 1330, 1317,
- 1334, 1328, 0, 1316, 1329, 1327, 1331, 1321, 0, 1320,
- 1324, 1330, 1321, 1322, 1332, 1324, 1323, 1326, 1325, 1331,
- 1333, 1328, 1326, 1327, 1329, 1330, 1337, 1340, 1335, 1332,
- 1336, 1341, 1334, 1331, 1333, 1335, 1338, 1336, 1341, 1337,
- 1342, 1332, 1338, 1343, 1344, 1346, 1345, 1333, 1346, 1349,
- 1348, 1347, 0, 1337, 1340, 1335, 1344, 1336, 1341, 1345,
- 1347, 1349, 1342, 1338, 1350, 1357, 1358, 1342, 1348, 1343,
-
- 1343, 1344, 1346, 1345, 1352, 1354, 1349, 1348, 1347, 1351,
- 1354, 1356, 1351, 1356, 1350, 1352, 1359, 1354, 1360, 1357,
- 1361, 1350, 1357, 1358, 1362, 0, 1363, 1351, 1365, 0,
- 1366, 1352, 1354, 1360, 1364, 1372, 1351, 1354, 1356, 1351,
- 1363, 1366, 1364, 1359, 1361, 1360, 1367, 1361, 1368, 1369,
- 1365, 1362, 1369, 1363, 1370, 1365, 1368, 1366, 1371, 1373,
- 1374, 1364, 1372, 0, 1367, 1376, 1373, 1369, 1375, 1377,
- 1378, 0, 1370, 1367, 1374, 1368, 1369, 1375, 1376, 1369,
- 1377, 1370, 1380, 1383, 1380, 1378, 1373, 1374, 1382, 1381,
- 1371, 1385, 1376, 1384, 1383, 1375, 1377, 1378, 1381, 1388,
-
- 1389, 1387, 1391, 1386, 1387, 1394, 1389, 1391, 1388, 1380,
- 1383, 1384, 1390, 1385, 1382, 1382, 1381, 1386, 1385, 1387,
- 1384, 1390, 1393, 1395, 1396, 1397, 1388, 1389, 1387, 1386,
- 1386, 1387, 1395, 1398, 1391, 1393, 1399, 1394, 1400, 1390,
- 1402, 1404, 1408, 1403, 1386, 1410, 0, 1402, 1405, 1393,
- 1395, 1396, 1406, 1410, 1418, 1398, 1403, 1397, 1406, 1400,
- 1398, 1408, 1405, 1411, 1412, 1400, 1413, 1402, 1399, 1408,
- 1403, 1411, 1410, 1404, 1414, 1405, 1406, 0, 1415, 1406,
- 1420, 1416, 1417, 1412, 1413, 1406, 1418, 1420, 1414, 1419,
- 1411, 1412, 1415, 1413, 1416, 1417, 1422, 1421, 1423, 1424,
-
- 1425, 1414, 1428, 1419, 1422, 1415, 1421, 1420, 1416, 1417,
- 1426, 1425, 1423, 1429, 1431, 1430, 1419, 1432, 1435, 1426,
- 1429, 1433, 1435, 1422, 1421, 1423, 1438, 1425, 1434, 1428,
- 0, 1424, 1449, 1442, 0, 1437, 1431, 1426, 1430, 1432,
- 1429, 1431, 1430, 1433, 1432, 1435, 1434, 1437, 1433, 1439,
- 1440, 1441, 1444, 1438, 1443, 1434, 1445, 1439, 1446, 1441,
- 1442, 1447, 1437, 1448, 1449, 1440, 1451, 1443, 1453, 1447,
- 1448, 1445, 1444, 1446, 1450, 1451, 1439, 1440, 1441, 1444,
- 1454, 1443, 1452, 1445, 1455, 1446, 1457, 1458, 1447, 1450,
- 1448, 1459, 1460, 1451, 1463, 1453, 0, 1461, 0, 1464,
-
- 1462, 1450, 0, 1452, 1454, 1458, 1464, 1454, 1457, 1452,
- 1465, 1455, 1461, 1457, 1458, 1465, 1468, 1469, 1463, 1460,
- 1466, 1463, 1467, 1459, 1461, 1462, 1464, 1462, 1471, 1466,
- 1470, 1467, 1472, 1473, 1474, 1469, 1475, 1465, 1468, 1476,
- 1471, 1474, 1477, 1468, 1469, 1470, 1473, 1466, 1475, 1467,
- 1478, 1473, 1483, 1480, 1472, 1471, 1478, 1470, 1481, 1472,
- 1473, 1474, 1479, 1475, 1480, 1481, 1476, 1482, 1484, 1485,
- 1479, 1487, 1491, 1473, 1477, 1486, 1494, 1478, 1483, 1483,
- 1480, 1488, 1486, 1492, 1489, 1481, 1493, 1490, 1496, 1479,
- 1489, 1498, 1482, 1490, 1482, 1484, 1485, 1500, 1487, 1491,
-
- 1494, 1501, 1486, 1494, 1497, 1503, 1492, 1488, 1488, 1502,
- 1492, 1489, 1505, 1497, 1490, 1499, 1507, 1499, 1493, 1505,
- 1496, 1500, 1506, 1498, 1500, 1504, 1504, 1504, 1501, 1506,
- 1511, 1497, 1504, 1510, 1508, 1502, 1502, 1503, 1510, 1505,
- 1504, 1508, 1499, 1511, 1512, 1515, 1513, 0, 1507, 1506,
- 0, 1514, 1504, 1504, 1504, 1519, 1516, 1511, 1518, 1504,
- 1517, 1508, 1513, 1514, 1518, 1510, 1521, 1517, 1524, 1512,
- 1525, 1512, 1522, 1513, 1516, 1520, 1520, 1515, 1514, 1522,
- 1529, 1523, 1519, 1516, 1526, 1518, 1523, 1517, 1530, 1534,
- 1536, 1526, 1521, 1521, 1524, 1524, 1532, 1525, 1533, 1522,
-
- 1535, 1537, 1520, 1539, 1533, 1544, 1530, 1529, 1523, 1547,
- 1536, 1526, 1535, 1541, 1532, 1530, 1534, 1536, 1546, 1537,
- 1538, 1538, 1543, 1532, 1541, 1533, 1545, 1535, 1537, 1539,
- 1539, 1540, 1540, 1545, 1548, 1549, 1551, 1544, 1546, 1559,
- 1541, 1547, 1550, 1552, 1543, 1546, 1554, 1538, 1553, 1543,
- 1552, 1556, 1555, 1545, 1551, 1558, 1553, 0, 1540, 0,
- 1556, 1554, 1549, 1551, 1550, 1560, 1548, 1557, 1557, 1550,
- 1552, 1559, 1560, 1554, 1561, 1553, 1555, 1562, 1556, 1555,
- 1564, 1558, 1558, 1565, 1566, 1569, 1561, 1564, 1570, 1568,
- 1572, 1565, 1560, 1562, 1557, 1571, 1566, 1568, 1573, 1575,
-
- 1562, 1561, 1581, 0, 1562, 1578, 1584, 1564, 1569, 1570,
- 1565, 1566, 1569, 1571, 1574, 1570, 1568, 1572, 1576, 1574,
- 1562, 1573, 1571, 1577, 1576, 1573, 1575, 1578, 1579, 1583,
- 1574, 1580, 1578, 1584, 1581, 1579, 1577, 1582, 1580, 1585,
- 1586, 1574, 1588, 1587, 1589, 1576, 1574, 1590, 1587, 1582,
- 1577, 1583, 1590, 1591, 1592, 1579, 1583, 1594, 1580, 1587,
- 1593, 1593, 1595, 1586, 1582, 1585, 1585, 1586, 1597, 1588,
- 1587, 1589, 1594, 1598, 1599, 1587, 1600, 1601, 1600, 1590,
- 1603, 1612, 0, 1597, 1594, 1591, 1592, 1593, 1602, 1599,
- 1604, 1606, 1608, 1602, 1595, 1597, 1598, 1610, 1613, 1607,
-
- 1598, 1599, 1611, 1600, 1614, 1604, 1606, 1607, 1612, 1601,
- 1615, 1614, 1603, 1616, 1608, 1602, 1617, 1604, 1606, 1608,
- 1618, 1610, 1621, 1630, 1610, 1613, 1607, 1619, 1611, 1611,
- 0, 1614, 1623, 1624, 1616, 1625, 1627, 1628, 1617, 1631,
- 1616, 1618, 1615, 1617, 1621, 1619, 1629, 1618, 1624, 1621,
- 1630, 1627, 1628, 1632, 1619, 1633, 1623, 1631, 1634, 1623,
- 1624, 1625, 1625, 1627, 1628, 1635, 1631, 1637, 1629, 1636,
- 1638, 1640, 1635, 1629, 0, 1632, 1637, 1633, 1638, 1639,
- 1632, 1641, 1633, 0, 1644, 1634, 0, 1636, 1642, 1646,
- 1645, 1648, 1635, 1640, 1637, 1644, 1636, 1638, 1640, 1645,
-
- 1647, 1642, 1639, 1653, 1649, 1655, 1639, 1646, 1661, 1648,
- 1644, 1644, 1656, 1641, 1650, 1642, 1646, 1645, 1648, 1649,
- 1663, 1659, 1644, 1656, 1657, 1660, 1647, 1647, 1650, 1655,
- 1653, 1649, 1655, 1659, 1662, 1657, 1665, 1664, 1660, 1656,
- 1661, 1650, 1671, 1669, 1662, 1668, 1663, 1663, 1659, 1666,
- 1669, 1657, 1660, 1670, 0, 0, 1673, 1676, 1676, 1674,
- 1671, 1662, 1664, 1665, 1664, 1668, 1675, 1672, 1666, 1671,
- 1669, 1673, 1668, 1672, 1674, 1677, 1666, 1678, 1680, 1670,
- 1670, 1675, 1681, 1673, 1676, 1680, 1674, 1677, 1682, 1684,
- 1678, 1683, 0, 1675, 1672, 1685, 1684, 1681, 1678, 1686,
-
- 1683, 1687, 1677, 1689, 1678, 1680, 1690, 1692, 1687, 1681,
- 0, 1691, 1693, 0, 0, 1682, 1684, 1678, 1683, 1685,
- 1691, 1686, 1685, 1695, 1697, 1689, 1686, 1701, 1687, 1692,
- 1689, 1690, 1693, 1690, 1692, 1699, 1702, 1698, 1691, 1693,
- 1701, 1695, 1697, 1703, 1703, 1704, 1705, 1706, 0, 1708,
- 1695, 1697, 1698, 1707, 1701, 1710, 1711, 1717, 1708, 1709,
- 1699, 1721, 1699, 1702, 1698, 1712, 1709, 1704, 0, 1706,
- 1703, 1705, 1704, 1705, 1706, 1707, 1708, 1713, 1711, 1712,
- 1707, 1715, 1716, 1711, 1717, 1718, 1709, 1710, 1719, 1715,
- 1720, 1722, 1712, 1721, 1723, 1716, 1713, 1720, 0, 1725,
-
- 1719, 1726, 0, 1727, 1713, 1728, 1724, 0, 1715, 1716,
- 1731, 1718, 1718, 1722, 1724, 1719, 1726, 1720, 1722, 1723,
- 1729, 1723, 0, 0, 1730, 1724, 1725, 1730, 1726, 1727,
- 1727, 1728, 1728, 1724, 1732, 1731, 0, 1731, 1729, 1733,
- 1732, 1724, 1730, 1735, 1733, 1734, 1738, 1729, 1741, 1737,
- 1742, 1730, 1739, 1743, 1730, 1746, 1744, 1742, 1735, 0,
- 1745, 1732, 1741, 1734, 1737, 1744, 1746, 1752, 1738, 1745,
- 1735, 1733, 1734, 1738, 1739, 1741, 1737, 1742, 1747, 1739,
- 1743, 1748, 1746, 1744, 1750, 1751, 1758, 1745, 1753, 1752,
- 0, 1747, 1760, 1748, 1752, 1763, 1756, 1759, 1765, 1750,
-
- 1751, 1759, 1762, 1764, 1760, 1747, 1768, 1758, 1748, 1756,
- 1753, 1750, 1751, 1758, 1761, 1753, 1761, 1756, 1766, 1760,
- 1762, 1764, 1763, 1756, 1759, 1765, 1766, 1767, 1768, 1762,
- 1764, 1771, 1769, 1768, 1770, 1772, 1756, 1773, 1774, 1770,
- 1785, 1761, 1775, 1778, 0, 1766, 1769, 0, 1779, 1775,
- 1767, 1781, 1788, 1780, 1767, 1782, 1790, 1774, 0, 1769,
- 1787, 1773, 1779, 1771, 1773, 1774, 1770, 1772, 1783, 1775,
- 1778, 1780, 1785, 1779, 1779, 1779, 1784, 1786, 1781, 1788,
- 1780, 1782, 1782, 1783, 1789, 1784, 1787, 1787, 1790, 1779,
- 1792, 1793, 1794, 1798, 1796, 1783, 1796, 1798, 1793, 1786,
-
- 1779, 1797, 1799, 1784, 1786, 1800, 1789, 1801, 1803, 1806,
- 0, 1789, 1899, 1792, 1799, 1794, 1801, 1792, 1793, 1794,
- 1798, 1796, 1802, 1797, 1804, 1805, 1808, 1800, 1797, 1799,
- 1811, 1806, 1800, 1802, 1801, 1803, 1806, 1805, 1807, 1807,
- 1809, 1808, 1810, 1813, 1899, 0, 1814, 1804, 1809, 1802,
- 1815, 1804, 1805, 1808, 1814, 1816, 1820, 1811, 1815, 1816,
- 1817, 1824, 1813, 1817, 1810, 1807, 1818, 1809, 1823, 1810,
- 1813, 1820, 1819, 1814, 1818, 1821, 1825, 1815, 1819, 1827,
- 1823, 1821, 1816, 1820, 1826, 0, 1829, 1817, 1824, 1830,
- 1828, 1831, 1827, 1818, 1834, 1823, 1832, 1836, 1826, 1819,
-
- 1825, 1833, 1821, 1825, 1828, 1837, 1827, 1835, 1832, 1839,
- 1835, 1826, 1829, 1829, 1843, 1833, 1830, 1828, 1831, 1840,
- 1834, 1834, 1841, 1832, 1836, 1835, 1840, 1837, 1833, 1841,
- 1842, 1839, 1837, 1844, 1835, 1845, 1839, 1835, 1846, 1847,
- 1848, 1843, 1849, 1845, 1850, 1842, 1840, 1851, 1847, 1841,
- 1852, 1853, 1856, 1855, 1849, 1858, 1857, 1842, 1862, 1853,
- 1844, 1859, 1845, 1852, 1857, 1846, 1847, 1848, 1860, 1849,
- 1859, 1850, 1861, 1862, 1851, 1855, 1863, 1852, 1853, 1856,
- 1855, 1865, 1858, 1857, 1862, 1862, 1864, 1867, 1859, 1860,
- 1866, 0, 1872, 1865, 1864, 1860, 1861, 1869, 1866, 1861,
-
- 1862, 1870, 1873, 1863, 1869, 1870, 1871, 1878, 1865, 1875,
- 1876, 1880, 1874, 1864, 1867, 1872, 1879, 1866, 1871, 1872,
- 1874, 1875, 1876, 1879, 1869, 1882, 1882, 1881, 1870, 1873,
- 1883, 1880, 1884, 1871, 1878, 1885, 1875, 1876, 1880, 1874,
- 1881, 1886, 1889, 1879, 1890, 1891, 1888, 1891, 1886, 1892,
- 1884, 1901, 1882, 0, 1881, 1894, 1883, 1883, 1898, 1884,
- 1885, 1888, 1885, 1892, 1889, 1896, 1890, 1897, 1886, 1889,
- 1898, 1890, 1891, 1888, 1893, 1900, 1892, 1894, 1902, 1904,
- 1893, 1900, 1894, 1901, 1903, 1898, 1903, 1896, 1910, 1897,
- 1905, 1906, 1896, 1904, 1897, 1907, 1908, 1909, 1911, 1917,
-
- 1902, 1893, 1900, 1916, 0, 1902, 1904, 0, 1905, 1906,
- 1909, 1903, 1913, 1907, 1908, 1915, 0, 1905, 1906, 1913,
- 1910, 1911, 1907, 1908, 1909, 1911, 1918, 1923, 1924, 1916,
- 1916, 1917, 1925, 1915, 1918, 1921, 1919, 1922, 1919, 1913,
- 1924, 1927, 1915, 1919, 1936, 1929, 1921, 1928, 1922, 1932,
- 1925, 1930, 1918, 1918, 1923, 1924, 1927, 1929, 1928, 1925,
- 1933, 1918, 1921, 1919, 1922, 1919, 1930, 1937, 1927, 1935,
- 1934, 1936, 1929, 1932, 1928, 1939, 1932, 1934, 1930, 1940,
- 1942, 1943, 1933, 1941, 1935, 0, 0, 1933, 1944, 0,
- 1946, 1945, 1947, 1937, 1937, 1948, 1935, 1934, 1950, 1954,
-
- 1952, 1949, 1939, 1940, 1945, 1941, 1940, 1947, 1948, 1949,
- 1941, 1953, 1942, 1943, 1955, 1944, 1946, 1946, 1945, 1947,
- 1958, 1956, 1948, 1952, 1950, 1950, 1954, 1952, 1949, 1960,
- 1957, 1963, 1964, 1961, 1967, 1953, 1955, 1957, 1953, 1956,
- 1961, 1955, 1962, 1958, 1963, 1965, 1966, 1958, 1956, 1962,
- 1968, 1960, 1965, 1969, 1971, 1964, 1960, 1957, 1963, 1964,
- 1961, 1972, 1969, 1973, 1975, 1971, 1967, 1974, 1966, 1962,
- 1979, 1968, 1965, 1966, 1978, 1980, 1987, 1968, 1981, 1981,
- 1969, 1971, 1982, 1972, 1984, 1985, 1974, 1978, 1972, 1975,
- 2004, 1975, 1988, 1991, 1974, 1973, 1979, 1979, 1986, 1980,
-
- 0, 1978, 1980, 1987, 1998, 1981, 1993, 1984, 1982, 1982,
- 1988, 1984, 1999, 1986, 1995, 1993, 2000, 1985, 2002, 1988,
- 1991, 2005, 2004, 2007, 2006, 1986, 1998, 1995, 2007, 2010,
- 2008, 1998, 2012, 1993, 1999, 2006, 2014, 2010, 2011, 1999,
- 2015, 1995, 2019, 2000, 0, 2002, 2016, 2005, 2005, 2017,
- 2007, 2006, 2008, 2011, 2014, 2016, 2010, 2008, 2020, 2012,
- 2023, 2017, 2021, 2014, 2024, 2011, 2020, 2028, 2025, 2019,
- 2026, 2021, 2015, 2016, 2027, 2029, 2017, 2030, 2031, 2032,
- 2028, 2033, 2034, 2035, 2030, 2020, 2023, 2023, 2029, 2021,
- 2025, 2024, 2026, 2038, 2028, 2025, 2036, 2026, 2037, 2027,
-
- 2031, 2027, 2029, 2039, 2030, 2031, 2032, 2037, 2033, 2034,
- 2035, 2036, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2038,
- 2038, 2042, 2047, 2036, 2107, 2037, 2043, 2040, 2041, 2039,
- 2039, 2048, 2049, 2051, 2053, 0, 2054, 2047, 0, 2040,
- 2041, 2042, 2043, 2044, 2045, 2046, 2050, 2049, 2060, 2047,
- 2052, 2048, 2057, 2050, 2054, 2051, 2107, 2052, 2048, 2049,
- 2051, 2053, 2056, 2054, 2055, 2055, 2057, 2058, 2059, 2056,
- 2058, 2062, 2061, 2050, 2060, 2060, 2063, 2052, 2065, 2057,
- 2066, 2059, 2067, 2062, 2068, 2066, 2067, 2065, 2063, 2056,
- 2061, 2055, 2070, 2069, 2058, 2059, 2071, 2072, 2062, 2061,
-
- 2073, 0, 2074, 2063, 2076, 2065, 2069, 2066, 2068, 2067,
- 2078, 2068, 2079, 0, 2070, 2083, 2080, 2081, 2071, 2070,
- 2069, 2079, 2083, 2071, 2072, 2081, 2084, 2073, 2074, 2074,
- 2076, 2076, 2080, 2085, 2086, 2084, 2078, 2078, 2085, 2079,
- 2087, 2086, 2083, 2080, 2081, 2088, 2089, 0, 2090, 2092,
- 2094, 2093, 2088, 2084, 2095, 2089, 2093, 2096, 2087, 2105,
- 2085, 2086, 2097, 2099, 0, 0, 2106, 2087, 2094, 0,
- 2098, 2097, 2088, 2089, 2090, 2090, 2092, 2094, 2093, 2098,
- 2100, 2095, 2101, 2099, 2096, 2102, 2105, 2103, 2104, 2097,
- 2099, 2101, 2100, 2106, 2102, 2108, 2104, 2098, 2103, 2109,
-
- 2110, 2111, 2114, 2112, 2108, 2116, 2113, 2100, 2110, 2101,
- 2112, 2109, 2102, 2113, 2103, 2104, 2115, 2117, 2118, 2122,
- 0, 0, 2108, 2111, 2114, 0, 2109, 2110, 2111, 2114,
- 2112, 2120, 2116, 2113, 2130, 0, 2129, 2122, 2131, 2120,
- 2123, 2115, 2117, 2115, 2117, 2118, 2122, 2124, 2123, 2125,
- 2131, 2133, 2128, 2132, 2124, 2138, 2136, 2125, 2120, 2128,
- 2129, 2130, 2132, 2129, 2134, 2131, 2137, 2123, 2136, 2143,
- 2139, 2145, 2146, 2148, 2124, 0, 2125, 2151, 2133, 2128,
- 2132, 2141, 2138, 2136, 2139, 2142, 2145, 2134, 2141, 2137,
- 0, 2134, 2142, 2137, 2147, 2149, 2143, 2139, 2145, 2146,
-
- 2148, 2150, 2147, 2156, 2151, 2157, 2158, 2160, 2141, 2159,
- 2157, 2162, 2142, 2161, 2163, 2167, 2150, 2149, 0, 0,
- 2158, 2147, 2149, 2159, 2169, 2160, 2163, 2175, 2150, 2156,
- 2156, 2161, 2157, 2158, 2160, 2168, 2159, 2167, 2162, 2170,
- 2161, 2163, 2167, 2174, 2171, 2172, 2169, 2176, 2168, 2175,
- 2178, 2169, 2171, 2177, 2175, 2174, 2179, 2184, 2170, 2180,
- 2181, 0, 2168, 2185, 2172, 2177, 2170, 2182, 2189, 2176,
- 2174, 2171, 2172, 2186, 2176, 2183, 2182, 2178, 2190, 2180,
- 2177, 2187, 2181, 2179, 2183, 2185, 2180, 2181, 2188, 2184,
- 2185, 2194, 2193, 2187, 2182, 2189, 2195, 0, 2196, 2186,
-
- 2186, 2199, 2183, 2196, 2197, 2190, 2193, 2198, 2187, 2200,
- 2188, 0, 0, 2201, 0, 2188, 2203, 0, 2194, 2193,
- 2195, 2202, 2204, 2195, 2205, 2208, 2197, 2206, 2203, 2198,
- 2196, 2197, 2200, 2199, 2198, 2201, 2200, 2209, 2212, 2202,
- 2201, 2204, 2206, 2203, 2213, 2216, 2205, 2208, 2202, 2204,
- 2214, 2205, 2208, 2215, 2206, 2217, 0, 2218, 2219, 2214,
- 2212, 2209, 2222, 2216, 2209, 2212, 2213, 2215, 2223, 2225,
- 2222, 2213, 2216, 2217, 2227, 2223, 2219, 2214, 2224, 2226,
- 2215, 2228, 2217, 2218, 2218, 2219, 2224, 2226, 2229, 2222,
- 2230, 2232, 2227, 2228, 2236, 2223, 2225, 2234, 2230, 2235,
-
- 2237, 2227, 2238, 2232, 2234, 2224, 2226, 2242, 2228, 2239,
- 2246, 2240, 2245, 2243, 2250, 2229, 2249, 2230, 2232, 2247,
- 2251, 2236, 2235, 2246, 2234, 2242, 2235, 2243, 2239, 2238,
- 2253, 2247, 2237, 2240, 2242, 2245, 2239, 2246, 2240, 2245,
- 2243, 2250, 2249, 2249, 2255, 2257, 2247, 2251, 2258, 2260,
- 0, 2261, 2257, 2258, 2262, 2263, 2260, 2253, 2267, 2264,
- 2265, 2268, 0, 2269, 2270, 2272, 2273, 2267, 2275, 0,
- 2276, 2255, 2257, 0, 2265, 2273, 2260, 2261, 2261, 2277,
- 2258, 2262, 2263, 2264, 2271, 2267, 2264, 2265, 2268, 2269,
- 2269, 2270, 2272, 2273, 2274, 2281, 2271, 2276, 2280, 2281,
-
- 2275, 2282, 2277, 2280, 2284, 2283, 2277, 2274, 2282, 2285,
- 2287, 2271, 2283, 2286, 0, 2286, 2288, 2291, 2294, 2293,
- 0, 2274, 2281, 2297, 2296, 2284, 2296, 2300, 2282, 0,
- 2280, 2284, 2283, 2287, 2299, 2303, 2300, 2287, 2293, 2291,
- 2286, 2285, 2294, 2288, 2291, 2294, 2293, 2297, 2298, 2298,
- 2297, 2296, 2301, 2302, 2300, 2304, 2299, 2312, 2298, 2301,
- 2306, 2299, 2303, 2304, 2305, 2306, 2302, 2308, 2312, 2307,
- 0, 2309, 0, 2310, 2320, 2298, 2298, 2307, 2311, 2301,
- 2302, 2313, 2304, 2305, 2312, 2315, 2315, 2321, 2314, 2316,
- 2324, 2305, 2306, 2308, 2308, 2314, 2307, 2309, 2309, 2310,
-
- 2310, 2320, 2317, 2313, 2311, 2311, 2318, 2316, 2313, 2317,
- 2322, 2321, 2315, 2318, 2321, 2314, 2316, 2324, 2325, 2322,
- 2326, 2327, 2329, 2331, 2332, 0, 2336, 2335, 2334, 2317,
- 2333, 2336, 2331, 2318, 2338, 2343, 0, 2322, 2325, 2335,
- 2329, 0, 2337, 2327, 0, 2325, 2334, 2326, 2327, 2329,
- 2331, 2332, 2338, 2333, 2335, 2334, 2337, 2333, 2336, 2344,
- 2346, 2338, 2343, 2350, 2347, 2350, 2351, 2352, 2344, 2337,
- 2354, 2356, 0, 2358, 2352, 2359, 2365, 2356, 2346, 2347,
- 2363, 2360, 2362, 2363, 2351, 2354, 2344, 2346, 2366, 2367,
- 2350, 2347, 2373, 2351, 2352, 2358, 2368, 2354, 2356, 2360,
-
- 2358, 2359, 2359, 2365, 2362, 2369, 2363, 2363, 2360, 2362,
- 2363, 2370, 2369, 2371, 2368, 2366, 2367, 2374, 2376, 2370,
- 2375, 2377, 2378, 2368, 2373, 2380, 2381, 2383, 2378, 2379,
- 2377, 0, 2369, 2389, 2380, 2371, 0, 0, 2370, 2374,
- 2371, 2382, 2375, 2382, 2374, 2376, 0, 2375, 2377, 2378,
- 2386, 2379, 2380, 2385, 2383, 2390, 2379, 2387, 2381, 2391,
- 2389, 2385, 2386, 2393, 2387, 2392, 2395, 2394, 2382, 2390,
- 2396, 0, 2399, 2391, 2395, 2400, 2397, 2386, 2394, 2402,
- 2385, 2393, 2390, 2400, 2387, 2403, 2391, 2407, 2392, 2396,
- 2393, 2409, 2392, 2395, 2394, 2398, 2398, 2396, 2397, 2399,
-
- 2408, 2405, 2400, 2397, 2411, 2413, 2402, 2405, 2412, 2413,
- 2416, 2408, 2403, 2409, 2407, 2412, 2414, 2417, 2409, 2419,
- 2420, 2421, 2398, 2422, 2414, 2420, 2423, 2408, 2405, 2430,
- 2417, 2411, 2413, 2423, 2425, 2412, 2416, 2416, 2424, 2428,
- 2431, 2419, 2426, 2414, 2417, 2432, 2419, 2420, 2421, 2426,
- 2422, 2427, 2425, 2423, 2428, 2429, 2430, 2424, 2436, 2427,
- 2438, 2425, 2429, 2437, 2431, 2424, 2428, 2431, 2439, 2426,
- 2437, 2432, 2432, 2436, 2440, 2441, 0, 2442, 2427, 2446,
- 2447, 2444, 2429, 2445, 2424, 2436, 2442, 2446, 2449, 2451,
- 2437, 2455, 2438, 2453, 2452, 2439, 2456, 2457, 2440, 2448,
-
- 2448, 2440, 2452, 2444, 2442, 2445, 2446, 2441, 2444, 2448,
- 2445, 2453, 2447, 2459, 2460, 2449, 2451, 2458, 2455, 2457,
- 2453, 2452, 2461, 2456, 2457, 2462, 2448, 2448, 2463, 2465,
- 2458, 2468, 2470, 0, 2471, 2459, 2473, 2470, 2474, 2468,
- 2459, 2460, 2477, 2482, 2458, 2479, 2475, 2484, 2476, 2461,
- 2463, 2474, 2462, 2475, 2478, 2463, 2465, 2486, 2468, 2470,
- 2471, 2471, 2478, 2473, 2485, 2474, 2476, 2479, 2487, 2477,
- 2482, 2488, 2479, 2475, 2484, 2476, 2491, 2485, 2489, 2492,
- 2493, 2478, 2494, 2491, 0, 2497, 2492, 2487, 2498, 2486,
- 2495, 2485, 2499, 0, 2500, 2487, 2498, 2494, 2488, 2499,
-
- 2489, 2500, 2493, 2491, 2497, 2489, 2492, 2493, 2505, 2494,
- 2504, 2495, 2497, 2501, 2502, 2498, 2504, 2495, 2509, 2499,
- 2508, 2500, 2501, 2503, 2503, 2502, 2512, 2508, 2513, 2514,
- 2505, 2518, 2509, 2503, 2520, 2505, 2522, 2504, 2521, 2521,
- 2501, 2502, 2524, 2528, 2529, 2509, 2532, 2508, 2525, 2526,
- 2503, 2503, 2514, 2512, 2533, 2513, 2514, 2525, 2518, 2522,
- 2534, 2520, 2526, 2522, 2537, 2528, 2532, 2521, 2538, 2524,
- 2528, 2529, 2534, 2532, 2536, 2525, 2526, 2533, 2539, 2540,
- 2541, 2533, 2537, 2536, 2544, 2543, 2542, 2534, 2543, 2544,
- 2545, 2537, 2541, 2548, 2538, 2538, 2546, 2547, 2546, 2548,
-
- 2552, 2536, 2556, 2543, 2549, 2539, 2540, 2541, 2542, 2547,
- 2550, 2551, 2543, 2542, 2553, 2543, 2544, 2559, 2560, 2551,
- 2548, 2561, 2545, 2546, 2547, 2563, 2549, 2552, 2564, 2556,
- 2567, 2549, 2550, 2565, 2568, 2569, 2553, 2550, 2551, 2570,
- 2565, 2553, 2571, 2563, 2559, 2560, 2568, 2572, 2561, 2575,
- 2569, 2576, 2563, 2578, 2571, 2564, 2582, 2567, 2575, 2579,
- 2565, 2568, 2569, 2577, 2577, 2570, 2570, 2581, 2579, 2571,
- 2583, 2584, 2596, 2585, 2572, 2576, 2575, 2589, 2576, 2578,
- 2578, 2585, 2594, 2583, 2587, 2599, 2579, 2586, 2582, 2589,
- 2577, 2581, 0, 2584, 2581, 2587, 2586, 2583, 2584, 2596,
-
- 2585, 2598, 2601, 2600, 2589, 2598, 2594, 2604, 2599, 2594,
- 2600, 2587, 2599, 2603, 2586, 2601, 2605, 2603, 2610, 2606,
- 2607, 0, 2608, 2604, 2611, 2609, 2610, 0, 2598, 2601,
- 2600, 2612, 2607, 2611, 2604, 2613, 2619, 2613, 2605, 2609,
- 2603, 2614, 2612, 2605, 2606, 2610, 2606, 2607, 2608, 2608,
- 2615, 2611, 2609, 2614, 2616, 2620, 2615, 2618, 2612, 2621,
- 2623, 2616, 2613, 2619, 2622, 2624, 2625, 2628, 2614, 2626,
- 2618, 2627, 2632, 2620, 2625, 2629, 2626, 2615, 2630, 2635,
- 2630, 2616, 2620, 2643, 2618, 2647, 2621, 2623, 2631, 2628,
- 2622, 2622, 2624, 2625, 2628, 2627, 2626, 2629, 2627, 2633,
-
- 2631, 2634, 2629, 2636, 2632, 2630, 2635, 2638, 2634, 2640,
- 2643, 2636, 2633, 2644, 2645, 2631, 2646, 2647, 2640, 2638,
- 2648, 2651, 2649, 2650, 2646, 0, 2633, 2652, 2634, 2651,
- 2636, 2654, 2655, 2645, 2638, 2649, 2640, 2650, 2654, 2644,
- 2644, 2645, 2656, 2646, 2658, 2655, 2659, 2660, 2651, 2649,
- 2650, 2658, 2648, 2661, 2652, 2660, 2662, 2664, 2654, 2655,
- 2665, 2669, 2671, 2672, 2663, 2656, 2667, 2661, 2659, 2656,
- 2662, 2658, 2663, 2659, 2660, 2667, 2670, 2668, 2673, 2664,
- 2661, 0, 2665, 2662, 2664, 2668, 2674, 2665, 2669, 2672,
- 2672, 2663, 2675, 2667, 2671, 2677, 2678, 2679, 2670, 2676,
-
- 2673, 2682, 2681, 2670, 2668, 2673, 2686, 2676, 2674, 2682,
- 2683, 0, 2684, 2674, 2675, 0, 2689, 2688, 2678, 2675,
- 2684, 2691, 0, 2678, 2679, 2681, 2676, 2677, 2682, 2681,
- 2683, 2688, 2685, 2687, 2693, 2698, 2696, 2683, 2686, 2684,
- 2685, 2687, 2689, 2689, 2688, 2694, 2692, 2695, 2691, 2692,
- 2696, 2697, 2699, 2694, 2702, 2695, 2693, 2698, 2704, 2685,
- 2687, 2693, 2698, 2696, 2692, 2705, 2699, 2701, 2701, 2707,
- 2709, 2706, 2694, 2692, 2695, 2703, 2692, 2697, 2697, 2699,
- 2702, 2702, 2708, 2703, 2704, 2704, 2710, 2711, 2712, 2707,
- 2708, 2705, 2705, 2706, 2701, 2715, 2707, 2709, 2706, 2713,
-
- 2714, 2716, 2703, 2715, 2719, 0, 0, 2722, 2710, 2708,
- 2717, 2723, 2711, 2710, 2711, 2712, 2720, 2724, 2717, 2713,
- 2714, 2726, 2715, 2716, 2720, 2724, 2713, 2714, 2716, 2722,
- 2728, 2719, 2725, 2723, 2722, 2731, 2732, 2717, 2723, 2735,
- 2725, 2729, 2730, 2720, 2724, 2733, 2736, 2726, 2726, 2729,
- 2730, 2737, 2739, 2742, 2745, 2746, 2743, 2728, 0, 2725,
- 0, 2731, 2731, 2732, 2743, 2733, 2735, 0, 2729, 2730,
- 0, 2737, 2733, 2736, 2739, 2742, 2744, 0, 2737, 2739,
- 2742, 2745, 2746, 2743, 2744, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 2744, 2750, 2750, 2750, 2750, 2750, 2750,
- 2750, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2752, 2752,
- 2752, 2752, 2752, 2752, 2752, 2753, 2753, 2753, 2753, 2753,
- 2753, 2753, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2756,
- 2756, 0, 2756, 2756, 2756, 2756, 2757, 2757, 0, 0,
- 0, 2757, 2757, 2758, 2758, 0, 0, 2758, 0, 2758,
- 2759, 0, 0, 0, 0, 0, 2759, 2760, 2760, 0,
- 0, 0, 2760, 2760, 2761, 0, 0, 0, 0, 0,
- 2761, 2762, 2762, 0, 2762, 2762, 2762, 2762, 2763, 2763,
- 0, 2763, 2763, 2763, 2763, 2749, 2749, 2749, 2749, 2749,
-
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749, 2749,
- 2749, 2749
+ 88, 87, 74, 87, 93, 94, 94, 99, 88, 98,
+ 0, 66, 97, 94, 192, 0, 87, 102, 101, 963,
+ 99, 94, 87, 0, 93, 102, 88, 88, 87, 74,
+ 87, 98, 94, 94, 99, 97, 98, 103, 100, 97,
+ 94, 100, 101, 104, 102, 106, 192, 104, 105, 963,
+ 101, 110, 109, 105, 100, 100, 105, 103, 106, 103,
+ 107, 0, 100, 104, 103, 100, 109, 104, 100, 101,
+ 104, 110, 106, 114, 104, 105, 118, 111, 110, 109,
+ 105, 100, 100, 107, 103, 112, 113, 107, 115, 116,
+ 104, 111, 112, 116, 117, 113, 114, 115, 119, 120,
+
+ 114, 117, 118, 118, 111, 119, 121, 0, 120, 122,
+ 124, 116, 112, 113, 120, 115, 116, 122, 121, 123,
+ 116, 117, 120, 126, 124, 119, 120, 127, 129, 0,
+ 123, 128, 0, 121, 123, 120, 122, 124, 126, 129,
+ 128, 120, 135, 123, 127, 131, 123, 127, 130, 132,
+ 126, 131, 134, 127, 127, 129, 130, 123, 128, 133,
+ 132, 123, 136, 138, 135, 139, 0, 134, 133, 135,
+ 182, 127, 131, 137, 127, 130, 132, 136, 139, 134,
+ 133, 0, 137, 182, 133, 138, 133, 153, 154, 136,
+ 138, 145, 139, 145, 145, 133, 145, 182, 155, 150,
+
+ 137, 150, 150, 151, 150, 151, 151, 133, 151, 156,
+ 154, 153, 155, 157, 153, 154, 158, 159, 156, 160,
+ 161, 0, 162, 158, 164, 157, 163, 165, 161, 235,
+ 155, 164, 0, 159, 162, 158, 156, 168, 160, 155,
+ 157, 151, 169, 158, 159, 165, 160, 161, 163, 162,
+ 158, 164, 166, 163, 165, 167, 235, 167, 166, 168,
+ 173, 177, 171, 179, 168, 174, 171, 175, 169, 169,
+ 178, 0, 185, 174, 176, 180, 177, 178, 181, 0,
+ 305, 185, 167, 171, 166, 166, 173, 173, 177, 175,
+ 171, 179, 174, 171, 175, 179, 176, 178, 180, 185,
+
+ 181, 176, 180, 183, 186, 181, 191, 305, 0, 184,
+ 171, 172, 184, 187, 0, 183, 172, 191, 179, 189,
+ 0, 172, 0, 0, 184, 195, 186, 172, 172, 0,
+ 183, 186, 188, 191, 172, 187, 184, 188, 172, 184,
+ 187, 189, 193, 172, 201, 190, 189, 197, 172, 188,
+ 194, 188, 190, 196, 172, 172, 199, 195, 188, 188,
+ 196, 194, 199, 198, 188, 200, 201, 202, 193, 193,
+ 203, 201, 190, 204, 207, 0, 188, 198, 188, 197,
+ 196, 207, 194, 199, 205, 206, 208, 209, 194, 210,
+ 0, 211, 209, 204, 0, 198, 311, 200, 205, 202,
+
+ 204, 207, 203, 212, 198, 211, 206, 208, 210, 213,
+ 214, 205, 206, 208, 209, 215, 210, 216, 211, 217,
+ 218, 221, 214, 311, 216, 212, 215, 213, 219, 218,
+ 212, 222, 222, 220, 223, 225, 213, 214, 220, 228,
+ 222, 217, 215, 224, 216, 227, 217, 218, 226, 229,
+ 224, 219, 231, 221, 236, 219, 230, 225, 222, 222,
+ 220, 232, 225, 234, 230, 227, 223, 233, 237, 0,
+ 224, 228, 227, 226, 238, 226, 232, 236, 239, 243,
+ 233, 229, 239, 230, 231, 240, 236, 241, 232, 234,
+ 234, 238, 0, 247, 233, 242, 248, 245, 243, 238,
+
+ 237, 238, 241, 242, 236, 239, 243, 240, 244, 246,
+ 249, 250, 240, 246, 241, 244, 251, 252, 238, 245,
+ 258, 0, 242, 256, 245, 247, 253, 259, 248, 252,
+ 255, 254, 249, 250, 260, 244, 246, 249, 250, 253,
+ 254, 261, 256, 255, 252, 257, 263, 257, 251, 264,
+ 256, 259, 258, 253, 259, 263, 265, 255, 254, 260,
+ 266, 260, 267, 269, 268, 271, 270, 261, 261, 273,
+ 0, 266, 257, 263, 267, 264, 264, 274, 275, 272,
+ 279, 277, 265, 265, 270, 0, 269, 266, 268, 267,
+ 269, 268, 272, 270, 276, 0, 278, 271, 280, 0,
+
+ 281, 273, 274, 284, 274, 280, 272, 277, 277, 281,
+ 275, 276, 279, 282, 283, 285, 293, 276, 278, 282,
+ 287, 276, 286, 278, 288, 280, 289, 281, 283, 284,
+ 284, 286, 291, 288, 294, 290, 297, 298, 276, 285,
+ 282, 283, 285, 287, 290, 292, 298, 287, 293, 286,
+ 295, 288, 289, 289, 297, 302, 291, 299, 294, 291,
+ 292, 294, 290, 297, 298, 295, 301, 0, 303, 302,
+ 0, 0, 292, 300, 309, 300, 0, 295, 296, 299,
+ 306, 296, 302, 303, 299, 320, 296, 296, 296, 296,
+ 301, 300, 309, 301, 308, 303, 296, 300, 304, 304,
+
+ 300, 309, 300, 313, 306, 296, 308, 306, 296, 307,
+ 310, 312, 307, 296, 296, 296, 296, 320, 300, 307,
+ 314, 308, 315, 304, 318, 304, 304, 316, 310, 313,
+ 313, 318, 314, 312, 319, 317, 307, 310, 312, 307,
+ 0, 321, 316, 317, 315, 322, 319, 314, 321, 315,
+ 323, 318, 324, 325, 316, 0, 327, 331, 329, 325,
+ 0, 319, 317, 326, 840, 326, 332, 322, 321, 327,
+ 0, 330, 322, 0, 324, 325, 329, 335, 328, 324,
+ 325, 0, 323, 327, 335, 329, 325, 326, 332, 331,
+ 326, 328, 326, 332, 328, 840, 328, 330, 330, 339,
+
+ 336, 333, 328, 337, 335, 328, 336, 333, 338, 342,
+ 353, 333, 339, 341, 345, 337, 0, 0, 328, 333,
+ 338, 328, 342, 328, 347, 333, 339, 336, 333, 341,
+ 337, 344, 345, 0, 333, 338, 342, 341, 333, 346,
+ 341, 345, 353, 344, 346, 347, 333, 334, 348, 334,
+ 351, 347, 349, 352, 348, 358, 341, 356, 344, 358,
+ 349, 352, 334, 354, 354, 334, 350, 334, 351, 334,
+ 356, 346, 364, 334, 334, 348, 334, 351, 350, 349,
+ 352, 355, 358, 0, 356, 0, 0, 369, 355, 334,
+ 354, 357, 334, 350, 334, 0, 334, 343, 343, 359,
+
+ 357, 361, 0, 363, 364, 360, 359, 343, 355, 343,
+ 343, 343, 360, 361, 343, 363, 365, 362, 368, 369,
+ 367, 0, 343, 357, 343, 343, 359, 357, 361, 372,
+ 363, 368, 360, 366, 343, 367, 343, 343, 343, 362,
+ 366, 343, 365, 365, 362, 368, 370, 367, 370, 378,
+ 371, 372, 373, 373, 0, 374, 372, 375, 376, 377,
+ 366, 371, 374, 381, 379, 380, 0, 378, 375, 376,
+ 382, 383, 377, 370, 378, 0, 378, 371, 382, 389,
+ 380, 373, 374, 383, 375, 376, 377, 379, 380, 381,
+ 381, 379, 380, 384, 378, 386, 385, 382, 383, 387,
+
+ 388, 389, 390, 391, 384, 385, 389, 380, 386, 392,
+ 387, 394, 387, 393, 403, 0, 0, 387, 388, 393,
+ 384, 391, 386, 385, 395, 390, 387, 388, 396, 390,
+ 391, 398, 394, 404, 399, 397, 0, 387, 394, 387,
+ 393, 392, 397, 400, 407, 401, 403, 395, 399, 402,
+ 396, 395, 405, 410, 432, 396, 404, 398, 398, 401,
+ 404, 399, 397, 406, 405, 400, 407, 408, 410, 406,
+ 400, 407, 401, 409, 412, 402, 402, 411, 413, 405,
+ 410, 409, 414, 412, 411, 417, 432, 415, 416, 408,
+ 406, 418, 419, 413, 408, 420, 0, 422, 419, 409,
+
+ 409, 412, 0, 416, 411, 413, 414, 425, 409, 414,
+ 415, 417, 417, 418, 415, 416, 424, 427, 418, 419,
+ 423, 420, 420, 422, 422, 425, 423, 431, 429, 426,
+ 429, 430, 427, 433, 425, 424, 426, 429, 430, 434,
+ 431, 435, 437, 424, 427, 437, 436, 423, 438, 0,
+ 0, 433, 440, 0, 431, 429, 426, 429, 430, 436,
+ 433, 437, 442, 435, 441, 444, 443, 439, 435, 437,
+ 444, 434, 437, 436, 439, 442, 440, 445, 446, 440,
+ 438, 447, 451, 445, 449, 448, 452, 441, 443, 442,
+ 451, 450, 444, 443, 439, 1075, 441, 448, 455, 486,
+
+ 452, 446, 450, 447, 445, 446, 449, 0, 447, 451,
+ 455, 449, 448, 452, 441, 454, 456, 0, 450, 453,
+ 457, 0, 454, 1075, 453, 455, 453, 459, 457, 458,
+ 0, 486, 453, 0, 453, 462, 0, 453, 453, 456,
+ 458, 0, 454, 456, 453, 453, 453, 457, 460, 463,
+ 459, 453, 460, 453, 459, 461, 458, 462, 466, 453,
+ 463, 453, 462, 464, 453, 453, 469, 461, 465, 466,
+ 460, 453, 467, 469, 0, 460, 463, 470, 465, 460,
+ 468, 464, 461, 472, 468, 466, 471, 474, 471, 473,
+ 464, 0, 0, 469, 475, 0, 467, 479, 478, 467,
+
+ 465, 473, 474, 470, 470, 465, 475, 468, 482, 472,
+ 472, 476, 477, 471, 474, 479, 473, 477, 480, 476,
+ 478, 475, 481, 484, 479, 478, 480, 487, 485, 482,
+ 497, 488, 489, 490, 481, 482, 491, 495, 476, 477,
+ 489, 484, 487, 488, 492, 480, 490, 493, 491, 481,
+ 484, 485, 494, 492, 487, 485, 496, 497, 488, 489,
+ 490, 498, 495, 491, 495, 499, 494, 500, 503, 501,
+ 493, 492, 0, 502, 493, 496, 504, 0, 506, 494,
+ 499, 503, 505, 496, 501, 509, 511, 508, 504, 512,
+ 509, 513, 499, 498, 514, 503, 501, 502, 508, 500,
+
+ 502, 507, 506, 504, 505, 506, 510, 515, 507, 505,
+ 516, 507, 517, 511, 508, 0, 512, 509, 517, 507,
+ 510, 514, 518, 513, 520, 519, 521, 527, 507, 0,
+ 522, 0, 520, 510, 515, 507, 523, 524, 507, 517,
+ 525, 524, 516, 526, 532, 521, 518, 519, 525, 518,
+ 528, 520, 519, 521, 522, 0, 529, 522, 523, 527,
+ 530, 531, 533, 523, 524, 529, 526, 525, 531, 535,
+ 526, 536, 534, 528, 535, 539, 532, 528, 535, 541,
+ 536, 537, 530, 529, 533, 534, 538, 530, 531, 533,
+ 540, 542, 541, 535, 543, 538, 535, 539, 536, 534,
+
+ 545, 535, 539, 542, 544, 535, 541, 537, 537, 0,
+ 546, 548, 540, 538, 547, 0, 551, 540, 542, 550,
+ 549, 0, 544, 554, 545, 551, 543, 545, 552, 556,
+ 550, 544, 546, 546, 557, 548, 547, 546, 548, 553,
+ 560, 547, 549, 551, 555, 554, 550, 549, 552, 558,
+ 554, 555, 557, 553, 559, 552, 556, 558, 560, 546,
+ 561, 557, 562, 563, 564, 559, 553, 560, 565, 0,
+ 567, 555, 568, 569, 566, 561, 558, 571, 0, 567,
+ 570, 559, 0, 578, 563, 568, 572, 561, 564, 573,
+ 563, 564, 565, 574, 562, 565, 566, 567, 574, 568,
+
+ 575, 566, 570, 576, 579, 569, 580, 570, 582, 571,
+ 572, 573, 579, 572, 575, 578, 573, 576, 577, 577,
+ 581, 583, 584, 582, 580, 574, 577, 575, 587, 585,
+ 576, 579, 582, 580, 586, 582, 588, 584, 588, 586,
+ 589, 0, 581, 591, 590, 577, 577, 581, 592, 584,
+ 582, 585, 590, 583, 587, 587, 585, 592, 597, 598,
+ 593, 599, 0, 588, 594, 589, 586, 589, 591, 593,
+ 591, 590, 595, 594, 596, 592, 602, 600, 604, 599,
+ 595, 596, 598, 601, 603, 602, 598, 593, 599, 600,
+ 597, 594, 603, 604, 605, 601, 606, 608, 0, 595,
+
+ 607, 596, 611, 602, 600, 604, 605, 609, 610, 612,
+ 601, 603, 608, 607, 614, 609, 610, 618, 612, 613,
+ 617, 605, 0, 614, 608, 611, 619, 607, 606, 611,
+ 613, 615, 615, 617, 609, 610, 612, 616, 621, 622,
+ 615, 614, 620, 618, 618, 616, 613, 617, 623, 619,
+ 620, 624, 622, 619, 621, 625, 627, 626, 615, 615,
+ 629, 634, 624, 625, 616, 621, 622, 628, 630, 620,
+ 623, 626, 632, 633, 631, 623, 627, 0, 624, 634,
+ 629, 632, 625, 627, 626, 635, 636, 629, 634, 628,
+ 630, 637, 638, 633, 628, 630, 631, 639, 635, 632,
+
+ 633, 631, 640, 641, 636, 642, 637, 646, 643, 644,
+ 648, 645, 635, 636, 638, 649, 641, 645, 637, 638,
+ 643, 639, 644, 642, 639, 640, 654, 652, 658, 640,
+ 641, 647, 642, 649, 646, 643, 644, 648, 645, 647,
+ 651, 655, 649, 653, 656, 657, 656, 0, 651, 654,
+ 653, 0, 676, 654, 657, 659, 655, 647, 647, 652,
+ 658, 660, 663, 662, 661, 662, 647, 651, 655, 663,
+ 653, 656, 657, 661, 659, 666, 669, 672, 676, 676,
+ 673, 660, 659, 674, 678, 675, 669, 666, 660, 663,
+ 662, 661, 664, 0, 674, 672, 664, 682, 677, 664,
+
+ 678, 673, 666, 669, 672, 680, 664, 673, 675, 664,
+ 674, 678, 675, 679, 664, 684, 0, 689, 680, 664,
+ 681, 0, 679, 664, 677, 677, 664, 681, 685, 682,
+ 686, 0, 680, 664, 685, 691, 664, 684, 0, 686,
+ 679, 687, 684, 687, 689, 688, 692, 681, 683, 683,
+ 690, 683, 0, 693, 683, 685, 0, 686, 692, 683,
+ 694, 691, 691, 696, 695, 683, 683, 0, 687, 688,
+ 690, 697, 688, 692, 683, 683, 683, 690, 683, 693,
+ 693, 683, 694, 700, 698, 696, 683, 694, 695, 699,
+ 696, 695, 683, 683, 701, 702, 697, 699, 697, 698,
+
+ 703, 701, 704, 702, 707, 705, 700, 706, 709, 708,
+ 700, 698, 711, 713, 0, 712, 699, 705, 708, 703,
+ 706, 701, 702, 709, 717, 716, 718, 703, 704, 704,
+ 707, 707, 705, 710, 706, 709, 708, 712, 710, 719,
+ 713, 714, 712, 720, 711, 721, 714, 716, 0, 722,
+ 0, 0, 716, 725, 729, 723, 717, 726, 718, 724,
+ 710, 719, 725, 727, 732, 764, 719, 0, 731, 721,
+ 722, 730, 721, 714, 723, 720, 722, 728, 724, 726,
+ 725, 729, 723, 727, 726, 728, 724, 731, 735, 730,
+ 727, 733, 736, 738, 737, 731, 732, 764, 730, 733,
+
+ 739, 740, 744, 742, 728, 742, 735, 743, 746, 741,
+ 736, 738, 0, 0, 744, 735, 737, 745, 733, 736,
+ 738, 737, 741, 740, 739, 745, 746, 739, 740, 744,
+ 742, 748, 750, 743, 743, 746, 741, 747, 751, 748,
+ 747, 752, 754, 755, 745, 753, 756, 752, 754, 757,
+ 755, 0, 0, 756, 757, 748, 758, 750, 748, 750,
+ 759, 761, 765, 758, 747, 751, 748, 753, 752, 754,
+ 755, 760, 753, 756, 763, 760, 757, 762, 759, 766,
+ 765, 769, 763, 758, 761, 767, 762, 759, 761, 765,
+ 768, 771, 770, 767, 766, 772, 774, 0, 760, 781,
+
+ 773, 763, 769, 768, 762, 770, 766, 773, 769, 775,
+ 776, 783, 767, 771, 774, 778, 775, 768, 771, 770,
+ 778, 777, 772, 774, 779, 782, 780, 773, 777, 776,
+ 785, 781, 779, 780, 784, 786, 775, 776, 782, 788,
+ 0, 784, 778, 783, 791, 787, 793, 788, 777, 789,
+ 791, 779, 782, 780, 792, 790, 797, 789, 799, 794,
+ 795, 784, 785, 798, 789, 796, 788, 786, 787, 795,
+ 798, 791, 787, 801, 802, 0, 789, 790, 793, 796,
+ 792, 792, 790, 794, 789, 799, 794, 795, 797, 800,
+ 798, 803, 796, 805, 804, 801, 809, 806, 800, 807,
+
+ 801, 802, 806, 803, 809, 808, 807, 811, 814, 812,
+ 811, 817, 820, 837, 0, 814, 800, 804, 803, 805,
+ 805, 804, 812, 809, 806, 815, 807, 808, 0, 0,
+ 819, 815, 808, 818, 811, 814, 812, 817, 817, 820,
+ 822, 821, 819, 821, 0, 837, 823, 825, 834, 824,
+ 0, 826, 815, 816, 834, 816, 818, 819, 823, 816,
+ 818, 816, 824, 822, 826, 827, 816, 822, 821, 825,
+ 827, 816, 828, 823, 825, 834, 824, 816, 826, 829,
+ 816, 831, 816, 830, 838, 828, 816, 832, 816, 0,
+ 836, 831, 833, 816, 835, 830, 839, 827, 816, 828,
+
+ 841, 0, 829, 831, 843, 833, 829, 835, 831, 832,
+ 830, 836, 843, 844, 832, 842, 838, 836, 831, 833,
+ 842, 835, 844, 839, 846, 847, 0, 850, 848, 0,
+ 849, 843, 841, 856, 0, 859, 851, 0, 0, 846,
+ 844, 848, 842, 845, 0, 849, 852, 847, 845, 863,
+ 845, 846, 847, 850, 850, 848, 845, 849, 851, 853,
+ 856, 845, 845, 851, 857, 852, 854, 859, 845, 845,
+ 845, 855, 853, 852, 854, 845, 860, 845, 862, 855,
+ 864, 863, 861, 845, 869, 0, 853, 857, 845, 845,
+ 861, 857, 862, 854, 866, 845, 865, 867, 855, 868,
+
+ 860, 870, 864, 860, 865, 862, 871, 864, 872, 861,
+ 868, 873, 866, 881, 871, 867, 869, 876, 873, 870,
+ 879, 866, 875, 865, 867, 877, 868, 874, 870, 875,
+ 872, 883, 876, 871, 0, 872, 880, 878, 873, 0,
+ 874, 879, 883, 877, 876, 881, 880, 879, 885, 875,
+ 886, 887, 877, 888, 874, 878, 889, 886, 883, 887,
+ 890, 885, 891, 880, 878, 889, 888, 894, 892, 893,
+ 896, 895, 890, 0, 897, 885, 902, 886, 887, 901,
+ 888, 899, 901, 889, 891, 894, 904, 890, 897, 891,
+ 892, 893, 899, 904, 894, 892, 893, 895, 895, 900,
+
+ 902, 897, 896, 902, 900, 901, 901, 903, 899, 901,
+ 905, 906, 907, 904, 908, 909, 910, 911, 913, 905,
+ 903, 0, 909, 912, 907, 906, 920, 914, 0, 912,
+ 916, 900, 915, 917, 903, 924, 918, 905, 906, 907,
+ 913, 911, 909, 915, 911, 913, 908, 920, 910, 914,
+ 912, 918, 916, 920, 914, 917, 921, 916, 922, 915,
+ 917, 923, 924, 918, 925, 926, 0, 921, 0, 928,
+ 927, 929, 0, 930, 926, 932, 933, 931, 934, 922,
+ 929, 930, 925, 921, 931, 922, 935, 936, 939, 937,
+ 933, 925, 926, 923, 927, 928, 928, 927, 929, 932,
+
+ 930, 938, 932, 933, 931, 942, 941, 943, 944, 936,
+ 934, 937, 942, 945, 936, 941, 937, 948, 935, 946,
+ 939, 949, 0, 938, 947, 950, 948, 951, 938, 952,
+ 944, 955, 942, 941, 956, 944, 0, 946, 952, 943,
+ 945, 957, 947, 951, 948, 949, 946, 953, 949, 950,
+ 954, 947, 950, 957, 951, 959, 952, 958, 954, 960,
+ 961, 962, 953, 955, 966, 965, 956, 960, 957, 964,
+ 970, 979, 966, 961, 953, 0, 962, 954, 964, 958,
+ 977, 969, 959, 965, 958, 972, 960, 961, 962, 969,
+ 973, 966, 965, 967, 974, 967, 964, 970, 972, 978,
+
+ 975, 976, 973, 979, 980, 0, 978, 977, 969, 974,
+ 981, 0, 972, 982, 989, 0, 984, 973, 0, 976,
+ 967, 974, 975, 983, 986, 988, 978, 975, 976, 984,
+ 987, 985, 981, 988, 989, 990, 980, 981, 982, 993,
+ 982, 989, 987, 984, 985, 983, 986, 990, 991, 996,
+ 983, 986, 988, 997, 994, 995, 991, 987, 985, 0,
+ 0, 996, 990, 998, 995, 1002, 993, 994, 1001, 1003,
+ 998, 1004, 0, 1005, 997, 991, 996, 999, 0, 0,
+ 997, 994, 995, 1007, 1004, 1008, 999, 1002, 999, 1003,
+ 998, 999, 1002, 1006, 1001, 1001, 1003, 1005, 1004, 999,
+
+ 1005, 1007, 1006, 1009, 999, 1010, 1011, 1008, 1012, 1014,
+ 1007, 1009, 1008, 999, 0, 999, 1012, 1015, 999, 1016,
+ 1006, 1017, 1011, 1018, 1019, 1020, 1021, 1010, 1017, 0,
+ 1009, 0, 1010, 1011, 1023, 1012, 1014, 1022, 1021, 1015,
+ 1024, 1016, 1023, 1020, 1015, 1018, 1016, 1019, 1017, 1022,
+ 1018, 1019, 1020, 1021, 1025, 1024, 1026, 1027, 1031, 1029,
+ 1028, 1023, 1030, 1032, 1022, 1029, 1025, 1024, 1028, 1038,
+ 1033, 1030, 1027, 1034, 1035, 1032, 1026, 1033, 1037, 1031,
+ 1034, 1025, 1038, 1026, 1027, 1031, 1029, 1028, 1039, 1030,
+ 1032, 1040, 1035, 1042, 1041, 1044, 1038, 1033, 1040, 1043,
+
+ 1034, 1035, 1047, 1044, 1043, 1053, 1045, 1039, 1042, 1046,
+ 1037, 1049, 1050, 0, 1051, 1039, 1041, 1052, 1040, 1045,
+ 1042, 1041, 1044, 1046, 1055, 1049, 1056, 1053, 1047, 1047,
+ 1050, 1043, 1053, 1045, 1054, 1057, 1046, 1048, 1049, 1050,
+ 1048, 1048, 0, 1052, 1052, 1048, 1051, 1058, 1056, 1060,
+ 0, 1048, 1054, 1056, 1059, 1048, 1055, 1057, 0, 1048,
+ 1059, 1054, 1057, 1061, 1048, 1061, 1064, 1048, 1048, 1066,
+ 1062, 1063, 1048, 1058, 1058, 1060, 1060, 1062, 1048, 1065,
+ 1063, 1059, 1048, 1071, 1064, 1068, 1065, 1061, 1067, 1069,
+ 1061, 1066, 1061, 1064, 1068, 1070, 1066, 1062, 1063, 1072,
+
+ 0, 1067, 0, 1074, 1076, 1071, 1065, 1079, 1082, 1078,
+ 1071, 1083, 1068, 1082, 1080, 1067, 1083, 1097, 0, 1079,
+ 1076, 1069, 1072, 1080, 1081, 1084, 1072, 1070, 1073, 1074,
+ 1074, 1076, 1078, 1073, 1079, 1073, 1078, 1073, 1083, 1073,
+ 1082, 1080, 1081, 1085, 1097, 1086, 1073, 1084, 1089, 1087,
+ 1088, 1081, 1084, 1093, 0, 1073, 1085, 1087, 1088, 1091,
+ 1073, 1090, 1073, 1086, 1073, 1092, 1073, 1089, 1096, 1099,
+ 1085, 1093, 1086, 1094, 1090, 1089, 1087, 1088, 1092, 1098,
+ 1093, 1091, 1094, 1095, 1100, 1095, 1091, 1105, 1090, 1102,
+ 1096, 1098, 1092, 1103, 1104, 1096, 1099, 1106, 1108, 0,
+
+ 1094, 1107, 1104, 1109, 1110, 1105, 1098, 1113, 1107, 1100,
+ 1095, 1100, 1111, 1102, 1105, 1103, 1102, 1112, 1111, 1115,
+ 1103, 1104, 0, 1112, 1106, 1108, 1110, 1117, 1107, 1109,
+ 1109, 1110, 1118, 1114, 1113, 1116, 1119, 1126, 1120, 1111,
+ 1114, 1123, 1116, 1115, 1112, 1122, 1115, 1120, 1124, 1117,
+ 1118, 1125, 1127, 1123, 1117, 1128, 1126, 1129, 1130, 1118,
+ 1114, 1119, 1116, 1119, 1126, 1120, 1132, 1131, 1123, 1122,
+ 1124, 1133, 1122, 1125, 1127, 1124, 1131, 1128, 1125, 1127,
+ 1130, 1134, 1128, 1129, 1129, 1130, 1136, 1132, 1137, 1138,
+ 1139, 1133, 1140, 1132, 1131, 1134, 1141, 1142, 1133, 1143,
+
+ 1144, 1147, 1146, 1148, 1141, 1147, 1149, 1144, 1134, 1146,
+ 1140, 1138, 1150, 1142, 1152, 1160, 1138, 1160, 1136, 1140,
+ 1137, 1158, 1139, 1141, 1142, 1154, 1143, 1144, 1147, 1146,
+ 1153, 1156, 1154, 1150, 1155, 1148, 1153, 1162, 1149, 1150,
+ 1163, 1157, 1160, 1153, 1156, 1161, 1152, 1158, 1158, 1155,
+ 1157, 1164, 1154, 1159, 1161, 1164, 1170, 1153, 1156, 1162,
+ 1159, 1155, 1165, 1153, 1162, 1167, 1168, 1163, 1157, 1171,
+ 1169, 1168, 1161, 1167, 1170, 1173, 0, 1172, 1164, 1169,
+ 1159, 1176, 1174, 1170, 1165, 1174, 1177, 1173, 1171, 1165,
+ 1172, 1178, 1167, 1179, 1174, 0, 1171, 1169, 1168, 1177,
+
+ 1175, 1180, 1173, 1175, 1172, 1183, 1176, 1181, 1176, 1174,
+ 1182, 1182, 1174, 1177, 1183, 1181, 1179, 1180, 1184, 1186,
+ 1179, 0, 1175, 1178, 1185, 1189, 1190, 1175, 1180, 1187,
+ 1175, 1192, 1183, 1185, 1181, 1190, 1187, 1182, 1189, 1191,
+ 1184, 1186, 1193, 1196, 0, 1184, 1186, 1195, 1191, 1197,
+ 1194, 1185, 1189, 1190, 1198, 1195, 1187, 1192, 1192, 1194,
+ 1199, 1203, 1198, 1202, 1197, 1193, 1191, 1200, 1201, 1193,
+ 1208, 1202, 1204, 1199, 1195, 1196, 1197, 1194, 1205, 1200,
+ 1201, 1198, 1206, 1203, 1207, 1210, 1209, 1199, 1203, 1213,
+ 1202, 1206, 1204, 1212, 1200, 1201, 1208, 1208, 1209, 1204,
+
+ 1205, 1211, 1207, 1214, 1215, 1205, 1210, 1211, 0, 1206,
+ 1216, 1207, 1210, 1209, 1218, 1212, 1219, 1221, 0, 1222,
+ 1212, 1213, 1220, 0, 1225, 1229, 1221, 1224, 1211, 0,
+ 1215, 1215, 1222, 1223, 1227, 1214, 1216, 1216, 1229, 1219,
+ 1220, 1218, 1228, 1219, 1221, 1223, 1222, 1224, 1226, 1220,
+ 1225, 1225, 1229, 1227, 1224, 1226, 1234, 1230, 1231, 1233,
+ 1223, 1227, 1232, 1231, 1228, 1230, 1233, 1232, 1235, 1228,
+ 1236, 1237, 1239, 1242, 1238, 1226, 1235, 1245, 1236, 1246,
+ 1239, 1240, 1234, 1234, 1230, 1243, 1233, 1246, 1240, 1237,
+ 1231, 1241, 1244, 1244, 1232, 1235, 1238, 1236, 1237, 1239,
+
+ 1241, 1238, 1247, 1248, 1254, 1242, 1246, 1243, 1240, 1245,
+ 1254, 1256, 1243, 1249, 1250, 1253, 1251, 1252, 1241, 1244,
+ 1255, 1249, 1250, 1247, 1251, 1252, 1257, 1259, 1253, 1247,
+ 1258, 1254, 1255, 1260, 1262, 1248, 1261, 1256, 1256, 1271,
+ 1249, 1250, 1253, 1251, 1252, 1258, 1263, 1255, 1262, 1267,
+ 1257, 1264, 1265, 1257, 1259, 1260, 1265, 1258, 1268, 1261,
+ 1260, 1262, 1272, 1261, 1263, 1264, 1271, 1269, 1273, 1265,
+ 1268, 1267, 0, 1263, 1269, 1270, 1267, 1265, 1264, 1265,
+ 1274, 1275, 1279, 1265, 1272, 1268, 1270, 0, 1277, 1272,
+ 1273, 1276, 1278, 1280, 1269, 1273, 1265, 1277, 1276, 1278,
+
+ 1282, 1285, 1270, 1274, 1275, 1284, 1287, 1274, 1275, 1282,
+ 1286, 1284, 1290, 0, 1279, 1277, 1292, 1288, 1276, 1278,
+ 1280, 1293, 1294, 1285, 1288, 1300, 1297, 1282, 1285, 1299,
+ 1295, 0, 1284, 1294, 1301, 1298, 1286, 1286, 1287, 1290,
+ 1292, 1295, 1298, 1292, 1288, 1304, 1301, 1299, 1293, 1294,
+ 1297, 1300, 1300, 1297, 1302, 1303, 1299, 1295, 1305, 1307,
+ 1302, 1301, 1298, 1303, 1306, 1308, 1311, 1304, 1307, 1310,
+ 1315, 1305, 1304, 1309, 1312, 1309, 1313, 1308, 1318, 1311,
+ 0, 1302, 1303, 1312, 1316, 1305, 1307, 1314, 1325, 1319,
+ 1306, 1306, 1308, 1311, 1319, 1310, 1310, 1315, 1313, 1314,
+
+ 1309, 1312, 1317, 1313, 1318, 1318, 1320, 1316, 1321, 1317,
+ 1322, 1316, 1323, 0, 1314, 1325, 1319, 1326, 1322, 1327,
+ 1328, 1328, 1320, 1329, 0, 1330, 1326, 1330, 1328, 1317,
+ 1331, 1321, 1327, 1320, 1323, 1321, 1329, 1322, 1332, 1323,
+ 1336, 1335, 1333, 0, 1326, 1338, 1327, 1328, 1328, 1333,
+ 1329, 1334, 1330, 1339, 1337, 1340, 1331, 1331, 1334, 1335,
+ 1332, 1337, 1336, 1342, 1341, 1332, 1344, 1336, 1335, 1333,
+ 1338, 1341, 1338, 1345, 1346, 1339, 1347, 1349, 1334, 1344,
+ 1339, 1337, 1346, 1350, 0, 1351, 1350, 1340, 1352, 1353,
+ 0, 1341, 1357, 1344, 1355, 1342, 1354, 1347, 1356, 1349,
+
+ 1345, 1346, 1353, 1347, 1349, 1354, 1355, 1361, 1362, 1358,
+ 1350, 1351, 1351, 1359, 1352, 1352, 1353, 1367, 1357, 1357,
+ 1359, 1355, 1356, 1354, 1358, 1356, 1360, 1363, 0, 1360,
+ 1362, 1369, 1365, 1364, 1365, 1362, 1358, 1366, 0, 1361,
+ 1359, 1360, 1371, 1368, 1372, 1363, 1370, 1378, 1373, 1367,
+ 1360, 1379, 1381, 1360, 1363, 1364, 1360, 1369, 1369, 1365,
+ 1364, 1366, 1373, 1377, 1366, 1368, 1372, 1374, 1360, 1375,
+ 1368, 1372, 1370, 1370, 1371, 1373, 1374, 1375, 1376, 1378,
+ 1380, 1383, 1382, 1379, 1381, 1376, 1382, 1377, 1384, 1385,
+ 1377, 1386, 1387, 1389, 1374, 1391, 1375, 1388, 1392, 1387,
+
+ 1386, 1390, 1380, 1383, 1388, 1376, 1389, 1380, 1383, 1382,
+ 1391, 1385, 1392, 1393, 1390, 1384, 1385, 1399, 1386, 1387,
+ 1389, 1396, 1391, 1394, 1388, 1392, 1395, 1401, 1390, 1397,
+ 1394, 1400, 1406, 1395, 1396, 1397, 1402, 1405, 1400, 1403,
+ 1405, 1406, 1404, 1407, 1399, 1393, 1411, 1409, 1396, 1401,
+ 1394, 1403, 1417, 1395, 1401, 1404, 1397, 1411, 1400, 1406,
+ 1408, 1407, 1402, 1402, 1405, 1410, 1403, 1409, 1410, 1404,
+ 1407, 1418, 1408, 1411, 1409, 1415, 1413, 1415, 1419, 1417,
+ 1416, 1413, 1420, 1410, 1422, 1423, 1421, 1408, 1413, 1424,
+ 1428, 1420, 1410, 1419, 1433, 1410, 1425, 1424, 1418, 1423,
+
+ 1426, 1428, 1415, 1413, 1416, 1419, 1427, 1416, 1413, 1420,
+ 1421, 1422, 1423, 1421, 1427, 1434, 1424, 1428, 1425, 1429,
+ 1430, 1431, 1426, 1425, 1431, 1432, 1433, 1426, 1430, 1435,
+ 1436, 1437, 1438, 1427, 1444, 1440, 1435, 1429, 1439, 1431,
+ 1437, 1458, 1434, 1432, 1436, 1438, 1429, 1430, 1431, 1439,
+ 1440, 1431, 1432, 1442, 1443, 1442, 1435, 1436, 1437, 1438,
+ 1444, 1444, 1440, 1443, 1445, 1439, 1446, 1447, 1458, 1448,
+ 1449, 1451, 1456, 1449, 1453, 1445, 1450, 1451, 1452, 1453,
+ 1442, 1443, 1459, 1448, 1446, 1450, 1455, 1452, 1449, 1447,
+ 1460, 1445, 1457, 1446, 1447, 1448, 1448, 1449, 1451, 1455,
+
+ 1449, 1457, 1461, 1450, 1456, 1452, 1453, 1466, 1462, 1464,
+ 1448, 1465, 1460, 1455, 1459, 1473, 1464, 1460, 1467, 1457,
+ 1468, 1471, 1469, 1473, 1465, 1474, 1468, 1482, 1476, 1462,
+ 1475, 0, 1467, 1474, 1461, 1462, 1464, 1477, 1465, 1466,
+ 1471, 1481, 1473, 1483, 1468, 1467, 1476, 1468, 1471, 1475,
+ 1479, 1477, 1474, 1468, 1469, 1476, 1478, 1475, 1480, 1482,
+ 1484, 1487, 1481, 1479, 1477, 1485, 1488, 1486, 1481, 1487,
+ 1478, 1480, 1485, 1489, 1484, 1483, 1486, 1479, 0, 1490,
+ 1488, 1492, 1494, 1478, 1490, 1480, 1491, 1484, 1487, 1481,
+ 1492, 1495, 1485, 1488, 1486, 1497, 1496, 1491, 1495, 1498,
+
+ 1501, 1504, 1499, 1503, 1501, 1489, 1490, 1500, 1492, 1494,
+ 1508, 0, 1505, 1491, 0, 1503, 1506, 1497, 1495, 1496,
+ 1505, 1498, 1497, 1496, 1499, 1500, 1498, 1501, 1504, 1499,
+ 1503, 1506, 1507, 1509, 1500, 1510, 1511, 1508, 1512, 1505,
+ 1507, 1513, 1515, 1506, 1525, 1514, 1509, 0, 1517, 1513,
+ 1518, 1511, 1514, 1512, 1516, 1510, 1519, 1517, 1520, 1507,
+ 1509, 1521, 1510, 1511, 1523, 1512, 1524, 1526, 1513, 1516,
+ 1532, 1518, 1514, 1528, 1515, 1517, 1525, 1518, 1529, 1532,
+ 1527, 1516, 1520, 1519, 1524, 1520, 1523, 1531, 1521, 1530,
+ 1533, 1523, 1531, 1524, 1526, 1527, 1530, 1532, 1528, 1533,
+
+ 1528, 1534, 1529, 1535, 1536, 1529, 1537, 1527, 1540, 1539,
+ 1538, 1542, 1541, 1543, 1531, 1540, 1530, 1533, 1537, 1536,
+ 1544, 1535, 1539, 1534, 1541, 1548, 1544, 1539, 1534, 1546,
+ 1535, 1536, 1538, 1537, 1545, 1540, 1539, 1538, 1542, 1541,
+ 1546, 1547, 1545, 1550, 1549, 1543, 1549, 1544, 1547, 1539,
+ 1548, 1551, 1548, 1552, 1554, 1553, 1546, 1549, 1555, 1556,
+ 1557, 1545, 1553, 1558, 1560, 1556, 1557, 1561, 1547, 1550,
+ 1550, 1549, 1559, 1549, 1563, 1565, 1567, 1566, 1551, 1566,
+ 1552, 1554, 1553, 1564, 1555, 1555, 1556, 1557, 1568, 1570,
+ 1558, 1561, 1564, 1569, 1561, 1559, 1560, 1574, 1572, 1559,
+
+ 1567, 1573, 1582, 1567, 1566, 1572, 1563, 1565, 1573, 1575,
+ 1564, 1571, 1571, 1571, 1578, 1568, 1575, 1577, 1571, 1569,
+ 1569, 1570, 1577, 1579, 1583, 1572, 1571, 1578, 1573, 1574,
+ 1580, 1581, 1586, 0, 1582, 1588, 1575, 1584, 1571, 1571,
+ 1571, 1578, 1583, 1581, 1584, 1571, 1580, 1585, 1579, 1577,
+ 1579, 1583, 1591, 1585, 1587, 1587, 1589, 1580, 1581, 1586,
+ 1590, 1588, 1588, 1589, 1584, 1590, 1592, 1596, 1593, 1597,
+ 1598, 1597, 1600, 1602, 1585, 1593, 1601, 1603, 1591, 1591,
+ 1604, 1587, 1601, 1589, 0, 0, 1604, 1590, 1598, 1605,
+ 1600, 1606, 1607, 1592, 1596, 1593, 1597, 1598, 1609, 1600,
+
+ 1613, 1605, 1614, 1601, 1603, 1602, 1611, 1604, 1608, 1608,
+ 1607, 1606, 1610, 1610, 1615, 1619, 1605, 1611, 1606, 1607,
+ 1616, 1615, 1613, 1617, 1609, 1609, 1618, 1613, 0, 1620,
+ 1621, 0, 0, 1611, 1614, 1608, 1622, 1623, 1624, 1610,
+ 1616, 1615, 1619, 1622, 1625, 1623, 1628, 1616, 1621, 1629,
+ 1626, 1620, 1642, 1624, 0, 1617, 1620, 1621, 1618, 1626,
+ 1627, 1627, 1630, 1622, 1623, 1624, 1631, 1632, 1625, 1630,
+ 1640, 1625, 1628, 1628, 1636, 1634, 1635, 1626, 1631, 1642,
+ 1638, 1629, 1634, 1632, 1635, 1639, 1636, 1627, 1638, 1630,
+ 1632, 1640, 1643, 1631, 1632, 1641, 1645, 1640, 1646, 1649,
+
+ 1644, 1636, 1634, 1635, 1646, 1644, 1648, 1638, 1639, 1652,
+ 1632, 1647, 1639, 1641, 1648, 1643, 1644, 1654, 1653, 1643,
+ 1655, 1649, 1641, 1645, 1647, 1646, 1649, 1644, 1650, 1651,
+ 1653, 1656, 1644, 1648, 1659, 1650, 1651, 1657, 1647, 1654,
+ 1662, 1652, 1661, 1660, 1654, 1653, 1663, 1655, 1660, 1661,
+ 1665, 1666, 1659, 1667, 1667, 1650, 1651, 1656, 1656, 1660,
+ 1657, 1659, 1668, 1664, 1657, 1670, 1669, 1662, 1664, 1661,
+ 1660, 1672, 0, 1663, 1676, 1660, 1673, 1674, 1678, 0,
+ 1667, 1669, 1665, 1666, 1668, 1675, 1672, 1675, 1686, 1668,
+ 1679, 1677, 1674, 1669, 1681, 1664, 1677, 1670, 1672, 1673,
+
+ 1682, 1683, 1685, 1673, 1674, 1679, 1676, 1687, 1682, 1681,
+ 1678, 1688, 1675, 1689, 1686, 1686, 1690, 1679, 1677, 1692,
+ 1689, 1681, 1691, 1683, 1693, 1696, 1685, 1682, 1683, 1685,
+ 1698, 0, 1694, 1705, 1687, 1700, 1704, 0, 1688, 0,
+ 1689, 1692, 1707, 1691, 0, 1693, 1692, 1696, 1690, 1691,
+ 1694, 1693, 1696, 1699, 1698, 1702, 1703, 1698, 1704, 1694,
+ 1705, 1700, 1700, 1704, 1707, 1708, 1706, 1709, 1699, 1707,
+ 1702, 1703, 1710, 1711, 1714, 1716, 1712, 1717, 1713, 1710,
+ 1699, 0, 1702, 1703, 1706, 1712, 1713, 1708, 1715, 1720,
+ 1717, 1711, 1708, 1706, 1709, 1719, 1721, 1714, 1720, 1710,
+
+ 1711, 1714, 1722, 1712, 1717, 1713, 1719, 1716, 1723, 1724,
+ 1715, 1725, 1726, 1727, 1721, 1715, 1720, 1725, 1730, 1732,
+ 1733, 1719, 1719, 1721, 1724, 1736, 1723, 1727, 1722, 1722,
+ 1734, 1733, 1738, 1719, 1726, 1723, 1724, 1736, 1725, 1726,
+ 1727, 1734, 1737, 1732, 1739, 1730, 1732, 1733, 1740, 0,
+ 1742, 1741, 1736, 1743, 1739, 1737, 1746, 1734, 1747, 1745,
+ 1749, 0, 0, 1746, 1738, 1759, 1749, 1750, 0, 1737,
+ 1748, 1739, 1743, 0, 1740, 1740, 1741, 1742, 1741, 1745,
+ 1743, 1751, 1750, 1746, 1747, 1747, 1745, 1749, 1748, 1752,
+ 1753, 1753, 1759, 1754, 1750, 1757, 1751, 1748, 1755, 1758,
+
+ 1760, 1763, 1757, 1761, 1752, 1754, 1764, 1762, 1751, 1760,
+ 1761, 1755, 1768, 1764, 1758, 1766, 1752, 1753, 1767, 1755,
+ 1754, 1768, 1757, 1763, 1769, 1755, 1758, 1760, 1763, 1770,
+ 1761, 1762, 1772, 1764, 1762, 1774, 1775, 1766, 1755, 1768,
+ 1776, 1777, 1766, 1767, 1774, 1767, 1769, 1780, 1781, 1770,
+ 1772, 1769, 1778, 1782, 1775, 1776, 1770, 1783, 1783, 1772,
+ 1778, 1781, 1774, 1775, 1784, 1785, 1777, 1776, 1777, 1788,
+ 1789, 1786, 1780, 1787, 1780, 1781, 1790, 1789, 1788, 1778,
+ 1782, 0, 1791, 1793, 1783, 1792, 1784, 1797, 1796, 0,
+ 1785, 1784, 1785, 1786, 1798, 1787, 1788, 1789, 1786, 1792,
+
+ 1787, 1796, 1793, 1795, 1791, 1799, 1800, 1801, 1790, 1791,
+ 1793, 1795, 1792, 1800, 1797, 1796, 1802, 1799, 1804, 1803,
+ 1798, 1798, 1805, 0, 1807, 1806, 1804, 0, 1808, 1809,
+ 1795, 1813, 1799, 1800, 1811, 1812, 1813, 1804, 1802, 1801,
+ 1806, 1812, 1824, 1802, 1803, 1804, 1803, 1809, 0, 1805,
+ 1807, 1807, 1806, 1804, 1808, 1808, 1809, 1810, 1814, 1811,
+ 1810, 1811, 1812, 1813, 1815, 1817, 1818, 1819, 1821, 1824,
+ 1822, 0, 1823, 1828, 1825, 1810, 1814, 1822, 0, 1815,
+ 1817, 0, 1821, 1825, 1810, 1814, 1828, 1810, 1818, 1819,
+ 1823, 1815, 1817, 1818, 1819, 1821, 1826, 1822, 1827, 1823,
+
+ 1828, 1825, 1829, 1831, 1832, 1826, 1833, 0, 1836, 1827,
+ 1834, 0, 1835, 1833, 1829, 1839, 1842, 1841, 1831, 1832,
+ 1842, 1847, 1845, 1826, 1845, 1827, 1836, 1846, 1839, 1829,
+ 1831, 1832, 1834, 1833, 1835, 1836, 1839, 1834, 1841, 1835,
+ 1843, 1844, 1839, 1842, 1841, 1846, 1848, 1849, 1847, 1845,
+ 1844, 1850, 1843, 1851, 1846, 1839, 1853, 1852, 1854, 1850,
+ 1855, 1856, 1857, 1854, 1848, 1869, 0, 1843, 1844, 1858,
+ 1853, 1862, 1865, 1848, 1849, 1859, 1851, 0, 1850, 1852,
+ 1851, 1863, 1859, 1853, 1852, 1864, 1857, 1866, 1858, 1857,
+ 1854, 1868, 1855, 1856, 1867, 1863, 1858, 1869, 1862, 1865,
+
+ 1868, 1870, 1859, 1864, 1871, 1872, 1863, 1863, 1863, 1867,
+ 0, 1874, 1864, 1866, 1866, 1873, 0, 1876, 1868, 1877,
+ 0, 1867, 1863, 1870, 1878, 1880, 1877, 1880, 1870, 0,
+ 1871, 1871, 1872, 1863, 1881, 1882, 1883, 1873, 1884, 1882,
+ 1876, 1885, 1873, 1874, 1876, 1887, 1877, 1878, 1883, 1890,
+ 1885, 1878, 1880, 1886, 1888, 1889, 1881, 1891, 1891, 1892,
+ 1884, 1881, 1882, 1883, 1886, 1884, 1894, 1889, 1885, 1895,
+ 1893, 1890, 1887, 1897, 1892, 0, 1890, 1888, 1893, 1899,
+ 1886, 1888, 1889, 1895, 1891, 1896, 1892, 1900, 1894, 1903,
+ 1910, 1901, 1903, 1894, 1896, 1900, 1895, 1893, 1899, 1901,
+
+ 1897, 1902, 1904, 1905, 1906, 1902, 1899, 1907, 1909, 1905,
+ 1904, 1912, 1896, 1907, 1900, 1911, 1903, 1910, 1901, 1906,
+ 1909, 1915, 1916, 1913, 1917, 1912, 1914, 1919, 1902, 1904,
+ 1905, 1906, 1918, 1922, 1907, 1909, 1913, 1920, 1912, 1911,
+ 1914, 1919, 1911, 1921, 1918, 1923, 1921, 1915, 1915, 1916,
+ 1913, 1917, 1925, 1914, 1919, 1926, 1928, 1929, 1927, 1918,
+ 1922, 1921, 1926, 1920, 1920, 1927, 1930, 1923, 1931, 1932,
+ 1921, 1928, 1923, 1921, 1925, 1934, 1931, 1933, 1935, 1925,
+ 1937, 1936, 1926, 1928, 1929, 1927, 1933, 1938, 1939, 1944,
+ 1935, 1940, 1942, 1930, 1945, 1931, 1932, 1941, 1946, 1947,
+
+ 1942, 1939, 1934, 1936, 1933, 1935, 1946, 1937, 1936, 1940,
+ 1941, 1944, 1949, 1948, 1938, 1939, 1944, 1950, 1940, 1942,
+ 1951, 1945, 1948, 1952, 1941, 1946, 1947, 1956, 1953, 1955,
+ 1954, 1958, 1962, 1949, 0, 1951, 1953, 1955, 1958, 1949,
+ 1948, 1950, 1954, 1961, 1950, 1959, 1951, 1951, 1960, 1959,
+ 1952, 1964, 1965, 1963, 1956, 1953, 1955, 1954, 1958, 1962,
+ 1960, 1963, 1951, 1964, 1965, 1967, 1961, 1968, 1969, 1970,
+ 1961, 1972, 1959, 1973, 1968, 1960, 1971, 1971, 1964, 1965,
+ 1963, 1974, 1970, 1975, 1977, 1978, 0, 1979, 1969, 1989,
+ 1975, 1973, 1967, 0, 1968, 1969, 1970, 1972, 1972, 1977,
+
+ 1973, 1981, 1980, 1971, 1980, 1983, 1974, 1978, 1974, 1979,
+ 1975, 1977, 1978, 1982, 1979, 1981, 1984, 1984, 1988, 1982,
+ 1986, 1989, 1987, 1991, 1992, 1990, 1993, 1983, 1981, 1980,
+ 1988, 1990, 1983, 1994, 1996, 1994, 1995, 2002, 1997, 1998,
+ 1982, 1999, 1986, 1984, 1987, 1988, 1992, 1986, 1993, 1987,
+ 1995, 1992, 1990, 1993, 2000, 1991, 1997, 1998, 1996, 1999,
+ 1994, 1996, 2001, 1995, 2003, 1997, 1998, 2004, 1999, 2002,
+ 2006, 2016, 2000, 2008, 2010, 2001, 2009, 2006, 2011, 0,
+ 2012, 2000, 2012, 2018, 2014, 0, 2011, 2012, 2015, 2001,
+ 2004, 2008, 2029, 0, 2004, 2014, 2003, 2006, 2016, 2015,
+
+ 2008, 2018, 2009, 2009, 2011, 2011, 2010, 2012, 2017, 2012,
+ 2018, 2014, 2020, 2011, 2021, 2015, 2022, 2023, 2025, 2029,
+ 2017, 2028, 2027, 2032, 2026, 2021, 2030, 2020, 2022, 2027,
+ 2033, 2035, 2023, 2034, 2036, 2017, 2028, 2037, 0, 2020,
+ 0, 2021, 2025, 2022, 2023, 2025, 2026, 2039, 2028, 2027,
+ 2032, 2026, 2030, 2030, 2033, 2034, 2038, 2033, 2041, 2042,
+ 2034, 2040, 2047, 2035, 2037, 2043, 2036, 2042, 2048, 2038,
+ 2045, 2041, 2046, 2039, 2039, 2050, 2040, 2051, 2052, 0,
+ 2049, 2055, 2050, 2038, 0, 2041, 2042, 2053, 2040, 2047,
+ 2048, 2043, 2043, 2045, 2059, 2048, 2046, 2045, 2049, 2046,
+
+ 2051, 2053, 2050, 2055, 2051, 2052, 2056, 2049, 2055, 2057,
+ 2058, 2060, 2061, 2056, 2053, 2062, 2057, 2059, 2060, 2063,
+ 2068, 2059, 2064, 2058, 2066, 0, 2067, 0, 0, 2070,
+ 2073, 2064, 2074, 2056, 2061, 2066, 2057, 2058, 2060, 2061,
+ 2063, 2069, 2075, 2073, 2076, 2076, 2063, 2062, 2067, 2064,
+ 2077, 2066, 2068, 2067, 2070, 2079, 2070, 2073, 2074, 2074,
+ 2069, 2080, 2082, 2083, 2081, 2086, 2075, 2090, 2069, 2075,
+ 0, 2076, 2098, 2091, 2088, 2094, 2077, 2077, 2079, 2081,
+ 2090, 2083, 2079, 2088, 2091, 2095, 2095, 2096, 2097, 2082,
+ 2083, 2081, 2086, 2080, 2090, 2100, 2102, 2094, 2103, 2098,
+
+ 2091, 2088, 2094, 2105, 2106, 2104, 2109, 2110, 2105, 2096,
+ 2097, 2108, 2095, 2113, 2096, 2097, 2104, 2112, 0, 2108,
+ 2114, 2109, 2100, 2117, 2103, 2103, 2106, 2115, 2102, 2114,
+ 2105, 2106, 2104, 2109, 2110, 2112, 2121, 2119, 2108, 2115,
+ 2118, 2122, 2126, 2123, 2112, 2113, 2119, 2114, 2118, 2124,
+ 2117, 2128, 2125, 2127, 2115, 2126, 2130, 2131, 2128, 2129,
+ 2132, 2133, 2121, 2121, 2119, 2123, 2127, 2118, 2122, 2126,
+ 2123, 2124, 2136, 2135, 2134, 0, 2124, 2125, 2128, 2125,
+ 2127, 2129, 2135, 2130, 2131, 2137, 2129, 2132, 2133, 2134,
+ 2138, 2139, 2140, 2142, 2136, 2141, 2143, 2144, 2145, 2136,
+
+ 2135, 2134, 2141, 2146, 2142, 2144, 2139, 2140, 2151, 2149,
+ 2147, 2137, 2137, 2148, 2155, 2151, 2138, 2138, 2139, 2140,
+ 2142, 2152, 2141, 2143, 2144, 2145, 2147, 2150, 2148, 2149,
+ 2146, 2153, 2154, 2156, 0, 2151, 2149, 2147, 2153, 2154,
+ 2148, 2155, 2150, 2152, 2157, 2157, 2158, 2159, 2152, 2160,
+ 2161, 2156, 2160, 2158, 2150, 2162, 2164, 2163, 2153, 2154,
+ 2156, 2159, 2168, 2161, 2170, 2169, 2165, 2168, 2164, 2169,
+ 2167, 2157, 2171, 2158, 2159, 2163, 2160, 2161, 2165, 2167,
+ 2172, 2162, 2162, 2164, 2163, 2171, 2173, 2174, 2170, 2168,
+ 2175, 2170, 2169, 2165, 2176, 0, 2178, 2167, 2180, 2171,
+
+ 2181, 2186, 2172, 2182, 2183, 0, 0, 2172, 2173, 2181,
+ 2186, 2185, 2183, 2173, 2174, 2211, 2194, 2175, 2185, 2182,
+ 2176, 2176, 2178, 2178, 2180, 2180, 2188, 2181, 2186, 2187,
+ 2182, 2183, 2189, 2188, 2187, 2190, 2191, 2196, 2185, 2192,
+ 2197, 2195, 2190, 2194, 2200, 2191, 2195, 2211, 2201, 2202,
+ 2189, 2199, 2203, 2188, 0, 2196, 2187, 2201, 2202, 2189,
+ 2209, 2204, 2190, 2191, 2196, 2192, 2192, 2197, 2195, 2199,
+ 2207, 2200, 2203, 2204, 2205, 2201, 2202, 2206, 2199, 2203,
+ 2210, 2207, 2208, 2205, 2212, 2219, 2206, 2209, 2204, 0,
+ 2208, 2213, 2214, 2212, 2215, 2216, 2220, 2207, 2217, 2221,
+
+ 2214, 2205, 2216, 2213, 2206, 2217, 2218, 2210, 2222, 2208,
+ 2219, 2212, 2219, 2226, 2230, 0, 2215, 2228, 2213, 2214,
+ 2229, 2215, 2216, 2220, 2221, 2217, 2221, 2229, 2218, 2224,
+ 2227, 2226, 2228, 2218, 2232, 2222, 2230, 2224, 2227, 2231,
+ 2226, 2230, 2232, 2235, 2228, 2236, 2231, 2229, 2237, 2239,
+ 2235, 2238, 2240, 2243, 2241, 0, 2224, 2227, 2239, 2244,
+ 2245, 2232, 2250, 2238, 2253, 2243, 2231, 2248, 2255, 2236,
+ 2235, 2246, 2236, 2252, 2248, 2237, 2239, 2241, 2238, 2240,
+ 2243, 2241, 2244, 2249, 2254, 2246, 2244, 2245, 2252, 2250,
+ 2249, 2253, 2254, 2256, 2248, 2255, 2258, 2257, 2246, 2263,
+
+ 2252, 2264, 2265, 2266, 2267, 0, 2264, 2270, 2273, 2268,
+ 2249, 2254, 2257, 0, 2269, 2256, 2276, 2266, 2267, 0,
+ 2256, 2271, 2277, 2258, 2257, 2263, 2263, 2268, 2264, 2265,
+ 2266, 2267, 2269, 2271, 2270, 2273, 2268, 2278, 2276, 2279,
+ 2280, 2269, 2282, 2276, 2277, 2281, 2283, 0, 2271, 2277,
+ 2278, 2285, 2286, 2281, 2287, 2289, 2288, 2290, 2292, 2280,
+ 2282, 2279, 2293, 2285, 2278, 2283, 2279, 2280, 2288, 2282,
+ 2291, 2293, 2281, 2283, 2286, 2295, 2287, 2294, 2285, 2286,
+ 2292, 2287, 2289, 2288, 2290, 2292, 2294, 2296, 2298, 2293,
+ 2291, 2297, 2300, 2301, 2299, 2305, 2304, 2291, 2307, 2310,
+
+ 2298, 2306, 2308, 2307, 2294, 2309, 0, 2295, 0, 2296,
+ 2304, 2311, 0, 2312, 2296, 2298, 2299, 2297, 2297, 2300,
+ 2301, 2299, 2305, 2304, 2308, 2306, 2313, 2309, 2306, 2308,
+ 2307, 2310, 2309, 2314, 2311, 2312, 2315, 2316, 2311, 2317,
+ 2312, 2322, 0, 2319, 2313, 2314, 0, 2320, 2326, 0,
+ 2324, 2325, 0, 2313, 2317, 2315, 2322, 2326, 0, 2316,
+ 2314, 2328, 2327, 2315, 2316, 2319, 2317, 2329, 2322, 2330,
+ 2319, 2320, 2324, 2325, 2320, 2326, 2327, 2324, 2325, 2328,
+ 2331, 2337, 2334, 2341, 2335, 2329, 2339, 2340, 2328, 2327,
+ 2334, 2335, 2336, 2338, 2329, 2330, 2330, 2342, 2331, 2340,
+
+ 2336, 2338, 2347, 2344, 2339, 2342, 2348, 2331, 2337, 2334,
+ 2341, 2335, 2350, 2339, 2340, 2344, 2346, 2351, 2352, 2336,
+ 2338, 2353, 0, 2346, 2342, 2347, 2349, 2354, 2349, 2347,
+ 2344, 2358, 0, 2348, 2355, 2362, 2360, 2357, 2361, 0,
+ 2364, 2365, 2366, 2346, 2350, 2358, 2354, 2362, 2353, 2351,
+ 2352, 2361, 2368, 2349, 2354, 2357, 2355, 2370, 2358, 2360,
+ 2376, 2355, 2362, 2360, 2357, 2361, 2364, 2364, 2365, 2366,
+ 2372, 2373, 2378, 2375, 2379, 0, 2373, 2372, 2380, 2368,
+ 2375, 2381, 2383, 2385, 2370, 2386, 2376, 2376, 2387, 2388,
+ 2385, 2383, 2389, 2390, 2394, 2381, 2395, 2372, 2393, 2378,
+
+ 2375, 2379, 2380, 2373, 2389, 2380, 2396, 2391, 2381, 2383,
+ 2385, 2393, 2386, 2392, 2387, 2387, 2388, 2404, 2403, 2389,
+ 2390, 2391, 2392, 2395, 2400, 2393, 2394, 2399, 2400, 2396,
+ 2401, 2402, 2399, 2396, 2391, 2407, 2412, 2401, 2402, 2403,
+ 2392, 2405, 2406, 2405, 2410, 2403, 2413, 2419, 2415, 2404,
+ 2415, 2400, 2416, 2420, 2421, 2412, 2419, 2401, 2402, 2399,
+ 2420, 2418, 2407, 2412, 2422, 2406, 2410, 2421, 2405, 2406,
+ 2413, 2410, 2427, 2413, 2419, 2415, 2416, 2417, 2417, 2416,
+ 2420, 2421, 2423, 2418, 2424, 2426, 2432, 2417, 2418, 2425,
+ 2423, 2422, 2428, 2426, 2425, 0, 2429, 2432, 2430, 2427,
+
+ 2431, 0, 2436, 2424, 2417, 2417, 2433, 2434, 2440, 2423,
+ 2437, 2424, 2426, 2432, 2434, 2435, 2435, 2437, 2428, 2428,
+ 2436, 2425, 2429, 2429, 2430, 2430, 2431, 2431, 2433, 2436,
+ 2441, 2438, 2442, 2433, 2434, 2440, 2444, 2437, 2438, 2446,
+ 2445, 2442, 2435, 2447, 2449, 2455, 2450, 2454, 0, 2458,
+ 2451, 2452, 2456, 0, 2441, 0, 2454, 2441, 2438, 2442,
+ 2445, 2458, 2457, 2444, 2450, 2447, 2446, 2445, 2451, 2452,
+ 2447, 2449, 2455, 2450, 2454, 2456, 2458, 2451, 2452, 2456,
+ 2457, 2459, 2460, 2461, 2466, 2467, 2459, 2469, 2470, 2457,
+ 2473, 2476, 2473, 2475, 2467, 0, 2460, 0, 2474, 2482,
+
+ 2475, 2461, 2480, 2470, 2478, 2469, 2483, 2490, 2480, 2460,
+ 2461, 2466, 2467, 2459, 2469, 2470, 2474, 2473, 2484, 2478,
+ 2475, 2482, 2485, 2476, 2487, 2474, 2482, 2488, 2483, 2480,
+ 2488, 2478, 2491, 2483, 2490, 2492, 2494, 2493, 2496, 2495,
+ 2485, 2498, 2501, 2494, 2484, 2484, 2487, 2495, 2499, 2485,
+ 2500, 2487, 2502, 2488, 2488, 2493, 2504, 2488, 2505, 2491,
+ 2496, 2502, 2492, 2494, 2493, 2496, 2495, 2505, 2503, 2501,
+ 2499, 2506, 2500, 2498, 2503, 2499, 0, 2500, 2504, 2502,
+ 2507, 2508, 2507, 2504, 2510, 2505, 2511, 2512, 2514, 2518,
+ 2516, 2517, 2510, 2525, 2512, 2503, 2524, 2524, 2511, 2520,
+
+ 2523, 2519, 0, 2506, 2516, 2517, 2522, 2507, 2508, 2528,
+ 2520, 2510, 2518, 2511, 2512, 2514, 2518, 2516, 2517, 2519,
+ 2525, 2521, 2523, 2524, 2526, 2522, 2520, 2523, 2519, 2521,
+ 2529, 2531, 2526, 2522, 2533, 2535, 2528, 2531, 2536, 2537,
+ 2540, 2538, 2546, 2542, 2550, 2541, 2535, 2542, 2521, 2536,
+ 2537, 2526, 2541, 2545, 2548, 2546, 2543, 2529, 2531, 2551,
+ 2557, 2533, 2535, 2538, 2543, 2536, 2537, 2540, 2538, 2546,
+ 2542, 2550, 2541, 2549, 2553, 2552, 2548, 2555, 2549, 2545,
+ 2545, 2548, 2552, 2543, 2556, 2561, 2551, 2554, 2558, 2562,
+ 2559, 2556, 2557, 2553, 2567, 2555, 2558, 2563, 2569, 2560,
+
+ 2549, 2553, 2552, 2554, 2555, 2559, 2560, 2570, 2571, 2567,
+ 2572, 2556, 2561, 2562, 2554, 2558, 2562, 2559, 2568, 2573,
+ 2553, 2567, 2575, 2563, 2563, 2568, 2560, 2578, 2573, 2576,
+ 2569, 2577, 2571, 2580, 2570, 2571, 2582, 2579, 2579, 2577,
+ 2583, 2586, 2572, 2584, 2575, 2568, 2573, 2579, 2583, 2575,
+ 2587, 2576, 2588, 2589, 2590, 2591, 2576, 2592, 2577, 2578,
+ 2580, 2584, 2593, 2582, 2579, 2579, 2589, 2583, 2586, 2594,
+ 2584, 2596, 2606, 2601, 2588, 2599, 2590, 2587, 2601, 2588,
+ 2589, 2590, 2591, 2599, 2592, 2602, 2620, 2603, 2607, 2593,
+ 2602, 2594, 2603, 2604, 2610, 2609, 2594, 2608, 2596, 2606,
+
+ 2601, 2607, 2599, 2611, 2608, 2612, 2615, 2617, 0, 2618,
+ 2619, 2611, 2602, 2609, 2603, 2607, 2622, 2623, 2620, 2604,
+ 2604, 2610, 2609, 2619, 2608, 2621, 2624, 2612, 2628, 0,
+ 2611, 2618, 2612, 2615, 2617, 2622, 2618, 2619, 2626, 2627,
+ 2621, 2629, 2630, 2622, 2623, 2626, 2627, 2634, 2624, 2633,
+ 2628, 2632, 2621, 2624, 2634, 2628, 2629, 2633, 2639, 2647,
+ 2635, 2637, 2636, 2630, 2639, 2626, 2627, 2635, 2629, 2630,
+ 2632, 2636, 2637, 2640, 2634, 2643, 2633, 2644, 2632, 2648,
+ 2638, 2638, 2643, 2653, 2655, 2639, 2647, 2635, 2637, 2636,
+ 2638, 2644, 2649, 2656, 2656, 2640, 2657, 2657, 2658, 2658,
+
+ 2640, 2659, 2643, 2661, 2644, 2662, 2648, 2638, 2638, 2665,
+ 2653, 2655, 2666, 2663, 2662, 2649, 2669, 2670, 2669, 2649,
+ 2672, 2673, 2656, 2671, 2659, 2657, 2663, 2658, 2659, 2677,
+ 2661, 2665, 2662, 2673, 2676, 2678, 2665, 2670, 2672, 2666,
+ 2663, 2679, 2675, 2669, 2670, 2680, 2671, 2672, 2673, 2681,
+ 2671, 2675, 2676, 2683, 2684, 2677, 2677, 2680, 2683, 0,
+ 2682, 2676, 2678, 2682, 2685, 2686, 2685, 2687, 2679, 2675,
+ 0, 2681, 2680, 2687, 2688, 2689, 2681, 2686, 2682, 2691,
+ 2690, 2692, 2695, 2698, 2699, 2683, 2684, 2682, 2690, 2700,
+ 2682, 2685, 2686, 2701, 2687, 2702, 2688, 2689, 2703, 2704,
+
+ 2706, 2688, 2689, 2692, 2707, 2708, 2691, 2690, 2692, 2695,
+ 2698, 2699, 2708, 2710, 2711, 2714, 2700, 2712, 2706, 2713,
+ 2701, 2710, 2702, 2715, 2716, 2703, 2704, 2706, 2717, 2712,
+ 2714, 2707, 2708, 2713, 2720, 2721, 2716, 2722, 2722, 2723,
+ 2710, 2711, 2714, 2720, 2712, 2724, 2713, 2726, 2727, 2715,
+ 2715, 2716, 0, 0, 2724, 2717, 2728, 2729, 2731, 2721,
+ 2730, 2720, 2721, 2734, 2722, 2723, 2723, 2731, 2730, 2728,
+ 2732, 2726, 2724, 0, 2726, 2734, 2743, 2745, 2746, 2729,
+ 2727, 2732, 2748, 2728, 2729, 2731, 2748, 2730, 2749, 2750,
+ 2734, 2751, 2754, 0, 2752, 2755, 2754, 2732, 2751, 2757,
+
+ 2743, 2756, 2758, 2743, 2745, 2746, 2749, 2752, 2759, 2748,
+ 0, 2755, 2750, 2760, 2758, 2749, 2750, 2761, 2751, 2754,
+ 2763, 2752, 2755, 2756, 2757, 2761, 2757, 2760, 2756, 2758,
+ 2762, 2763, 2772, 2765, 2759, 2759, 2764, 2766, 2764, 2762,
+ 2760, 2767, 2770, 2766, 2761, 2765, 2771, 2763, 2767, 2773,
+ 2774, 0, 2775, 2771, 2776, 2770, 2777, 2762, 2778, 2772,
+ 2765, 0, 2780, 2764, 2766, 2779, 2778, 2773, 2767, 2770,
+ 2788, 2781, 2779, 2771, 2782, 2784, 2773, 2774, 2775, 2775,
+ 2783, 2776, 2783, 2777, 2785, 2778, 2780, 2784, 2787, 2780,
+ 2786, 2789, 2779, 2781, 2790, 2787, 2782, 2788, 2781, 2789,
+
+ 2792, 2782, 2784, 2786, 2794, 2797, 2799, 2783, 2798, 2801,
+ 2802, 2800, 2792, 2794, 0, 2787, 2785, 2786, 2789, 2800,
+ 2805, 2790, 2806, 2803, 2814, 2799, 2804, 2792, 2805, 2816,
+ 2808, 2794, 2797, 2799, 2798, 2798, 2803, 2808, 2800, 2810,
+ 2804, 2801, 2802, 2816, 2811, 2817, 2814, 2805, 2813, 2806,
+ 2803, 2814, 2810, 2804, 2815, 2813, 2816, 2808, 2819, 2817,
+ 2818, 2820, 2815, 2824, 2822, 0, 2810, 2811, 2818, 2823,
+ 2825, 2811, 2817, 2822, 2826, 2813, 2827, 2823, 2828, 2832,
+ 2819, 2815, 2829, 2820, 0, 2819, 2830, 2818, 2820, 0,
+ 2824, 2822, 2825, 2831, 2833, 2834, 2823, 2825, 0, 2838,
+
+ 2828, 2831, 2827, 2827, 2829, 2828, 2826, 2836, 2830, 2829,
+ 2837, 2832, 2844, 2830, 2841, 2839, 2833, 2840, 2837, 2838,
+ 2831, 2833, 2834, 2839, 2842, 2840, 2838, 2843, 2846, 0,
+ 2836, 0, 2842, 2851, 2836, 2848, 0, 2837, 2844, 2844,
+ 2847, 2843, 2839, 2847, 2840, 2849, 2841, 2851, 2850, 0,
+ 2852, 2842, 2853, 2849, 2843, 2846, 2850, 2848, 2847, 2854,
+ 2851, 2857, 2848, 2856, 2856, 2859, 0, 2847, 2860, 0,
+ 2847, 2861, 2849, 2854, 2853, 2850, 2852, 2852, 2864, 2853,
+ 2862, 2858, 2867, 0, 2865, 2866, 2854, 2857, 2857, 2858,
+ 2856, 2859, 2859, 2861, 2860, 2860, 2863, 2868, 2861, 2869,
+
+ 2862, 2874, 2883, 2871, 2863, 2864, 2865, 2862, 2858, 2867,
+ 2866, 2865, 2866, 2870, 2872, 2877, 2878, 2868, 0, 2869,
+ 2881, 2870, 2872, 2863, 2868, 2871, 2869, 2875, 2874, 2883,
+ 2871, 2879, 0, 2886, 2887, 2875, 2880, 2877, 2878, 2879,
+ 2870, 2872, 2877, 2878, 2880, 2884, 2881, 2881, 2885, 2888,
+ 2890, 2891, 2894, 2884, 2875, 0, 2885, 2898, 2879, 2886,
+ 2886, 2887, 2892, 2880, 2897, 2898, 2900, 2901, 0, 2888,
+ 0, 0, 2884, 2899, 2894, 2885, 2888, 2890, 2891, 2894,
+ 0, 2899, 2892, 0, 2898, 0, 2897, 0, 0, 2892,
+ 0, 2897, 0, 2900, 2901, 0, 0, 0, 0, 0,
+
+ 2899, 2905, 2905, 2905, 2905, 2905, 2905, 2905, 2906, 2906,
+ 2906, 2906, 2906, 2906, 2906, 2907, 2907, 2907, 2907, 2907,
+ 2907, 2907, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2909,
+ 2909, 2909, 2909, 2909, 2909, 2909, 2911, 2911, 0, 2911,
+ 2911, 2911, 2911, 2912, 2912, 0, 0, 0, 2912, 2912,
+ 2913, 2913, 0, 0, 2913, 0, 2913, 2914, 0, 0,
+ 0, 0, 0, 2914, 2915, 2915, 0, 0, 0, 2915,
+ 2915, 2916, 0, 0, 0, 0, 0, 2916, 2917, 2917,
+ 0, 2917, 2917, 2917, 2917, 2918, 2918, 0, 2918, 2918,
+ 2918, 2918, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+ 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904
} ;
static yy_state_type yy_last_accepting_state;
@@ -3236,9 +3374,8 @@ static void config_start_include_glob(const char* filename)
#ifdef GLOB_ERR
| GLOB_ERR
#endif
-#ifdef GLOB_NOSORT
- | GLOB_NOSORT
-#endif
+ /* do not set GLOB_NOSORT so the results are sorted
+ and in a predictable order. */
#ifdef GLOB_BRACE
| GLOB_BRACE
#endif
@@ -3296,7 +3433,7 @@ static void config_end_include(void)
#endif
#define YY_NO_INPUT 1
-#line 186 "util/configlexer.lex"
+#line 185 "util/configlexer.lex"
#ifndef YY_NO_UNPUT
#define YY_NO_UNPUT 1
#endif
@@ -3304,7 +3441,7 @@ static void config_end_include(void)
#define YY_NO_INPUT 1
#endif
-#line 3306 "<stdout>"
+#line 3443 "<stdout>"
#define INITIAL 0
#define quotedstring 1
@@ -3525,9 +3662,9 @@ YY_DECL
}
{
-#line 206 "util/configlexer.lex"
+#line 205 "util/configlexer.lex"
-#line 3529 "<stdout>"
+#line 3666 "<stdout>"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -3560,13 +3697,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 >= 2750 )
+ if ( yy_current_state >= 2905 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 7896 );
+ while ( yy_base[yy_current_state] != 8293 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -3592,1336 +3729,1401 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 207 "util/configlexer.lex"
+#line 206 "util/configlexer.lex"
{
LEXOUT(("SP ")); /* ignore */ }
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 209 "util/configlexer.lex"
+#line 208 "util/configlexer.lex"
{
/* note that flex makes the longest match and '.' is any but not nl */
LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 212 "util/configlexer.lex"
+#line 211 "util/configlexer.lex"
{ YDVAR(0, VAR_SERVER) }
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 213 "util/configlexer.lex"
+#line 212 "util/configlexer.lex"
{ YDVAR(1, VAR_QNAME_MINIMISATION) }
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 214 "util/configlexer.lex"
+#line 213 "util/configlexer.lex"
{ YDVAR(1, VAR_QNAME_MINIMISATION_STRICT) }
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 215 "util/configlexer.lex"
+#line 214 "util/configlexer.lex"
{ YDVAR(1, VAR_NUM_THREADS) }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 216 "util/configlexer.lex"
+#line 215 "util/configlexer.lex"
{ YDVAR(1, VAR_VERBOSITY) }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 217 "util/configlexer.lex"
+#line 216 "util/configlexer.lex"
{ YDVAR(1, VAR_PORT) }
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 218 "util/configlexer.lex"
+#line 217 "util/configlexer.lex"
{ YDVAR(1, VAR_OUTGOING_RANGE) }
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 219 "util/configlexer.lex"
+#line 218 "util/configlexer.lex"
{ YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 220 "util/configlexer.lex"
+#line 219 "util/configlexer.lex"
{ YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 221 "util/configlexer.lex"
+#line 220 "util/configlexer.lex"
{ YDVAR(1, VAR_OUTGOING_NUM_TCP) }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 222 "util/configlexer.lex"
+#line 221 "util/configlexer.lex"
{ YDVAR(1, VAR_INCOMING_NUM_TCP) }
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 223 "util/configlexer.lex"
+#line 222 "util/configlexer.lex"
{ YDVAR(1, VAR_DO_IP4) }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 224 "util/configlexer.lex"
+#line 223 "util/configlexer.lex"
{ YDVAR(1, VAR_DO_IP6) }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 225 "util/configlexer.lex"
+#line 224 "util/configlexer.lex"
{ YDVAR(1, VAR_PREFER_IP6) }
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 226 "util/configlexer.lex"
+#line 225 "util/configlexer.lex"
{ YDVAR(1, VAR_DO_UDP) }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 227 "util/configlexer.lex"
+#line 226 "util/configlexer.lex"
{ YDVAR(1, VAR_DO_TCP) }
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 228 "util/configlexer.lex"
+#line 227 "util/configlexer.lex"
{ YDVAR(1, VAR_TCP_UPSTREAM) }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 229 "util/configlexer.lex"
+#line 228 "util/configlexer.lex"
{ YDVAR(1, VAR_TCP_MSS) }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 230 "util/configlexer.lex"
+#line 229 "util/configlexer.lex"
{ YDVAR(1, VAR_OUTGOING_TCP_MSS) }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 231 "util/configlexer.lex"
+#line 230 "util/configlexer.lex"
{ YDVAR(1, VAR_TCP_IDLE_TIMEOUT) }
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 232 "util/configlexer.lex"
+#line 231 "util/configlexer.lex"
{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE) }
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 233 "util/configlexer.lex"
+#line 232 "util/configlexer.lex"
{ YDVAR(1, VAR_EDNS_TCP_KEEPALIVE_TIMEOUT) }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 234 "util/configlexer.lex"
+#line 233 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_UPSTREAM) }
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 235 "util/configlexer.lex"
+#line 234 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_UPSTREAM) }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 236 "util/configlexer.lex"
+#line 235 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_SERVICE_KEY) }
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 237 "util/configlexer.lex"
+#line 236 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_SERVICE_KEY) }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 238 "util/configlexer.lex"
+#line 237 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_SERVICE_PEM) }
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 239 "util/configlexer.lex"
+#line 238 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_SERVICE_PEM) }
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 240 "util/configlexer.lex"
+#line 239 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_PORT) }
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 241 "util/configlexer.lex"
+#line 240 "util/configlexer.lex"
{ YDVAR(1, VAR_SSL_PORT) }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 242 "util/configlexer.lex"
+#line 241 "util/configlexer.lex"
{ YDVAR(1, VAR_TLS_CERT_BUNDLE) }
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 243 "util/configlexer.lex"
+#line 242 "util/configlexer.lex"
{ YDVAR(1, VAR_TLS_CERT_BUNDLE) }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 244 "util/configlexer.lex"
+#line 243 "util/configlexer.lex"
{ YDVAR(1, VAR_TLS_WIN_CERT) }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 245 "util/configlexer.lex"
+#line 244 "util/configlexer.lex"
{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 246 "util/configlexer.lex"
+#line 245 "util/configlexer.lex"
{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 247 "util/configlexer.lex"
+#line 246 "util/configlexer.lex"
{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 248 "util/configlexer.lex"
+#line 247 "util/configlexer.lex"
{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 249 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSTEMD) }
+#line 248 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 250 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_DAEMONIZE) }
+#line 249 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_CIPHERS) }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 251 "util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE) }
+#line 250 "util/configlexer.lex"
+{ YDVAR(1, VAR_TLS_CIPHERSUITES) }
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 252 "util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE) }
+#line 251 "util/configlexer.lex"
+{ YDVAR(1, VAR_USE_SYSTEMD) }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 253 "util/configlexer.lex"
-{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
+#line 252 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_DAEMONIZE) }
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 254 "util/configlexer.lex"
-{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
+#line 253 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE) }
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 255 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_RCVBUF) }
+#line 254 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE) }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 256 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_SNDBUF) }
+#line 255 "util/configlexer.lex"
+{ YDVAR(1, VAR_OUTGOING_INTERFACE) }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 257 "util/configlexer.lex"
-{ YDVAR(1, VAR_SO_REUSEPORT) }
+#line 256 "util/configlexer.lex"
+{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 258 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_TRANSPARENT) }
+#line 257 "util/configlexer.lex"
+{ YDVAR(1, VAR_SO_RCVBUF) }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 259 "util/configlexer.lex"
-{ YDVAR(1, VAR_IP_FREEBIND) }
+#line 258 "util/configlexer.lex"
+{ YDVAR(1, VAR_SO_SNDBUF) }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 260 "util/configlexer.lex"
-{ YDVAR(1, VAR_CHROOT) }
+#line 259 "util/configlexer.lex"
+{ YDVAR(1, VAR_SO_REUSEPORT) }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 261 "util/configlexer.lex"
-{ YDVAR(1, VAR_USERNAME) }
+#line 260 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_TRANSPARENT) }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 262 "util/configlexer.lex"
-{ YDVAR(1, VAR_DIRECTORY) }
+#line 261 "util/configlexer.lex"
+{ YDVAR(1, VAR_IP_FREEBIND) }
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 263 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOGFILE) }
+#line 262 "util/configlexer.lex"
+{ YDVAR(1, VAR_CHROOT) }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 264 "util/configlexer.lex"
-{ YDVAR(1, VAR_PIDFILE) }
+#line 263 "util/configlexer.lex"
+{ YDVAR(1, VAR_USERNAME) }
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 265 "util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_HINTS) }
+#line 264 "util/configlexer.lex"
+{ YDVAR(1, VAR_DIRECTORY) }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 266 "util/configlexer.lex"
-{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
+#line 265 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOGFILE) }
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 267 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
+#line 266 "util/configlexer.lex"
+{ YDVAR(1, VAR_PIDFILE) }
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 268 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
+#line 267 "util/configlexer.lex"
+{ YDVAR(1, VAR_ROOT_HINTS) }
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 269 "util/configlexer.lex"
-{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
+#line 268 "util/configlexer.lex"
+{ YDVAR(1, VAR_STREAM_WAIT_SIZE) }
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 270 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
+#line 269 "util/configlexer.lex"
+{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 271 "util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
+#line 270 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_BUFFER_SIZE) }
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 272 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_TTL) }
+#line 271 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_CACHE_SIZE) }
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 273 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
+#line 272 "util/configlexer.lex"
+{ YDVAR(1, VAR_MSG_CACHE_SLABS) }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 274 "util/configlexer.lex"
-{ YDVAR(1, VAR_CACHE_MIN_TTL) }
+#line 273 "util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_CACHE_SIZE) }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 275 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_HOST_TTL) }
+#line 274 "util/configlexer.lex"
+{ YDVAR(1, VAR_RRSET_CACHE_SLABS) }
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 276 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_LAME_TTL) }
+#line 275 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHE_MAX_TTL) }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 277 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
+#line 276 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 278 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
+#line 277 "util/configlexer.lex"
+{ YDVAR(1, VAR_CACHE_MIN_TTL) }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 279 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
+#line 278 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_HOST_TTL) }
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 280 "util/configlexer.lex"
-{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
+#line 279 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_LAME_TTL) }
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 281 "util/configlexer.lex"
-{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
+#line 280 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_SLABS) }
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 282 "util/configlexer.lex"
-{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
+#line 281 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 283 "util/configlexer.lex"
-{ YDVAR(1, VAR_DELAY_CLOSE) }
+#line 282 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 284 "util/configlexer.lex"
-{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
+#line 283 "util/configlexer.lex"
+{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 285 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
+#line 284 "util/configlexer.lex"
+{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 286 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
+#line 285 "util/configlexer.lex"
+{ YDVAR(1, VAR_JOSTLE_TIMEOUT) }
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 287 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_GLUE) }
+#line 286 "util/configlexer.lex"
+{ YDVAR(1, VAR_DELAY_CLOSE) }
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 288 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
+#line 287 "util/configlexer.lex"
+{ YDVAR(1, VAR_TARGET_FETCH_POLICY) }
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 289 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
+#line 288 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 290 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
+#line 289 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 291 "util/configlexer.lex"
-{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
+#line 290 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_GLUE) }
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 292 "util/configlexer.lex"
-{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
+#line 291 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 293 "util/configlexer.lex"
-{ YDVAR(1, VAR_CAPS_WHITELIST) }
+#line 292 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 294 "util/configlexer.lex"
-{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
+#line 293 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 295 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
+#line 294 "util/configlexer.lex"
+{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 296 "util/configlexer.lex"
-{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
+#line 295 "util/configlexer.lex"
+{ YDVAR(1, VAR_USE_CAPS_FOR_ID) }
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 297 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH_KEY) }
+#line 296 "util/configlexer.lex"
+{ YDVAR(1, VAR_CAPS_WHITELIST) }
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 298 "util/configlexer.lex"
-{ YDVAR(1, VAR_PREFETCH) }
+#line 297 "util/configlexer.lex"
+{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 299 "util/configlexer.lex"
-{ YDVAR(0, VAR_STUB_ZONE) }
+#line 298 "util/configlexer.lex"
+{ YDVAR(1, VAR_PRIVATE_ADDRESS) }
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 300 "util/configlexer.lex"
-{ YDVAR(1, VAR_NAME) }
+#line 299 "util/configlexer.lex"
+{ YDVAR(1, VAR_PRIVATE_DOMAIN) }
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 301 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_ADDR) }
+#line 300 "util/configlexer.lex"
+{ YDVAR(1, VAR_PREFETCH_KEY) }
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 302 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_HOST) }
+#line 301 "util/configlexer.lex"
+{ YDVAR(1, VAR_PREFETCH) }
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 303 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_PRIME) }
+#line 302 "util/configlexer.lex"
+{ YDVAR(1, VAR_DENY_ANY) }
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 304 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_FIRST) }
+#line 303 "util/configlexer.lex"
+{ YDVAR(0, VAR_STUB_ZONE) }
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 305 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_NO_CACHE) }
+#line 304 "util/configlexer.lex"
+{ YDVAR(1, VAR_NAME) }
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 306 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+#line 305 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_ADDR) }
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 307 "util/configlexer.lex"
-{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
+#line 306 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_HOST) }
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 308 "util/configlexer.lex"
-{ YDVAR(0, VAR_FORWARD_ZONE) }
+#line 307 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_PRIME) }
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 309 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_ADDR) }
+#line 308 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_FIRST) }
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 310 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_HOST) }
+#line 309 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_NO_CACHE) }
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 311 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_FIRST) }
+#line 310 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 312 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
+#line 311 "util/configlexer.lex"
+{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 313 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+#line 312 "util/configlexer.lex"
+{ YDVAR(0, VAR_FORWARD_ZONE) }
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 314 "util/configlexer.lex"
-{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
+#line 313 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_ADDR) }
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 315 "util/configlexer.lex"
-{ YDVAR(0, VAR_AUTH_ZONE) }
+#line 314 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_HOST) }
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 316 "util/configlexer.lex"
-{ YDVAR(1, VAR_ZONEFILE) }
+#line 315 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_FIRST) }
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 317 "util/configlexer.lex"
-{ YDVAR(1, VAR_MASTER) }
+#line 316 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_NO_CACHE) }
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 318 "util/configlexer.lex"
-{ YDVAR(1, VAR_URL) }
+#line 317 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 319 "util/configlexer.lex"
-{ YDVAR(1, VAR_ALLOW_NOTIFY) }
+#line 318 "util/configlexer.lex"
+{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 320 "util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
+#line 319 "util/configlexer.lex"
+{ YDVAR(0, VAR_AUTH_ZONE) }
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 321 "util/configlexer.lex"
-{ YDVAR(1, VAR_FOR_UPSTREAM) }
+#line 320 "util/configlexer.lex"
+{ YDVAR(1, VAR_ZONEFILE) }
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 322 "util/configlexer.lex"
-{ YDVAR(1, VAR_FALLBACK_ENABLED) }
+#line 321 "util/configlexer.lex"
+{ YDVAR(1, VAR_MASTER) }
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 323 "util/configlexer.lex"
-{ YDVAR(0, VAR_VIEW) }
+#line 322 "util/configlexer.lex"
+{ YDVAR(1, VAR_URL) }
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 324 "util/configlexer.lex"
-{ YDVAR(1, VAR_VIEW_FIRST) }
+#line 323 "util/configlexer.lex"
+{ YDVAR(1, VAR_ALLOW_NOTIFY) }
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 325 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
+#line 324 "util/configlexer.lex"
+{ YDVAR(1, VAR_FOR_DOWNSTREAM) }
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 326 "util/configlexer.lex"
-{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
+#line 325 "util/configlexer.lex"
+{ YDVAR(1, VAR_FOR_UPSTREAM) }
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 327 "util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL) }
+#line 326 "util/configlexer.lex"
+{ YDVAR(1, VAR_FALLBACK_ENABLED) }
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 328 "util/configlexer.lex"
-{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
+#line 327 "util/configlexer.lex"
+{ YDVAR(0, VAR_VIEW) }
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 329 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
+#line 328 "util/configlexer.lex"
+{ YDVAR(1, VAR_VIEW_FIRST) }
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 330 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
+#line 329 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 331 "util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
+#line 330 "util/configlexer.lex"
+{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 332 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
+#line 331 "util/configlexer.lex"
+{ YDVAR(2, VAR_ACCESS_CONTROL) }
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 333 "util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+#line 332 "util/configlexer.lex"
+{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 334 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+#line 333 "util/configlexer.lex"
+{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 335 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+#line 334 "util/configlexer.lex"
+{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 336 "util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
+#line 335 "util/configlexer.lex"
+{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 337 "util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+#line 336 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 338 "util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+#line 337 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 339 "util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+#line 338 "util/configlexer.lex"
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 340 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+#line 339 "util/configlexer.lex"
+{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 341 "util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+#line 340 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 342 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+#line 341 "util/configlexer.lex"
+{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 343 "util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+#line 342 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 344 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+#line 343 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_VERSION) }
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 345 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+#line 344 "util/configlexer.lex"
+{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 346 "util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
+#line 345 "util/configlexer.lex"
+{ YDVAR(1, VAR_IDENTITY) }
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 347 "util/configlexer.lex"
-{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
+#line 346 "util/configlexer.lex"
+{ YDVAR(1, VAR_VERSION) }
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 348 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+#line 347 "util/configlexer.lex"
+{ YDVAR(1, VAR_MODULE_CONF) }
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 349 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+#line 348 "util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR) }
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 350 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+#line 349 "util/configlexer.lex"
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 351 "util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+#line 350 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 352 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+#line 351 "util/configlexer.lex"
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 353 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+#line 352 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 354 "util/configlexer.lex"
-{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
+#line 353 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 355 "util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+#line 354 "util/configlexer.lex"
+{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 356 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED) }
+#line 355 "util/configlexer.lex"
+{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 357 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
+#line 356 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 358 "util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
+#line 357 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 359 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_DSA) }
+#line 358 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 360 "util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_SHA1) }
+#line 359 "util/configlexer.lex"
+{ YDVAR(1, VAR_BOGUS_TTL) }
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 361 "util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+#line 360 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 362 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+#line 361 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
YY_BREAK
case 154:
YY_RULE_SETUP
-#line 363 "util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+#line 362 "util/configlexer.lex"
+{ YDVAR(1, VAR_AGGRESSIVE_NSEC) }
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 364 "util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+#line 363 "util/configlexer.lex"
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
YY_BREAK
case 156:
YY_RULE_SETUP
+#line 364 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
#line 365 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 366 "util/configlexer.lex"
+{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 367 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAKE_DSA) }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 368 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAKE_SHA1) }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 369 "util/configlexer.lex"
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 370 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 371 "util/configlexer.lex"
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+ YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 372 "util/configlexer.lex"
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 373 "util/configlexer.lex"
{
YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
YY_BREAK
-case 157:
+case 166:
YY_RULE_SETUP
-#line 367 "util/configlexer.lex"
+#line 375 "util/configlexer.lex"
{ YDVAR(1, VAR_ADD_HOLDDOWN) }
YY_BREAK
-case 158:
+case 167:
YY_RULE_SETUP
-#line 368 "util/configlexer.lex"
+#line 376 "util/configlexer.lex"
{ YDVAR(1, VAR_DEL_HOLDDOWN) }
YY_BREAK
-case 159:
+case 168:
YY_RULE_SETUP
-#line 369 "util/configlexer.lex"
+#line 377 "util/configlexer.lex"
{ YDVAR(1, VAR_KEEP_MISSING) }
YY_BREAK
-case 160:
+case 169:
YY_RULE_SETUP
-#line 370 "util/configlexer.lex"
+#line 378 "util/configlexer.lex"
{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
YY_BREAK
-case 161:
+case 170:
YY_RULE_SETUP
-#line 371 "util/configlexer.lex"
+#line 379 "util/configlexer.lex"
{ YDVAR(1, VAR_USE_SYSLOG) }
YY_BREAK
-case 162:
+case 171:
YY_RULE_SETUP
-#line 372 "util/configlexer.lex"
+#line 380 "util/configlexer.lex"
{ YDVAR(1, VAR_LOG_IDENTITY) }
YY_BREAK
-case 163:
+case 172:
YY_RULE_SETUP
-#line 373 "util/configlexer.lex"
+#line 381 "util/configlexer.lex"
{ YDVAR(1, VAR_LOG_TIME_ASCII) }
YY_BREAK
-case 164:
+case 173:
YY_RULE_SETUP
-#line 374 "util/configlexer.lex"
+#line 382 "util/configlexer.lex"
{ YDVAR(1, VAR_LOG_QUERIES) }
YY_BREAK
-case 165:
+case 174:
YY_RULE_SETUP
-#line 375 "util/configlexer.lex"
+#line 383 "util/configlexer.lex"
{ YDVAR(1, VAR_LOG_REPLIES) }
YY_BREAK
-case 166:
+case 175:
YY_RULE_SETUP
-#line 376 "util/configlexer.lex"
+#line 384 "util/configlexer.lex"
+{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 385 "util/configlexer.lex"
{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
YY_BREAK
-case 167:
+case 177:
YY_RULE_SETUP
-#line 377 "util/configlexer.lex"
+#line 386 "util/configlexer.lex"
{ YDVAR(1, VAR_LOG_SERVFAIL) }
YY_BREAK
-case 168:
+case 178:
YY_RULE_SETUP
-#line 378 "util/configlexer.lex"
+#line 387 "util/configlexer.lex"
{ YDVAR(2, VAR_LOCAL_ZONE) }
YY_BREAK
-case 169:
+case 179:
YY_RULE_SETUP
-#line 379 "util/configlexer.lex"
+#line 388 "util/configlexer.lex"
{ YDVAR(1, VAR_LOCAL_DATA) }
YY_BREAK
-case 170:
+case 180:
YY_RULE_SETUP
-#line 380 "util/configlexer.lex"
+#line 389 "util/configlexer.lex"
{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
YY_BREAK
-case 171:
+case 181:
YY_RULE_SETUP
-#line 381 "util/configlexer.lex"
+#line 390 "util/configlexer.lex"
{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
YY_BREAK
-case 172:
+case 182:
YY_RULE_SETUP
-#line 382 "util/configlexer.lex"
+#line 391 "util/configlexer.lex"
{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
YY_BREAK
-case 173:
+case 183:
YY_RULE_SETUP
-#line 383 "util/configlexer.lex"
+#line 392 "util/configlexer.lex"
{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
YY_BREAK
-case 174:
+case 184:
YY_RULE_SETUP
-#line 384 "util/configlexer.lex"
+#line 393 "util/configlexer.lex"
{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
YY_BREAK
-case 175:
+case 185:
YY_RULE_SETUP
-#line 385 "util/configlexer.lex"
+#line 394 "util/configlexer.lex"
{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
YY_BREAK
-case 176:
+case 186:
YY_RULE_SETUP
-#line 386 "util/configlexer.lex"
+#line 395 "util/configlexer.lex"
{ YDVAR(1, VAR_SHM_ENABLE) }
YY_BREAK
-case 177:
+case 187:
YY_RULE_SETUP
-#line 387 "util/configlexer.lex"
+#line 396 "util/configlexer.lex"
{ YDVAR(1, VAR_SHM_KEY) }
YY_BREAK
-case 178:
+case 188:
YY_RULE_SETUP
-#line 388 "util/configlexer.lex"
+#line 397 "util/configlexer.lex"
{ YDVAR(0, VAR_REMOTE_CONTROL) }
YY_BREAK
-case 179:
+case 189:
YY_RULE_SETUP
-#line 389 "util/configlexer.lex"
+#line 398 "util/configlexer.lex"
{ YDVAR(1, VAR_CONTROL_ENABLE) }
YY_BREAK
-case 180:
+case 190:
YY_RULE_SETUP
-#line 390 "util/configlexer.lex"
+#line 399 "util/configlexer.lex"
{ YDVAR(1, VAR_CONTROL_INTERFACE) }
YY_BREAK
-case 181:
+case 191:
YY_RULE_SETUP
-#line 391 "util/configlexer.lex"
+#line 400 "util/configlexer.lex"
{ YDVAR(1, VAR_CONTROL_PORT) }
YY_BREAK
-case 182:
+case 192:
YY_RULE_SETUP
-#line 392 "util/configlexer.lex"
+#line 401 "util/configlexer.lex"
{ YDVAR(1, VAR_CONTROL_USE_CERT) }
YY_BREAK
-case 183:
+case 193:
YY_RULE_SETUP
-#line 393 "util/configlexer.lex"
+#line 402 "util/configlexer.lex"
{ YDVAR(1, VAR_SERVER_KEY_FILE) }
YY_BREAK
-case 184:
+case 194:
YY_RULE_SETUP
-#line 394 "util/configlexer.lex"
+#line 403 "util/configlexer.lex"
{ YDVAR(1, VAR_SERVER_CERT_FILE) }
YY_BREAK
-case 185:
+case 195:
YY_RULE_SETUP
-#line 395 "util/configlexer.lex"
+#line 404 "util/configlexer.lex"
{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
YY_BREAK
-case 186:
+case 196:
YY_RULE_SETUP
-#line 396 "util/configlexer.lex"
+#line 405 "util/configlexer.lex"
{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
YY_BREAK
-case 187:
+case 197:
YY_RULE_SETUP
-#line 397 "util/configlexer.lex"
+#line 406 "util/configlexer.lex"
{ YDVAR(1, VAR_PYTHON_SCRIPT) }
YY_BREAK
-case 188:
+case 198:
YY_RULE_SETUP
-#line 398 "util/configlexer.lex"
+#line 407 "util/configlexer.lex"
{ YDVAR(0, VAR_PYTHON) }
YY_BREAK
-case 189:
+case 199:
YY_RULE_SETUP
-#line 399 "util/configlexer.lex"
+#line 408 "util/configlexer.lex"
{ YDVAR(1, VAR_DOMAIN_INSECURE) }
YY_BREAK
-case 190:
+case 200:
YY_RULE_SETUP
-#line 400 "util/configlexer.lex"
+#line 409 "util/configlexer.lex"
{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
YY_BREAK
-case 191:
+case 201:
YY_RULE_SETUP
-#line 401 "util/configlexer.lex"
+#line 410 "util/configlexer.lex"
{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
YY_BREAK
-case 192:
+case 202:
YY_RULE_SETUP
-#line 402 "util/configlexer.lex"
+#line 411 "util/configlexer.lex"
+{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
+ YY_BREAK
+case 203:
+YY_RULE_SETUP
+#line 412 "util/configlexer.lex"
{ YDVAR(1, VAR_MAX_UDP_SIZE) }
YY_BREAK
-case 193:
+case 204:
YY_RULE_SETUP
-#line 403 "util/configlexer.lex"
+#line 413 "util/configlexer.lex"
{ YDVAR(1, VAR_DNS64_PREFIX) }
YY_BREAK
-case 194:
+case 205:
YY_RULE_SETUP
-#line 404 "util/configlexer.lex"
+#line 414 "util/configlexer.lex"
{ YDVAR(1, VAR_DNS64_SYNTHALL) }
YY_BREAK
-case 195:
+case 206:
YY_RULE_SETUP
-#line 405 "util/configlexer.lex"
+#line 415 "util/configlexer.lex"
{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
YY_BREAK
-case 196:
+case 207:
YY_RULE_SETUP
-#line 406 "util/configlexer.lex"
+#line 416 "util/configlexer.lex"
{ YDVAR(1, VAR_DEFINE_TAG) }
YY_BREAK
-case 197:
+case 208:
YY_RULE_SETUP
-#line 407 "util/configlexer.lex"
+#line 417 "util/configlexer.lex"
{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
YY_BREAK
-case 198:
+case 209:
YY_RULE_SETUP
-#line 408 "util/configlexer.lex"
+#line 418 "util/configlexer.lex"
{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
YY_BREAK
-case 199:
+case 210:
YY_RULE_SETUP
-#line 409 "util/configlexer.lex"
+#line 419 "util/configlexer.lex"
{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
YY_BREAK
-case 200:
+case 211:
YY_RULE_SETUP
-#line 410 "util/configlexer.lex"
+#line 420 "util/configlexer.lex"
{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
YY_BREAK
-case 201:
+case 212:
YY_RULE_SETUP
-#line 411 "util/configlexer.lex"
+#line 421 "util/configlexer.lex"
{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
YY_BREAK
-case 202:
+case 213:
YY_RULE_SETUP
-#line 412 "util/configlexer.lex"
+#line 422 "util/configlexer.lex"
{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
YY_BREAK
-case 203:
+case 214:
YY_RULE_SETUP
-#line 413 "util/configlexer.lex"
+#line 423 "util/configlexer.lex"
{ YDVAR(0, VAR_DNSTAP) }
YY_BREAK
-case 204:
+case 215:
YY_RULE_SETUP
-#line 414 "util/configlexer.lex"
+#line 424 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSTAP_ENABLE) }
YY_BREAK
-case 205:
+case 216:
YY_RULE_SETUP
-#line 415 "util/configlexer.lex"
+#line 425 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
YY_BREAK
-case 206:
+case 217:
YY_RULE_SETUP
-#line 416 "util/configlexer.lex"
+#line 426 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
YY_BREAK
-case 207:
+case 218:
YY_RULE_SETUP
-#line 417 "util/configlexer.lex"
+#line 427 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
YY_BREAK
-case 208:
+case 219:
YY_RULE_SETUP
-#line 418 "util/configlexer.lex"
+#line 428 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
YY_BREAK
-case 209:
+case 220:
YY_RULE_SETUP
-#line 419 "util/configlexer.lex"
+#line 429 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSTAP_VERSION) }
YY_BREAK
-case 210:
+case 221:
YY_RULE_SETUP
-#line 420 "util/configlexer.lex"
+#line 430 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
YY_BREAK
-case 211:
+case 222:
YY_RULE_SETUP
-#line 422 "util/configlexer.lex"
+#line 432 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
YY_BREAK
-case 212:
+case 223:
YY_RULE_SETUP
-#line 424 "util/configlexer.lex"
+#line 434 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
YY_BREAK
-case 213:
+case 224:
YY_RULE_SETUP
-#line 426 "util/configlexer.lex"
+#line 436 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
YY_BREAK
-case 214:
+case 225:
YY_RULE_SETUP
-#line 428 "util/configlexer.lex"
+#line 438 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
YY_BREAK
-case 215:
+case 226:
YY_RULE_SETUP
-#line 430 "util/configlexer.lex"
+#line 440 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
YY_BREAK
-case 216:
+case 227:
YY_RULE_SETUP
-#line 432 "util/configlexer.lex"
+#line 442 "util/configlexer.lex"
{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
YY_BREAK
-case 217:
+case 228:
YY_RULE_SETUP
-#line 433 "util/configlexer.lex"
+#line 443 "util/configlexer.lex"
{ YDVAR(1, VAR_IP_RATELIMIT) }
YY_BREAK
-case 218:
+case 229:
YY_RULE_SETUP
-#line 434 "util/configlexer.lex"
+#line 444 "util/configlexer.lex"
{ YDVAR(1, VAR_RATELIMIT) }
YY_BREAK
-case 219:
+case 230:
YY_RULE_SETUP
-#line 435 "util/configlexer.lex"
+#line 445 "util/configlexer.lex"
{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
YY_BREAK
-case 220:
+case 231:
YY_RULE_SETUP
-#line 436 "util/configlexer.lex"
+#line 446 "util/configlexer.lex"
{ YDVAR(1, VAR_RATELIMIT_SLABS) }
YY_BREAK
-case 221:
+case 232:
YY_RULE_SETUP
-#line 437 "util/configlexer.lex"
+#line 447 "util/configlexer.lex"
{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
YY_BREAK
-case 222:
+case 233:
YY_RULE_SETUP
-#line 438 "util/configlexer.lex"
+#line 448 "util/configlexer.lex"
{ YDVAR(1, VAR_RATELIMIT_SIZE) }
YY_BREAK
-case 223:
+case 234:
YY_RULE_SETUP
-#line 439 "util/configlexer.lex"
+#line 449 "util/configlexer.lex"
{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
YY_BREAK
-case 224:
+case 235:
YY_RULE_SETUP
-#line 440 "util/configlexer.lex"
+#line 450 "util/configlexer.lex"
{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
YY_BREAK
-case 225:
+case 236:
YY_RULE_SETUP
-#line 441 "util/configlexer.lex"
+#line 451 "util/configlexer.lex"
{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
YY_BREAK
-case 226:
+case 237:
YY_RULE_SETUP
-#line 442 "util/configlexer.lex"
+#line 452 "util/configlexer.lex"
{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
YY_BREAK
-case 227:
+case 238:
YY_RULE_SETUP
-#line 443 "util/configlexer.lex"
+#line 453 "util/configlexer.lex"
{ YDVAR(1, VAR_LOW_RTT) }
YY_BREAK
-case 228:
+case 239:
YY_RULE_SETUP
-#line 444 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOW_RTT_PERMIL) }
+#line 454 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_NUM) }
YY_BREAK
-case 229:
+case 240:
YY_RULE_SETUP
-#line 445 "util/configlexer.lex"
-{ YDVAR(1, VAR_LOW_RTT_PERMIL) }
+#line 455 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
YY_BREAK
-case 230:
+case 241:
YY_RULE_SETUP
-#line 446 "util/configlexer.lex"
+#line 456 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+ YY_BREAK
+case 242:
+YY_RULE_SETUP
+#line 457 "util/configlexer.lex"
+{ YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+ YY_BREAK
+case 243:
+YY_RULE_SETUP
+#line 458 "util/configlexer.lex"
{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
YY_BREAK
-case 231:
+case 244:
YY_RULE_SETUP
-#line 447 "util/configlexer.lex"
+#line 459 "util/configlexer.lex"
{ YDVAR(2, VAR_RESPONSE_IP) }
YY_BREAK
-case 232:
+case 245:
YY_RULE_SETUP
-#line 448 "util/configlexer.lex"
+#line 460 "util/configlexer.lex"
{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
YY_BREAK
-case 233:
+case 246:
YY_RULE_SETUP
-#line 449 "util/configlexer.lex"
+#line 461 "util/configlexer.lex"
{ YDVAR(0, VAR_DNSCRYPT) }
YY_BREAK
-case 234:
+case 247:
YY_RULE_SETUP
-#line 450 "util/configlexer.lex"
+#line 462 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
YY_BREAK
-case 235:
+case 248:
YY_RULE_SETUP
-#line 451 "util/configlexer.lex"
+#line 463 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_PORT) }
YY_BREAK
-case 236:
+case 249:
YY_RULE_SETUP
-#line 452 "util/configlexer.lex"
+#line 464 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
YY_BREAK
-case 237:
+case 250:
YY_RULE_SETUP
-#line 453 "util/configlexer.lex"
+#line 465 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
YY_BREAK
-case 238:
+case 251:
YY_RULE_SETUP
-#line 454 "util/configlexer.lex"
+#line 466 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
YY_BREAK
-case 239:
+case 252:
YY_RULE_SETUP
-#line 455 "util/configlexer.lex"
+#line 467 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
YY_BREAK
-case 240:
+case 253:
YY_RULE_SETUP
-#line 456 "util/configlexer.lex"
+#line 468 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
YY_BREAK
-case 241:
+case 254:
YY_RULE_SETUP
-#line 458 "util/configlexer.lex"
+#line 470 "util/configlexer.lex"
{
YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
YY_BREAK
-case 242:
+case 255:
YY_RULE_SETUP
-#line 460 "util/configlexer.lex"
+#line 472 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
YY_BREAK
-case 243:
+case 256:
YY_RULE_SETUP
-#line 461 "util/configlexer.lex"
+#line 473 "util/configlexer.lex"
{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
YY_BREAK
-case 244:
+case 257:
YY_RULE_SETUP
-#line 462 "util/configlexer.lex"
+#line 474 "util/configlexer.lex"
{ YDVAR(1, VAR_IPSECMOD_ENABLED) }
YY_BREAK
-case 245:
+case 258:
YY_RULE_SETUP
-#line 463 "util/configlexer.lex"
+#line 475 "util/configlexer.lex"
{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
YY_BREAK
-case 246:
+case 259:
YY_RULE_SETUP
-#line 464 "util/configlexer.lex"
+#line 476 "util/configlexer.lex"
{ YDVAR(1, VAR_IPSECMOD_HOOK) }
YY_BREAK
-case 247:
+case 260:
YY_RULE_SETUP
-#line 465 "util/configlexer.lex"
+#line 477 "util/configlexer.lex"
{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
YY_BREAK
-case 248:
+case 261:
YY_RULE_SETUP
-#line 466 "util/configlexer.lex"
+#line 478 "util/configlexer.lex"
{ YDVAR(1, VAR_IPSECMOD_WHITELIST) }
YY_BREAK
-case 249:
+case 262:
YY_RULE_SETUP
-#line 467 "util/configlexer.lex"
+#line 479 "util/configlexer.lex"
{ YDVAR(1, VAR_IPSECMOD_STRICT) }
YY_BREAK
-case 250:
+case 263:
YY_RULE_SETUP
-#line 468 "util/configlexer.lex"
+#line 480 "util/configlexer.lex"
{ YDVAR(0, VAR_CACHEDB) }
YY_BREAK
-case 251:
+case 264:
YY_RULE_SETUP
-#line 469 "util/configlexer.lex"
+#line 481 "util/configlexer.lex"
{ YDVAR(1, VAR_CACHEDB_BACKEND) }
YY_BREAK
-case 252:
+case 265:
YY_RULE_SETUP
-#line 470 "util/configlexer.lex"
+#line 482 "util/configlexer.lex"
{ YDVAR(1, VAR_CACHEDB_SECRETSEED) }
YY_BREAK
-case 253:
+case 266:
YY_RULE_SETUP
-#line 471 "util/configlexer.lex"
+#line 483 "util/configlexer.lex"
{ YDVAR(1, VAR_CACHEDB_REDISHOST) }
YY_BREAK
-case 254:
+case 267:
YY_RULE_SETUP
-#line 472 "util/configlexer.lex"
+#line 484 "util/configlexer.lex"
{ YDVAR(1, VAR_CACHEDB_REDISPORT) }
YY_BREAK
-case 255:
+case 268:
YY_RULE_SETUP
-#line 473 "util/configlexer.lex"
+#line 485 "util/configlexer.lex"
{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
YY_BREAK
-case 256:
+case 269:
YY_RULE_SETUP
-#line 474 "util/configlexer.lex"
+#line 486 "util/configlexer.lex"
{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
YY_BREAK
-case 257:
+case 270:
YY_RULE_SETUP
-#line 475 "util/configlexer.lex"
+#line 487 "util/configlexer.lex"
{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
YY_BREAK
-case 258:
-/* rule 258 can match eol */
+case 271:
+/* rule 271 can match eol */
YY_RULE_SETUP
-#line 476 "util/configlexer.lex"
+#line 488 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++; }
YY_BREAK
/* Quoted strings. Strip leading and ending quotes */
-case 259:
+case 272:
YY_RULE_SETUP
-#line 479 "util/configlexer.lex"
+#line 491 "util/configlexer.lex"
{ BEGIN(quotedstring); LEXOUT(("QS ")); }
YY_BREAK
case YY_STATE_EOF(quotedstring):
-#line 480 "util/configlexer.lex"
+#line 492 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 260:
+case 273:
YY_RULE_SETUP
-#line 485 "util/configlexer.lex"
+#line 497 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 261:
-/* rule 261 can match eol */
+case 274:
+/* rule 274 can match eol */
YY_RULE_SETUP
-#line 486 "util/configlexer.lex"
+#line 498 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end \"");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 262:
+case 275:
YY_RULE_SETUP
-#line 488 "util/configlexer.lex"
+#line 500 "util/configlexer.lex"
{
LEXOUT(("QE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -4934,34 +5136,34 @@ YY_RULE_SETUP
}
YY_BREAK
/* Single Quoted strings. Strip leading and ending quotes */
-case 263:
+case 276:
YY_RULE_SETUP
-#line 500 "util/configlexer.lex"
+#line 512 "util/configlexer.lex"
{ BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
YY_BREAK
case YY_STATE_EOF(singlequotedstr):
-#line 501 "util/configlexer.lex"
+#line 513 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
if(--num_args == 0) { BEGIN(INITIAL); }
else { BEGIN(val); }
}
YY_BREAK
-case 264:
+case 277:
YY_RULE_SETUP
-#line 506 "util/configlexer.lex"
+#line 518 "util/configlexer.lex"
{ LEXOUT(("STR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 265:
-/* rule 265 can match eol */
+case 278:
+/* rule 278 can match eol */
YY_RULE_SETUP
-#line 507 "util/configlexer.lex"
+#line 519 "util/configlexer.lex"
{ yyerror("newline inside quoted string, no end '");
cfg_parser->line++; BEGIN(INITIAL); }
YY_BREAK
-case 266:
+case 279:
YY_RULE_SETUP
-#line 509 "util/configlexer.lex"
+#line 521 "util/configlexer.lex"
{
LEXOUT(("SQE "));
if(--num_args == 0) { BEGIN(INITIAL); }
@@ -4974,38 +5176,38 @@ YY_RULE_SETUP
}
YY_BREAK
/* include: directive */
-case 267:
+case 280:
YY_RULE_SETUP
-#line 521 "util/configlexer.lex"
+#line 533 "util/configlexer.lex"
{
LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
YY_BREAK
case YY_STATE_EOF(include):
-#line 523 "util/configlexer.lex"
+#line 535 "util/configlexer.lex"
{
yyerror("EOF inside include directive");
BEGIN(inc_prev);
}
YY_BREAK
-case 268:
+case 281:
YY_RULE_SETUP
-#line 527 "util/configlexer.lex"
+#line 539 "util/configlexer.lex"
{ LEXOUT(("ISP ")); /* ignore */ }
YY_BREAK
-case 269:
-/* rule 269 can match eol */
+case 282:
+/* rule 282 can match eol */
YY_RULE_SETUP
-#line 528 "util/configlexer.lex"
+#line 540 "util/configlexer.lex"
{ LEXOUT(("NL\n")); cfg_parser->line++;}
YY_BREAK
-case 270:
+case 283:
YY_RULE_SETUP
-#line 529 "util/configlexer.lex"
+#line 541 "util/configlexer.lex"
{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
YY_BREAK
-case 271:
+case 284:
YY_RULE_SETUP
-#line 530 "util/configlexer.lex"
+#line 542 "util/configlexer.lex"
{
LEXOUT(("Iunquotedstr(%s) ", yytext));
config_start_include_glob(yytext);
@@ -5013,27 +5215,27 @@ YY_RULE_SETUP
}
YY_BREAK
case YY_STATE_EOF(include_quoted):
-#line 535 "util/configlexer.lex"
+#line 547 "util/configlexer.lex"
{
yyerror("EOF inside quoted string");
BEGIN(inc_prev);
}
YY_BREAK
-case 272:
+case 285:
YY_RULE_SETUP
-#line 539 "util/configlexer.lex"
+#line 551 "util/configlexer.lex"
{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
YY_BREAK
-case 273:
-/* rule 273 can match eol */
+case 286:
+/* rule 286 can match eol */
YY_RULE_SETUP
-#line 540 "util/configlexer.lex"
+#line 552 "util/configlexer.lex"
{ yyerror("newline before \" in include name");
cfg_parser->line++; BEGIN(inc_prev); }
YY_BREAK
-case 274:
+case 287:
YY_RULE_SETUP
-#line 542 "util/configlexer.lex"
+#line 554 "util/configlexer.lex"
{
LEXOUT(("IQE "));
yytext[yyleng - 1] = '\0';
@@ -5043,7 +5245,7 @@ YY_RULE_SETUP
YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(val):
-#line 548 "util/configlexer.lex"
+#line 560 "util/configlexer.lex"
{
LEXOUT(("LEXEOF "));
yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
@@ -5055,33 +5257,33 @@ case YY_STATE_EOF(val):
}
}
YY_BREAK
-case 275:
+case 288:
YY_RULE_SETUP
-#line 559 "util/configlexer.lex"
+#line 571 "util/configlexer.lex"
{ LEXOUT(("unquotedstr(%s) ", yytext));
if(--num_args == 0) { BEGIN(INITIAL); }
yylval.str = strdup(yytext); return STRING_ARG; }
YY_BREAK
-case 276:
+case 289:
YY_RULE_SETUP
-#line 563 "util/configlexer.lex"
+#line 575 "util/configlexer.lex"
{
ub_c_error_msg("unknown keyword '%s'", yytext);
}
YY_BREAK
-case 277:
+case 290:
YY_RULE_SETUP
-#line 567 "util/configlexer.lex"
+#line 579 "util/configlexer.lex"
{
ub_c_error_msg("stray '%s'", yytext);
}
YY_BREAK
-case 278:
+case 291:
YY_RULE_SETUP
-#line 571 "util/configlexer.lex"
+#line 583 "util/configlexer.lex"
ECHO;
YY_BREAK
-#line 5083 "<stdout>"
+#line 5285 "<stdout>"
case YY_END_OF_BUFFER:
{
@@ -5372,7 +5574,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 >= 2750 )
+ if ( yy_current_state >= 2905 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -5400,11 +5602,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 >= 2750 )
+ if ( yy_current_state >= 2905 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
- yy_is_jam = (yy_current_state == 2749);
+ yy_is_jam = (yy_current_state == 2904);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -5811,10 +6013,10 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len )
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
- yy_size_t i;
+ int i;
/* Get memory for full buffer, including space for trailing EOB's. */
- n = (yy_size_t) _yybytes_len + 2;
+ n = (yy_size_t) (_yybytes_len + 2);
buf = (char *) yyalloc(n );
if ( ! buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
@@ -6043,7 +6245,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 571 "util/configlexer.lex"
+#line 583 "util/configlexer.lex"
diff --git a/util/configlexer.lex b/util/configlexer.lex
index 75796048491a..16b5bc5471b0 100644
--- a/util/configlexer.lex
+++ b/util/configlexer.lex
@@ -120,9 +120,8 @@ static void config_start_include_glob(const char* filename)
#ifdef GLOB_ERR
| GLOB_ERR
#endif
-#ifdef GLOB_NOSORT
- | GLOB_NOSORT
-#endif
+ /* do not set GLOB_NOSORT so the results are sorted
+ and in a predictable order. */
#ifdef GLOB_BRACE
| GLOB_BRACE
#endif
@@ -246,6 +245,9 @@ additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
tls-additional-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
+tls-session-ticket-keys{COLON} { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
+tls-ciphers{COLON} { YDVAR(1, VAR_TLS_CIPHERS) }
+tls-ciphersuites{COLON} { YDVAR(1, VAR_TLS_CIPHERSUITES) }
use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) }
do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) }
interface{COLON} { YDVAR(1, VAR_INTERFACE) }
@@ -263,6 +265,7 @@ directory{COLON} { YDVAR(1, VAR_DIRECTORY) }
logfile{COLON} { YDVAR(1, VAR_LOGFILE) }
pidfile{COLON} { YDVAR(1, VAR_PIDFILE) }
root-hints{COLON} { YDVAR(1, VAR_ROOT_HINTS) }
+stream-wait-size{COLON} { YDVAR(1, VAR_STREAM_WAIT_SIZE) }
edns-buffer-size{COLON} { YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
msg-buffer-size{COLON} { YDVAR(1, VAR_MSG_BUFFER_SIZE) }
msg-cache-size{COLON} { YDVAR(1, VAR_MSG_CACHE_SIZE) }
@@ -296,6 +299,7 @@ private-address{COLON} { YDVAR(1, VAR_PRIVATE_ADDRESS) }
private-domain{COLON} { YDVAR(1, VAR_PRIVATE_DOMAIN) }
prefetch-key{COLON} { YDVAR(1, VAR_PREFETCH_KEY) }
prefetch{COLON} { YDVAR(1, VAR_PREFETCH) }
+deny-any{COLON} { YDVAR(1, VAR_DENY_ANY) }
stub-zone{COLON} { YDVAR(0, VAR_STUB_ZONE) }
name{COLON} { YDVAR(1, VAR_NAME) }
stub-addr{COLON} { YDVAR(1, VAR_STUB_ADDR) }
@@ -331,6 +335,10 @@ client-subnet-always-forward{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD)
client-subnet-opcode{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
max-client-subnet-ipv4{COLON} { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
max-client-subnet-ipv6{COLON} { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+min-client-subnet-ipv4{COLON} { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
+min-client-subnet-ipv6{COLON} { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
+max-ecs-tree-size-ipv4{COLON} { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
+max-ecs-tree-size-ipv6{COLON} { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
hide-identity{COLON} { YDVAR(1, VAR_HIDE_IDENTITY) }
hide-version{COLON} { YDVAR(1, VAR_HIDE_VERSION) }
hide-trustanchor{COLON} { YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
@@ -373,6 +381,7 @@ log-identity{COLON} { YDVAR(1, VAR_LOG_IDENTITY) }
log-time-ascii{COLON} { YDVAR(1, VAR_LOG_TIME_ASCII) }
log-queries{COLON} { YDVAR(1, VAR_LOG_QUERIES) }
log-replies{COLON} { YDVAR(1, VAR_LOG_REPLIES) }
+log-tag-queryreply{COLON} { YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
log-local-actions{COLON} { YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
log-servfail{COLON} { YDVAR(1, VAR_LOG_SERVFAIL) }
local-zone{COLON} { YDVAR(2, VAR_LOCAL_ZONE) }
@@ -399,6 +408,7 @@ python{COLON} { YDVAR(0, VAR_PYTHON) }
domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) }
minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) }
rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+unknown-server-time-limit{COLON} { YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
max-udp-size{COLON} { YDVAR(1, VAR_MAX_UDP_SIZE) }
dns64-prefix{COLON} { YDVAR(1, VAR_DNS64_PREFIX) }
dns64-synthall{COLON} { YDVAR(1, VAR_DNS64_SYNTHALL) }
@@ -441,8 +451,10 @@ 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) }
low-rtt{COLON} { YDVAR(1, VAR_LOW_RTT) }
-low-rtt-pct{COLON} { YDVAR(1, VAR_LOW_RTT_PERMIL) }
-low-rtt-permil{COLON} { YDVAR(1, VAR_LOW_RTT_PERMIL) }
+fast-server-num{COLON} { YDVAR(1, VAR_FAST_SERVER_NUM) }
+low-rtt-pct{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+low-rtt-permil{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
+fast-server-permil{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
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) }
diff --git a/util/configparser.c b/util/configparser.c
index ce0ef7d587a8..b93319fae678 100644
--- a/util/configparser.c
+++ b/util/configparser.c
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 3.0.5. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "3.0.5"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -309,74 +309,87 @@ extern int yydebug;
VAR_CLIENT_SUBNET_OPCODE = 438,
VAR_MAX_CLIENT_SUBNET_IPV4 = 439,
VAR_MAX_CLIENT_SUBNET_IPV6 = 440,
- VAR_CAPS_WHITELIST = 441,
- VAR_CACHE_MAX_NEGATIVE_TTL = 442,
- VAR_PERMIT_SMALL_HOLDDOWN = 443,
- VAR_QNAME_MINIMISATION = 444,
- VAR_QNAME_MINIMISATION_STRICT = 445,
- VAR_IP_FREEBIND = 446,
- VAR_DEFINE_TAG = 447,
- VAR_LOCAL_ZONE_TAG = 448,
- VAR_ACCESS_CONTROL_TAG = 449,
- VAR_LOCAL_ZONE_OVERRIDE = 450,
- VAR_ACCESS_CONTROL_TAG_ACTION = 451,
- VAR_ACCESS_CONTROL_TAG_DATA = 452,
- VAR_VIEW = 453,
- VAR_ACCESS_CONTROL_VIEW = 454,
- VAR_VIEW_FIRST = 455,
- VAR_SERVE_EXPIRED = 456,
- VAR_SERVE_EXPIRED_TTL = 457,
- VAR_SERVE_EXPIRED_TTL_RESET = 458,
- VAR_FAKE_DSA = 459,
- VAR_FAKE_SHA1 = 460,
- VAR_LOG_IDENTITY = 461,
- VAR_HIDE_TRUSTANCHOR = 462,
- VAR_TRUST_ANCHOR_SIGNALING = 463,
- VAR_AGGRESSIVE_NSEC = 464,
- VAR_USE_SYSTEMD = 465,
- VAR_SHM_ENABLE = 466,
- VAR_SHM_KEY = 467,
- VAR_ROOT_KEY_SENTINEL = 468,
- VAR_DNSCRYPT = 469,
- VAR_DNSCRYPT_ENABLE = 470,
- VAR_DNSCRYPT_PORT = 471,
- VAR_DNSCRYPT_PROVIDER = 472,
- VAR_DNSCRYPT_SECRET_KEY = 473,
- VAR_DNSCRYPT_PROVIDER_CERT = 474,
- VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 475,
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 476,
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 477,
- VAR_DNSCRYPT_NONCE_CACHE_SIZE = 478,
- VAR_DNSCRYPT_NONCE_CACHE_SLABS = 479,
- VAR_IPSECMOD_ENABLED = 480,
- VAR_IPSECMOD_HOOK = 481,
- VAR_IPSECMOD_IGNORE_BOGUS = 482,
- VAR_IPSECMOD_MAX_TTL = 483,
- VAR_IPSECMOD_WHITELIST = 484,
- VAR_IPSECMOD_STRICT = 485,
- VAR_CACHEDB = 486,
- VAR_CACHEDB_BACKEND = 487,
- VAR_CACHEDB_SECRETSEED = 488,
- VAR_CACHEDB_REDISHOST = 489,
- VAR_CACHEDB_REDISPORT = 490,
- VAR_CACHEDB_REDISTIMEOUT = 491,
- VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 492,
- VAR_FOR_UPSTREAM = 493,
- VAR_AUTH_ZONE = 494,
- VAR_ZONEFILE = 495,
- VAR_MASTER = 496,
- VAR_URL = 497,
- VAR_FOR_DOWNSTREAM = 498,
- VAR_FALLBACK_ENABLED = 499,
- VAR_TLS_ADDITIONAL_PORT = 500,
- VAR_LOW_RTT = 501,
- VAR_LOW_RTT_PERMIL = 502,
- VAR_ALLOW_NOTIFY = 503,
- VAR_TLS_WIN_CERT = 504,
- VAR_TCP_CONNECTION_LIMIT = 505,
- VAR_FORWARD_NO_CACHE = 506,
- VAR_STUB_NO_CACHE = 507,
- VAR_LOG_SERVFAIL = 508
+ VAR_MIN_CLIENT_SUBNET_IPV4 = 441,
+ VAR_MIN_CLIENT_SUBNET_IPV6 = 442,
+ VAR_MAX_ECS_TREE_SIZE_IPV4 = 443,
+ VAR_MAX_ECS_TREE_SIZE_IPV6 = 444,
+ VAR_CAPS_WHITELIST = 445,
+ VAR_CACHE_MAX_NEGATIVE_TTL = 446,
+ VAR_PERMIT_SMALL_HOLDDOWN = 447,
+ VAR_QNAME_MINIMISATION = 448,
+ VAR_QNAME_MINIMISATION_STRICT = 449,
+ VAR_IP_FREEBIND = 450,
+ VAR_DEFINE_TAG = 451,
+ VAR_LOCAL_ZONE_TAG = 452,
+ VAR_ACCESS_CONTROL_TAG = 453,
+ VAR_LOCAL_ZONE_OVERRIDE = 454,
+ VAR_ACCESS_CONTROL_TAG_ACTION = 455,
+ VAR_ACCESS_CONTROL_TAG_DATA = 456,
+ VAR_VIEW = 457,
+ VAR_ACCESS_CONTROL_VIEW = 458,
+ VAR_VIEW_FIRST = 459,
+ VAR_SERVE_EXPIRED = 460,
+ VAR_SERVE_EXPIRED_TTL = 461,
+ VAR_SERVE_EXPIRED_TTL_RESET = 462,
+ VAR_FAKE_DSA = 463,
+ VAR_FAKE_SHA1 = 464,
+ VAR_LOG_IDENTITY = 465,
+ VAR_HIDE_TRUSTANCHOR = 466,
+ VAR_TRUST_ANCHOR_SIGNALING = 467,
+ VAR_AGGRESSIVE_NSEC = 468,
+ VAR_USE_SYSTEMD = 469,
+ VAR_SHM_ENABLE = 470,
+ VAR_SHM_KEY = 471,
+ VAR_ROOT_KEY_SENTINEL = 472,
+ VAR_DNSCRYPT = 473,
+ VAR_DNSCRYPT_ENABLE = 474,
+ VAR_DNSCRYPT_PORT = 475,
+ VAR_DNSCRYPT_PROVIDER = 476,
+ VAR_DNSCRYPT_SECRET_KEY = 477,
+ VAR_DNSCRYPT_PROVIDER_CERT = 478,
+ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 479,
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 480,
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 481,
+ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 482,
+ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 483,
+ VAR_IPSECMOD_ENABLED = 484,
+ VAR_IPSECMOD_HOOK = 485,
+ VAR_IPSECMOD_IGNORE_BOGUS = 486,
+ VAR_IPSECMOD_MAX_TTL = 487,
+ VAR_IPSECMOD_WHITELIST = 488,
+ VAR_IPSECMOD_STRICT = 489,
+ VAR_CACHEDB = 490,
+ VAR_CACHEDB_BACKEND = 491,
+ VAR_CACHEDB_SECRETSEED = 492,
+ VAR_CACHEDB_REDISHOST = 493,
+ VAR_CACHEDB_REDISPORT = 494,
+ VAR_CACHEDB_REDISTIMEOUT = 495,
+ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 496,
+ VAR_FOR_UPSTREAM = 497,
+ VAR_AUTH_ZONE = 498,
+ VAR_ZONEFILE = 499,
+ VAR_MASTER = 500,
+ VAR_URL = 501,
+ VAR_FOR_DOWNSTREAM = 502,
+ VAR_FALLBACK_ENABLED = 503,
+ VAR_TLS_ADDITIONAL_PORT = 504,
+ VAR_LOW_RTT = 505,
+ VAR_LOW_RTT_PERMIL = 506,
+ VAR_FAST_SERVER_PERMIL = 507,
+ VAR_FAST_SERVER_NUM = 508,
+ VAR_ALLOW_NOTIFY = 509,
+ VAR_TLS_WIN_CERT = 510,
+ VAR_TCP_CONNECTION_LIMIT = 511,
+ VAR_FORWARD_NO_CACHE = 512,
+ VAR_STUB_NO_CACHE = 513,
+ VAR_LOG_SERVFAIL = 514,
+ VAR_DENY_ANY = 515,
+ VAR_UNKNOWN_SERVER_TIME_LIMIT = 516,
+ VAR_LOG_TAG_QUERYREPLY = 517,
+ VAR_STREAM_WAIT_SIZE = 518,
+ VAR_TLS_CIPHERS = 519,
+ VAR_TLS_CIPHERSUITES = 520,
+ VAR_TLS_SESSION_TICKET_KEYS = 521
};
#endif
/* Tokens. */
@@ -563,74 +576,87 @@ extern int yydebug;
#define VAR_CLIENT_SUBNET_OPCODE 438
#define VAR_MAX_CLIENT_SUBNET_IPV4 439
#define VAR_MAX_CLIENT_SUBNET_IPV6 440
-#define VAR_CAPS_WHITELIST 441
-#define VAR_CACHE_MAX_NEGATIVE_TTL 442
-#define VAR_PERMIT_SMALL_HOLDDOWN 443
-#define VAR_QNAME_MINIMISATION 444
-#define VAR_QNAME_MINIMISATION_STRICT 445
-#define VAR_IP_FREEBIND 446
-#define VAR_DEFINE_TAG 447
-#define VAR_LOCAL_ZONE_TAG 448
-#define VAR_ACCESS_CONTROL_TAG 449
-#define VAR_LOCAL_ZONE_OVERRIDE 450
-#define VAR_ACCESS_CONTROL_TAG_ACTION 451
-#define VAR_ACCESS_CONTROL_TAG_DATA 452
-#define VAR_VIEW 453
-#define VAR_ACCESS_CONTROL_VIEW 454
-#define VAR_VIEW_FIRST 455
-#define VAR_SERVE_EXPIRED 456
-#define VAR_SERVE_EXPIRED_TTL 457
-#define VAR_SERVE_EXPIRED_TTL_RESET 458
-#define VAR_FAKE_DSA 459
-#define VAR_FAKE_SHA1 460
-#define VAR_LOG_IDENTITY 461
-#define VAR_HIDE_TRUSTANCHOR 462
-#define VAR_TRUST_ANCHOR_SIGNALING 463
-#define VAR_AGGRESSIVE_NSEC 464
-#define VAR_USE_SYSTEMD 465
-#define VAR_SHM_ENABLE 466
-#define VAR_SHM_KEY 467
-#define VAR_ROOT_KEY_SENTINEL 468
-#define VAR_DNSCRYPT 469
-#define VAR_DNSCRYPT_ENABLE 470
-#define VAR_DNSCRYPT_PORT 471
-#define VAR_DNSCRYPT_PROVIDER 472
-#define VAR_DNSCRYPT_SECRET_KEY 473
-#define VAR_DNSCRYPT_PROVIDER_CERT 474
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 475
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 476
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 477
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 478
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 479
-#define VAR_IPSECMOD_ENABLED 480
-#define VAR_IPSECMOD_HOOK 481
-#define VAR_IPSECMOD_IGNORE_BOGUS 482
-#define VAR_IPSECMOD_MAX_TTL 483
-#define VAR_IPSECMOD_WHITELIST 484
-#define VAR_IPSECMOD_STRICT 485
-#define VAR_CACHEDB 486
-#define VAR_CACHEDB_BACKEND 487
-#define VAR_CACHEDB_SECRETSEED 488
-#define VAR_CACHEDB_REDISHOST 489
-#define VAR_CACHEDB_REDISPORT 490
-#define VAR_CACHEDB_REDISTIMEOUT 491
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 492
-#define VAR_FOR_UPSTREAM 493
-#define VAR_AUTH_ZONE 494
-#define VAR_ZONEFILE 495
-#define VAR_MASTER 496
-#define VAR_URL 497
-#define VAR_FOR_DOWNSTREAM 498
-#define VAR_FALLBACK_ENABLED 499
-#define VAR_TLS_ADDITIONAL_PORT 500
-#define VAR_LOW_RTT 501
-#define VAR_LOW_RTT_PERMIL 502
-#define VAR_ALLOW_NOTIFY 503
-#define VAR_TLS_WIN_CERT 504
-#define VAR_TCP_CONNECTION_LIMIT 505
-#define VAR_FORWARD_NO_CACHE 506
-#define VAR_STUB_NO_CACHE 507
-#define VAR_LOG_SERVFAIL 508
+#define VAR_MIN_CLIENT_SUBNET_IPV4 441
+#define VAR_MIN_CLIENT_SUBNET_IPV6 442
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 443
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 444
+#define VAR_CAPS_WHITELIST 445
+#define VAR_CACHE_MAX_NEGATIVE_TTL 446
+#define VAR_PERMIT_SMALL_HOLDDOWN 447
+#define VAR_QNAME_MINIMISATION 448
+#define VAR_QNAME_MINIMISATION_STRICT 449
+#define VAR_IP_FREEBIND 450
+#define VAR_DEFINE_TAG 451
+#define VAR_LOCAL_ZONE_TAG 452
+#define VAR_ACCESS_CONTROL_TAG 453
+#define VAR_LOCAL_ZONE_OVERRIDE 454
+#define VAR_ACCESS_CONTROL_TAG_ACTION 455
+#define VAR_ACCESS_CONTROL_TAG_DATA 456
+#define VAR_VIEW 457
+#define VAR_ACCESS_CONTROL_VIEW 458
+#define VAR_VIEW_FIRST 459
+#define VAR_SERVE_EXPIRED 460
+#define VAR_SERVE_EXPIRED_TTL 461
+#define VAR_SERVE_EXPIRED_TTL_RESET 462
+#define VAR_FAKE_DSA 463
+#define VAR_FAKE_SHA1 464
+#define VAR_LOG_IDENTITY 465
+#define VAR_HIDE_TRUSTANCHOR 466
+#define VAR_TRUST_ANCHOR_SIGNALING 467
+#define VAR_AGGRESSIVE_NSEC 468
+#define VAR_USE_SYSTEMD 469
+#define VAR_SHM_ENABLE 470
+#define VAR_SHM_KEY 471
+#define VAR_ROOT_KEY_SENTINEL 472
+#define VAR_DNSCRYPT 473
+#define VAR_DNSCRYPT_ENABLE 474
+#define VAR_DNSCRYPT_PORT 475
+#define VAR_DNSCRYPT_PROVIDER 476
+#define VAR_DNSCRYPT_SECRET_KEY 477
+#define VAR_DNSCRYPT_PROVIDER_CERT 478
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 479
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 480
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 481
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 482
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 483
+#define VAR_IPSECMOD_ENABLED 484
+#define VAR_IPSECMOD_HOOK 485
+#define VAR_IPSECMOD_IGNORE_BOGUS 486
+#define VAR_IPSECMOD_MAX_TTL 487
+#define VAR_IPSECMOD_WHITELIST 488
+#define VAR_IPSECMOD_STRICT 489
+#define VAR_CACHEDB 490
+#define VAR_CACHEDB_BACKEND 491
+#define VAR_CACHEDB_SECRETSEED 492
+#define VAR_CACHEDB_REDISHOST 493
+#define VAR_CACHEDB_REDISPORT 494
+#define VAR_CACHEDB_REDISTIMEOUT 495
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 496
+#define VAR_FOR_UPSTREAM 497
+#define VAR_AUTH_ZONE 498
+#define VAR_ZONEFILE 499
+#define VAR_MASTER 500
+#define VAR_URL 501
+#define VAR_FOR_DOWNSTREAM 502
+#define VAR_FALLBACK_ENABLED 503
+#define VAR_TLS_ADDITIONAL_PORT 504
+#define VAR_LOW_RTT 505
+#define VAR_LOW_RTT_PERMIL 506
+#define VAR_FAST_SERVER_PERMIL 507
+#define VAR_FAST_SERVER_NUM 508
+#define VAR_ALLOW_NOTIFY 509
+#define VAR_TLS_WIN_CERT 510
+#define VAR_TCP_CONNECTION_LIMIT 511
+#define VAR_FORWARD_NO_CACHE 512
+#define VAR_STUB_NO_CACHE 513
+#define VAR_LOG_SERVFAIL 514
+#define VAR_DENY_ANY 515
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 516
+#define VAR_LOG_TAG_QUERYREPLY 517
+#define VAR_STREAM_WAIT_SIZE 518
+#define VAR_TLS_CIPHERS 519
+#define VAR_TLS_CIPHERSUITES 520
+#define VAR_TLS_SESSION_TICKET_KEYS 521
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -641,7 +667,7 @@ union YYSTYPE
char* str;
-#line 645 "util/configparser.c" /* yacc.c:355 */
+#line 671 "util/configparser.c" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
@@ -658,7 +684,7 @@ int yyparse (void);
/* Copy the second part of user declarations. */
-#line 662 "util/configparser.c" /* yacc.c:358 */
+#line 688 "util/configparser.c" /* yacc.c:358 */
#ifdef short
# undef short
@@ -900,28 +926,28 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 512
+#define YYLAST 536
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 254
+#define YYNTOKENS 267
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 274
+#define YYNNTS 286
/* YYNRULES -- Number of rules. */
-#define YYNRULES 525
+#define YYNRULES 549
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 787
+#define YYNSTATES 823
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 508
+#define YYMAXUTOK 521
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
as returned by yylex, without out-of-bounds checking. */
-static const yytype_uint8 yytranslate[] =
+static const yytype_uint16 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -973,66 +999,70 @@ static const yytype_uint8 yytranslate[] =
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
+ 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
+ 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 166, 166, 166, 167, 167, 168, 168, 169, 169,
- 169, 170, 170, 171, 175, 180, 181, 182, 182, 182,
- 183, 183, 184, 184, 185, 185, 186, 186, 186, 187,
- 187, 188, 188, 188, 189, 189, 189, 190, 190, 191,
- 191, 192, 192, 193, 193, 194, 194, 195, 195, 196,
- 196, 197, 197, 198, 198, 198, 199, 199, 199, 200,
- 200, 200, 201, 201, 202, 202, 203, 203, 204, 204,
- 205, 205, 205, 206, 206, 207, 207, 208, 208, 208,
- 209, 209, 210, 210, 211, 211, 212, 212, 212, 213,
- 213, 214, 214, 215, 215, 216, 216, 217, 217, 218,
- 218, 218, 219, 219, 220, 220, 220, 221, 221, 221,
- 222, 222, 222, 223, 223, 223, 223, 224, 225, 225,
- 225, 226, 226, 226, 227, 227, 228, 228, 229, 229,
- 229, 230, 230, 231, 231, 231, 232, 232, 233, 233,
- 234, 235, 235, 236, 236, 237, 237, 238, 239, 239,
- 240, 240, 241, 241, 242, 242, 242, 243, 243, 244,
- 244, 245, 245, 246, 246, 247, 247, 248, 248, 248,
- 249, 249, 249, 250, 250, 250, 251, 251, 252, 253,
- 253, 254, 254, 255, 255, 256, 256, 257, 257, 257,
- 258, 258, 259, 259, 261, 273, 274, 275, 275, 275,
- 275, 275, 276, 276, 278, 290, 291, 292, 292, 292,
- 292, 293, 293, 295, 309, 310, 311, 311, 311, 311,
- 312, 312, 312, 314, 330, 331, 332, 332, 332, 332,
- 333, 333, 333, 334, 336, 345, 354, 365, 374, 383,
- 392, 403, 412, 423, 436, 451, 462, 479, 496, 509,
- 524, 533, 542, 551, 560, 569, 578, 587, 596, 605,
- 614, 623, 632, 641, 654, 663, 676, 685, 694, 703,
- 710, 717, 726, 733, 742, 750, 759, 768, 782, 791,
- 800, 809, 818, 827, 834, 841, 867, 875, 882, 889,
- 896, 903, 911, 919, 927, 934, 945, 956, 963, 972,
- 981, 990, 997, 1004, 1012, 1020, 1030, 1040, 1050, 1063,
- 1074, 1082, 1095, 1104, 1113, 1122, 1132, 1142, 1150, 1163,
- 1172, 1180, 1189, 1197, 1210, 1219, 1226, 1236, 1246, 1256,
- 1266, 1276, 1286, 1296, 1306, 1313, 1320, 1327, 1336, 1345,
- 1354, 1361, 1371, 1389, 1396, 1414, 1427, 1440, 1449, 1458,
- 1467, 1476, 1486, 1496, 1507, 1516, 1525, 1534, 1543, 1556,
- 1569, 1578, 1585, 1594, 1603, 1612, 1621, 1629, 1642, 1650,
- 1679, 1686, 1701, 1711, 1721, 1728, 1735, 1744, 1752, 1766,
- 1785, 1804, 1816, 1828, 1840, 1851, 1870, 1880, 1889, 1897,
- 1905, 1918, 1931, 1944, 1957, 1966, 1975, 1984, 1993, 2003,
- 2013, 2026, 2039, 2050, 2063, 2074, 2087, 2097, 2104, 2111,
- 2120, 2129, 2139, 2149, 2159, 2166, 2173, 2182, 2191, 2201,
- 2211, 2218, 2225, 2232, 2240, 2250, 2260, 2270, 2280, 2310,
- 2320, 2328, 2337, 2352, 2361, 2366, 2367, 2368, 2368, 2368,
- 2369, 2369, 2369, 2370, 2370, 2372, 2382, 2391, 2398, 2405,
- 2412, 2419, 2426, 2433, 2438, 2439, 2440, 2440, 2441, 2441,
- 2442, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2450, 2458,
- 2465, 2473, 2481, 2488, 2495, 2504, 2513, 2522, 2531, 2540,
- 2549, 2554, 2555, 2556, 2558, 2564, 2574, 2581, 2590, 2598,
- 2604, 2605, 2607, 2607, 2607, 2608, 2608, 2609, 2610, 2611,
- 2612, 2613, 2615, 2625, 2635, 2642, 2651, 2658, 2667, 2675,
- 2688, 2696, 2709, 2714, 2715, 2716, 2716, 2717, 2717, 2717,
- 2719, 2733, 2748, 2760, 2775, 2788
+ 0, 172, 172, 172, 173, 173, 174, 174, 175, 175,
+ 175, 176, 176, 177, 181, 186, 187, 188, 188, 188,
+ 189, 189, 190, 190, 191, 191, 192, 192, 192, 193,
+ 193, 194, 194, 194, 195, 195, 195, 196, 196, 197,
+ 197, 198, 198, 199, 199, 200, 200, 201, 201, 202,
+ 202, 203, 203, 204, 204, 204, 205, 205, 205, 206,
+ 206, 206, 207, 207, 208, 208, 209, 209, 210, 210,
+ 211, 211, 211, 212, 212, 213, 213, 214, 214, 214,
+ 215, 215, 216, 216, 217, 217, 218, 218, 218, 219,
+ 219, 220, 220, 221, 221, 222, 222, 223, 223, 224,
+ 224, 224, 225, 225, 226, 226, 226, 227, 227, 227,
+ 228, 228, 228, 229, 229, 229, 229, 230, 231, 231,
+ 231, 232, 232, 232, 233, 233, 234, 234, 235, 235,
+ 235, 236, 236, 237, 237, 237, 238, 238, 239, 239,
+ 240, 241, 241, 242, 242, 243, 243, 244, 245, 245,
+ 246, 246, 247, 247, 248, 248, 249, 249, 250, 250,
+ 250, 251, 251, 252, 252, 253, 253, 254, 254, 255,
+ 255, 256, 256, 256, 257, 257, 257, 258, 258, 258,
+ 259, 259, 260, 261, 261, 262, 262, 263, 263, 264,
+ 264, 265, 265, 265, 266, 266, 266, 267, 267, 267,
+ 268, 268, 269, 269, 270, 270, 272, 284, 285, 286,
+ 286, 286, 286, 286, 287, 287, 289, 301, 302, 303,
+ 303, 303, 303, 304, 304, 306, 320, 321, 322, 322,
+ 322, 322, 323, 323, 323, 325, 341, 342, 343, 343,
+ 343, 343, 344, 344, 344, 345, 347, 356, 365, 376,
+ 385, 394, 403, 414, 423, 434, 447, 462, 473, 490,
+ 507, 524, 541, 556, 571, 584, 599, 608, 617, 626,
+ 635, 644, 653, 662, 671, 680, 689, 698, 707, 716,
+ 729, 738, 751, 760, 769, 778, 785, 792, 801, 808,
+ 817, 825, 832, 839, 847, 856, 865, 879, 888, 897,
+ 906, 915, 924, 933, 940, 947, 973, 981, 988, 995,
+ 1002, 1009, 1017, 1025, 1033, 1040, 1051, 1062, 1069, 1078,
+ 1087, 1096, 1103, 1110, 1118, 1126, 1136, 1146, 1156, 1164,
+ 1177, 1188, 1196, 1209, 1218, 1227, 1236, 1246, 1256, 1264,
+ 1277, 1286, 1294, 1303, 1311, 1324, 1333, 1340, 1350, 1360,
+ 1370, 1380, 1390, 1400, 1410, 1420, 1427, 1434, 1441, 1450,
+ 1459, 1468, 1477, 1484, 1494, 1514, 1521, 1539, 1552, 1565,
+ 1574, 1583, 1592, 1601, 1611, 1621, 1632, 1641, 1650, 1659,
+ 1668, 1681, 1694, 1703, 1710, 1719, 1728, 1737, 1746, 1754,
+ 1767, 1775, 1806, 1813, 1828, 1838, 1848, 1855, 1862, 1869,
+ 1878, 1886, 1900, 1921, 1942, 1954, 1966, 1978, 1987, 2008,
+ 2018, 2027, 2035, 2043, 2056, 2069, 2084, 2099, 2108, 2117,
+ 2123, 2132, 2141, 2151, 2161, 2174, 2187, 2199, 2213, 2225,
+ 2239, 2249, 2256, 2263, 2272, 2281, 2291, 2301, 2311, 2318,
+ 2325, 2334, 2343, 2353, 2363, 2370, 2377, 2384, 2392, 2402,
+ 2412, 2422, 2432, 2464, 2474, 2482, 2490, 2505, 2514, 2519,
+ 2520, 2521, 2521, 2521, 2522, 2522, 2522, 2523, 2523, 2525,
+ 2535, 2544, 2551, 2558, 2565, 2572, 2579, 2586, 2591, 2592,
+ 2593, 2593, 2594, 2594, 2595, 2595, 2596, 2597, 2598, 2599,
+ 2600, 2601, 2603, 2612, 2619, 2628, 2637, 2644, 2651, 2661,
+ 2671, 2681, 2691, 2701, 2711, 2716, 2717, 2718, 2720, 2726,
+ 2736, 2743, 2752, 2760, 2765, 2766, 2768, 2768, 2768, 2769,
+ 2769, 2770, 2771, 2772, 2773, 2774, 2776, 2786, 2795, 2802,
+ 2811, 2818, 2827, 2835, 2848, 2856, 2869, 2874, 2875, 2876,
+ 2876, 2877, 2877, 2877, 2879, 2894, 2909, 2921, 2936, 2949
};
#endif
@@ -1107,6 +1137,8 @@ static const char *const yytname[] =
"VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE",
"VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE",
"VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6",
+ "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6",
+ "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6",
"VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
"VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION",
"VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG",
@@ -1132,19 +1164,24 @@ static const char *const yytname[] =
"VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER",
"VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED",
"VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL",
- "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT",
- "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL",
- "$accept", "toplevelvars", "toplevelvar", "serverstart",
- "contents_server", "content_server", "stubstart", "contents_stub",
- "content_stub", "forwardstart", "contents_forward", "content_forward",
- "viewstart", "contents_view", "content_view", "authstart",
- "contents_auth", "content_auth", "server_num_threads",
+ "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY",
+ "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE",
+ "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY",
+ "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY",
+ "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES",
+ "VAR_TLS_SESSION_TICKET_KEYS", "$accept", "toplevelvars", "toplevelvar",
+ "serverstart", "contents_server", "content_server", "stubstart",
+ "contents_stub", "content_stub", "forwardstart", "contents_forward",
+ "content_forward", "viewstart", "contents_view", "content_view",
+ "authstart", "contents_auth", "content_auth", "server_num_threads",
"server_verbosity", "server_statistics_interval",
"server_statistics_cumulative", "server_extended_statistics",
"server_shm_enable", "server_shm_key", "server_port",
"server_send_client_subnet", "server_client_subnet_zone",
"server_client_subnet_always_forward", "server_client_subnet_opcode",
"server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6",
+ "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6",
+ "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6",
"server_interface", "server_outgoing_interface", "server_outgoing_range",
"server_outgoing_port_permit", "server_outgoing_port_avoid",
"server_outgoing_num_tcp", "server_incoming_num_tcp",
@@ -1156,8 +1193,10 @@ static const char *const yytname[] =
"server_ssl_upstream", "server_ssl_service_key",
"server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle",
"server_tls_win_cert", "server_tls_additional_port",
- "server_use_systemd", "server_do_daemonize", "server_use_syslog",
- "server_log_time_ascii", "server_log_queries", "server_log_replies",
+ "server_tls_ciphers", "server_tls_ciphersuites",
+ "server_tls_session_ticket_keys", "server_use_systemd",
+ "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
+ "server_log_queries", "server_log_replies", "server_log_tag_queryreply",
"server_log_servfail", "server_log_local_actions", "server_chroot",
"server_username", "server_directory", "server_logfile",
"server_pidfile", "server_root_hints", "server_dlv_anchor_file",
@@ -1168,22 +1207,23 @@ static const char *const yytname[] =
"server_hide_identity", "server_hide_version", "server_hide_trustanchor",
"server_identity", "server_version", "server_so_rcvbuf",
"server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
- "server_ip_freebind", "server_edns_buffer_size",
- "server_msg_buffer_size", "server_msg_cache_size",
- "server_msg_cache_slabs", "server_num_queries_per_thread",
- "server_jostle_timeout", "server_delay_close",
- "server_unblock_lan_zones", "server_insecure_lan_zones",
- "server_rrset_cache_size", "server_rrset_cache_slabs",
- "server_infra_host_ttl", "server_infra_lame_ttl",
- "server_infra_cache_numhosts", "server_infra_cache_lame_size",
- "server_infra_cache_slabs", "server_infra_cache_min_rtt",
- "server_target_fetch_policy", "server_harden_short_bufsize",
- "server_harden_large_queries", "server_harden_glue",
- "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
- "server_harden_referral_path", "server_harden_algo_downgrade",
- "server_use_caps_for_id", "server_caps_whitelist",
- "server_private_address", "server_private_domain", "server_prefetch",
- "server_prefetch_key", "server_unwanted_reply_threshold",
+ "server_ip_freebind", "server_stream_wait_size",
+ "server_edns_buffer_size", "server_msg_buffer_size",
+ "server_msg_cache_size", "server_msg_cache_slabs",
+ "server_num_queries_per_thread", "server_jostle_timeout",
+ "server_delay_close", "server_unblock_lan_zones",
+ "server_insecure_lan_zones", "server_rrset_cache_size",
+ "server_rrset_cache_slabs", "server_infra_host_ttl",
+ "server_infra_lame_ttl", "server_infra_cache_numhosts",
+ "server_infra_cache_lame_size", "server_infra_cache_slabs",
+ "server_infra_cache_min_rtt", "server_target_fetch_policy",
+ "server_harden_short_bufsize", "server_harden_large_queries",
+ "server_harden_glue", "server_harden_dnssec_stripped",
+ "server_harden_below_nxdomain", "server_harden_referral_path",
+ "server_harden_algo_downgrade", "server_use_caps_for_id",
+ "server_caps_whitelist", "server_private_address",
+ "server_private_domain", "server_prefetch", "server_prefetch_key",
+ "server_deny_any", "server_unwanted_reply_threshold",
"server_do_not_query_address", "server_do_not_query_localhost",
"server_access_control", "server_module_conf",
"server_val_override_date", "server_val_sig_skew_min",
@@ -1199,17 +1239,18 @@ static const char *const yytname[] =
"server_permit_small_holddown", "server_key_cache_size",
"server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
"server_local_data", "server_local_data_ptr", "server_minimal_responses",
- "server_rrset_roundrobin", "server_max_udp_size", "server_dns64_prefix",
- "server_dns64_synthall", "server_dns64_ignore_aaaa", "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_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_low_rtt", "server_low_rtt_permil", "server_qname_minimisation",
+ "server_rrset_roundrobin", "server_unknown_server_time_limit",
+ "server_max_udp_size", "server_dns64_prefix", "server_dns64_synthall",
+ "server_dns64_ignore_aaaa", "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_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_low_rtt", "server_fast_server_num",
+ "server_fast_server_permil", "server_qname_minimisation",
"server_qname_minimisation_strict", "server_ipsecmod_enabled",
"server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
"server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
@@ -1278,14 +1319,15 @@ static const yytype_uint16 yytoknum[] =
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, 504,
- 505, 506, 507, 508
+ 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
+ 515, 516, 517, 518, 519, 520, 521
};
# endif
-#define YYPACT_NINF -150
+#define YYPACT_NINF -154
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-150)))
+ (!!((Yystate) == (-154)))
#define YYTABLE_NINF -1
@@ -1296,85 +1338,89 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- -150, 208, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -12, 99, 159, 143, 39, 215,
- 107, -80, 104, -149, 22, 23, 24, 28, 29, 30,
+ -154, 212, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -12, 102, 98, 166, 39, 213,
+ 142, -80, 52, -153, 22, 23, 24, 28, 29, 30,
78, 79, 80, 84, 88, 89, 114, 115, 116, 118,
- 129, 130, 131, 133, 136, 137, 138, 139, 140, 141,
- 178, 193, 194, 196, 197, 199, 202, 210, 211, 214,
- 216, 217, 218, 219, 220, 221, 222, 230, 232, 233,
- 234, 235, 236, 238, 239, 240, 241, 243, 244, 245,
- 246, 247, 261, 262, 263, 264, 265, 266, 268, 274,
- 275, 276, 278, 279, 280, 281, 282, 283, 284, 286,
- 288, 289, 290, 291, 293, 294, 295, 296, 297, 319,
- 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 332, 334, 335, 336, 337, 338, 339, 340,
- 342, 343, 344, 345, 346, 347, 348, 350, 351, 352,
- 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
- 373, 374, 375, 376, 377, 378, 379, 380, 381, 382,
- 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,
- 393, 394, 395, 397, 398, 399, 401, 402, 403, 404,
- 405, 406, 407, 408, 409, 410, 411, 413, 414, 415,
- 416, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, 417,
- 418, 419, 420, 421, 422, 423, -150, -150, -150, -150,
- -150, -150, -150, -150, 424, 425, 426, 427, 428, 430,
- -150, -150, -150, -150, -150, -150, -150, 431, 432, 433,
- 434, 435, 436, 438, -150, -150, -150, -150, -150, -150,
- -150, -150, 439, 440, 441, 442, 443, 444, 445, 446,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, 447,
- 448, 449, 450, 451, 452, 453, 454, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, 455, 456, 457, 458,
- 459, 460, 461, 462, 463, 464, 465, 466, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, 467, -150, -150, 468, 469, 470, 471, 472, 473,
- 474, 475, 476, 477, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, 478, 479, 480, 481, 482,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, 483, 484, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, 485, 486, 487, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, 488, 489, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, 490, 491, 492, 493, 494, 495, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, 496, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, 497, -150, -150,
- 498, 499, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, 500, 501, 502, -150,
- -150, -150, -150, -150, -150, -150, -150
+ 129, 130, 132, 133, 134, 136, 141, 180, 182, 196,
+ 197, 200, 201, 203, 204, 205, 206, 214, 215, 216,
+ 217, 218, 220, 221, 222, 223, 225, 245, 247, 248,
+ 249, 250, 251, 253, 254, 255, 256, 257, 258, 259,
+ 272, 278, 279, 280, 281, 282, 297, 306, 307, 308,
+ 309, 310, 311, 313, 314, 315, 316, 317, 318, 319,
+ 320, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
+ 342, 343, 344, 346, 347, 348, 349, 351, 352, 354,
+ 355, 356, 357, 358, 359, 361, 362, 363, 364, 365,
+ 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
+ 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
+ 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 405, 406,
+ 407, 408, 409, 410, 411, 412, 413, 414, 415, 416,
+ 417, 418, 419, 421, 422, 423, 424, 425, 426, 427,
+ 428, 429, 430, 431, 432, 433, 434, 435, 436, 438,
+ 439, 440, 441, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, 442, 443, 444, 446, 447, 448, 449,
+ -154, -154, -154, -154, -154, -154, -154, -154, 450, 451,
+ 452, 453, 454, 455, -154, -154, -154, -154, -154, -154,
+ -154, 456, 457, 458, 459, 460, 461, 462, -154, -154,
+ -154, -154, -154, -154, -154, -154, 463, 464, 465, 466,
+ 467, 468, 469, 470, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, 471, 472, 473, 474, 475, 476, 477,
+ 478, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ 479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
+ 489, 490, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, 491, -154, -154, 492, 493,
+ 494, 495, 496, 497, 498, 499, 500, 501, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, 502,
+ 503, 504, 505, 506, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, 507,
+ 508, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, 509, 510, 511, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, 512, 513,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, 514,
+ 515, 516, 517, 518, 519, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ 520, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, 521, -154, -154, 522, 523, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, 524, 525, 526, -154, -154, -154, -154, -154,
+ -154, -154, -154
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1382,9 +1428,9 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 2, 0, 1, 14, 194, 204, 434, 480, 453, 213,
- 489, 512, 223, 3, 16, 196, 206, 215, 225, 436,
- 455, 482, 491, 514, 4, 5, 6, 10, 13, 8,
+ 2, 0, 1, 14, 206, 216, 458, 504, 477, 225,
+ 513, 536, 235, 3, 16, 208, 218, 227, 237, 460,
+ 479, 506, 515, 538, 4, 5, 6, 10, 13, 8,
9, 7, 11, 12, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1403,130 +1449,136 @@ 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, 15, 17, 18, 80, 83, 92, 173, 174, 19,
- 144, 145, 146, 147, 148, 149, 31, 71, 20, 84,
- 85, 42, 64, 79, 21, 22, 24, 25, 23, 26,
- 27, 28, 29, 30, 115, 185, 116, 118, 119, 120,
- 187, 191, 188, 169, 81, 70, 96, 113, 114, 193,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 17, 18, 80, 83, 92, 177,
+ 178, 19, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 31, 71, 20, 84, 85, 42, 64, 79,
+ 21, 22, 24, 25, 23, 26, 27, 28, 29, 30,
+ 115, 189, 116, 118, 119, 120, 191, 196, 192, 203,
+ 204, 205, 173, 81, 70, 96, 113, 114, 201, 198,
117, 32, 33, 34, 35, 36, 72, 86, 87, 102,
- 58, 68, 59, 177, 178, 97, 52, 53, 176, 54,
- 55, 106, 110, 124, 133, 154, 107, 65, 37, 38,
- 39, 94, 125, 126, 127, 40, 41, 43, 44, 46,
- 47, 45, 131, 48, 49, 50, 56, 75, 111, 89,
- 132, 82, 150, 90, 91, 108, 109, 95, 51, 73,
- 76, 57, 60, 98, 99, 74, 151, 100, 61, 62,
- 63, 186, 112, 164, 165, 166, 167, 175, 101, 69,
- 103, 104, 105, 152, 66, 67, 88, 77, 78, 93,
- 121, 122, 123, 128, 129, 130, 155, 156, 158, 160,
- 161, 159, 162, 170, 134, 135, 138, 139, 136, 137,
- 140, 141, 143, 142, 189, 190, 153, 163, 179, 181,
- 180, 182, 183, 184, 157, 168, 171, 172, 192, 0,
- 0, 0, 0, 0, 0, 0, 195, 197, 198, 199,
- 201, 202, 203, 200, 0, 0, 0, 0, 0, 0,
- 205, 207, 208, 209, 210, 211, 212, 0, 0, 0,
- 0, 0, 0, 0, 214, 216, 217, 220, 221, 218,
- 222, 219, 0, 0, 0, 0, 0, 0, 0, 0,
- 224, 226, 227, 228, 229, 233, 230, 231, 232, 0,
- 0, 0, 0, 0, 0, 0, 0, 435, 437, 439,
- 438, 444, 440, 441, 442, 443, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 454, 456,
- 457, 458, 459, 460, 461, 462, 463, 464, 465, 466,
- 467, 0, 481, 483, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 490, 492, 493, 494, 496, 497,
- 495, 498, 499, 500, 501, 0, 0, 0, 0, 0,
- 513, 515, 516, 517, 518, 519, 235, 234, 241, 250,
- 248, 256, 257, 260, 258, 259, 261, 262, 263, 264,
- 265, 283, 284, 285, 286, 287, 310, 311, 312, 317,
- 318, 253, 319, 320, 323, 321, 322, 325, 326, 327,
- 340, 298, 299, 301, 302, 328, 343, 292, 294, 344,
- 350, 351, 352, 254, 309, 366, 367, 293, 361, 277,
- 249, 288, 341, 347, 329, 0, 0, 370, 255, 236,
- 276, 333, 237, 251, 252, 289, 290, 368, 331, 335,
- 336, 238, 371, 313, 339, 278, 297, 345, 346, 349,
- 360, 291, 364, 362, 363, 303, 308, 337, 338, 304,
- 305, 330, 354, 279, 280, 282, 266, 268, 269, 270,
- 271, 272, 372, 373, 374, 314, 315, 316, 324, 375,
- 376, 377, 0, 0, 0, 332, 306, 485, 386, 390,
- 388, 387, 391, 389, 0, 0, 394, 395, 242, 243,
- 244, 245, 246, 247, 334, 348, 365, 398, 399, 307,
- 378, 0, 0, 0, 0, 0, 0, 355, 356, 357,
- 358, 359, 486, 300, 295, 353, 275, 239, 240, 296,
- 400, 402, 401, 403, 404, 405, 267, 274, 396, 397,
- 273, 0, 281, 406, 407, 408, 412, 411, 409, 410,
- 413, 414, 415, 416, 418, 417, 427, 0, 431, 432,
- 0, 0, 433, 419, 425, 420, 421, 422, 424, 426,
- 423, 445, 447, 446, 449, 450, 451, 452, 448, 468,
- 469, 470, 471, 472, 473, 474, 475, 476, 477, 478,
- 479, 484, 502, 503, 504, 507, 505, 506, 508, 509,
- 510, 511, 520, 521, 522, 523, 524, 342, 369, 385,
- 487, 488, 392, 393, 379, 380, 0, 0, 0, 384,
- 525, 428, 429, 430, 383, 381, 382
+ 58, 68, 59, 181, 182, 97, 52, 53, 180, 54,
+ 55, 106, 110, 124, 133, 158, 202, 107, 65, 37,
+ 38, 39, 94, 125, 126, 127, 40, 41, 43, 44,
+ 46, 47, 45, 131, 48, 49, 50, 56, 75, 111,
+ 89, 132, 82, 154, 90, 91, 108, 109, 199, 95,
+ 51, 73, 76, 57, 60, 98, 99, 74, 155, 100,
+ 61, 62, 63, 190, 112, 168, 169, 170, 171, 179,
+ 101, 69, 103, 104, 105, 156, 66, 67, 88, 77,
+ 78, 93, 121, 122, 200, 123, 128, 129, 130, 159,
+ 160, 162, 164, 165, 163, 166, 174, 134, 135, 138,
+ 139, 136, 137, 140, 141, 143, 142, 193, 195, 194,
+ 157, 167, 183, 185, 184, 186, 187, 188, 161, 172,
+ 175, 176, 197, 0, 0, 0, 0, 0, 0, 0,
+ 207, 209, 210, 211, 213, 214, 215, 212, 0, 0,
+ 0, 0, 0, 0, 217, 219, 220, 221, 222, 223,
+ 224, 0, 0, 0, 0, 0, 0, 0, 226, 228,
+ 229, 232, 233, 230, 234, 231, 0, 0, 0, 0,
+ 0, 0, 0, 0, 236, 238, 239, 240, 241, 245,
+ 242, 243, 244, 0, 0, 0, 0, 0, 0, 0,
+ 0, 459, 461, 463, 462, 468, 464, 465, 466, 467,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 478, 480, 481, 482, 483, 484, 485, 486,
+ 487, 488, 489, 490, 491, 0, 505, 507, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 514, 516,
+ 517, 518, 520, 521, 519, 522, 523, 524, 525, 0,
+ 0, 0, 0, 0, 537, 539, 540, 541, 542, 543,
+ 247, 246, 253, 266, 264, 272, 273, 276, 274, 275,
+ 277, 278, 279, 280, 281, 303, 304, 305, 306, 307,
+ 331, 332, 333, 338, 339, 269, 340, 341, 344, 342,
+ 343, 346, 347, 348, 362, 318, 319, 321, 322, 349,
+ 365, 312, 314, 366, 372, 373, 374, 270, 330, 388,
+ 389, 313, 383, 296, 265, 308, 363, 369, 350, 0,
+ 0, 392, 271, 248, 295, 354, 249, 267, 268, 309,
+ 310, 390, 352, 356, 357, 250, 393, 334, 361, 297,
+ 317, 367, 368, 371, 382, 311, 386, 384, 385, 323,
+ 329, 358, 359, 324, 325, 351, 376, 298, 299, 302,
+ 282, 284, 285, 286, 287, 288, 394, 395, 397, 335,
+ 336, 337, 345, 398, 399, 400, 0, 0, 0, 353,
+ 326, 509, 409, 413, 411, 410, 414, 412, 0, 0,
+ 417, 418, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 355, 370, 387, 422, 423, 327, 401, 0,
+ 0, 0, 0, 0, 0, 377, 378, 379, 380, 381,
+ 510, 320, 315, 375, 294, 251, 252, 316, 424, 426,
+ 425, 427, 428, 429, 283, 290, 419, 421, 420, 289,
+ 0, 301, 360, 396, 300, 328, 291, 292, 293, 430,
+ 431, 432, 436, 435, 433, 434, 437, 438, 439, 440,
+ 442, 441, 451, 0, 455, 456, 0, 0, 457, 443,
+ 449, 444, 445, 446, 448, 450, 447, 469, 471, 470,
+ 473, 474, 475, 476, 472, 492, 493, 494, 495, 496,
+ 497, 498, 499, 500, 501, 502, 503, 508, 526, 527,
+ 528, 531, 529, 530, 532, 533, 534, 535, 544, 545,
+ 546, 547, 548, 364, 391, 408, 511, 512, 415, 416,
+ 402, 403, 0, 0, 0, 407, 549, 452, 453, 454,
+ 406, 404, 405
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150, -150, -150, -150, -150, -150, -150,
- -150, -150, -150, -150
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154, -154, -154, -154, -154,
+ -154, -154, -154, -154, -154, -154
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 1, 13, 14, 24, 211, 15, 25, 396, 16,
- 26, 410, 17, 27, 424, 18, 28, 440, 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, 370, 371, 372, 373,
- 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
- 397, 398, 399, 400, 401, 402, 403, 411, 412, 413,
- 414, 415, 416, 441, 442, 443, 444, 445, 446, 447,
- 448, 425, 426, 427, 428, 429, 430, 431, 19, 29,
- 457, 458, 459, 460, 461, 462, 463, 464, 465, 20,
- 30, 478, 479, 480, 481, 482, 483, 484, 485, 486,
- 487, 488, 489, 490, 21, 31, 492, 493, 384, 385,
- 386, 387, 22, 32, 504, 505, 506, 507, 508, 509,
- 510, 511, 512, 513, 514, 23, 33, 520, 521, 522,
- 523, 524, 525, 388
+ -1, 1, 13, 14, 24, 223, 15, 25, 420, 16,
+ 26, 434, 17, 27, 448, 18, 28, 464, 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, 370, 371, 372, 373, 374, 375,
+ 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
+ 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 421, 422, 423, 424, 425, 426, 427, 435,
+ 436, 437, 438, 439, 440, 465, 466, 467, 468, 469,
+ 470, 471, 472, 449, 450, 451, 452, 453, 454, 455,
+ 19, 29, 481, 482, 483, 484, 485, 486, 487, 488,
+ 489, 20, 30, 502, 503, 504, 505, 506, 507, 508,
+ 509, 510, 511, 512, 513, 514, 21, 31, 516, 517,
+ 408, 409, 410, 411, 22, 32, 528, 529, 530, 531,
+ 532, 533, 534, 535, 536, 537, 538, 23, 33, 544,
+ 545, 546, 547, 548, 549, 412
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1537,58 +1589,60 @@ static const yytype_uint16 yytable[] =
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 491, 526, 527, 528, 65, 66, 67, 529, 530,
- 531, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 64, 515, 550, 551, 552, 65, 66, 67, 553, 554,
+ 555, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 432, 515, 516, 517, 518, 519, 532, 533,
- 534, 109, 110, 111, 535, 112, 113, 114, 536, 537,
+ 107, 108, 456, 539, 540, 541, 542, 543, 556, 557,
+ 558, 109, 110, 111, 559, 112, 113, 114, 560, 561,
115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 538, 539, 540, 139, 541, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 542,
- 543, 544, 389, 545, 390, 391, 546, 547, 548, 549,
- 550, 551, 150, 151, 152, 153, 154, 155, 156, 157,
+ 135, 136, 137, 138, 562, 563, 564, 139, 565, 140,
+ 141, 142, 143, 144, 145, 146, 147, 148, 149, 566,
+ 567, 428, 568, 569, 570, 413, 571, 414, 415, 429,
+ 430, 572, 150, 151, 152, 153, 154, 155, 156, 157,
158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
- 178, 179, 180, 181, 182, 183, 417, 184, 552, 185,
- 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
- 196, 197, 404, 553, 554, 392, 555, 556, 2, 557,
- 405, 406, 558, 198, 199, 200, 201, 202, 203, 3,
- 559, 560, 418, 419, 561, 204, 562, 563, 564, 565,
- 566, 567, 568, 205, 206, 207, 393, 208, 209, 394,
- 569, 210, 570, 571, 572, 573, 574, 420, 575, 576,
- 577, 578, 4, 579, 580, 581, 582, 583, 5, 466,
- 467, 468, 469, 470, 471, 472, 473, 474, 475, 476,
- 477, 584, 585, 586, 587, 588, 589, 433, 590, 434,
- 435, 436, 437, 438, 591, 592, 593, 439, 594, 595,
- 596, 597, 598, 599, 600, 407, 601, 408, 602, 603,
- 604, 605, 6, 606, 607, 608, 609, 610, 421, 422,
- 449, 450, 451, 452, 453, 454, 455, 456, 7, 494,
- 495, 496, 497, 498, 499, 500, 501, 502, 503, 611,
- 612, 613, 614, 615, 616, 617, 618, 619, 620, 621,
- 622, 623, 624, 423, 625, 626, 627, 628, 629, 630,
- 631, 395, 632, 633, 634, 635, 636, 637, 638, 8,
- 639, 640, 641, 642, 643, 644, 645, 646, 647, 648,
- 649, 650, 651, 652, 653, 654, 655, 656, 657, 658,
- 659, 660, 661, 662, 663, 664, 665, 666, 667, 668,
- 669, 670, 671, 672, 673, 674, 675, 676, 677, 678,
- 679, 680, 681, 682, 683, 684, 9, 685, 686, 687,
- 409, 688, 689, 690, 691, 692, 693, 694, 695, 696,
- 697, 698, 10, 699, 700, 701, 702, 703, 704, 705,
- 706, 707, 708, 709, 710, 711, 712, 713, 714, 11,
- 715, 716, 717, 718, 719, 720, 721, 12, 722, 723,
- 724, 725, 726, 727, 728, 729, 730, 731, 732, 733,
- 734, 735, 736, 737, 738, 739, 740, 741, 742, 743,
- 744, 745, 746, 747, 748, 749, 750, 751, 752, 753,
- 754, 755, 756, 757, 758, 759, 760, 761, 762, 763,
- 764, 765, 766, 767, 768, 769, 770, 771, 772, 773,
- 774, 775, 776, 777, 778, 779, 780, 781, 782, 783,
- 784, 785, 786
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 573, 188, 574, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 575, 576, 416, 441,
+ 577, 578, 2, 579, 580, 581, 582, 202, 203, 204,
+ 205, 206, 207, 3, 583, 584, 585, 586, 587, 208,
+ 588, 589, 590, 591, 431, 592, 432, 209, 210, 417,
+ 211, 212, 418, 213, 214, 442, 443, 215, 216, 217,
+ 218, 219, 220, 221, 222, 593, 4, 594, 595, 596,
+ 597, 598, 5, 599, 600, 601, 602, 603, 604, 605,
+ 444, 518, 519, 520, 521, 522, 523, 524, 525, 526,
+ 527, 457, 606, 458, 459, 460, 461, 462, 607, 608,
+ 609, 610, 611, 463, 490, 491, 492, 493, 494, 495,
+ 496, 497, 498, 499, 500, 501, 6, 612, 473, 474,
+ 475, 476, 477, 478, 479, 480, 613, 614, 615, 616,
+ 617, 618, 7, 619, 620, 621, 622, 623, 624, 625,
+ 626, 445, 446, 627, 628, 629, 630, 631, 632, 633,
+ 634, 635, 636, 637, 638, 639, 640, 641, 642, 643,
+ 644, 645, 646, 647, 648, 433, 649, 650, 651, 652,
+ 419, 653, 654, 8, 655, 656, 657, 658, 659, 660,
+ 447, 661, 662, 663, 664, 665, 666, 667, 668, 669,
+ 670, 671, 672, 673, 674, 675, 676, 677, 678, 679,
+ 680, 681, 682, 683, 684, 685, 686, 687, 688, 689,
+ 690, 691, 692, 693, 694, 695, 696, 697, 698, 699,
+ 700, 701, 702, 703, 9, 704, 705, 706, 707, 708,
+ 709, 710, 711, 712, 713, 714, 715, 716, 717, 718,
+ 10, 719, 720, 721, 722, 723, 724, 725, 726, 727,
+ 728, 729, 730, 731, 732, 733, 734, 11, 735, 736,
+ 737, 738, 739, 740, 741, 12, 742, 743, 744, 745,
+ 746, 747, 748, 749, 750, 751, 752, 753, 754, 755,
+ 756, 757, 758, 759, 760, 761, 762, 763, 764, 765,
+ 766, 767, 768, 769, 770, 771, 772, 773, 774, 775,
+ 776, 777, 778, 779, 780, 781, 782, 783, 784, 785,
+ 786, 787, 788, 789, 790, 791, 792, 793, 794, 795,
+ 796, 797, 798, 799, 800, 801, 802, 803, 804, 805,
+ 806, 807, 808, 809, 810, 811, 812, 813, 814, 815,
+ 816, 817, 818, 819, 820, 821, 822
};
-static const yytype_uint8 yycheck[] =
+static const yytype_uint16 yycheck[] =
{
12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
@@ -1598,60 +1652,62 @@ static const yytype_uint8 yycheck[] =
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, 43, 232, 233, 234, 235, 236, 10, 10,
+ 92, 93, 43, 236, 237, 238, 239, 240, 10, 10,
10, 103, 104, 105, 10, 107, 108, 109, 10, 10,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
132, 133, 134, 135, 10, 10, 10, 139, 10, 141,
142, 143, 144, 145, 146, 147, 148, 149, 150, 10,
- 10, 10, 43, 10, 45, 46, 10, 10, 10, 10,
- 10, 10, 164, 165, 166, 167, 168, 169, 170, 171,
+ 10, 43, 10, 10, 10, 43, 10, 45, 46, 51,
+ 52, 10, 164, 165, 166, 167, 168, 169, 170, 171,
172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
- 192, 193, 194, 195, 196, 197, 43, 199, 10, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 43, 10, 10, 106, 10, 10, 0, 10,
- 51, 52, 10, 225, 226, 227, 228, 229, 230, 11,
- 10, 10, 79, 80, 10, 237, 10, 10, 10, 10,
- 10, 10, 10, 245, 246, 247, 137, 249, 250, 140,
- 10, 253, 10, 10, 10, 10, 10, 104, 10, 10,
- 10, 10, 44, 10, 10, 10, 10, 10, 50, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 10, 10, 10, 10, 10, 10, 238, 10, 240,
- 241, 242, 243, 244, 10, 10, 10, 248, 10, 10,
- 10, 10, 10, 10, 10, 136, 10, 138, 10, 10,
- 10, 10, 94, 10, 10, 10, 10, 10, 165, 166,
- 95, 96, 97, 98, 99, 100, 101, 102, 110, 215,
- 216, 217, 218, 219, 220, 221, 222, 223, 224, 10,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 10, 203, 10, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 10, 10, 106, 43,
+ 10, 10, 0, 10, 10, 10, 10, 229, 230, 231,
+ 232, 233, 234, 11, 10, 10, 10, 10, 10, 241,
+ 10, 10, 10, 10, 136, 10, 138, 249, 250, 137,
+ 252, 253, 140, 255, 256, 79, 80, 259, 260, 261,
+ 262, 263, 264, 265, 266, 10, 44, 10, 10, 10,
+ 10, 10, 50, 10, 10, 10, 10, 10, 10, 10,
+ 104, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 242, 10, 244, 245, 246, 247, 248, 10, 10,
+ 10, 10, 10, 254, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 94, 10, 95, 96,
+ 97, 98, 99, 100, 101, 102, 10, 10, 10, 10,
+ 10, 10, 110, 10, 10, 10, 10, 10, 10, 10,
+ 10, 165, 166, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 200, 10, 10, 10, 10, 10, 10,
- 10, 252, 10, 10, 10, 10, 10, 10, 10, 151,
+ 10, 10, 10, 10, 10, 257, 10, 10, 10, 10,
+ 258, 10, 10, 151, 10, 10, 10, 10, 10, 10,
+ 204, 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, 202, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 198, 10, 10, 10,
- 251, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 214, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 231,
- 10, 10, 10, 10, 10, 10, 10, 239, 10, 10,
+ 218, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 235, 10, 10,
+ 10, 10, 10, 10, 10, 243, 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, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint16 yystos[] =
{
- 0, 255, 0, 11, 44, 50, 94, 110, 151, 198,
- 214, 231, 239, 256, 257, 260, 263, 266, 269, 472,
- 483, 498, 506, 519, 258, 261, 264, 267, 270, 473,
- 484, 499, 507, 520, 12, 13, 14, 15, 16, 17,
+ 0, 268, 0, 11, 44, 50, 94, 110, 151, 202,
+ 218, 235, 243, 269, 270, 273, 276, 279, 282, 497,
+ 508, 523, 531, 544, 271, 274, 277, 280, 283, 498,
+ 509, 524, 532, 545, 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, 40, 41, 42, 47, 48, 49, 53, 54,
@@ -1666,41 +1722,43 @@ static const yytype_uint16 yystos[] =
164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
- 194, 195, 196, 197, 199, 201, 202, 203, 204, 205,
- 206, 207, 208, 209, 210, 211, 212, 213, 225, 226,
- 227, 228, 229, 230, 237, 245, 246, 247, 249, 250,
- 253, 259, 272, 273, 274, 275, 276, 277, 278, 279,
- 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
- 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
- 340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
- 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
- 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
- 370, 371, 372, 373, 374, 375, 376, 377, 378, 379,
- 380, 381, 382, 383, 384, 385, 386, 387, 388, 389,
- 390, 391, 392, 393, 394, 395, 396, 397, 398, 399,
- 400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
- 410, 411, 412, 413, 414, 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, 502, 503, 504, 505, 527, 43,
- 45, 46, 106, 137, 140, 252, 262, 444, 445, 446,
- 447, 448, 449, 450, 43, 51, 52, 136, 138, 251,
- 265, 451, 452, 453, 454, 455, 456, 43, 79, 80,
- 104, 165, 166, 200, 268, 465, 466, 467, 468, 469,
- 470, 471, 43, 238, 240, 241, 242, 243, 244, 248,
- 271, 457, 458, 459, 460, 461, 462, 463, 464, 95,
- 96, 97, 98, 99, 100, 101, 102, 474, 475, 476,
- 477, 478, 479, 480, 481, 482, 152, 153, 154, 155,
- 156, 157, 158, 159, 160, 161, 162, 163, 485, 486,
- 487, 488, 489, 490, 491, 492, 493, 494, 495, 496,
- 497, 111, 500, 501, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 508, 509, 510, 511, 512, 513,
- 514, 515, 516, 517, 518, 232, 233, 234, 235, 236,
- 521, 522, 523, 524, 525, 526, 10, 10, 10, 10,
+ 194, 195, 196, 197, 198, 199, 200, 201, 203, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 229, 230, 231, 232, 233, 234, 241, 249,
+ 250, 252, 253, 255, 256, 259, 260, 261, 262, 263,
+ 264, 265, 266, 272, 285, 286, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
+ 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
+ 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
+ 341, 342, 343, 344, 345, 346, 347, 348, 349, 350,
+ 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
+ 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
+ 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
+ 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
+ 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
+ 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
+ 411, 412, 413, 414, 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, 447, 448, 449, 450,
+ 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
+ 461, 462, 463, 464, 465, 466, 467, 468, 527, 528,
+ 529, 530, 552, 43, 45, 46, 106, 137, 140, 258,
+ 275, 469, 470, 471, 472, 473, 474, 475, 43, 51,
+ 52, 136, 138, 257, 278, 476, 477, 478, 479, 480,
+ 481, 43, 79, 80, 104, 165, 166, 204, 281, 490,
+ 491, 492, 493, 494, 495, 496, 43, 242, 244, 245,
+ 246, 247, 248, 254, 284, 482, 483, 484, 485, 486,
+ 487, 488, 489, 95, 96, 97, 98, 99, 100, 101,
+ 102, 499, 500, 501, 502, 503, 504, 505, 506, 507,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 510, 511, 512, 513, 514, 515, 516, 517,
+ 518, 519, 520, 521, 522, 111, 525, 526, 219, 220,
+ 221, 222, 223, 224, 225, 226, 227, 228, 533, 534,
+ 535, 536, 537, 538, 539, 540, 541, 542, 543, 236,
+ 237, 238, 239, 240, 546, 547, 548, 549, 550, 551,
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,
@@ -1726,65 +1784,69 @@ static const yytype_uint16 yystos[] =
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint16 yyr1[] =
{
- 0, 254, 255, 255, 256, 256, 256, 256, 256, 256,
- 256, 256, 256, 256, 257, 258, 258, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 259, 259, 259, 259, 259, 259,
- 259, 259, 259, 259, 260, 261, 261, 262, 262, 262,
- 262, 262, 262, 262, 263, 264, 264, 265, 265, 265,
- 265, 265, 265, 266, 267, 267, 268, 268, 268, 268,
- 268, 268, 268, 269, 270, 270, 271, 271, 271, 271,
- 271, 271, 271, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
- 318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
- 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
- 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
- 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
- 368, 369, 370, 371, 372, 373, 374, 375, 376, 377,
- 378, 379, 380, 381, 382, 383, 384, 385, 386, 387,
- 388, 389, 390, 391, 392, 393, 394, 395, 396, 397,
- 398, 399, 400, 401, 402, 403, 404, 405, 406, 407,
- 408, 409, 410, 411, 412, 413, 414, 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, 447,
- 448, 449, 450, 451, 452, 453, 454, 455, 456, 457,
- 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
- 468, 469, 470, 471, 472, 473, 473, 474, 474, 474,
- 474, 474, 474, 474, 474, 475, 476, 477, 478, 479,
- 480, 481, 482, 483, 484, 484, 485, 485, 485, 485,
- 485, 485, 485, 485, 485, 485, 485, 485, 486, 487,
- 488, 489, 490, 491, 492, 493, 494, 495, 496, 497,
- 498, 499, 499, 500, 501, 502, 503, 504, 505, 506,
- 507, 507, 508, 508, 508, 508, 508, 508, 508, 508,
- 508, 508, 509, 510, 511, 512, 513, 514, 515, 516,
- 517, 518, 519, 520, 520, 521, 521, 521, 521, 521,
- 522, 523, 524, 525, 526, 527
+ 0, 267, 268, 268, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 270, 271, 271, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 272, 272, 272, 272, 272, 273, 274, 274, 275,
+ 275, 275, 275, 275, 275, 275, 276, 277, 277, 278,
+ 278, 278, 278, 278, 278, 279, 280, 280, 281, 281,
+ 281, 281, 281, 281, 281, 282, 283, 283, 284, 284,
+ 284, 284, 284, 284, 284, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
+ 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
+ 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
+ 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,
+ 379, 380, 381, 382, 383, 384, 385, 386, 387, 388,
+ 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
+ 399, 400, 401, 402, 403, 404, 405, 406, 407, 408,
+ 409, 410, 411, 412, 413, 414, 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, 447, 448,
+ 449, 450, 451, 452, 453, 454, 455, 456, 457, 458,
+ 459, 460, 461, 462, 463, 464, 465, 466, 467, 468,
+ 469, 470, 471, 472, 473, 474, 475, 476, 477, 478,
+ 479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
+ 489, 490, 491, 492, 493, 494, 495, 496, 497, 498,
+ 498, 499, 499, 499, 499, 499, 499, 499, 499, 500,
+ 501, 502, 503, 504, 505, 506, 507, 508, 509, 509,
+ 510, 510, 510, 510, 510, 510, 510, 510, 510, 510,
+ 510, 510, 511, 512, 513, 514, 515, 516, 517, 518,
+ 519, 520, 521, 522, 523, 524, 524, 525, 526, 527,
+ 528, 529, 530, 531, 532, 532, 533, 533, 533, 533,
+ 533, 533, 533, 533, 533, 533, 534, 535, 536, 537,
+ 538, 539, 540, 541, 542, 543, 544, 545, 545, 546,
+ 546, 546, 546, 546, 547, 548, 549, 550, 551, 552
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1809,11 +1871,13 @@ 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, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+ 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, 1, 2, 0, 1,
+ 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -1824,25 +1888,25 @@ 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, 3, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
- 3, 4, 4, 4, 3, 3, 2, 2, 2, 2,
- 2, 2, 3, 3, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 4, 4, 4, 3, 3, 2,
+ 2, 2, 2, 2, 2, 3, 3, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
- 3, 2, 2, 2, 1, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
- 2, 2, 2, 1, 2, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 2, 0, 1, 2, 2, 2, 3, 3, 1,
- 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 3, 3, 3, 2, 2, 2, 1, 2,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 3
+ 2, 2, 2, 2, 1, 2, 0, 1, 2, 2,
+ 2, 3, 3, 1, 2, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 3
};
@@ -2203,6 +2267,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
case N: \
yyformat = S; \
break
+ default: /* Avoid compiler warnings. */
YYCASE_(0, YY_("syntax error"));
YYCASE_(1, YY_("syntax error, unexpected %s"));
YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -2519,15 +2584,15 @@ yyreduce:
switch (yyn)
{
case 14:
-#line 176 "util/configparser.y" /* yacc.c:1646 */
+#line 182 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("\nP(server:)\n"));
}
-#line 2527 "util/configparser.c" /* yacc.c:1646 */
+#line 2592 "util/configparser.c" /* yacc.c:1648 */
break;
- case 194:
-#line 262 "util/configparser.y" /* yacc.c:1646 */
+ case 206:
+#line 273 "util/configparser.y" /* yacc.c:1648 */
{
struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n"));
@@ -2538,11 +2603,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2542 "util/configparser.c" /* yacc.c:1646 */
+#line 2607 "util/configparser.c" /* yacc.c:1648 */
break;
- case 204:
-#line 279 "util/configparser.y" /* yacc.c:1646 */
+ case 216:
+#line 290 "util/configparser.y" /* yacc.c:1648 */
{
struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n"));
@@ -2553,11 +2618,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2557 "util/configparser.c" /* yacc.c:1646 */
+#line 2622 "util/configparser.c" /* yacc.c:1648 */
break;
- case 213:
-#line 296 "util/configparser.y" /* yacc.c:1646 */
+ case 225:
+#line 307 "util/configparser.y" /* yacc.c:1648 */
{
struct config_view* s;
OUTYY(("\nP(view:)\n"));
@@ -2570,11 +2635,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2574 "util/configparser.c" /* yacc.c:1646 */
+#line 2639 "util/configparser.c" /* yacc.c:1648 */
break;
- case 223:
-#line 315 "util/configparser.y" /* yacc.c:1646 */
+ case 235:
+#line 326 "util/configparser.y" /* yacc.c:1648 */
{
struct config_auth* s;
OUTYY(("\nP(auth_zone:)\n"));
@@ -2589,11 +2654,11 @@ yyreduce:
} else
yyerror("out of memory");
}
-#line 2593 "util/configparser.c" /* yacc.c:1646 */
+#line 2658 "util/configparser.c" /* yacc.c:1648 */
break;
- case 234:
-#line 337 "util/configparser.y" /* yacc.c:1646 */
+ case 246:
+#line 348 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2601,11 +2666,11 @@ yyreduce:
else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2605 "util/configparser.c" /* yacc.c:1646 */
+#line 2670 "util/configparser.c" /* yacc.c:1648 */
break;
- case 235:
-#line 346 "util/configparser.y" /* yacc.c:1646 */
+ case 247:
+#line 357 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2613,11 +2678,11 @@ yyreduce:
else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2617 "util/configparser.c" /* yacc.c:1646 */
+#line 2682 "util/configparser.c" /* yacc.c:1648 */
break;
- case 236:
-#line 355 "util/configparser.y" /* yacc.c:1646 */
+ case 248:
+#line 366 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2627,11 +2692,11 @@ yyreduce:
else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2631 "util/configparser.c" /* yacc.c:1646 */
+#line 2696 "util/configparser.c" /* yacc.c:1648 */
break;
- case 237:
-#line 366 "util/configparser.y" /* yacc.c:1646 */
+ case 249:
+#line 377 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2639,11 +2704,11 @@ yyreduce:
else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2643 "util/configparser.c" /* yacc.c:1646 */
+#line 2708 "util/configparser.c" /* yacc.c:1648 */
break;
- case 238:
-#line 375 "util/configparser.y" /* yacc.c:1646 */
+ case 250:
+#line 386 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2651,11 +2716,11 @@ yyreduce:
else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2655 "util/configparser.c" /* yacc.c:1646 */
+#line 2720 "util/configparser.c" /* yacc.c:1648 */
break;
- case 239:
-#line 384 "util/configparser.y" /* yacc.c:1646 */
+ case 251:
+#line 395 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2663,11 +2728,11 @@ yyreduce:
else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2667 "util/configparser.c" /* yacc.c:1646 */
+#line 2732 "util/configparser.c" /* yacc.c:1648 */
break;
- case 240:
-#line 393 "util/configparser.y" /* yacc.c:1646 */
+ case 252:
+#line 404 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2677,11 +2742,11 @@ yyreduce:
else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2681 "util/configparser.c" /* yacc.c:1646 */
+#line 2746 "util/configparser.c" /* yacc.c:1648 */
break;
- case 241:
-#line 404 "util/configparser.y" /* yacc.c:1646 */
+ case 253:
+#line 415 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2689,11 +2754,11 @@ yyreduce:
else cfg_parser->cfg->port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2693 "util/configparser.c" /* yacc.c:1646 */
+#line 2758 "util/configparser.c" /* yacc.c:1648 */
break;
- case 242:
-#line 413 "util/configparser.y" /* yacc.c:1646 */
+ case 254:
+#line 424 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -2703,11 +2768,11 @@ yyreduce:
OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
#endif
}
-#line 2707 "util/configparser.c" /* yacc.c:1646 */
+#line 2772 "util/configparser.c" /* yacc.c:1648 */
break;
- case 243:
-#line 424 "util/configparser.y" /* yacc.c:1646 */
+ case 255:
+#line 435 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
@@ -2718,11 +2783,11 @@ yyreduce:
OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
#endif
}
-#line 2722 "util/configparser.c" /* yacc.c:1646 */
+#line 2787 "util/configparser.c" /* yacc.c:1648 */
break;
- case 244:
-#line 437 "util/configparser.y" /* yacc.c:1646 */
+ case 256:
+#line 448 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef CLIENT_SUBNET
OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
@@ -2736,11 +2801,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 2740 "util/configparser.c" /* yacc.c:1646 */
+#line 2805 "util/configparser.c" /* yacc.c:1648 */
break;
- case 245:
-#line 452 "util/configparser.y" /* yacc.c:1646 */
+ case 257:
+#line 463 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef CLIENT_SUBNET
OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
@@ -2750,11 +2815,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 2754 "util/configparser.c" /* yacc.c:1646 */
+#line 2819 "util/configparser.c" /* yacc.c:1648 */
break;
- case 246:
-#line 463 "util/configparser.y" /* yacc.c:1646 */
+ case 258:
+#line 474 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -2770,11 +2835,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 2774 "util/configparser.c" /* yacc.c:1646 */
+#line 2839 "util/configparser.c" /* yacc.c:1648 */
break;
- case 247:
-#line 480 "util/configparser.y" /* yacc.c:1646 */
+ case 259:
+#line 491 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef CLIENT_SUBNET
OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -2790,11 +2855,87 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 2794 "util/configparser.c" /* yacc.c:1646 */
+#line 2859 "util/configparser.c" /* yacc.c:1648 */
break;
- case 248:
-#line 497 "util/configparser.y" /* yacc.c:1646 */
+ case 260:
+#line 508 "util/configparser.y" /* yacc.c:1648 */
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("IPv4 subnet length expected");
+ else if (atoi((yyvsp[0].str)) > 32)
+ cfg_parser->cfg->min_client_subnet_ipv4 = 32;
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->min_client_subnet_ipv4 = 0;
+ else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 2879 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 261:
+#line 525 "util/configparser.y" /* yacc.c:1648 */
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("Ipv6 subnet length expected");
+ else if (atoi((yyvsp[0].str)) > 128)
+ cfg_parser->cfg->min_client_subnet_ipv6 = 128;
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->min_client_subnet_ipv6 = 0;
+ else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 2899 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 262:
+#line 542 "util/configparser.y" /* yacc.c:1648 */
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("IPv4 ECS tree size expected");
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0;
+ else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 2917 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 263:
+#line 557 "util/configparser.y" /* yacc.c:1648 */
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ yyerror("IPv6 ECS tree size expected");
+ else if (atoi((yyvsp[0].str)) < 0)
+ cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0;
+ else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str));
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free((yyvsp[0].str));
+ }
+#line 2935 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 264:
+#line 572 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_ifs == 0)
@@ -2806,11 +2947,11 @@ yyreduce:
else
cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
}
-#line 2810 "util/configparser.c" /* yacc.c:1646 */
+#line 2951 "util/configparser.c" /* yacc.c:1648 */
break;
- case 249:
-#line 510 "util/configparser.y" /* yacc.c:1646 */
+ case 265:
+#line 585 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2824,11 +2965,11 @@ yyreduce:
cfg_parser->cfg->out_ifs[
cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
}
-#line 2828 "util/configparser.c" /* yacc.c:1646 */
+#line 2969 "util/configparser.c" /* yacc.c:1648 */
break;
- case 250:
-#line 525 "util/configparser.y" /* yacc.c:1646 */
+ case 266:
+#line 600 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -2836,11 +2977,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2840 "util/configparser.c" /* yacc.c:1646 */
+#line 2981 "util/configparser.c" /* yacc.c:1648 */
break;
- case 251:
-#line 534 "util/configparser.y" /* yacc.c:1646 */
+ case 267:
+#line 609 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 1,
@@ -2848,11 +2989,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 2852 "util/configparser.c" /* yacc.c:1646 */
+#line 2993 "util/configparser.c" /* yacc.c:1648 */
break;
- case 252:
-#line 543 "util/configparser.y" /* yacc.c:1646 */
+ case 268:
+#line 618 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
if(!cfg_mark_ports((yyvsp[0].str), 0,
@@ -2860,11 +3001,11 @@ yyreduce:
yyerror("port number or range (\"low-high\") expected");
free((yyvsp[0].str));
}
-#line 2864 "util/configparser.c" /* yacc.c:1646 */
+#line 3005 "util/configparser.c" /* yacc.c:1648 */
break;
- case 253:
-#line 552 "util/configparser.y" /* yacc.c:1646 */
+ case 269:
+#line 627 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2872,11 +3013,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2876 "util/configparser.c" /* yacc.c:1646 */
+#line 3017 "util/configparser.c" /* yacc.c:1648 */
break;
- case 254:
-#line 561 "util/configparser.y" /* yacc.c:1646 */
+ case 270:
+#line 636 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2884,11 +3025,11 @@ yyreduce:
else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2888 "util/configparser.c" /* yacc.c:1646 */
+#line 3029 "util/configparser.c" /* yacc.c:1648 */
break;
- case 255:
-#line 570 "util/configparser.y" /* yacc.c:1646 */
+ case 271:
+#line 645 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2896,11 +3037,11 @@ yyreduce:
else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2900 "util/configparser.c" /* yacc.c:1646 */
+#line 3041 "util/configparser.c" /* yacc.c:1648 */
break;
- case 256:
-#line 579 "util/configparser.y" /* yacc.c:1646 */
+ case 272:
+#line 654 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2908,11 +3049,11 @@ yyreduce:
else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2912 "util/configparser.c" /* yacc.c:1646 */
+#line 3053 "util/configparser.c" /* yacc.c:1648 */
break;
- case 257:
-#line 588 "util/configparser.y" /* yacc.c:1646 */
+ case 273:
+#line 663 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2920,11 +3061,11 @@ yyreduce:
else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2924 "util/configparser.c" /* yacc.c:1646 */
+#line 3065 "util/configparser.c" /* yacc.c:1648 */
break;
- case 258:
-#line 597 "util/configparser.y" /* yacc.c:1646 */
+ case 274:
+#line 672 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2932,11 +3073,11 @@ yyreduce:
else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2936 "util/configparser.c" /* yacc.c:1646 */
+#line 3077 "util/configparser.c" /* yacc.c:1648 */
break;
- case 259:
-#line 606 "util/configparser.y" /* yacc.c:1646 */
+ case 275:
+#line 681 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2944,11 +3085,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2948 "util/configparser.c" /* yacc.c:1646 */
+#line 3089 "util/configparser.c" /* yacc.c:1648 */
break;
- case 260:
-#line 615 "util/configparser.y" /* yacc.c:1646 */
+ case 276:
+#line 690 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2956,11 +3097,11 @@ yyreduce:
else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 2960 "util/configparser.c" /* yacc.c:1646 */
+#line 3101 "util/configparser.c" /* yacc.c:1648 */
break;
- case 261:
-#line 624 "util/configparser.y" /* yacc.c:1646 */
+ case 277:
+#line 699 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2968,11 +3109,11 @@ yyreduce:
else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2972 "util/configparser.c" /* yacc.c:1646 */
+#line 3113 "util/configparser.c" /* yacc.c:1648 */
break;
- case 262:
-#line 633 "util/configparser.y" /* yacc.c:1646 */
+ case 278:
+#line 708 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2980,11 +3121,11 @@ yyreduce:
else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 2984 "util/configparser.c" /* yacc.c:1646 */
+#line 3125 "util/configparser.c" /* yacc.c:1648 */
break;
- case 263:
-#line 642 "util/configparser.y" /* yacc.c:1646 */
+ case 279:
+#line 717 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2996,11 +3137,11 @@ yyreduce:
else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3000 "util/configparser.c" /* yacc.c:1646 */
+#line 3141 "util/configparser.c" /* yacc.c:1648 */
break;
- case 264:
-#line 655 "util/configparser.y" /* yacc.c:1646 */
+ case 280:
+#line 730 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3008,11 +3149,11 @@ yyreduce:
else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3012 "util/configparser.c" /* yacc.c:1646 */
+#line 3153 "util/configparser.c" /* yacc.c:1648 */
break;
- case 265:
-#line 664 "util/configparser.y" /* yacc.c:1646 */
+ case 281:
+#line 739 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3024,11 +3165,11 @@ yyreduce:
else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3028 "util/configparser.c" /* yacc.c:1646 */
+#line 3169 "util/configparser.c" /* yacc.c:1648 */
break;
- case 266:
-#line 677 "util/configparser.y" /* yacc.c:1646 */
+ case 282:
+#line 752 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3036,11 +3177,11 @@ yyreduce:
else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3040 "util/configparser.c" /* yacc.c:1646 */
+#line 3181 "util/configparser.c" /* yacc.c:1648 */
break;
- case 267:
-#line 686 "util/configparser.y" /* yacc.c:1646 */
+ case 283:
+#line 761 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3048,11 +3189,11 @@ yyreduce:
else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3052 "util/configparser.c" /* yacc.c:1646 */
+#line 3193 "util/configparser.c" /* yacc.c:1648 */
break;
- case 268:
-#line 695 "util/configparser.y" /* yacc.c:1646 */
+ case 284:
+#line 770 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3060,31 +3201,31 @@ yyreduce:
else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3064 "util/configparser.c" /* yacc.c:1646 */
+#line 3205 "util/configparser.c" /* yacc.c:1648 */
break;
- case 269:
-#line 704 "util/configparser.y" /* yacc.c:1646 */
+ case 285:
+#line 779 "util/configparser.y" /* yacc.c:1648 */
{
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 3074 "util/configparser.c" /* yacc.c:1646 */
+#line 3215 "util/configparser.c" /* yacc.c:1648 */
break;
- case 270:
-#line 711 "util/configparser.y" /* yacc.c:1646 */
+ case 286:
+#line 786 "util/configparser.y" /* yacc.c:1648 */
{
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 3084 "util/configparser.c" /* yacc.c:1646 */
+#line 3225 "util/configparser.c" /* yacc.c:1648 */
break;
- case 271:
-#line 718 "util/configparser.y" /* yacc.c:1646 */
+ case 287:
+#line 793 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3092,21 +3233,21 @@ yyreduce:
else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3096 "util/configparser.c" /* yacc.c:1646 */
+#line 3237 "util/configparser.c" /* yacc.c:1648 */
break;
- case 272:
-#line 727 "util/configparser.y" /* yacc.c:1646 */
+ case 288:
+#line 802 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->tls_cert_bundle);
cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
}
-#line 3106 "util/configparser.c" /* yacc.c:1646 */
+#line 3247 "util/configparser.c" /* yacc.c:1648 */
break;
- case 273:
-#line 734 "util/configparser.y" /* yacc.c:1646 */
+ case 289:
+#line 809 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3114,22 +3255,53 @@ yyreduce:
else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3118 "util/configparser.c" /* yacc.c:1646 */
+#line 3259 "util/configparser.c" /* yacc.c:1648 */
break;
- case 274:
-#line 743 "util/configparser.y" /* yacc.c:1646 */
+ case 290:
+#line 818 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 3129 "util/configparser.c" /* yacc.c:1646 */
+#line 3270 "util/configparser.c" /* yacc.c:1648 */
break;
- case 275:
-#line 751 "util/configparser.y" /* yacc.c:1646 */
+ case 291:
+#line 826 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->tls_ciphers);
+ cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
+ }
+#line 3280 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 292:
+#line 833 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
+ free(cfg_parser->cfg->tls_ciphersuites);
+ cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
+ }
+#line 3290 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 293:
+#line 840 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
+ if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
+ (yyvsp[0].str)))
+ yyerror("out of memory");
+ }
+#line 3301 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 294:
+#line 848 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3137,11 +3309,11 @@ yyreduce:
else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3141 "util/configparser.c" /* yacc.c:1646 */
+#line 3313 "util/configparser.c" /* yacc.c:1648 */
break;
- case 276:
-#line 760 "util/configparser.y" /* yacc.c:1646 */
+ case 295:
+#line 857 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3149,11 +3321,11 @@ yyreduce:
else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3153 "util/configparser.c" /* yacc.c:1646 */
+#line 3325 "util/configparser.c" /* yacc.c:1648 */
break;
- case 277:
-#line 769 "util/configparser.y" /* yacc.c:1646 */
+ case 296:
+#line 866 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3166,11 +3338,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 3170 "util/configparser.c" /* yacc.c:1646 */
+#line 3342 "util/configparser.c" /* yacc.c:1648 */
break;
- case 278:
-#line 783 "util/configparser.y" /* yacc.c:1646 */
+ case 297:
+#line 880 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3178,11 +3350,11 @@ yyreduce:
else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3182 "util/configparser.c" /* yacc.c:1646 */
+#line 3354 "util/configparser.c" /* yacc.c:1648 */
break;
- case 279:
-#line 792 "util/configparser.y" /* yacc.c:1646 */
+ case 298:
+#line 889 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3190,11 +3362,11 @@ yyreduce:
else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3194 "util/configparser.c" /* yacc.c:1646 */
+#line 3366 "util/configparser.c" /* yacc.c:1648 */
break;
- case 280:
-#line 801 "util/configparser.y" /* yacc.c:1646 */
+ case 299:
+#line 898 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3202,11 +3374,23 @@ yyreduce:
else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3206 "util/configparser.c" /* yacc.c:1646 */
+#line 3378 "util/configparser.c" /* yacc.c:1648 */
break;
- case 281:
-#line 810 "util/configparser.y" /* yacc.c:1646 */
+ case 300:
+#line 907 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_log_tag_queryreply:%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->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 3390 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 301:
+#line 916 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3214,11 +3398,11 @@ yyreduce:
else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3218 "util/configparser.c" /* yacc.c:1646 */
+#line 3402 "util/configparser.c" /* yacc.c:1648 */
break;
- case 282:
-#line 819 "util/configparser.y" /* yacc.c:1646 */
+ case 302:
+#line 925 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3226,31 +3410,31 @@ yyreduce:
else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3230 "util/configparser.c" /* yacc.c:1646 */
+#line 3414 "util/configparser.c" /* yacc.c:1648 */
break;
- case 283:
-#line 828 "util/configparser.y" /* yacc.c:1646 */
+ case 303:
+#line 934 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->chrootdir);
cfg_parser->cfg->chrootdir = (yyvsp[0].str);
}
-#line 3240 "util/configparser.c" /* yacc.c:1646 */
+#line 3424 "util/configparser.c" /* yacc.c:1648 */
break;
- case 284:
-#line 835 "util/configparser.y" /* yacc.c:1646 */
+ case 304:
+#line 941 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->username);
cfg_parser->cfg->username = (yyvsp[0].str);
}
-#line 3250 "util/configparser.c" /* yacc.c:1646 */
+#line 3434 "util/configparser.c" /* yacc.c:1648 */
break;
- case 285:
-#line 842 "util/configparser.y" /* yacc.c:1646 */
+ case 305:
+#line 948 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->directory);
@@ -3275,105 +3459,105 @@ yyreduce:
}
}
}
-#line 3279 "util/configparser.c" /* yacc.c:1646 */
+#line 3463 "util/configparser.c" /* yacc.c:1648 */
break;
- case 286:
-#line 868 "util/configparser.y" /* yacc.c:1646 */
+ case 306:
+#line 974 "util/configparser.y" /* yacc.c:1648 */
{
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 3290 "util/configparser.c" /* yacc.c:1646 */
+#line 3474 "util/configparser.c" /* yacc.c:1648 */
break;
- case 287:
-#line 876 "util/configparser.y" /* yacc.c:1646 */
+ case 307:
+#line 982 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->pidfile);
cfg_parser->cfg->pidfile = (yyvsp[0].str);
}
-#line 3300 "util/configparser.c" /* yacc.c:1646 */
+#line 3484 "util/configparser.c" /* yacc.c:1648 */
break;
- case 288:
-#line 883 "util/configparser.y" /* yacc.c:1646 */
+ case 308:
+#line 989 "util/configparser.y" /* yacc.c:1648 */
{
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 3310 "util/configparser.c" /* yacc.c:1646 */
+#line 3494 "util/configparser.c" /* yacc.c:1648 */
break;
- case 289:
-#line 890 "util/configparser.y" /* yacc.c:1646 */
+ case 309:
+#line 996 "util/configparser.y" /* yacc.c:1648 */
{
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 3320 "util/configparser.c" /* yacc.c:1646 */
+#line 3504 "util/configparser.c" /* yacc.c:1648 */
break;
- case 290:
-#line 897 "util/configparser.y" /* yacc.c:1646 */
+ case 310:
+#line 1003 "util/configparser.y" /* yacc.c:1648 */
{
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 3330 "util/configparser.c" /* yacc.c:1646 */
+#line 3514 "util/configparser.c" /* yacc.c:1648 */
break;
- case 291:
-#line 904 "util/configparser.y" /* yacc.c:1646 */
+ case 311:
+#line 1010 "util/configparser.y" /* yacc.c:1648 */
{
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 3341 "util/configparser.c" /* yacc.c:1646 */
+#line 3525 "util/configparser.c" /* yacc.c:1648 */
break;
- case 292:
-#line 912 "util/configparser.y" /* yacc.c:1646 */
+ case 312:
+#line 1018 "util/configparser.y" /* yacc.c:1648 */
{
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 3352 "util/configparser.c" /* yacc.c:1646 */
+#line 3536 "util/configparser.c" /* yacc.c:1648 */
break;
- case 293:
-#line 920 "util/configparser.y" /* yacc.c:1646 */
+ case 313:
+#line 1026 "util/configparser.y" /* yacc.c:1648 */
{
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 3363 "util/configparser.c" /* yacc.c:1646 */
+#line 3547 "util/configparser.c" /* yacc.c:1648 */
break;
- case 294:
-#line 928 "util/configparser.y" /* yacc.c:1646 */
+ case 314:
+#line 1034 "util/configparser.y" /* yacc.c:1648 */
{
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 3373 "util/configparser.c" /* yacc.c:1646 */
+#line 3557 "util/configparser.c" /* yacc.c:1648 */
break;
- case 295:
-#line 935 "util/configparser.y" /* yacc.c:1646 */
+ case 315:
+#line 1041 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3383,11 +3567,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3387 "util/configparser.c" /* yacc.c:1646 */
+#line 3571 "util/configparser.c" /* yacc.c:1648 */
break;
- case 296:
-#line 946 "util/configparser.y" /* yacc.c:1646 */
+ case 316:
+#line 1052 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3397,21 +3581,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3401 "util/configparser.c" /* yacc.c:1646 */
+#line 3585 "util/configparser.c" /* yacc.c:1648 */
break;
- case 297:
-#line 957 "util/configparser.y" /* yacc.c:1646 */
+ case 317:
+#line 1063 "util/configparser.y" /* yacc.c:1648 */
{
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 3411 "util/configparser.c" /* yacc.c:1646 */
+#line 3595 "util/configparser.c" /* yacc.c:1648 */
break;
- case 298:
-#line 964 "util/configparser.y" /* yacc.c:1646 */
+ case 318:
+#line 1070 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3419,11 +3603,11 @@ yyreduce:
else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3423 "util/configparser.c" /* yacc.c:1646 */
+#line 3607 "util/configparser.c" /* yacc.c:1648 */
break;
- case 299:
-#line 973 "util/configparser.y" /* yacc.c:1646 */
+ case 319:
+#line 1079 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3431,11 +3615,11 @@ yyreduce:
else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3435 "util/configparser.c" /* yacc.c:1646 */
+#line 3619 "util/configparser.c" /* yacc.c:1648 */
break;
- case 300:
-#line 982 "util/configparser.y" /* yacc.c:1646 */
+ case 320:
+#line 1088 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3443,53 +3627,53 @@ yyreduce:
else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3447 "util/configparser.c" /* yacc.c:1646 */
+#line 3631 "util/configparser.c" /* yacc.c:1648 */
break;
- case 301:
-#line 991 "util/configparser.y" /* yacc.c:1646 */
+ case 321:
+#line 1097 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->identity);
cfg_parser->cfg->identity = (yyvsp[0].str);
}
-#line 3457 "util/configparser.c" /* yacc.c:1646 */
+#line 3641 "util/configparser.c" /* yacc.c:1648 */
break;
- case 302:
-#line 998 "util/configparser.y" /* yacc.c:1646 */
+ case 322:
+#line 1104 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->version);
cfg_parser->cfg->version = (yyvsp[0].str);
}
-#line 3467 "util/configparser.c" /* yacc.c:1646 */
+#line 3651 "util/configparser.c" /* yacc.c:1648 */
break;
- case 303:
-#line 1005 "util/configparser.y" /* yacc.c:1646 */
+ case 323:
+#line 1111 "util/configparser.y" /* yacc.c:1648 */
{
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 3478 "util/configparser.c" /* yacc.c:1646 */
+#line 3662 "util/configparser.c" /* yacc.c:1648 */
break;
- case 304:
-#line 1013 "util/configparser.y" /* yacc.c:1646 */
+ case 324:
+#line 1119 "util/configparser.y" /* yacc.c:1648 */
{
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 3489 "util/configparser.c" /* yacc.c:1646 */
+#line 3673 "util/configparser.c" /* yacc.c:1648 */
break;
- case 305:
-#line 1021 "util/configparser.y" /* yacc.c:1646 */
+ case 325:
+#line 1127 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3498,11 +3682,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3502 "util/configparser.c" /* yacc.c:1646 */
+#line 3686 "util/configparser.c" /* yacc.c:1648 */
break;
- case 306:
-#line 1031 "util/configparser.y" /* yacc.c:1646 */
+ case 326:
+#line 1137 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3511,11 +3695,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3515 "util/configparser.c" /* yacc.c:1646 */
+#line 3699 "util/configparser.c" /* yacc.c:1648 */
break;
- case 307:
-#line 1041 "util/configparser.y" /* yacc.c:1646 */
+ case 327:
+#line 1147 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3524,11 +3708,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3528 "util/configparser.c" /* yacc.c:1646 */
+#line 3712 "util/configparser.c" /* yacc.c:1648 */
break;
- case 308:
-#line 1051 "util/configparser.y" /* yacc.c:1646 */
+ case 328:
+#line 1157 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
+ if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
+ yyerror("memory size expected");
+ free((yyvsp[0].str));
+ }
+#line 3723 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 329:
+#line 1165 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3540,11 +3735,11 @@ yyreduce:
else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3544 "util/configparser.c" /* yacc.c:1646 */
+#line 3739 "util/configparser.c" /* yacc.c:1648 */
break;
- case 309:
-#line 1064 "util/configparser.y" /* yacc.c:1646 */
+ case 330:
+#line 1178 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3554,22 +3749,22 @@ yyreduce:
else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3558 "util/configparser.c" /* yacc.c:1646 */
+#line 3753 "util/configparser.c" /* yacc.c:1648 */
break;
- case 310:
-#line 1075 "util/configparser.y" /* yacc.c:1646 */
+ case 331:
+#line 1189 "util/configparser.y" /* yacc.c:1648 */
{
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 3569 "util/configparser.c" /* yacc.c:1646 */
+#line 3764 "util/configparser.c" /* yacc.c:1648 */
break;
- case 311:
-#line 1083 "util/configparser.y" /* yacc.c:1646 */
+ case 332:
+#line 1197 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3581,11 +3776,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3585 "util/configparser.c" /* yacc.c:1646 */
+#line 3780 "util/configparser.c" /* yacc.c:1648 */
break;
- case 312:
-#line 1096 "util/configparser.y" /* yacc.c:1646 */
+ case 333:
+#line 1210 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3593,11 +3788,11 @@ yyreduce:
else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3597 "util/configparser.c" /* yacc.c:1646 */
+#line 3792 "util/configparser.c" /* yacc.c:1648 */
break;
- case 313:
-#line 1105 "util/configparser.y" /* yacc.c:1646 */
+ case 334:
+#line 1219 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3605,11 +3800,11 @@ yyreduce:
else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3609 "util/configparser.c" /* yacc.c:1646 */
+#line 3804 "util/configparser.c" /* yacc.c:1648 */
break;
- case 314:
-#line 1114 "util/configparser.y" /* yacc.c:1646 */
+ case 335:
+#line 1228 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3617,11 +3812,11 @@ yyreduce:
else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3621 "util/configparser.c" /* yacc.c:1646 */
+#line 3816 "util/configparser.c" /* yacc.c:1648 */
break;
- case 315:
-#line 1123 "util/configparser.y" /* yacc.c:1646 */
+ case 336:
+#line 1237 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3630,11 +3825,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3634 "util/configparser.c" /* yacc.c:1646 */
+#line 3829 "util/configparser.c" /* yacc.c:1648 */
break;
- case 316:
-#line 1133 "util/configparser.y" /* yacc.c:1646 */
+ case 337:
+#line 1247 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3643,22 +3838,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3647 "util/configparser.c" /* yacc.c:1646 */
+#line 3842 "util/configparser.c" /* yacc.c:1648 */
break;
- case 317:
-#line 1143 "util/configparser.y" /* yacc.c:1646 */
+ case 338:
+#line 1257 "util/configparser.y" /* yacc.c:1648 */
{
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 3658 "util/configparser.c" /* yacc.c:1646 */
+#line 3853 "util/configparser.c" /* yacc.c:1648 */
break;
- case 318:
-#line 1151 "util/configparser.y" /* yacc.c:1646 */
+ case 339:
+#line 1265 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3670,11 +3865,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3674 "util/configparser.c" /* yacc.c:1646 */
+#line 3869 "util/configparser.c" /* yacc.c:1648 */
break;
- case 319:
-#line 1164 "util/configparser.y" /* yacc.c:1646 */
+ case 340:
+#line 1278 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3682,22 +3877,22 @@ yyreduce:
else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3686 "util/configparser.c" /* yacc.c:1646 */
+#line 3881 "util/configparser.c" /* yacc.c:1648 */
break;
- case 320:
-#line 1173 "util/configparser.y" /* yacc.c:1646 */
+ case 341:
+#line 1287 "util/configparser.y" /* yacc.c:1648 */
{
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 3697 "util/configparser.c" /* yacc.c:1646 */
+#line 3892 "util/configparser.c" /* yacc.c:1648 */
break;
- case 321:
-#line 1181 "util/configparser.y" /* yacc.c:1646 */
+ case 342:
+#line 1295 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3705,22 +3900,22 @@ yyreduce:
else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3709 "util/configparser.c" /* yacc.c:1646 */
+#line 3904 "util/configparser.c" /* yacc.c:1648 */
break;
- case 322:
-#line 1190 "util/configparser.y" /* yacc.c:1646 */
+ case 343:
+#line 1304 "util/configparser.y" /* yacc.c:1648 */
{
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 3720 "util/configparser.c" /* yacc.c:1646 */
+#line 3915 "util/configparser.c" /* yacc.c:1648 */
break;
- case 323:
-#line 1198 "util/configparser.y" /* yacc.c:1646 */
+ case 344:
+#line 1312 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -3732,11 +3927,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 3736 "util/configparser.c" /* yacc.c:1646 */
+#line 3931 "util/configparser.c" /* yacc.c:1648 */
break;
- case 324:
-#line 1211 "util/configparser.y" /* yacc.c:1646 */
+ case 345:
+#line 1325 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3744,21 +3939,21 @@ yyreduce:
else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3748 "util/configparser.c" /* yacc.c:1646 */
+#line 3943 "util/configparser.c" /* yacc.c:1648 */
break;
- case 325:
-#line 1220 "util/configparser.y" /* yacc.c:1646 */
+ case 346:
+#line 1334 "util/configparser.y" /* yacc.c:1648 */
{
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 3758 "util/configparser.c" /* yacc.c:1646 */
+#line 3953 "util/configparser.c" /* yacc.c:1648 */
break;
- case 326:
-#line 1227 "util/configparser.y" /* yacc.c:1646 */
+ case 347:
+#line 1341 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3767,11 +3962,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3771 "util/configparser.c" /* yacc.c:1646 */
+#line 3966 "util/configparser.c" /* yacc.c:1648 */
break;
- case 327:
-#line 1237 "util/configparser.y" /* yacc.c:1646 */
+ case 348:
+#line 1351 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3780,11 +3975,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3784 "util/configparser.c" /* yacc.c:1646 */
+#line 3979 "util/configparser.c" /* yacc.c:1648 */
break;
- case 328:
-#line 1247 "util/configparser.y" /* yacc.c:1646 */
+ case 349:
+#line 1361 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3793,11 +3988,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3797 "util/configparser.c" /* yacc.c:1646 */
+#line 3992 "util/configparser.c" /* yacc.c:1648 */
break;
- case 329:
-#line 1257 "util/configparser.y" /* yacc.c:1646 */
+ case 350:
+#line 1371 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3806,11 +4001,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3810 "util/configparser.c" /* yacc.c:1646 */
+#line 4005 "util/configparser.c" /* yacc.c:1648 */
break;
- case 330:
-#line 1267 "util/configparser.y" /* yacc.c:1646 */
+ case 351:
+#line 1381 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3819,11 +4014,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3823 "util/configparser.c" /* yacc.c:1646 */
+#line 4018 "util/configparser.c" /* yacc.c:1648 */
break;
- case 331:
-#line 1277 "util/configparser.y" /* yacc.c:1646 */
+ case 352:
+#line 1391 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3832,11 +4027,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3836 "util/configparser.c" /* yacc.c:1646 */
+#line 4031 "util/configparser.c" /* yacc.c:1648 */
break;
- case 332:
-#line 1287 "util/configparser.y" /* yacc.c:1646 */
+ case 353:
+#line 1401 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3845,11 +4040,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3849 "util/configparser.c" /* yacc.c:1646 */
+#line 4044 "util/configparser.c" /* yacc.c:1648 */
break;
- case 333:
-#line 1297 "util/configparser.y" /* yacc.c:1646 */
+ case 354:
+#line 1411 "util/configparser.y" /* yacc.c:1648 */
{
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)
@@ -3858,41 +4053,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3862 "util/configparser.c" /* yacc.c:1646 */
+#line 4057 "util/configparser.c" /* yacc.c:1648 */
break;
- case 334:
-#line 1307 "util/configparser.y" /* yacc.c:1646 */
+ case 355:
+#line 1421 "util/configparser.y" /* yacc.c:1648 */
{
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 3872 "util/configparser.c" /* yacc.c:1646 */
+#line 4067 "util/configparser.c" /* yacc.c:1648 */
break;
- case 335:
-#line 1314 "util/configparser.y" /* yacc.c:1646 */
+ case 356:
+#line 1428 "util/configparser.y" /* yacc.c:1648 */
{
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 3882 "util/configparser.c" /* yacc.c:1646 */
+#line 4077 "util/configparser.c" /* yacc.c:1648 */
break;
- case 336:
-#line 1321 "util/configparser.y" /* yacc.c:1646 */
+ case 357:
+#line 1435 "util/configparser.y" /* yacc.c:1648 */
{
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 3892 "util/configparser.c" /* yacc.c:1646 */
+#line 4087 "util/configparser.c" /* yacc.c:1648 */
break;
- case 337:
-#line 1328 "util/configparser.y" /* yacc.c:1646 */
+ case 358:
+#line 1442 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3900,11 +4095,11 @@ yyreduce:
else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3904 "util/configparser.c" /* yacc.c:1646 */
+#line 4099 "util/configparser.c" /* yacc.c:1648 */
break;
- case 338:
-#line 1337 "util/configparser.y" /* yacc.c:1646 */
+ case 359:
+#line 1451 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3912,11 +4107,23 @@ yyreduce:
else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3916 "util/configparser.c" /* yacc.c:1646 */
+#line 4111 "util/configparser.c" /* yacc.c:1648 */
break;
- case 339:
-#line 1346 "util/configparser.y" /* yacc.c:1646 */
+ case 360:
+#line 1460 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_deny_any:%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->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
+ }
+#line 4123 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 361:
+#line 1469 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3924,21 +4131,21 @@ yyreduce:
else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 3928 "util/configparser.c" /* yacc.c:1646 */
+#line 4135 "util/configparser.c" /* yacc.c:1648 */
break;
- case 340:
-#line 1355 "util/configparser.y" /* yacc.c:1646 */
+ case 362:
+#line 1478 "util/configparser.y" /* yacc.c:1648 */
{
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 3938 "util/configparser.c" /* yacc.c:1646 */
+#line 4145 "util/configparser.c" /* yacc.c:1648 */
break;
- case 341:
-#line 1362 "util/configparser.y" /* yacc.c:1646 */
+ case 363:
+#line 1485 "util/configparser.y" /* yacc.c:1648 */
{
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)
@@ -3947,11 +4154,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 3951 "util/configparser.c" /* yacc.c:1646 */
+#line 4158 "util/configparser.c" /* yacc.c:1648 */
break;
- case 342:
-#line 1372 "util/configparser.y" /* yacc.c:1646 */
+ case 364:
+#line 1495 "util/configparser.y" /* yacc.c:1648 */
{
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 &&
@@ -3963,26 +4170,28 @@ yyreduce:
yyerror("expected deny, refuse, deny_non_local, "
"refuse_non_local, allow, allow_setrd or "
"allow_snoop in access control action");
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding acl");
}
}
-#line 3972 "util/configparser.c" /* yacc.c:1646 */
+#line 4181 "util/configparser.c" /* yacc.c:1648 */
break;
- case 343:
-#line 1390 "util/configparser.y" /* yacc.c:1646 */
+ case 365:
+#line 1515 "util/configparser.y" /* yacc.c:1648 */
{
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 3982 "util/configparser.c" /* yacc.c:1646 */
+#line 4191 "util/configparser.c" /* yacc.c:1648 */
break;
- case 344:
-#line 1397 "util/configparser.y" /* yacc.c:1646 */
+ case 366:
+#line 1522 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3999,11 +4208,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4003 "util/configparser.c" /* yacc.c:1646 */
+#line 4212 "util/configparser.c" /* yacc.c:1648 */
break;
- case 345:
-#line 1415 "util/configparser.y" /* yacc.c:1646 */
+ case 367:
+#line 1540 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -4015,11 +4224,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4019 "util/configparser.c" /* yacc.c:1646 */
+#line 4228 "util/configparser.c" /* yacc.c:1648 */
break;
- case 346:
-#line 1428 "util/configparser.y" /* yacc.c:1646 */
+ case 368:
+#line 1553 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -4031,11 +4240,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4035 "util/configparser.c" /* yacc.c:1646 */
+#line 4244 "util/configparser.c" /* yacc.c:1648 */
break;
- case 347:
-#line 1441 "util/configparser.y" /* yacc.c:1646 */
+ case 369:
+#line 1566 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4043,11 +4252,11 @@ yyreduce:
else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4047 "util/configparser.c" /* yacc.c:1646 */
+#line 4256 "util/configparser.c" /* yacc.c:1648 */
break;
- case 348:
-#line 1450 "util/configparser.y" /* yacc.c:1646 */
+ case 370:
+#line 1575 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4055,11 +4264,11 @@ yyreduce:
else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4059 "util/configparser.c" /* yacc.c:1646 */
+#line 4268 "util/configparser.c" /* yacc.c:1648 */
break;
- case 349:
-#line 1459 "util/configparser.y" /* yacc.c:1646 */
+ case 371:
+#line 1584 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4067,11 +4276,11 @@ yyreduce:
else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4071 "util/configparser.c" /* yacc.c:1646 */
+#line 4280 "util/configparser.c" /* yacc.c:1648 */
break;
- case 350:
-#line 1468 "util/configparser.y" /* yacc.c:1646 */
+ case 372:
+#line 1593 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4079,11 +4288,11 @@ yyreduce:
else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4083 "util/configparser.c" /* yacc.c:1646 */
+#line 4292 "util/configparser.c" /* yacc.c:1648 */
break;
- case 351:
-#line 1477 "util/configparser.y" /* yacc.c:1646 */
+ case 373:
+#line 1602 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4092,11 +4301,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4096 "util/configparser.c" /* yacc.c:1646 */
+#line 4305 "util/configparser.c" /* yacc.c:1648 */
break;
- case 352:
-#line 1487 "util/configparser.y" /* yacc.c:1646 */
+ case 374:
+#line 1612 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4105,11 +4314,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4109 "util/configparser.c" /* yacc.c:1646 */
+#line 4318 "util/configparser.c" /* yacc.c:1648 */
break;
- case 353:
-#line 1497 "util/configparser.y" /* yacc.c:1646 */
+ case 375:
+#line 1622 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4119,11 +4328,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4123 "util/configparser.c" /* yacc.c:1646 */
+#line 4332 "util/configparser.c" /* yacc.c:1648 */
break;
- case 354:
-#line 1508 "util/configparser.y" /* yacc.c:1646 */
+ case 376:
+#line 1633 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4131,11 +4340,11 @@ yyreduce:
else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4135 "util/configparser.c" /* yacc.c:1646 */
+#line 4344 "util/configparser.c" /* yacc.c:1648 */
break;
- case 355:
-#line 1517 "util/configparser.y" /* yacc.c:1646 */
+ case 377:
+#line 1642 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4143,11 +4352,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4147 "util/configparser.c" /* yacc.c:1646 */
+#line 4356 "util/configparser.c" /* yacc.c:1648 */
break;
- case 356:
-#line 1526 "util/configparser.y" /* yacc.c:1646 */
+ case 378:
+#line 1651 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4155,11 +4364,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4159 "util/configparser.c" /* yacc.c:1646 */
+#line 4368 "util/configparser.c" /* yacc.c:1648 */
break;
- case 357:
-#line 1535 "util/configparser.y" /* yacc.c:1646 */
+ case 379:
+#line 1660 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4167,11 +4376,11 @@ yyreduce:
else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4171 "util/configparser.c" /* yacc.c:1646 */
+#line 4380 "util/configparser.c" /* yacc.c:1648 */
break;
- case 358:
-#line 1544 "util/configparser.y" /* yacc.c:1646 */
+ case 380:
+#line 1669 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4183,11 +4392,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 4187 "util/configparser.c" /* yacc.c:1646 */
+#line 4396 "util/configparser.c" /* yacc.c:1648 */
break;
- case 359:
-#line 1557 "util/configparser.y" /* yacc.c:1646 */
+ case 381:
+#line 1682 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4199,11 +4408,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 4203 "util/configparser.c" /* yacc.c:1646 */
+#line 4412 "util/configparser.c" /* yacc.c:1648 */
break;
- case 360:
-#line 1570 "util/configparser.y" /* yacc.c:1646 */
+ case 382:
+#line 1695 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4211,21 +4420,21 @@ yyreduce:
else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4215 "util/configparser.c" /* yacc.c:1646 */
+#line 4424 "util/configparser.c" /* yacc.c:1648 */
break;
- case 361:
-#line 1579 "util/configparser.y" /* yacc.c:1646 */
+ case 383:
+#line 1704 "util/configparser.y" /* yacc.c:1648 */
{
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 4225 "util/configparser.c" /* yacc.c:1646 */
+#line 4434 "util/configparser.c" /* yacc.c:1648 */
break;
- case 362:
-#line 1586 "util/configparser.y" /* yacc.c:1646 */
+ case 384:
+#line 1711 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4233,11 +4442,11 @@ yyreduce:
else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4237 "util/configparser.c" /* yacc.c:1646 */
+#line 4446 "util/configparser.c" /* yacc.c:1648 */
break;
- case 363:
-#line 1595 "util/configparser.y" /* yacc.c:1646 */
+ case 385:
+#line 1720 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4245,11 +4454,11 @@ yyreduce:
else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4249 "util/configparser.c" /* yacc.c:1646 */
+#line 4458 "util/configparser.c" /* yacc.c:1648 */
break;
- case 364:
-#line 1604 "util/configparser.y" /* yacc.c:1646 */
+ case 386:
+#line 1729 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4257,11 +4466,11 @@ yyreduce:
else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4261 "util/configparser.c" /* yacc.c:1646 */
+#line 4470 "util/configparser.c" /* yacc.c:1648 */
break;
- case 365:
-#line 1613 "util/configparser.y" /* yacc.c:1646 */
+ case 387:
+#line 1738 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4270,22 +4479,22 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4274 "util/configparser.c" /* yacc.c:1646 */
+#line 4483 "util/configparser.c" /* yacc.c:1648 */
break;
- case 366:
-#line 1622 "util/configparser.y" /* yacc.c:1646 */
+ case 388:
+#line 1747 "util/configparser.y" /* yacc.c:1648 */
{
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 4285 "util/configparser.c" /* yacc.c:1646 */
+#line 4494 "util/configparser.c" /* yacc.c:1648 */
break;
- case 367:
-#line 1630 "util/configparser.y" /* yacc.c:1646 */
+ case 389:
+#line 1755 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4297,22 +4506,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4301 "util/configparser.c" /* yacc.c:1646 */
+#line 4510 "util/configparser.c" /* yacc.c:1648 */
break;
- case 368:
-#line 1643 "util/configparser.y" /* yacc.c:1646 */
+ case 390:
+#line 1768 "util/configparser.y" /* yacc.c:1648 */
{
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 4312 "util/configparser.c" /* yacc.c:1646 */
+#line 4521 "util/configparser.c" /* yacc.c:1648 */
break;
- case 369:
-#line 1651 "util/configparser.y" /* yacc.c:1646 */
+ case 391:
+#line 1776 "util/configparser.y" /* yacc.c:1648 */
{
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 &&
@@ -4323,13 +4532,15 @@ yyreduce:
&& strcmp((yyvsp[0].str), "always_refuse")!=0
&& strcmp((yyvsp[0].str), "always_nxdomain")!=0
&& strcmp((yyvsp[0].str), "noview")!=0
- && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0)
+ && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) {
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
"always_transparent, always_refuse, "
"always_nxdomain, noview or nodefault");
- else if(strcmp((yyvsp[0].str), "nodefault")==0) {
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_nodefault, (yyvsp[-1].str)))
fatal_exit("out of memory adding local-zone");
@@ -4340,21 +4551,21 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 4344 "util/configparser.c" /* yacc.c:1646 */
+#line 4555 "util/configparser.c" /* yacc.c:1648 */
break;
- case 370:
-#line 1680 "util/configparser.y" /* yacc.c:1646 */
+ case 392:
+#line 1807 "util/configparser.y" /* yacc.c:1648 */
{
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 4354 "util/configparser.c" /* yacc.c:1646 */
+#line 4565 "util/configparser.c" /* yacc.c:1648 */
break;
- case 371:
-#line 1687 "util/configparser.y" /* yacc.c:1646 */
+ case 393:
+#line 1814 "util/configparser.y" /* yacc.c:1648 */
{
char* ptr;
OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -4368,11 +4579,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 4372 "util/configparser.c" /* yacc.c:1646 */
+#line 4583 "util/configparser.c" /* yacc.c:1648 */
break;
- case 372:
-#line 1702 "util/configparser.y" /* yacc.c:1646 */
+ case 394:
+#line 1829 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4381,11 +4592,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4385 "util/configparser.c" /* yacc.c:1646 */
+#line 4596 "util/configparser.c" /* yacc.c:1648 */
break;
- case 373:
-#line 1712 "util/configparser.y" /* yacc.c:1646 */
+ case 395:
+#line 1839 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4394,31 +4605,41 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4398 "util/configparser.c" /* yacc.c:1646 */
+#line 4609 "util/configparser.c" /* yacc.c:1648 */
break;
- case 374:
-#line 1722 "util/configparser.y" /* yacc.c:1646 */
+ case 396:
+#line 1849 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
+ cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
+ free((yyvsp[0].str));
+ }
+#line 4619 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 397:
+#line 1856 "util/configparser.y" /* yacc.c:1648 */
{
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 4408 "util/configparser.c" /* yacc.c:1646 */
+#line 4629 "util/configparser.c" /* yacc.c:1648 */
break;
- case 375:
-#line 1729 "util/configparser.y" /* yacc.c:1646 */
+ case 398:
+#line 1863 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dns64_prefix);
cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
}
-#line 4418 "util/configparser.c" /* yacc.c:1646 */
+#line 4639 "util/configparser.c" /* yacc.c:1648 */
break;
- case 376:
-#line 1736 "util/configparser.y" /* yacc.c:1646 */
+ case 399:
+#line 1870 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4426,22 +4647,22 @@ yyreduce:
else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4430 "util/configparser.c" /* yacc.c:1646 */
+#line 4651 "util/configparser.c" /* yacc.c:1648 */
break;
- case 377:
-#line 1745 "util/configparser.y" /* yacc.c:1646 */
+ case 400:
+#line 1879 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
(yyvsp[0].str)))
fatal_exit("out of memory adding dns64-ignore-aaaa");
}
-#line 4441 "util/configparser.c" /* yacc.c:1646 */
+#line 4662 "util/configparser.c" /* yacc.c:1648 */
break;
- case 378:
-#line 1753 "util/configparser.y" /* yacc.c:1646 */
+ case 401:
+#line 1887 "util/configparser.y" /* yacc.c:1648 */
{
char* p, *s = (yyvsp[0].str);
OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -4454,19 +4675,21 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4458 "util/configparser.c" /* yacc.c:1646 */
+#line 4679 "util/configparser.c" /* yacc.c:1648 */
break;
- case 379:
-#line 1767 "util/configparser.y" /* yacc.c:1646 */
+ case 402:
+#line 1901 "util/configparser.y" /* yacc.c:1648 */
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
&len);
free((yyvsp[0].str));
OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
- if(!bitlist)
+ if(!bitlist) {
yyerror("could not parse tags, (define-tag them first)");
+ free((yyvsp[-1].str));
+ }
if(bitlist) {
if(!cfg_strbytelist_insert(
&cfg_parser->cfg->local_zone_tags,
@@ -4476,19 +4699,21 @@ yyreduce:
}
}
}
-#line 4480 "util/configparser.c" /* yacc.c:1646 */
+#line 4703 "util/configparser.c" /* yacc.c:1648 */
break;
- case 380:
-#line 1786 "util/configparser.y" /* yacc.c:1646 */
+ case 403:
+#line 1922 "util/configparser.y" /* yacc.c:1648 */
{
size_t len = 0;
uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
&len);
free((yyvsp[0].str));
OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str)));
- if(!bitlist)
+ if(!bitlist) {
yyerror("could not parse tags, (define-tag them first)");
+ free((yyvsp[-1].str));
+ }
if(bitlist) {
if(!cfg_strbytelist_insert(
&cfg_parser->cfg->acl_tags,
@@ -4498,11 +4723,11 @@ yyreduce:
}
}
}
-#line 4502 "util/configparser.c" /* yacc.c:1646 */
+#line 4727 "util/configparser.c" /* yacc.c:1648 */
break;
- case 381:
-#line 1805 "util/configparser.y" /* yacc.c:1646 */
+ case 404:
+#line 1943 "util/configparser.y" /* yacc.c:1648 */
{
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,
@@ -4513,11 +4738,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 4517 "util/configparser.c" /* yacc.c:1646 */
+#line 4742 "util/configparser.c" /* yacc.c:1648 */
break;
- case 382:
-#line 1817 "util/configparser.y" /* yacc.c:1646 */
+ case 405:
+#line 1955 "util/configparser.y" /* yacc.c:1648 */
{
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,
@@ -4528,11 +4753,11 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 4532 "util/configparser.c" /* yacc.c:1646 */
+#line 4757 "util/configparser.c" /* yacc.c:1648 */
break;
- case 383:
-#line 1829 "util/configparser.y" /* yacc.c:1646 */
+ case 406:
+#line 1967 "util/configparser.y" /* yacc.c:1648 */
{
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,
@@ -4543,33 +4768,33 @@ yyreduce:
free((yyvsp[0].str));
}
}
-#line 4547 "util/configparser.c" /* yacc.c:1646 */
+#line 4772 "util/configparser.c" /* yacc.c:1648 */
break;
- case 384:
-#line 1841 "util/configparser.y" /* yacc.c:1646 */
+ case 407:
+#line 1979 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
(yyvsp[-1].str), (yyvsp[0].str))) {
yyerror("out of memory");
- free((yyvsp[-1].str));
- free((yyvsp[0].str));
}
}
-#line 4561 "util/configparser.c" /* yacc.c:1646 */
+#line 4784 "util/configparser.c" /* yacc.c:1648 */
break;
- case 385:
-#line 1852 "util/configparser.y" /* yacc.c:1646 */
+ case 408:
+#line 1988 "util/configparser.y" /* yacc.c:1648 */
{
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)
+ if(!bitlist) {
yyerror("could not parse tags, (define-tag them first)");
+ free((yyvsp[-1].str));
+ }
if(bitlist) {
if(!cfg_strbytelist_insert(
&cfg_parser->cfg->respip_tags,
@@ -4579,11 +4804,11 @@ yyreduce:
}
}
}
-#line 4583 "util/configparser.c" /* yacc.c:1646 */
+#line 4808 "util/configparser.c" /* yacc.c:1648 */
break;
- case 386:
-#line 1871 "util/configparser.y" /* yacc.c:1646 */
+ case 409:
+#line 2009 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4591,11 +4816,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4595 "util/configparser.c" /* yacc.c:1646 */
+#line 4820 "util/configparser.c" /* yacc.c:1648 */
break;
- case 387:
-#line 1881 "util/configparser.y" /* yacc.c:1646 */
+ case 410:
+#line 2019 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4603,33 +4828,33 @@ yyreduce:
else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4607 "util/configparser.c" /* yacc.c:1646 */
+#line 4832 "util/configparser.c" /* yacc.c:1648 */
break;
- case 388:
-#line 1890 "util/configparser.y" /* yacc.c:1646 */
+ case 411:
+#line 2028 "util/configparser.y" /* yacc.c:1648 */
{
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 4618 "util/configparser.c" /* yacc.c:1646 */
+#line 4843 "util/configparser.c" /* yacc.c:1648 */
break;
- case 389:
-#line 1898 "util/configparser.y" /* yacc.c:1646 */
+ case 412:
+#line 2036 "util/configparser.y" /* yacc.c:1648 */
{
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 4629 "util/configparser.c" /* yacc.c:1646 */
+#line 4854 "util/configparser.c" /* yacc.c:1648 */
break;
- case 390:
-#line 1906 "util/configparser.y" /* yacc.c:1646 */
+ case 413:
+#line 2044 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4641,11 +4866,11 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4645 "util/configparser.c" /* yacc.c:1646 */
+#line 4870 "util/configparser.c" /* yacc.c:1648 */
break;
- case 391:
-#line 1919 "util/configparser.y" /* yacc.c:1646 */
+ case 414:
+#line 2057 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -4657,15 +4882,17 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 4661 "util/configparser.c" /* yacc.c:1646 */
+#line 4886 "util/configparser.c" /* yacc.c:1648 */
break;
- case 392:
-#line 1932 "util/configparser.y" /* yacc.c:1646 */
+ case 415:
+#line 2070 "util/configparser.y" /* yacc.c:1648 */
{
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) {
yyerror("number expected");
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
@@ -4673,15 +4900,17 @@ yyreduce:
"ratelimit-for-domain");
}
}
-#line 4677 "util/configparser.c" /* yacc.c:1646 */
+#line 4904 "util/configparser.c" /* yacc.c:1648 */
break;
- case 393:
-#line 1945 "util/configparser.y" /* yacc.c:1646 */
+ case 416:
+#line 2085 "util/configparser.y" /* yacc.c:1648 */
{
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) {
yyerror("number expected");
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
@@ -4689,11 +4918,11 @@ yyreduce:
"ratelimit-below-domain");
}
}
-#line 4693 "util/configparser.c" /* yacc.c:1646 */
+#line 4922 "util/configparser.c" /* yacc.c:1648 */
break;
- case 394:
-#line 1958 "util/configparser.y" /* yacc.c:1646 */
+ case 417:
+#line 2100 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4701,11 +4930,11 @@ yyreduce:
else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4705 "util/configparser.c" /* yacc.c:1646 */
+#line 4934 "util/configparser.c" /* yacc.c:1648 */
break;
- case 395:
-#line 1967 "util/configparser.y" /* yacc.c:1646 */
+ case 418:
+#line 2109 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4713,35 +4942,44 @@ yyreduce:
else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4717 "util/configparser.c" /* yacc.c:1646 */
+#line 4946 "util/configparser.c" /* yacc.c:1648 */
break;
- case 396:
-#line 1976 "util/configparser.y" /* yacc.c:1646 */
+ case 419:
+#line 2118 "util/configparser.y" /* yacc.c:1648 */
{
- OUTYY(("P(server_low_rtt:%s)\n", (yyvsp[0].str)));
- if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
+ OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
+ free((yyvsp[0].str));
+ }
+#line 4955 "util/configparser.c" /* yacc.c:1648 */
+ break;
+
+ case 420:
+#line 2124 "util/configparser.y" /* yacc.c:1648 */
+ {
+ OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
+ if(atoi((yyvsp[0].str)) <= 0)
yyerror("number expected");
- else cfg_parser->cfg->low_rtt = atoi((yyvsp[0].str));
+ else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4729 "util/configparser.c" /* yacc.c:1646 */
+#line 4967 "util/configparser.c" /* yacc.c:1648 */
break;
- case 397:
-#line 1985 "util/configparser.y" /* yacc.c:1646 */
+ case 421:
+#line 2133 "util/configparser.y" /* yacc.c:1648 */
{
- OUTYY(("P(server_low_rtt_permil:%s)\n", (yyvsp[0].str)));
+ OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
yyerror("number expected");
- else cfg_parser->cfg->low_rtt_permil = atoi((yyvsp[0].str));
+ else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 4741 "util/configparser.c" /* yacc.c:1646 */
+#line 4979 "util/configparser.c" /* yacc.c:1648 */
break;
- case 398:
-#line 1994 "util/configparser.y" /* yacc.c:1646 */
+ case 422:
+#line 2142 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4750,11 +4988,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4754 "util/configparser.c" /* yacc.c:1646 */
+#line 4992 "util/configparser.c" /* yacc.c:1648 */
break;
- case 399:
-#line 2004 "util/configparser.y" /* yacc.c:1646 */
+ case 423:
+#line 2152 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4763,43 +5001,43 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4767 "util/configparser.c" /* yacc.c:1646 */
+#line 5005 "util/configparser.c" /* yacc.c:1648 */
break;
- case 400:
-#line 2014 "util/configparser.y" /* yacc.c:1646 */
+ case 424:
+#line 2162 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
#endif
+ free((yyvsp[0].str));
}
-#line 4783 "util/configparser.c" /* yacc.c:1646 */
+#line 5021 "util/configparser.c" /* yacc.c:1648 */
break;
- case 401:
-#line 2027 "util/configparser.y" /* yacc.c:1646 */
+ case 425:
+#line 2175 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0);
- free((yyvsp[0].str));
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
#endif
+ free((yyvsp[0].str));
}
-#line 4799 "util/configparser.c" /* yacc.c:1646 */
+#line 5037 "util/configparser.c" /* yacc.c:1648 */
break;
- case 402:
-#line 2040 "util/configparser.y" /* yacc.c:1646 */
+ case 426:
+#line 2188 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
@@ -4807,13 +5045,14 @@ yyreduce:
cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str);
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
#endif
}
-#line 4813 "util/configparser.c" /* yacc.c:1646 */
+#line 5052 "util/configparser.c" /* yacc.c:1648 */
break;
- case 403:
-#line 2051 "util/configparser.y" /* yacc.c:1646 */
+ case 427:
+#line 2200 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
@@ -4823,13 +5062,14 @@ yyreduce:
free((yyvsp[0].str));
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
#endif
}
-#line 4829 "util/configparser.c" /* yacc.c:1646 */
+#line 5069 "util/configparser.c" /* yacc.c:1648 */
break;
- case 404:
-#line 2064 "util/configparser.y" /* yacc.c:1646 */
+ case 428:
+#line 2214 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
@@ -4837,13 +5077,14 @@ yyreduce:
yyerror("out of memory");
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
#endif
}
-#line 4843 "util/configparser.c" /* yacc.c:1646 */
+#line 5084 "util/configparser.c" /* yacc.c:1648 */
break;
- case 405:
-#line 2075 "util/configparser.y" /* yacc.c:1646 */
+ case 429:
+#line 2226 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_IPSECMOD
OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
@@ -4853,13 +5094,14 @@ yyreduce:
free((yyvsp[0].str));
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free((yyvsp[0].str));
#endif
}
-#line 4859 "util/configparser.c" /* yacc.c:1646 */
+#line 5101 "util/configparser.c" /* yacc.c:1648 */
break;
- case 406:
-#line 2088 "util/configparser.y" /* yacc.c:1646 */
+ case 430:
+#line 2240 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->stubs->name)
@@ -4868,31 +5110,31 @@ yyreduce:
free(cfg_parser->cfg->stubs->name);
cfg_parser->cfg->stubs->name = (yyvsp[0].str);
}
-#line 4872 "util/configparser.c" /* yacc.c:1646 */
+#line 5114 "util/configparser.c" /* yacc.c:1648 */
break;
- case 407:
-#line 2098 "util/configparser.y" /* yacc.c:1646 */
+ case 431:
+#line 2250 "util/configparser.y" /* yacc.c:1648 */
{
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 4882 "util/configparser.c" /* yacc.c:1646 */
+#line 5124 "util/configparser.c" /* yacc.c:1648 */
break;
- case 408:
-#line 2105 "util/configparser.y" /* yacc.c:1646 */
+ case 432:
+#line 2257 "util/configparser.y" /* yacc.c:1648 */
{
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 4892 "util/configparser.c" /* yacc.c:1646 */
+#line 5134 "util/configparser.c" /* yacc.c:1648 */
break;
- case 409:
-#line 2112 "util/configparser.y" /* yacc.c:1646 */
+ case 433:
+#line 2264 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4900,11 +5142,11 @@ yyreduce:
else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4904 "util/configparser.c" /* yacc.c:1646 */
+#line 5146 "util/configparser.c" /* yacc.c:1648 */
break;
- case 410:
-#line 2121 "util/configparser.y" /* yacc.c:1646 */
+ case 434:
+#line 2273 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4912,11 +5154,11 @@ yyreduce:
else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4916 "util/configparser.c" /* yacc.c:1646 */
+#line 5158 "util/configparser.c" /* yacc.c:1648 */
break;
- case 411:
-#line 2130 "util/configparser.y" /* yacc.c:1646 */
+ case 435:
+#line 2282 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4925,11 +5167,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4929 "util/configparser.c" /* yacc.c:1646 */
+#line 5171 "util/configparser.c" /* yacc.c:1648 */
break;
- case 412:
-#line 2140 "util/configparser.y" /* yacc.c:1646 */
+ case 436:
+#line 2292 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4938,11 +5180,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4942 "util/configparser.c" /* yacc.c:1646 */
+#line 5184 "util/configparser.c" /* yacc.c:1648 */
break;
- case 413:
-#line 2150 "util/configparser.y" /* yacc.c:1646 */
+ case 437:
+#line 2302 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->forwards->name)
@@ -4951,31 +5193,31 @@ yyreduce:
free(cfg_parser->cfg->forwards->name);
cfg_parser->cfg->forwards->name = (yyvsp[0].str);
}
-#line 4955 "util/configparser.c" /* yacc.c:1646 */
+#line 5197 "util/configparser.c" /* yacc.c:1648 */
break;
- case 414:
-#line 2160 "util/configparser.y" /* yacc.c:1646 */
+ case 438:
+#line 2312 "util/configparser.y" /* yacc.c:1648 */
{
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 4965 "util/configparser.c" /* yacc.c:1646 */
+#line 5207 "util/configparser.c" /* yacc.c:1648 */
break;
- case 415:
-#line 2167 "util/configparser.y" /* yacc.c:1646 */
+ case 439:
+#line 2319 "util/configparser.y" /* yacc.c:1648 */
{
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 4975 "util/configparser.c" /* yacc.c:1646 */
+#line 5217 "util/configparser.c" /* yacc.c:1648 */
break;
- case 416:
-#line 2174 "util/configparser.y" /* yacc.c:1646 */
+ case 440:
+#line 2326 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4983,11 +5225,11 @@ yyreduce:
else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4987 "util/configparser.c" /* yacc.c:1646 */
+#line 5229 "util/configparser.c" /* yacc.c:1648 */
break;
- case 417:
-#line 2183 "util/configparser.y" /* yacc.c:1646 */
+ case 441:
+#line 2335 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4995,11 +5237,11 @@ yyreduce:
else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 4999 "util/configparser.c" /* yacc.c:1646 */
+#line 5241 "util/configparser.c" /* yacc.c:1648 */
break;
- case 418:
-#line 2192 "util/configparser.y" /* yacc.c:1646 */
+ case 442:
+#line 2344 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5008,11 +5250,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5012 "util/configparser.c" /* yacc.c:1646 */
+#line 5254 "util/configparser.c" /* yacc.c:1648 */
break;
- case 419:
-#line 2202 "util/configparser.y" /* yacc.c:1646 */
+ case 443:
+#line 2354 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->auths->name)
@@ -5021,52 +5263,52 @@ yyreduce:
free(cfg_parser->cfg->auths->name);
cfg_parser->cfg->auths->name = (yyvsp[0].str);
}
-#line 5025 "util/configparser.c" /* yacc.c:1646 */
+#line 5267 "util/configparser.c" /* yacc.c:1648 */
break;
- case 420:
-#line 2212 "util/configparser.y" /* yacc.c:1646 */
+ case 444:
+#line 2364 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->auths->zonefile);
cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
}
-#line 5035 "util/configparser.c" /* yacc.c:1646 */
+#line 5277 "util/configparser.c" /* yacc.c:1648 */
break;
- case 421:
-#line 2219 "util/configparser.y" /* yacc.c:1646 */
+ case 445:
+#line 2371 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5045 "util/configparser.c" /* yacc.c:1646 */
+#line 5287 "util/configparser.c" /* yacc.c:1648 */
break;
- case 422:
-#line 2226 "util/configparser.y" /* yacc.c:1646 */
+ case 446:
+#line 2378 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5055 "util/configparser.c" /* yacc.c:1646 */
+#line 5297 "util/configparser.c" /* yacc.c:1648 */
break;
- case 423:
-#line 2233 "util/configparser.y" /* yacc.c:1646 */
+ case 447:
+#line 2385 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
(yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5066 "util/configparser.c" /* yacc.c:1646 */
+#line 5308 "util/configparser.c" /* yacc.c:1648 */
break;
- case 424:
-#line 2241 "util/configparser.y" /* yacc.c:1646 */
+ case 448:
+#line 2393 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5075,11 +5317,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5079 "util/configparser.c" /* yacc.c:1646 */
+#line 5321 "util/configparser.c" /* yacc.c:1648 */
break;
- case 425:
-#line 2251 "util/configparser.y" /* yacc.c:1646 */
+ case 449:
+#line 2403 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5088,11 +5330,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5092 "util/configparser.c" /* yacc.c:1646 */
+#line 5334 "util/configparser.c" /* yacc.c:1648 */
break;
- case 426:
-#line 2261 "util/configparser.y" /* yacc.c:1646 */
+ case 450:
+#line 2413 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5101,11 +5343,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5105 "util/configparser.c" /* yacc.c:1646 */
+#line 5347 "util/configparser.c" /* yacc.c:1648 */
break;
- case 427:
-#line 2271 "util/configparser.y" /* yacc.c:1646 */
+ case 451:
+#line 2423 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
if(cfg_parser->cfg->views->name)
@@ -5114,11 +5356,11 @@ yyreduce:
free(cfg_parser->cfg->views->name);
cfg_parser->cfg->views->name = (yyvsp[0].str);
}
-#line 5118 "util/configparser.c" /* yacc.c:1646 */
+#line 5360 "util/configparser.c" /* yacc.c:1648 */
break;
- case 428:
-#line 2281 "util/configparser.y" /* yacc.c:1646 */
+ case 452:
+#line 2433 "util/configparser.y" /* yacc.c:1648 */
{
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 &&
@@ -5129,13 +5371,15 @@ yyreduce:
&& strcmp((yyvsp[0].str), "always_refuse")!=0
&& strcmp((yyvsp[0].str), "always_nxdomain")!=0
&& strcmp((yyvsp[0].str), "noview")!=0
- && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0)
+ && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) {
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
"always_transparent, always_refuse, "
"always_nxdomain, noview or nodefault");
- else if(strcmp((yyvsp[0].str), "nodefault")==0) {
+ free((yyvsp[-1].str));
+ free((yyvsp[0].str));
+ } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_nodefault, (yyvsp[-1].str)))
fatal_exit("out of memory adding local-zone");
@@ -5147,11 +5391,11 @@ yyreduce:
fatal_exit("out of memory adding local-zone");
}
}
-#line 5151 "util/configparser.c" /* yacc.c:1646 */
+#line 5395 "util/configparser.c" /* yacc.c:1648 */
break;
- case 429:
-#line 2311 "util/configparser.y" /* yacc.c:1646 */
+ case 453:
+#line 2465 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -5160,34 +5404,33 @@ yyreduce:
fatal_exit("out of memory adding per-view "
"response-ip action");
}
-#line 5164 "util/configparser.c" /* yacc.c:1646 */
+#line 5408 "util/configparser.c" /* yacc.c:1648 */
break;
- case 430:
-#line 2321 "util/configparser.y" /* yacc.c:1646 */
+ case 454:
+#line 2475 "util/configparser.y" /* yacc.c:1648 */
{
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 5175 "util/configparser.c" /* yacc.c:1646 */
+#line 5419 "util/configparser.c" /* yacc.c:1648 */
break;
- case 431:
-#line 2329 "util/configparser.y" /* yacc.c:1646 */
+ case 455:
+#line 2483 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
fatal_exit("out of memory adding local-data");
- free((yyvsp[0].str));
}
}
-#line 5187 "util/configparser.c" /* yacc.c:1646 */
+#line 5430 "util/configparser.c" /* yacc.c:1648 */
break;
- case 432:
-#line 2338 "util/configparser.y" /* yacc.c:1646 */
+ case 456:
+#line 2491 "util/configparser.y" /* yacc.c:1648 */
{
char* ptr;
OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -5201,11 +5444,11 @@ yyreduce:
yyerror("local-data-ptr could not be reversed");
}
}
-#line 5205 "util/configparser.c" /* yacc.c:1646 */
+#line 5448 "util/configparser.c" /* yacc.c:1648 */
break;
- case 433:
-#line 2353 "util/configparser.y" /* yacc.c:1646 */
+ case 457:
+#line 2506 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5213,19 +5456,19 @@ yyreduce:
else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5217 "util/configparser.c" /* yacc.c:1646 */
+#line 5460 "util/configparser.c" /* yacc.c:1648 */
break;
- case 434:
-#line 2362 "util/configparser.y" /* yacc.c:1646 */
+ case 458:
+#line 2515 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("\nP(remote-control:)\n"));
}
-#line 5225 "util/configparser.c" /* yacc.c:1646 */
+#line 5468 "util/configparser.c" /* yacc.c:1648 */
break;
- case 445:
-#line 2373 "util/configparser.y" /* yacc.c:1646 */
+ case 469:
+#line 2526 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5234,11 +5477,11 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5238 "util/configparser.c" /* yacc.c:1646 */
+#line 5481 "util/configparser.c" /* yacc.c:1648 */
break;
- case 446:
-#line 2383 "util/configparser.y" /* yacc.c:1646 */
+ case 470:
+#line 2536 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -5246,232 +5489,241 @@ yyreduce:
else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5250 "util/configparser.c" /* yacc.c:1646 */
+#line 5493 "util/configparser.c" /* yacc.c:1648 */
break;
- case 447:
-#line 2392 "util/configparser.y" /* yacc.c:1646 */
+ case 471:
+#line 2545 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
yyerror("out of memory");
}
-#line 5260 "util/configparser.c" /* yacc.c:1646 */
+#line 5503 "util/configparser.c" /* yacc.c:1648 */
break;
- case 448:
-#line 2399 "util/configparser.y" /* yacc.c:1646 */
+ case 472:
+#line 2552 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5270 "util/configparser.c" /* yacc.c:1646 */
+#line 5513 "util/configparser.c" /* yacc.c:1648 */
break;
- case 449:
-#line 2406 "util/configparser.y" /* yacc.c:1646 */
+ case 473:
+#line 2559 "util/configparser.y" /* yacc.c:1648 */
{
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 5280 "util/configparser.c" /* yacc.c:1646 */
+#line 5523 "util/configparser.c" /* yacc.c:1648 */
break;
- case 450:
-#line 2413 "util/configparser.y" /* yacc.c:1646 */
+ case 474:
+#line 2566 "util/configparser.y" /* yacc.c:1648 */
{
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 5290 "util/configparser.c" /* yacc.c:1646 */
+#line 5533 "util/configparser.c" /* yacc.c:1648 */
break;
- case 451:
-#line 2420 "util/configparser.y" /* yacc.c:1646 */
+ case 475:
+#line 2573 "util/configparser.y" /* yacc.c:1648 */
{
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 5300 "util/configparser.c" /* yacc.c:1646 */
+#line 5543 "util/configparser.c" /* yacc.c:1648 */
break;
- case 452:
-#line 2427 "util/configparser.y" /* yacc.c:1646 */
+ case 476:
+#line 2580 "util/configparser.y" /* yacc.c:1648 */
{
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 5310 "util/configparser.c" /* yacc.c:1646 */
+#line 5553 "util/configparser.c" /* yacc.c:1648 */
break;
- case 453:
-#line 2434 "util/configparser.y" /* yacc.c:1646 */
+ case 477:
+#line 2587 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("\nP(dnstap:)\n"));
}
-#line 5318 "util/configparser.c" /* yacc.c:1646 */
+#line 5561 "util/configparser.c" /* yacc.c:1648 */
break;
- case 468:
-#line 2451 "util/configparser.y" /* yacc.c:1646 */
+ case 492:
+#line 2604 "util/configparser.y" /* yacc.c:1648 */
{
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);
+ free((yyvsp[0].str));
}
-#line 5329 "util/configparser.c" /* yacc.c:1646 */
+#line 5573 "util/configparser.c" /* yacc.c:1648 */
break;
- case 469:
-#line 2459 "util/configparser.y" /* yacc.c:1646 */
+ case 493:
+#line 2613 "util/configparser.y" /* yacc.c:1648 */
{
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 5339 "util/configparser.c" /* yacc.c:1646 */
+#line 5583 "util/configparser.c" /* yacc.c:1648 */
break;
- case 470:
-#line 2466 "util/configparser.y" /* yacc.c:1646 */
+ case 494:
+#line 2620 "util/configparser.y" /* yacc.c:1648 */
{
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);
+ free((yyvsp[0].str));
}
-#line 5350 "util/configparser.c" /* yacc.c:1646 */
+#line 5595 "util/configparser.c" /* yacc.c:1648 */
break;
- case 471:
-#line 2474 "util/configparser.y" /* yacc.c:1646 */
+ case 495:
+#line 2629 "util/configparser.y" /* yacc.c:1648 */
{
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);
+ free((yyvsp[0].str));
}
-#line 5361 "util/configparser.c" /* yacc.c:1646 */
+#line 5607 "util/configparser.c" /* yacc.c:1648 */
break;
- case 472:
-#line 2482 "util/configparser.y" /* yacc.c:1646 */
+ case 496:
+#line 2638 "util/configparser.y" /* yacc.c:1648 */
{
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 5371 "util/configparser.c" /* yacc.c:1646 */
+#line 5617 "util/configparser.c" /* yacc.c:1648 */
break;
- case 473:
-#line 2489 "util/configparser.y" /* yacc.c:1646 */
+ case 497:
+#line 2645 "util/configparser.y" /* yacc.c:1648 */
{
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 5381 "util/configparser.c" /* yacc.c:1646 */
+#line 5627 "util/configparser.c" /* yacc.c:1648 */
break;
- case 474:
-#line 2496 "util/configparser.y" /* yacc.c:1646 */
+ case 498:
+#line 2652 "util/configparser.y" /* yacc.c:1648 */
{
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)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_resolver_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
}
-#line 5393 "util/configparser.c" /* yacc.c:1646 */
+#line 5640 "util/configparser.c" /* yacc.c:1648 */
break;
- case 475:
-#line 2505 "util/configparser.y" /* yacc.c:1646 */
+ case 499:
+#line 2662 "util/configparser.y" /* yacc.c:1648 */
{
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)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_resolver_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
}
-#line 5405 "util/configparser.c" /* yacc.c:1646 */
+#line 5653 "util/configparser.c" /* yacc.c:1648 */
break;
- case 476:
-#line 2514 "util/configparser.y" /* yacc.c:1646 */
+ case 500:
+#line 2672 "util/configparser.y" /* yacc.c:1648 */
{
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)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_client_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
}
-#line 5417 "util/configparser.c" /* yacc.c:1646 */
+#line 5666 "util/configparser.c" /* yacc.c:1648 */
break;
- case 477:
-#line 2523 "util/configparser.y" /* yacc.c:1646 */
+ case 501:
+#line 2682 "util/configparser.y" /* yacc.c:1648 */
{
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)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_client_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
}
-#line 5429 "util/configparser.c" /* yacc.c:1646 */
+#line 5679 "util/configparser.c" /* yacc.c:1648 */
break;
- case 478:
-#line 2532 "util/configparser.y" /* yacc.c:1646 */
+ case 502:
+#line 2692 "util/configparser.y" /* yacc.c:1648 */
{
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)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
}
-#line 5441 "util/configparser.c" /* yacc.c:1646 */
+#line 5692 "util/configparser.c" /* yacc.c:1648 */
break;
- case 479:
-#line 2541 "util/configparser.y" /* yacc.c:1646 */
+ case 503:
+#line 2702 "util/configparser.y" /* yacc.c:1648 */
{
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)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
(strcmp((yyvsp[0].str), "yes")==0);
+ free((yyvsp[0].str));
}
-#line 5453 "util/configparser.c" /* yacc.c:1646 */
+#line 5705 "util/configparser.c" /* yacc.c:1648 */
break;
- case 480:
-#line 2550 "util/configparser.y" /* yacc.c:1646 */
+ case 504:
+#line 2712 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("\nP(python:)\n"));
}
-#line 5461 "util/configparser.c" /* yacc.c:1646 */
+#line 5713 "util/configparser.c" /* yacc.c:1648 */
break;
- case 484:
-#line 2559 "util/configparser.y" /* yacc.c:1646 */
+ case 508:
+#line 2721 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->python_script);
cfg_parser->cfg->python_script = (yyvsp[0].str);
}
-#line 5471 "util/configparser.c" /* yacc.c:1646 */
+#line 5723 "util/configparser.c" /* yacc.c:1648 */
break;
- case 485:
-#line 2565 "util/configparser.y" /* yacc.c:1646 */
+ case 509:
+#line 2727 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5480,21 +5732,21 @@ yyreduce:
(strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5484 "util/configparser.c" /* yacc.c:1646 */
+#line 5736 "util/configparser.c" /* yacc.c:1648 */
break;
- case 486:
-#line 2575 "util/configparser.y" /* yacc.c:1646 */
+ case 510:
+#line 2737 "util/configparser.y" /* yacc.c:1648 */
{
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 5494 "util/configparser.c" /* yacc.c:1646 */
+#line 5746 "util/configparser.c" /* yacc.c:1648 */
break;
- case 487:
-#line 2582 "util/configparser.y" /* yacc.c:1646 */
+ case 511:
+#line 2744 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
validate_respip_action((yyvsp[0].str));
@@ -5502,31 +5754,30 @@ yyreduce:
(yyvsp[-1].str), (yyvsp[0].str)))
fatal_exit("out of memory adding response-ip");
}
-#line 5506 "util/configparser.c" /* yacc.c:1646 */
+#line 5758 "util/configparser.c" /* yacc.c:1648 */
break;
- case 488:
-#line 2591 "util/configparser.y" /* yacc.c:1646 */
+ case 512:
+#line 2753 "util/configparser.y" /* yacc.c:1648 */
{
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");
+ 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 5517 "util/configparser.c" /* yacc.c:1646 */
+#line 5769 "util/configparser.c" /* yacc.c:1648 */
break;
- case 489:
-#line 2599 "util/configparser.y" /* yacc.c:1646 */
+ case 513:
+#line 2761 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("\nP(dnscrypt:)\n"));
- OUTYY(("\nP(dnscrypt:)\n"));
}
-#line 5526 "util/configparser.c" /* yacc.c:1646 */
+#line 5777 "util/configparser.c" /* yacc.c:1648 */
break;
- case 502:
-#line 2616 "util/configparser.y" /* yacc.c:1646 */
+ case 526:
+#line 2777 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -5534,34 +5785,33 @@ yyreduce:
else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
free((yyvsp[0].str));
}
-#line 5538 "util/configparser.c" /* yacc.c:1646 */
+#line 5789 "util/configparser.c" /* yacc.c:1648 */
break;
- case 503:
-#line 2626 "util/configparser.y" /* yacc.c:1646 */
+ case 527:
+#line 2787 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
-
if(atoi((yyvsp[0].str)) == 0)
yyerror("port number expected");
else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
free((yyvsp[0].str));
}
-#line 5551 "util/configparser.c" /* yacc.c:1646 */
+#line 5801 "util/configparser.c" /* yacc.c:1648 */
break;
- case 504:
-#line 2636 "util/configparser.y" /* yacc.c:1646 */
+ case 528:
+#line 2796 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
free(cfg_parser->cfg->dnscrypt_provider);
cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
}
-#line 5561 "util/configparser.c" /* yacc.c:1646 */
+#line 5811 "util/configparser.c" /* yacc.c:1648 */
break;
- case 505:
-#line 2643 "util/configparser.y" /* yacc.c:1646 */
+ case 529:
+#line 2803 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
@@ -5569,21 +5819,21 @@ yyreduce:
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-provider-cert");
}
-#line 5573 "util/configparser.c" /* yacc.c:1646 */
+#line 5823 "util/configparser.c" /* yacc.c:1648 */
break;
- case 506:
-#line 2652 "util/configparser.y" /* yacc.c:1646 */
+ case 530:
+#line 2812 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
}
-#line 5583 "util/configparser.c" /* yacc.c:1646 */
+#line 5833 "util/configparser.c" /* yacc.c:1648 */
break;
- case 507:
-#line 2659 "util/configparser.y" /* yacc.c:1646 */
+ case 531:
+#line 2819 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
@@ -5591,22 +5841,22 @@ yyreduce:
if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
fatal_exit("out of memory adding dnscrypt-secret-key");
}
-#line 5595 "util/configparser.c" /* yacc.c:1646 */
+#line 5845 "util/configparser.c" /* yacc.c:1648 */
break;
- case 508:
-#line 2668 "util/configparser.y" /* yacc.c:1646 */
+ case 532:
+#line 2828 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5606 "util/configparser.c" /* yacc.c:1646 */
+#line 5856 "util/configparser.c" /* yacc.c:1648 */
break;
- case 509:
-#line 2676 "util/configparser.y" /* yacc.c:1646 */
+ case 533:
+#line 2836 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -5618,22 +5868,22 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5622 "util/configparser.c" /* yacc.c:1646 */
+#line 5872 "util/configparser.c" /* yacc.c:1648 */
break;
- case 510:
-#line 2689 "util/configparser.y" /* yacc.c:1646 */
+ case 534:
+#line 2849 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
yyerror("memory size expected");
free((yyvsp[0].str));
}
-#line 5633 "util/configparser.c" /* yacc.c:1646 */
+#line 5883 "util/configparser.c" /* yacc.c:1648 */
break;
- case 511:
-#line 2697 "util/configparser.y" /* yacc.c:1646 */
+ case 535:
+#line 2857 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
if(atoi((yyvsp[0].str)) == 0)
@@ -5645,19 +5895,19 @@ yyreduce:
}
free((yyvsp[0].str));
}
-#line 5649 "util/configparser.c" /* yacc.c:1646 */
+#line 5899 "util/configparser.c" /* yacc.c:1648 */
break;
- case 512:
-#line 2710 "util/configparser.y" /* yacc.c:1646 */
+ case 536:
+#line 2870 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("\nP(cachedb:)\n"));
}
-#line 5657 "util/configparser.c" /* yacc.c:1646 */
+#line 5907 "util/configparser.c" /* yacc.c:1648 */
break;
- case 520:
-#line 2720 "util/configparser.y" /* yacc.c:1646 */
+ case 544:
+#line 2880 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_CACHEDB
OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
@@ -5668,13 +5918,14 @@ yyreduce:
cfg_parser->cfg->cachedb_backend = (yyvsp[0].str);
#else
OUTYY(("P(Compiled without cachedb, ignoring)\n"));
+ free((yyvsp[0].str));
#endif
}
-#line 5674 "util/configparser.c" /* yacc.c:1646 */
+#line 5925 "util/configparser.c" /* yacc.c:1648 */
break;
- case 521:
-#line 2734 "util/configparser.y" /* yacc.c:1646 */
+ case 545:
+#line 2895 "util/configparser.y" /* yacc.c:1648 */
{
#ifdef USE_CACHEDB
OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
@@ -5688,11 +5939,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 5692 "util/configparser.c" /* yacc.c:1646 */
+#line 5943 "util/configparser.c" /* yacc.c:1648 */
break;
- case 522:
-#line 2749 "util/configparser.y" /* yacc.c:1646 */
+ case 546:
+#line 2910 "util/configparser.y" /* yacc.c:1648 */
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
@@ -5703,11 +5954,11 @@ yyreduce:
free((yyvsp[0].str));
#endif
}
-#line 5707 "util/configparser.c" /* yacc.c:1646 */
+#line 5958 "util/configparser.c" /* yacc.c:1648 */
break;
- case 523:
-#line 2761 "util/configparser.y" /* yacc.c:1646 */
+ case 547:
+#line 2922 "util/configparser.y" /* yacc.c:1648 */
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
int port;
@@ -5721,11 +5972,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5725 "util/configparser.c" /* yacc.c:1646 */
+#line 5976 "util/configparser.c" /* yacc.c:1648 */
break;
- case 524:
-#line 2776 "util/configparser.y" /* yacc.c:1646 */
+ case 548:
+#line 2937 "util/configparser.y" /* yacc.c:1648 */
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
@@ -5737,11 +5988,11 @@ yyreduce:
#endif
free((yyvsp[0].str));
}
-#line 5741 "util/configparser.c" /* yacc.c:1646 */
+#line 5992 "util/configparser.c" /* yacc.c:1648 */
break;
- case 525:
-#line 2789 "util/configparser.y" /* yacc.c:1646 */
+ case 549:
+#line 2950 "util/configparser.y" /* yacc.c:1648 */
{
OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
if (atoi((yyvsp[0].str)) < 0)
@@ -5751,11 +6002,11 @@ yyreduce:
fatal_exit("out of memory adding tcp connection limit");
}
}
-#line 5755 "util/configparser.c" /* yacc.c:1646 */
+#line 6006 "util/configparser.c" /* yacc.c:1648 */
break;
-#line 5759 "util/configparser.c" /* yacc.c:1646 */
+#line 6010 "util/configparser.c" /* yacc.c:1648 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -5983,7 +6234,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 2799 "util/configparser.y" /* yacc.c:1906 */
+#line 2960 "util/configparser.y" /* yacc.c:1907 */
/* parse helper routines could be here */
diff --git a/util/configparser.h b/util/configparser.h
index 59f9d9b2b275..9582232acc27 100644
--- a/util/configparser.h
+++ b/util/configparser.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 3.0.5. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -228,74 +228,87 @@ extern int yydebug;
VAR_CLIENT_SUBNET_OPCODE = 438,
VAR_MAX_CLIENT_SUBNET_IPV4 = 439,
VAR_MAX_CLIENT_SUBNET_IPV6 = 440,
- VAR_CAPS_WHITELIST = 441,
- VAR_CACHE_MAX_NEGATIVE_TTL = 442,
- VAR_PERMIT_SMALL_HOLDDOWN = 443,
- VAR_QNAME_MINIMISATION = 444,
- VAR_QNAME_MINIMISATION_STRICT = 445,
- VAR_IP_FREEBIND = 446,
- VAR_DEFINE_TAG = 447,
- VAR_LOCAL_ZONE_TAG = 448,
- VAR_ACCESS_CONTROL_TAG = 449,
- VAR_LOCAL_ZONE_OVERRIDE = 450,
- VAR_ACCESS_CONTROL_TAG_ACTION = 451,
- VAR_ACCESS_CONTROL_TAG_DATA = 452,
- VAR_VIEW = 453,
- VAR_ACCESS_CONTROL_VIEW = 454,
- VAR_VIEW_FIRST = 455,
- VAR_SERVE_EXPIRED = 456,
- VAR_SERVE_EXPIRED_TTL = 457,
- VAR_SERVE_EXPIRED_TTL_RESET = 458,
- VAR_FAKE_DSA = 459,
- VAR_FAKE_SHA1 = 460,
- VAR_LOG_IDENTITY = 461,
- VAR_HIDE_TRUSTANCHOR = 462,
- VAR_TRUST_ANCHOR_SIGNALING = 463,
- VAR_AGGRESSIVE_NSEC = 464,
- VAR_USE_SYSTEMD = 465,
- VAR_SHM_ENABLE = 466,
- VAR_SHM_KEY = 467,
- VAR_ROOT_KEY_SENTINEL = 468,
- VAR_DNSCRYPT = 469,
- VAR_DNSCRYPT_ENABLE = 470,
- VAR_DNSCRYPT_PORT = 471,
- VAR_DNSCRYPT_PROVIDER = 472,
- VAR_DNSCRYPT_SECRET_KEY = 473,
- VAR_DNSCRYPT_PROVIDER_CERT = 474,
- VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 475,
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 476,
- VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 477,
- VAR_DNSCRYPT_NONCE_CACHE_SIZE = 478,
- VAR_DNSCRYPT_NONCE_CACHE_SLABS = 479,
- VAR_IPSECMOD_ENABLED = 480,
- VAR_IPSECMOD_HOOK = 481,
- VAR_IPSECMOD_IGNORE_BOGUS = 482,
- VAR_IPSECMOD_MAX_TTL = 483,
- VAR_IPSECMOD_WHITELIST = 484,
- VAR_IPSECMOD_STRICT = 485,
- VAR_CACHEDB = 486,
- VAR_CACHEDB_BACKEND = 487,
- VAR_CACHEDB_SECRETSEED = 488,
- VAR_CACHEDB_REDISHOST = 489,
- VAR_CACHEDB_REDISPORT = 490,
- VAR_CACHEDB_REDISTIMEOUT = 491,
- VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 492,
- VAR_FOR_UPSTREAM = 493,
- VAR_AUTH_ZONE = 494,
- VAR_ZONEFILE = 495,
- VAR_MASTER = 496,
- VAR_URL = 497,
- VAR_FOR_DOWNSTREAM = 498,
- VAR_FALLBACK_ENABLED = 499,
- VAR_TLS_ADDITIONAL_PORT = 500,
- VAR_LOW_RTT = 501,
- VAR_LOW_RTT_PERMIL = 502,
- VAR_ALLOW_NOTIFY = 503,
- VAR_TLS_WIN_CERT = 504,
- VAR_TCP_CONNECTION_LIMIT = 505,
- VAR_FORWARD_NO_CACHE = 506,
- VAR_STUB_NO_CACHE = 507,
- VAR_LOG_SERVFAIL = 508
+ VAR_MIN_CLIENT_SUBNET_IPV4 = 441,
+ VAR_MIN_CLIENT_SUBNET_IPV6 = 442,
+ VAR_MAX_ECS_TREE_SIZE_IPV4 = 443,
+ VAR_MAX_ECS_TREE_SIZE_IPV6 = 444,
+ VAR_CAPS_WHITELIST = 445,
+ VAR_CACHE_MAX_NEGATIVE_TTL = 446,
+ VAR_PERMIT_SMALL_HOLDDOWN = 447,
+ VAR_QNAME_MINIMISATION = 448,
+ VAR_QNAME_MINIMISATION_STRICT = 449,
+ VAR_IP_FREEBIND = 450,
+ VAR_DEFINE_TAG = 451,
+ VAR_LOCAL_ZONE_TAG = 452,
+ VAR_ACCESS_CONTROL_TAG = 453,
+ VAR_LOCAL_ZONE_OVERRIDE = 454,
+ VAR_ACCESS_CONTROL_TAG_ACTION = 455,
+ VAR_ACCESS_CONTROL_TAG_DATA = 456,
+ VAR_VIEW = 457,
+ VAR_ACCESS_CONTROL_VIEW = 458,
+ VAR_VIEW_FIRST = 459,
+ VAR_SERVE_EXPIRED = 460,
+ VAR_SERVE_EXPIRED_TTL = 461,
+ VAR_SERVE_EXPIRED_TTL_RESET = 462,
+ VAR_FAKE_DSA = 463,
+ VAR_FAKE_SHA1 = 464,
+ VAR_LOG_IDENTITY = 465,
+ VAR_HIDE_TRUSTANCHOR = 466,
+ VAR_TRUST_ANCHOR_SIGNALING = 467,
+ VAR_AGGRESSIVE_NSEC = 468,
+ VAR_USE_SYSTEMD = 469,
+ VAR_SHM_ENABLE = 470,
+ VAR_SHM_KEY = 471,
+ VAR_ROOT_KEY_SENTINEL = 472,
+ VAR_DNSCRYPT = 473,
+ VAR_DNSCRYPT_ENABLE = 474,
+ VAR_DNSCRYPT_PORT = 475,
+ VAR_DNSCRYPT_PROVIDER = 476,
+ VAR_DNSCRYPT_SECRET_KEY = 477,
+ VAR_DNSCRYPT_PROVIDER_CERT = 478,
+ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 479,
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 480,
+ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 481,
+ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 482,
+ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 483,
+ VAR_IPSECMOD_ENABLED = 484,
+ VAR_IPSECMOD_HOOK = 485,
+ VAR_IPSECMOD_IGNORE_BOGUS = 486,
+ VAR_IPSECMOD_MAX_TTL = 487,
+ VAR_IPSECMOD_WHITELIST = 488,
+ VAR_IPSECMOD_STRICT = 489,
+ VAR_CACHEDB = 490,
+ VAR_CACHEDB_BACKEND = 491,
+ VAR_CACHEDB_SECRETSEED = 492,
+ VAR_CACHEDB_REDISHOST = 493,
+ VAR_CACHEDB_REDISPORT = 494,
+ VAR_CACHEDB_REDISTIMEOUT = 495,
+ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 496,
+ VAR_FOR_UPSTREAM = 497,
+ VAR_AUTH_ZONE = 498,
+ VAR_ZONEFILE = 499,
+ VAR_MASTER = 500,
+ VAR_URL = 501,
+ VAR_FOR_DOWNSTREAM = 502,
+ VAR_FALLBACK_ENABLED = 503,
+ VAR_TLS_ADDITIONAL_PORT = 504,
+ VAR_LOW_RTT = 505,
+ VAR_LOW_RTT_PERMIL = 506,
+ VAR_FAST_SERVER_PERMIL = 507,
+ VAR_FAST_SERVER_NUM = 508,
+ VAR_ALLOW_NOTIFY = 509,
+ VAR_TLS_WIN_CERT = 510,
+ VAR_TCP_CONNECTION_LIMIT = 511,
+ VAR_FORWARD_NO_CACHE = 512,
+ VAR_STUB_NO_CACHE = 513,
+ VAR_LOG_SERVFAIL = 514,
+ VAR_DENY_ANY = 515,
+ VAR_UNKNOWN_SERVER_TIME_LIMIT = 516,
+ VAR_LOG_TAG_QUERYREPLY = 517,
+ VAR_STREAM_WAIT_SIZE = 518,
+ VAR_TLS_CIPHERS = 519,
+ VAR_TLS_CIPHERSUITES = 520,
+ VAR_TLS_SESSION_TICKET_KEYS = 521
};
#endif
/* Tokens. */
@@ -482,85 +495,98 @@ extern int yydebug;
#define VAR_CLIENT_SUBNET_OPCODE 438
#define VAR_MAX_CLIENT_SUBNET_IPV4 439
#define VAR_MAX_CLIENT_SUBNET_IPV6 440
-#define VAR_CAPS_WHITELIST 441
-#define VAR_CACHE_MAX_NEGATIVE_TTL 442
-#define VAR_PERMIT_SMALL_HOLDDOWN 443
-#define VAR_QNAME_MINIMISATION 444
-#define VAR_QNAME_MINIMISATION_STRICT 445
-#define VAR_IP_FREEBIND 446
-#define VAR_DEFINE_TAG 447
-#define VAR_LOCAL_ZONE_TAG 448
-#define VAR_ACCESS_CONTROL_TAG 449
-#define VAR_LOCAL_ZONE_OVERRIDE 450
-#define VAR_ACCESS_CONTROL_TAG_ACTION 451
-#define VAR_ACCESS_CONTROL_TAG_DATA 452
-#define VAR_VIEW 453
-#define VAR_ACCESS_CONTROL_VIEW 454
-#define VAR_VIEW_FIRST 455
-#define VAR_SERVE_EXPIRED 456
-#define VAR_SERVE_EXPIRED_TTL 457
-#define VAR_SERVE_EXPIRED_TTL_RESET 458
-#define VAR_FAKE_DSA 459
-#define VAR_FAKE_SHA1 460
-#define VAR_LOG_IDENTITY 461
-#define VAR_HIDE_TRUSTANCHOR 462
-#define VAR_TRUST_ANCHOR_SIGNALING 463
-#define VAR_AGGRESSIVE_NSEC 464
-#define VAR_USE_SYSTEMD 465
-#define VAR_SHM_ENABLE 466
-#define VAR_SHM_KEY 467
-#define VAR_ROOT_KEY_SENTINEL 468
-#define VAR_DNSCRYPT 469
-#define VAR_DNSCRYPT_ENABLE 470
-#define VAR_DNSCRYPT_PORT 471
-#define VAR_DNSCRYPT_PROVIDER 472
-#define VAR_DNSCRYPT_SECRET_KEY 473
-#define VAR_DNSCRYPT_PROVIDER_CERT 474
-#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 475
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 476
-#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 477
-#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 478
-#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 479
-#define VAR_IPSECMOD_ENABLED 480
-#define VAR_IPSECMOD_HOOK 481
-#define VAR_IPSECMOD_IGNORE_BOGUS 482
-#define VAR_IPSECMOD_MAX_TTL 483
-#define VAR_IPSECMOD_WHITELIST 484
-#define VAR_IPSECMOD_STRICT 485
-#define VAR_CACHEDB 486
-#define VAR_CACHEDB_BACKEND 487
-#define VAR_CACHEDB_SECRETSEED 488
-#define VAR_CACHEDB_REDISHOST 489
-#define VAR_CACHEDB_REDISPORT 490
-#define VAR_CACHEDB_REDISTIMEOUT 491
-#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 492
-#define VAR_FOR_UPSTREAM 493
-#define VAR_AUTH_ZONE 494
-#define VAR_ZONEFILE 495
-#define VAR_MASTER 496
-#define VAR_URL 497
-#define VAR_FOR_DOWNSTREAM 498
-#define VAR_FALLBACK_ENABLED 499
-#define VAR_TLS_ADDITIONAL_PORT 500
-#define VAR_LOW_RTT 501
-#define VAR_LOW_RTT_PERMIL 502
-#define VAR_ALLOW_NOTIFY 503
-#define VAR_TLS_WIN_CERT 504
-#define VAR_TCP_CONNECTION_LIMIT 505
-#define VAR_FORWARD_NO_CACHE 506
-#define VAR_STUB_NO_CACHE 507
-#define VAR_LOG_SERVFAIL 508
+#define VAR_MIN_CLIENT_SUBNET_IPV4 441
+#define VAR_MIN_CLIENT_SUBNET_IPV6 442
+#define VAR_MAX_ECS_TREE_SIZE_IPV4 443
+#define VAR_MAX_ECS_TREE_SIZE_IPV6 444
+#define VAR_CAPS_WHITELIST 445
+#define VAR_CACHE_MAX_NEGATIVE_TTL 446
+#define VAR_PERMIT_SMALL_HOLDDOWN 447
+#define VAR_QNAME_MINIMISATION 448
+#define VAR_QNAME_MINIMISATION_STRICT 449
+#define VAR_IP_FREEBIND 450
+#define VAR_DEFINE_TAG 451
+#define VAR_LOCAL_ZONE_TAG 452
+#define VAR_ACCESS_CONTROL_TAG 453
+#define VAR_LOCAL_ZONE_OVERRIDE 454
+#define VAR_ACCESS_CONTROL_TAG_ACTION 455
+#define VAR_ACCESS_CONTROL_TAG_DATA 456
+#define VAR_VIEW 457
+#define VAR_ACCESS_CONTROL_VIEW 458
+#define VAR_VIEW_FIRST 459
+#define VAR_SERVE_EXPIRED 460
+#define VAR_SERVE_EXPIRED_TTL 461
+#define VAR_SERVE_EXPIRED_TTL_RESET 462
+#define VAR_FAKE_DSA 463
+#define VAR_FAKE_SHA1 464
+#define VAR_LOG_IDENTITY 465
+#define VAR_HIDE_TRUSTANCHOR 466
+#define VAR_TRUST_ANCHOR_SIGNALING 467
+#define VAR_AGGRESSIVE_NSEC 468
+#define VAR_USE_SYSTEMD 469
+#define VAR_SHM_ENABLE 470
+#define VAR_SHM_KEY 471
+#define VAR_ROOT_KEY_SENTINEL 472
+#define VAR_DNSCRYPT 473
+#define VAR_DNSCRYPT_ENABLE 474
+#define VAR_DNSCRYPT_PORT 475
+#define VAR_DNSCRYPT_PROVIDER 476
+#define VAR_DNSCRYPT_SECRET_KEY 477
+#define VAR_DNSCRYPT_PROVIDER_CERT 478
+#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 479
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 480
+#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 481
+#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 482
+#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 483
+#define VAR_IPSECMOD_ENABLED 484
+#define VAR_IPSECMOD_HOOK 485
+#define VAR_IPSECMOD_IGNORE_BOGUS 486
+#define VAR_IPSECMOD_MAX_TTL 487
+#define VAR_IPSECMOD_WHITELIST 488
+#define VAR_IPSECMOD_STRICT 489
+#define VAR_CACHEDB 490
+#define VAR_CACHEDB_BACKEND 491
+#define VAR_CACHEDB_SECRETSEED 492
+#define VAR_CACHEDB_REDISHOST 493
+#define VAR_CACHEDB_REDISPORT 494
+#define VAR_CACHEDB_REDISTIMEOUT 495
+#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 496
+#define VAR_FOR_UPSTREAM 497
+#define VAR_AUTH_ZONE 498
+#define VAR_ZONEFILE 499
+#define VAR_MASTER 500
+#define VAR_URL 501
+#define VAR_FOR_DOWNSTREAM 502
+#define VAR_FALLBACK_ENABLED 503
+#define VAR_TLS_ADDITIONAL_PORT 504
+#define VAR_LOW_RTT 505
+#define VAR_LOW_RTT_PERMIL 506
+#define VAR_FAST_SERVER_PERMIL 507
+#define VAR_FAST_SERVER_NUM 508
+#define VAR_ALLOW_NOTIFY 509
+#define VAR_TLS_WIN_CERT 510
+#define VAR_TCP_CONNECTION_LIMIT 511
+#define VAR_FORWARD_NO_CACHE 512
+#define VAR_STUB_NO_CACHE 513
+#define VAR_LOG_SERVFAIL 514
+#define VAR_DENY_ANY 515
+#define VAR_UNKNOWN_SERVER_TIME_LIMIT 516
+#define VAR_LOG_TAG_QUERYREPLY 517
+#define VAR_STREAM_WAIT_SIZE 518
+#define VAR_TLS_CIPHERS 519
+#define VAR_TLS_CIPHERSUITES 520
+#define VAR_TLS_SESSION_TICKET_KEYS 521
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 66 "util/configparser.y" /* yacc.c:1909 */
+#line 66 "util/configparser.y" /* yacc.c:1910 */
char* str;
-#line 564 "util/configparser.h" /* yacc.c:1909 */
+#line 590 "util/configparser.h" /* yacc.c:1910 */
};
typedef union YYSTYPE YYSTYPE;
diff --git a/util/configparser.y b/util/configparser.y
index 24c5b2d1e95d..5f52f4d77847 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -135,6 +135,8 @@ extern struct config_parser_state* cfg_parser;
%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE
%token VAR_CLIENT_SUBNET_ALWAYS_FORWARD VAR_CLIENT_SUBNET_OPCODE
%token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6
+%token VAR_MIN_CLIENT_SUBNET_IPV4 VAR_MIN_CLIENT_SUBNET_IPV6
+%token VAR_MAX_ECS_TREE_SIZE_IPV4 VAR_MAX_ECS_TREE_SIZE_IPV6
%token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
%token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND
%token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG
@@ -159,8 +161,12 @@ extern struct config_parser_state* cfg_parser;
%token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM
%token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM
%token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL
+%token VAR_FAST_SERVER_PERMIL VAR_FAST_SERVER_NUM
%token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT
-%token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL
+%token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY
+%token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY
+%token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES
+%token VAR_TLS_SESSION_TICKET_KEYS
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -237,6 +243,8 @@ content_server: server_num_threads | server_verbosity | server_port |
server_client_subnet_zone | server_client_subnet_always_forward |
server_client_subnet_opcode |
server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 |
+ server_min_client_subnet_ipv4 | server_min_client_subnet_ipv6 |
+ server_max_ecs_tree_size_ipv4 | server_max_ecs_tree_size_ipv6 |
server_caps_whitelist | server_cache_max_negative_ttl |
server_permit_small_holddown | server_qname_minimisation |
server_ip_freebind | server_define_tag | server_local_zone_tag |
@@ -255,8 +263,11 @@ content_server: server_num_threads | server_verbosity | server_port |
server_ipsecmod_whitelist | server_ipsecmod_strict |
server_udp_upstream_without_downstream | server_aggressive_nsec |
server_tls_cert_bundle | server_tls_additional_port | server_low_rtt |
- server_low_rtt_permil | server_tls_win_cert |
- server_tcp_connection_limit | server_log_servfail
+ server_fast_server_permil | server_fast_server_num | server_tls_win_cert |
+ server_tcp_connection_limit | server_log_servfail | server_deny_any |
+ server_unknown_server_time_limit | server_log_tag_queryreply |
+ server_stream_wait_size | server_tls_ciphers |
+ server_tls_ciphersuites | server_tls_session_ticket_keys
;
stubstart: VAR_STUB_ZONE
{
@@ -493,6 +504,70 @@ server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG
free($2);
}
;
+server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(min_client_subnet_ipv4:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("IPv4 subnet length expected");
+ else if (atoi($2) > 32)
+ cfg_parser->cfg->min_client_subnet_ipv4 = 32;
+ else if (atoi($2) < 0)
+ cfg_parser->cfg->min_client_subnet_ipv4 = 0;
+ else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi($2);
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free($2);
+ }
+ ;
+server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(min_client_subnet_ipv6:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("Ipv6 subnet length expected");
+ else if (atoi($2) > 128)
+ cfg_parser->cfg->min_client_subnet_ipv6 = 128;
+ else if (atoi($2) < 0)
+ cfg_parser->cfg->min_client_subnet_ipv6 = 0;
+ else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi($2);
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free($2);
+ }
+ ;
+server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("IPv4 ECS tree size expected");
+ else if (atoi($2) < 0)
+ cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0;
+ else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi($2);
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free($2);
+ }
+ ;
+server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG
+ {
+ #ifdef CLIENT_SUBNET
+ OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("IPv6 ECS tree size expected");
+ else if (atoi($2) < 0)
+ cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0;
+ else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi($2);
+ #else
+ OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+ #endif
+ free($2);
+ }
+ ;
server_interface: VAR_INTERFACE STRING_ARG
{
OUTYY(("P(server_interface:%s)\n", $2));
@@ -747,6 +822,28 @@ server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG
yyerror("out of memory");
}
;
+server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG
+ {
+ OUTYY(("P(server_tls_ciphers:%s)\n", $2));
+ free(cfg_parser->cfg->tls_ciphers);
+ cfg_parser->cfg->tls_ciphers = $2;
+ }
+ ;
+server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG
+ {
+ OUTYY(("P(server_tls_ciphersuites:%s)\n", $2));
+ free(cfg_parser->cfg->tls_ciphersuites);
+ cfg_parser->cfg->tls_ciphersuites = $2;
+ }
+ ;
+server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG
+ {
+ OUTYY(("P(server_tls_session_ticket_keys:%s)\n", $2));
+ if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
+ $2))
+ yyerror("out of memory");
+ }
+ ;
server_use_systemd: VAR_USE_SYSTEMD STRING_ARG
{
OUTYY(("P(server_use_systemd:%s)\n", $2));
@@ -806,6 +903,15 @@ server_log_replies: VAR_LOG_REPLIES STRING_ARG
free($2);
}
;
+server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG
+ {
+ OUTYY(("P(server_log_tag_queryreply:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG
{
OUTYY(("P(server_log_servfail:%s)\n", $2));
@@ -1047,6 +1153,14 @@ server_ip_freebind: VAR_IP_FREEBIND STRING_ARG
free($2);
}
;
+server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG
+ {
+ OUTYY(("P(server_stream_wait_size:%s)\n", $2));
+ if(!cfg_parse_memsize($2, &cfg_parser->cfg->stream_wait_size))
+ yyerror("memory size expected");
+ free($2);
+ }
+ ;
server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG
{
OUTYY(("P(server_edns_buffer_size:%s)\n", $2));
@@ -1342,6 +1456,15 @@ server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG
free($2);
}
;
+server_deny_any: VAR_DENY_ANY STRING_ARG
+ {
+ OUTYY(("P(server_deny_any:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->deny_any = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG
{
OUTYY(("P(server_unwanted_reply_threshold:%s)\n", $2));
@@ -1380,6 +1503,8 @@ server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG
yyerror("expected deny, refuse, deny_non_local, "
"refuse_non_local, allow, allow_setrd or "
"allow_snoop in access control action");
+ free($2);
+ free($3);
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3))
fatal_exit("out of memory adding acl");
@@ -1658,13 +1783,15 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
&& strcmp($3, "always_refuse")!=0
&& strcmp($3, "always_nxdomain")!=0
&& strcmp($3, "noview")!=0
- && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0)
+ && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) {
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
"always_transparent, always_refuse, "
"always_nxdomain, noview or nodefault");
- else if(strcmp($3, "nodefault")==0) {
+ free($2);
+ free($3);
+ } else if(strcmp($3, "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->
local_zones_nodefault, $2))
fatal_exit("out of memory adding local-zone");
@@ -1718,6 +1845,13 @@ server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG
free($2);
}
;
+server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG
+ {
+ OUTYY(("P(server_unknown_server_time_limit:%s)\n", $2));
+ cfg_parser->cfg->unknown_server_time_limit = atoi($2);
+ free($2);
+ }
+ ;
server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG
{
OUTYY(("P(server_max_udp_size:%s)\n", $2));
@@ -1770,8 +1904,10 @@ server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG
&len);
free($3);
OUTYY(("P(server_local_zone_tag:%s)\n", $2));
- if(!bitlist)
+ if(!bitlist) {
yyerror("could not parse tags, (define-tag them first)");
+ free($2);
+ }
if(bitlist) {
if(!cfg_strbytelist_insert(
&cfg_parser->cfg->local_zone_tags,
@@ -1789,8 +1925,10 @@ server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG
&len);
free($3);
OUTYY(("P(server_access_control_tag:%s)\n", $2));
- if(!bitlist)
+ if(!bitlist) {
yyerror("could not parse tags, (define-tag them first)");
+ free($2);
+ }
if(bitlist) {
if(!cfg_strbytelist_insert(
&cfg_parser->cfg->acl_tags,
@@ -1843,8 +1981,6 @@ server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG
if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
$2, $3)) {
yyerror("out of memory");
- free($2);
- free($3);
}
}
;
@@ -1855,8 +1991,10 @@ server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG
&len);
free($3);
OUTYY(("P(response_ip_tag:%s)\n", $2));
- if(!bitlist)
+ if(!bitlist) {
yyerror("could not parse tags, (define-tag them first)");
+ free($2);
+ }
if(bitlist) {
if(!cfg_strbytelist_insert(
&cfg_parser->cfg->respip_tags,
@@ -1933,6 +2071,8 @@ server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG
OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", $2, $3));
if(atoi($3) == 0 && strcmp($3, "0") != 0) {
yyerror("number expected");
+ free($2);
+ free($3);
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_for_domain, $2, $3))
@@ -1946,6 +2086,8 @@ server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG
OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", $2, $3));
if(atoi($3) == 0 && strcmp($3, "0") != 0) {
yyerror("number expected");
+ free($2);
+ free($3);
} else {
if(!cfg_str2list_insert(&cfg_parser->cfg->
ratelimit_below_domain, $2, $3))
@@ -1974,19 +2116,25 @@ server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG
;
server_low_rtt: VAR_LOW_RTT STRING_ARG
{
- OUTYY(("P(server_low_rtt:%s)\n", $2));
- if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
+ free($2);
+ }
+ ;
+server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG
+ {
+ OUTYY(("P(server_fast_server_num:%s)\n", $2));
+ if(atoi($2) <= 0)
yyerror("number expected");
- else cfg_parser->cfg->low_rtt = atoi($2);
+ else cfg_parser->cfg->fast_server_num = atoi($2);
free($2);
}
;
-server_low_rtt_permil: VAR_LOW_RTT_PERMIL STRING_ARG
+server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG
{
- OUTYY(("P(server_low_rtt_permil:%s)\n", $2));
+ OUTYY(("P(server_fast_server_permil:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
- else cfg_parser->cfg->low_rtt_permil = atoi($2);
+ else cfg_parser->cfg->fast_server_permil = atoi($2);
free($2);
}
;
@@ -2017,10 +2165,10 @@ server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ipsecmod_enabled = (strcmp($2, "yes")==0);
- free($2);
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
#endif
+ free($2);
}
;
server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG
@@ -2030,10 +2178,10 @@ server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp($2, "yes")==0);
- free($2);
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
#endif
+ free($2);
}
;
server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG
@@ -2044,6 +2192,7 @@ server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG
cfg_parser->cfg->ipsecmod_hook = $2;
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free($2);
#endif
}
;
@@ -2057,6 +2206,7 @@ server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG
free($2);
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free($2);
#endif
}
;
@@ -2068,6 +2218,7 @@ server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG
yyerror("out of memory");
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free($2);
#endif
}
;
@@ -2081,6 +2232,7 @@ server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG
free($2);
#else
OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
+ free($2);
#endif
}
;
@@ -2288,13 +2440,15 @@ view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
&& strcmp($3, "always_refuse")!=0
&& strcmp($3, "always_nxdomain")!=0
&& strcmp($3, "noview")!=0
- && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0)
+ && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) {
yyerror("local-zone type: expected static, deny, "
"refuse, redirect, transparent, "
"typetransparent, inform, inform_deny, "
"always_transparent, always_refuse, "
"always_nxdomain, noview or nodefault");
- else if(strcmp($3, "nodefault")==0) {
+ free($2);
+ free($3);
+ } else if(strcmp($3, "nodefault")==0) {
if(!cfg_strlist_insert(&cfg_parser->cfg->views->
local_zones_nodefault, $2))
fatal_exit("out of memory adding local-zone");
@@ -2330,7 +2484,6 @@ view_local_data: VAR_LOCAL_DATA STRING_ARG
OUTYY(("P(view_local_data:%s)\n", $2));
if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, $2)) {
fatal_exit("out of memory adding local-data");
- free($2);
}
}
;
@@ -2453,6 +2606,7 @@ dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap = (strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG
@@ -2468,6 +2622,7 @@ dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_send_identity = (strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG
@@ -2476,6 +2631,7 @@ dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_send_version = (strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG
@@ -2499,6 +2655,7 @@ dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES ST
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_resolver_query_messages =
(strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG
@@ -2508,6 +2665,7 @@ dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSA
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_resolver_response_messages =
(strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG
@@ -2517,6 +2675,7 @@ dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_client_query_messages =
(strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG
@@ -2526,6 +2685,7 @@ dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_client_response_messages =
(strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG
@@ -2535,6 +2695,7 @@ dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
(strcmp($2, "yes")==0);
+ free($2);
}
;
dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG
@@ -2544,6 +2705,7 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
yyerror("expected yes or no.");
else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
(strcmp($2, "yes")==0);
+ free($2);
}
;
pythonstart: VAR_PYTHON
@@ -2590,15 +2752,14 @@ server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG
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");
+ if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
+ $2, $3))
+ fatal_exit("out of memory adding response-ip-data");
}
;
dnscstart: VAR_DNSCRYPT
{
OUTYY(("\nP(dnscrypt:)\n"));
- OUTYY(("\nP(dnscrypt:)\n"));
}
;
contents_dnsc: contents_dnsc content_dnsc
@@ -2625,7 +2786,6 @@ dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG
dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG
{
OUTYY(("P(dnsc_dnscrypt_port:%s)\n", $2));
-
if(atoi($2) == 0)
yyerror("port number expected");
else cfg_parser->cfg->dnscrypt_port = atoi($2);
@@ -2727,6 +2887,7 @@ cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG
cfg_parser->cfg->cachedb_backend = $2;
#else
OUTYY(("P(Compiled without cachedb, ignoring)\n"));
+ free($2);
#endif
}
;
diff --git a/util/data/msgencode.c b/util/data/msgencode.c
index 6bc3216ff9e9..4c0a5550be13 100644
--- a/util/data/msgencode.c
+++ b/util/data/msgencode.c
@@ -50,6 +50,11 @@
#include "sldns/sbuffer.h"
#include "services/localzone.h"
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#include <sys/time.h>
+
/** return code that means the function ran out of memory. negative so it does
* not conflict with DNS rcodes. */
#define RETVAL_OUTMEM -2
@@ -672,7 +677,7 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
}
/* roundrobin offset. using query id for random number. With ntohs
* for different roundrobins for sequential id client senders. */
- rr_offset = RRSET_ROUNDROBIN?ntohs(id):0;
+ rr_offset = RRSET_ROUNDROBIN?ntohs(id)+(timenow?timenow:time(NULL)):0;
/* "prepend" any local alias records in the answer section if this
* response is supposed to be authoritative. Currently it should
diff --git a/util/data/msgreply.c b/util/data/msgreply.c
index 45d42a87f458..32aec4bf4c95 100644
--- a/util/data/msgreply.c
+++ b/util/data/msgreply.c
@@ -195,6 +195,8 @@ rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to,
}
if(*rr_ttl < MIN_TTL)
*rr_ttl = MIN_TTL;
+ if(*rr_ttl > MAX_TTL)
+ *rr_ttl = MAX_TTL;
if(*rr_ttl < data->ttl)
data->ttl = *rr_ttl;
@@ -853,7 +855,9 @@ log_reply_info(enum verbosity_value v, struct query_info *qinf,
addr_to_str(addr, addrlen, clientip_buf, sizeof(clientip_buf));
if(rcode == LDNS_RCODE_FORMERR)
{
- log_info("%s - - - %s - - - ", clientip_buf, rcode_buf);
+ if(LOG_TAG_QUERYREPLY)
+ log_reply("%s - - - %s - - - ", clientip_buf, rcode_buf);
+ else log_info("%s - - - %s - - - ", clientip_buf, rcode_buf);
} else {
if(qinf->qname)
dname_str(qinf->qname, qname_buf);
@@ -861,7 +865,11 @@ log_reply_info(enum verbosity_value v, struct query_info *qinf,
pktlen = sldns_buffer_limit(rmsg);
sldns_wire2str_type_buf(qinf->qtype, type_buf, sizeof(type_buf));
sldns_wire2str_class_buf(qinf->qclass, class_buf, sizeof(class_buf));
- log_info("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d",
+ if(LOG_TAG_QUERYREPLY)
+ log_reply("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d",
+ clientip_buf, qname_buf, type_buf, class_buf,
+ rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec, cached, (int)pktlen);
+ else log_info("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d",
clientip_buf, qname_buf, type_buf, class_buf,
rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec, cached, (int)pktlen);
}
diff --git a/util/edns.c b/util/edns.c
index 2c4e4a1fd275..d19952df0946 100644
--- a/util/edns.c
+++ b/util/edns.c
@@ -40,7 +40,7 @@
*/
#include "config.h"
-
+#include "util/edns.h"
#include "util/config_file.h"
#include "util/netevent.h"
#include "util/regional.h"
diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c
index 302b6f7843ea..02f85e8dc4ab 100644
--- a/util/fptr_wlist.c
+++ b/util/fptr_wlist.c
@@ -303,6 +303,9 @@ fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr)
{
if(fptr == NULL) return 1;
else if(fptr == &rrset_markdel) return 1;
+#ifdef CLIENT_SUBNET
+ else if(fptr == &subnet_markdel) return 1;
+#endif
return 0;
}
@@ -561,9 +564,12 @@ int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr)
#ifdef CLIENT_SUBNET
if(fptr == &ecs_whitelist_check)
return 1;
-#else
- (void)fptr;
#endif
+#ifdef WITH_PYTHONMODULE
+ if(fptr == &python_inplace_cb_query_generic)
+ return 1;
+#endif
+ (void)fptr;
return 0;
}
diff --git a/util/iana_ports.inc b/util/iana_ports.inc
index e24322931326..5ead47f0f665 100644
--- a/util/iana_ports.inc
+++ b/util/iana_ports.inc
@@ -4796,10 +4796,12 @@
8206,
8207,
8208,
+8211,
8230,
8231,
8232,
8243,
+8266,
8276,
8280,
8282,
diff --git a/util/log.c b/util/log.c
index 75a58f9de3db..318ff1d79107 100644
--- a/util/log.c
+++ b/util/log.c
@@ -78,8 +78,6 @@ static const char* ident="unbound";
/** are we using syslog(3) to log to */
static int logging_to_syslog = 0;
#endif /* HAVE_SYSLOG_H */
-/** time to print in log, if NULL, use time(2) */
-static time_t* log_now = NULL;
/** print time in UTC or in secondsfrom1970 */
static int log_time_asc = 0;
@@ -181,11 +179,6 @@ void log_ident_set(const char* id)
ident = id;
}
-void log_set_time(time_t* t)
-{
- log_now = t;
-}
-
void log_set_time_asc(int use_asc)
{
log_time_asc = use_asc;
@@ -255,9 +248,7 @@ log_vmsg(int pri, const char* type,
lock_quick_unlock(&log_lock);
return;
}
- if(log_now)
- now = (time_t)*log_now;
- else now = (time_t)time(NULL);
+ now = (time_t)time(NULL);
#if defined(HAVE_STRFTIME) && defined(HAVE_LOCALTIME_R)
if(log_time_asc && strftime(tmbuf, sizeof(tmbuf), "%b %d %H:%M:%S",
localtime_r(&now, &tm))%(sizeof(tmbuf)) != 0) {
@@ -391,6 +382,24 @@ log_hex(const char* msg, void* data, size_t length)
log_hex_f(verbosity, msg, data, length);
}
+void
+log_query(const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ log_vmsg(LOG_INFO, "query", format, args);
+ va_end(args);
+}
+
+void
+log_reply(const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ log_vmsg(LOG_INFO, "reply", format, args);
+ va_end(args);
+}
+
void log_buf(enum verbosity_value level, const char* msg, sldns_buffer* buf)
{
if(verbosity < level)
diff --git a/util/log.h b/util/log.h
index f73c0754d657..81d9d837d72b 100644
--- a/util/log.h
+++ b/util/log.h
@@ -113,13 +113,6 @@ int log_thread_get(void);
void log_ident_set(const char* id);
/**
- * Set the time value to print in log entries.
- * @param t: the point is copied and used to find the time.
- * if NULL, time(2) is used.
- */
-void log_set_time(time_t* t);
-
-/**
* Set if the time value is printed ascii or decimal in log entries.
* @param use_asc: if true, ascii is printed, otherwise decimal.
* If the conversion fails or you have no time functions,
@@ -161,6 +154,20 @@ void log_warn(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
void log_hex(const char* msg, void* data, size_t length);
/**
+ * Log query.
+ * Pass printf formatted arguments. No trailing newline is needed.
+ * @param format: printf-style format string. Arguments follow.
+ */
+void log_query(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
+
+/**
+ * Log reply.
+ * Pass printf formatted arguments. No trailing newline is needed.
+ * @param format: printf-style format string. Arguments follow.
+ */
+void log_reply(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
+
+/**
* Easy alternative for log_hex, takes a sldns_buffer.
* @param level: verbosity level for this message, compared to global
* verbosity setting.
diff --git a/util/mini_event.c b/util/mini_event.c
index 14e9efe4790d..faadf1a23c8d 100644
--- a/util/mini_event.c
+++ b/util/mini_event.c
@@ -41,6 +41,7 @@
*/
#include "config.h"
+#include "util/mini_event.h"
#ifdef HAVE_TIME_H
#include <time.h>
#endif
@@ -48,7 +49,6 @@
#if defined(USE_MINI_EVENT) && !defined(USE_WINSOCK)
#include <signal.h>
-#include "util/mini_event.h"
#include "util/fptr_wlist.h"
/** compare events in tree, based on timevalue, ptr for uniqueness */
diff --git a/util/net_help.c b/util/net_help.c
index 91368c847597..1a4fa8a58e6f 100644
--- a/util/net_help.c
+++ b/util/net_help.c
@@ -43,11 +43,14 @@
#include "util/data/dname.h"
#include "util/module.h"
#include "util/regional.h"
+#include "util/config_file.h"
#include "sldns/parseutil.h"
#include "sldns/wire2str.h"
#include <fcntl.h>
#ifdef HAVE_OPENSSL_SSL_H
#include <openssl/ssl.h>
+#include <openssl/evp.h>
+#include <openssl/rand.h>
#endif
#ifdef HAVE_OPENSSL_ERR_H
#include <openssl/err.h>
@@ -67,6 +70,15 @@ int MINIMAL_RESPONSES = 0;
/** rrset order roundrobin: default is no */
int RRSET_ROUNDROBIN = 0;
+/** log tag queries with name instead of 'info' for filtering */
+int LOG_TAG_QUERYREPLY = 0;
+
+static struct tls_session_ticket_key {
+ unsigned char *key_name;
+ unsigned char *aes_key;
+ unsigned char *hmac_key;
+} *ticket_keys;
+
/* returns true is string addr is an ip6 specced address */
int
str_is_ip6(const char* str)
@@ -361,6 +373,37 @@ log_nametypeclass(enum verbosity_value v, const char* str, uint8_t* name,
log_info("%s %s %s %s", str, buf, ts, cs);
}
+void
+log_query_in(const char* str, uint8_t* name, uint16_t type, uint16_t dclass)
+{
+ char buf[LDNS_MAX_DOMAINLEN+1];
+ char t[12], c[12];
+ const char *ts, *cs;
+ dname_str(name, buf);
+ if(type == LDNS_RR_TYPE_TSIG) ts = "TSIG";
+ else if(type == LDNS_RR_TYPE_IXFR) ts = "IXFR";
+ else if(type == LDNS_RR_TYPE_AXFR) ts = "AXFR";
+ else if(type == LDNS_RR_TYPE_MAILB) ts = "MAILB";
+ else if(type == LDNS_RR_TYPE_MAILA) ts = "MAILA";
+ else if(type == LDNS_RR_TYPE_ANY) ts = "ANY";
+ else if(sldns_rr_descript(type) && sldns_rr_descript(type)->_name)
+ ts = sldns_rr_descript(type)->_name;
+ else {
+ snprintf(t, sizeof(t), "TYPE%d", (int)type);
+ ts = t;
+ }
+ if(sldns_lookup_by_id(sldns_rr_classes, (int)dclass) &&
+ sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name)
+ cs = sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name;
+ else {
+ snprintf(c, sizeof(c), "CLASS%d", (int)dclass);
+ cs = c;
+ }
+ if(LOG_TAG_QUERYREPLY)
+ log_query("%s %s %s %s", str, buf, ts, cs);
+ else log_info("%s %s %s %s", str, buf, ts, cs);
+}
+
void log_name_addr(enum verbosity_value v, const char* str, uint8_t* zone,
struct sockaddr_storage* addr, socklen_t addrlen)
{
@@ -1056,3 +1099,128 @@ void ub_openssl_lock_delete(void)
#endif /* OPENSSL_THREADS */
}
+int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_session_ticket_keys) {
+#ifdef HAVE_SSL
+ size_t s = 1;
+ struct config_strlist* p;
+ struct tls_session_ticket_key *keys;
+ for(p = tls_session_ticket_keys; p; p = p->next) {
+ s++;
+ }
+ keys = calloc(s, sizeof(struct tls_session_ticket_key));
+ memset(keys, 0, s*sizeof(*keys));
+ ticket_keys = keys;
+
+ for(p = tls_session_ticket_keys; p; p = p->next) {
+ size_t n;
+ unsigned char *data = (unsigned char *)malloc(80);
+ FILE *f = fopen(p->str, "r");
+ if(!f) {
+ log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno));
+ free(data);
+ return 0;
+ }
+ n = fread(data, 1, 80, f);
+ fclose(f);
+
+ if(n != 80) {
+ log_err("tls-session-ticket-key %s is %d bytes, must be 80 bytes", p->str, (int)n);
+ free(data);
+ return 0;
+ }
+ verbose(VERB_OPS, "read tls-session-ticket-key: %s", p->str);
+
+ keys->key_name = data;
+ keys->aes_key = data + 16;
+ keys->hmac_key = data + 48;
+ keys++;
+ }
+ /* terminate array with NULL key name entry */
+ keys->key_name = NULL;
+ if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) {
+ log_err("no support for TLS session ticket");
+ return 0;
+ }
+ return 1;
+#else
+ (void)sslctx;
+ (void)tls_session_ticket_keys;
+ return 0;
+#endif
+
+}
+
+int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name, unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc)
+{
+#ifdef HAVE_SSL
+ const EVP_MD *digest;
+ const EVP_CIPHER *cipher;
+ int evp_cipher_length;
+ digest = EVP_sha256();
+ cipher = EVP_aes_256_cbc();
+ evp_cipher_length = EVP_CIPHER_iv_length(cipher);
+ if( enc == 1 ) {
+ /* encrypt */
+ verbose(VERB_CLIENT, "start session encrypt");
+ memcpy(key_name, ticket_keys->key_name, 16);
+ if (RAND_bytes(iv, evp_cipher_length) != 1) {
+ verbose(VERB_CLIENT, "RAND_bytes failed");
+ return -1;
+ }
+ if (EVP_EncryptInit_ex(evp_sctx, cipher, NULL, ticket_keys->aes_key, iv) != 1) {
+ verbose(VERB_CLIENT, "EVP_EncryptInit_ex failed");
+ return -1;
+ }
+ if (HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL) != 1) {
+ verbose(VERB_CLIENT, "HMAC_Init_ex failed");
+ return -1;
+ }
+ return 1;
+ } else if (enc == 0) {
+ /* decrypt */
+ struct tls_session_ticket_key *key;
+ verbose(VERB_CLIENT, "start session decrypt");
+ for(key = ticket_keys; key->key_name != NULL; key++) {
+ if (!memcmp(key_name, key->key_name, 16)) {
+ verbose(VERB_CLIENT, "Found session_key");
+ break;
+ }
+ }
+ if(key->key_name == NULL) {
+ verbose(VERB_CLIENT, "Not found session_key");
+ return 0;
+ }
+
+ if (HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL) != 1) {
+ verbose(VERB_CLIENT, "HMAC_Init_ex failed");
+ return -1;
+ }
+ if (EVP_DecryptInit_ex(evp_sctx, cipher, NULL, key->aes_key, iv) != 1) {
+ log_err("EVP_DecryptInit_ex failed");
+ return -1;
+ }
+
+ return (key == ticket_keys) ? 1 : 2;
+ }
+ return -1;
+#else
+ (void)key_name;
+ (void)iv;
+ (void)evp_sctx;
+ (void)hmac_ctx;
+ (void)enc;
+ return 0;
+#endif
+}
+
+void
+listen_sslctx_delete_ticket_keys(void)
+{
+ struct tls_session_ticket_key *key;
+ if(!ticket_keys) return;
+ for(key = ticket_keys; key->key_name != NULL; key++) {
+ free(key->key_name);
+ }
+ free(ticket_keys);
+ ticket_keys = NULL;
+}
diff --git a/util/net_help.h b/util/net_help.h
index de2e1accfd40..0b197fbdd6e7 100644
--- a/util/net_help.h
+++ b/util/net_help.h
@@ -44,6 +44,7 @@
#include "util/log.h"
struct sock_list;
struct regional;
+struct config_strlist;
/** DNS constants for uint16_t style flag manipulation. host byteorder.
* 1 1 1 1 1 1
@@ -99,6 +100,9 @@ extern int MINIMAL_RESPONSES;
/** rrset order roundrobin */
extern int RRSET_ROUNDROBIN;
+/** log tag queries with name instead of 'info' for filtering */
+extern int LOG_TAG_QUERYREPLY;
+
/**
* See if string is ip4 or ip6.
* @param str: IP specification.
@@ -236,6 +240,12 @@ void log_nametypeclass(enum verbosity_value v, const char* str,
uint8_t* name, uint16_t type, uint16_t dclass);
/**
+ * Like log_nametypeclass, but logs with log_query for query logging
+ */
+void log_query_in(const char* str, uint8_t* name, uint16_t type,
+ uint16_t dclass);
+
+/**
* Compare two sockaddrs. Imposes an ordering on the addresses.
* Compares address and port.
* @param addr1: address 1.
@@ -428,4 +438,30 @@ int ub_openssl_lock_init(void);
*/
void ub_openssl_lock_delete(void);
+/**
+ * setup TLS session ticket
+ * @param sslctx: the SSL_CTX to use (from connect_sslctx_create())
+ * @param tls_session_ticket_keys: TLS ticket secret filenames
+ * @return false on failure (alloc failure).
+ */
+int listen_sslctx_setup_ticket_keys(void* sslctx,
+ struct config_strlist* tls_session_ticket_keys);
+
+/**
+ * callback TLS session ticket encrypt and decrypt
+ * For use with SSL_CTX_set_tlsext_ticket_key_cb
+ * @param s: the SSL_CTX to use (from connect_sslctx_create())
+ * @param key_name: secret name, 16 bytes
+ * @param iv: up to EVP_MAX_IV_LENGTH.
+ * @param evp_ctx: the evp cipher context, function sets this.
+ * @param hmac_ctx: the hmax context, function sets this.
+ * @param enc: 1 is encrypt, 0 is decrypt
+ * @return 0 on no ticket, 1 for okay, and 2 for okay but renew the ticket
+ * (the ticket is decrypt only). and <0 for failures.
+ */
+int tls_session_ticket_key_cb(void *s, unsigned char* key_name,unsigned char* iv, void *evp_ctx, void *hmac_ctx, int enc);
+
+/** Free memory used for TLS session ticket keys */
+void listen_sslctx_delete_ticket_keys(void);
+
#endif /* NET_HELP_H */
diff --git a/util/netevent.c b/util/netevent.c
index 373538041420..a507faf7e411 100644
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -50,6 +50,7 @@
#include "sldns/str2wire.h"
#include "dnstap/dnstap.h"
#include "dnscrypt/dnscrypt.h"
+#include "services/listen_dnsport.h"
#ifdef HAVE_OPENSSL_SSL_H
#include <openssl/ssl.h>
#endif
@@ -150,7 +151,8 @@ struct internal_signal {
/** create a tcp handler with a parent */
static struct comm_point* comm_point_create_tcp_handler(
struct comm_base *base, struct comm_point* parent, size_t bufsize,
- comm_point_callback_type* callback, void* callback_arg);
+ struct sldns_buffer* spoolbuf, comm_point_callback_type* callback,
+ void* callback_arg);
/* -------- End of local definitions -------- */
@@ -988,7 +990,11 @@ tcp_callback_writer(struct comm_point* c)
c->tcp_byte_count = 0;
/* switch from listening(write) to listening(read) */
comm_point_stop_listening(c);
- comm_point_start_listening(c, -1, -1);
+ if(c->tcp_req_info) {
+ tcp_req_info_handle_writedone(c->tcp_req_info);
+ } else {
+ comm_point_start_listening(c, -1, -1);
+ }
}
/** do the callback when reading is done */
@@ -1002,9 +1008,13 @@ tcp_callback_reader(struct comm_point* c)
c->tcp_byte_count = 0;
if(c->type == comm_tcp)
comm_point_stop_listening(c);
- fptr_ok(fptr_whitelist_comm_point(c->callback));
- if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) {
- comm_point_start_listening(c, -1, c->tcp_timeout_msec);
+ if(c->tcp_req_info) {
+ tcp_req_info_handle_readdone(c->tcp_req_info);
+ } else {
+ fptr_ok(fptr_whitelist_comm_point(c->callback));
+ if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) {
+ comm_point_start_listening(c, -1, c->tcp_timeout_msec);
+ }
}
}
@@ -1163,6 +1173,8 @@ ssl_handle_read(struct comm_point* c)
c->tcp_byte_count))) <= 0) {
int want = SSL_get_error(c->ssl, r);
if(want == SSL_ERROR_ZERO_RETURN) {
+ if(c->tcp_req_info)
+ return tcp_req_info_handle_read_close(c->tcp_req_info);
return 0; /* shutdown, closed */
} else if(want == SSL_ERROR_WANT_READ) {
ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ);
@@ -1205,6 +1217,8 @@ ssl_handle_read(struct comm_point* c)
if(r <= 0) {
int want = SSL_get_error(c->ssl, r);
if(want == SSL_ERROR_ZERO_RETURN) {
+ if(c->tcp_req_info)
+ return tcp_req_info_handle_read_close(c->tcp_req_info);
return 0; /* shutdown, closed */
} else if(want == SSL_ERROR_WANT_READ) {
ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ);
@@ -1365,9 +1379,11 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
/* read length bytes */
r = recv(fd,(void*)sldns_buffer_at(c->buffer,c->tcp_byte_count),
sizeof(uint16_t)-c->tcp_byte_count, 0);
- if(r == 0)
+ if(r == 0) {
+ if(c->tcp_req_info)
+ return tcp_req_info_handle_read_close(c->tcp_req_info);
return 0;
- else if(r == -1) {
+ } else if(r == -1) {
#ifndef USE_WINSOCK
if(errno == EINTR || errno == EAGAIN)
return 1;
@@ -1416,6 +1432,8 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok)
r = recv(fd, (void*)sldns_buffer_current(c->buffer),
sldns_buffer_remaining(c->buffer), 0);
if(r == 0) {
+ if(c->tcp_req_info)
+ return tcp_req_info_handle_read_close(c->tcp_req_info);
return 0;
} else if(r == -1) {
#ifndef USE_WINSOCK
@@ -1669,6 +1687,29 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c)
return 1;
}
+/** read again to drain buffers when there could be more to read */
+static void
+tcp_req_info_read_again(int fd, struct comm_point* c)
+{
+ while(c->tcp_req_info->read_again) {
+ int r;
+ c->tcp_req_info->read_again = 0;
+ if(c->tcp_is_reading)
+ r = comm_point_tcp_handle_read(fd, c, 0);
+ else r = comm_point_tcp_handle_write(fd, c);
+ if(!r) {
+ reclaim_tcp_handler(c);
+ if(!c->tcp_do_close) {
+ fptr_ok(fptr_whitelist_comm_point(
+ c->callback));
+ (void)(*c->callback)(c, c->cb_arg,
+ NETEVENT_CLOSED, NULL);
+ }
+ return;
+ }
+ }
+}
+
void
comm_point_tcp_handle_callback(int fd, short event, void* arg)
{
@@ -1698,6 +1739,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
#endif
if(event&UB_EV_READ) {
+ int has_tcpq = (c->tcp_req_info != NULL);
if(!comm_point_tcp_handle_read(fd, c, 0)) {
reclaim_tcp_handler(c);
if(!c->tcp_do_close) {
@@ -1707,9 +1749,12 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
NETEVENT_CLOSED, NULL);
}
}
+ if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again)
+ tcp_req_info_read_again(fd, c);
return;
}
if(event&UB_EV_WRITE) {
+ int has_tcpq = (c->tcp_req_info != NULL);
if(!comm_point_tcp_handle_write(fd, c)) {
reclaim_tcp_handler(c);
if(!c->tcp_do_close) {
@@ -1719,6 +1764,8 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
NETEVENT_CLOSED, NULL);
}
}
+ if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again)
+ tcp_req_info_read_again(fd, c);
return;
}
if(event&UB_EV_TIMEOUT) {
@@ -2523,7 +2570,8 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd,
static struct comm_point*
comm_point_create_tcp_handler(struct comm_base *base,
struct comm_point* parent, size_t bufsize,
- comm_point_callback_type* callback, void* callback_arg)
+ struct sldns_buffer* spoolbuf, comm_point_callback_type* callback,
+ void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -2579,6 +2627,20 @@ comm_point_create_tcp_handler(struct comm_base *base,
c->repinfo.c = c;
c->callback = callback;
c->cb_arg = callback_arg;
+ if(spoolbuf) {
+ c->tcp_req_info = tcp_req_info_create(spoolbuf);
+ if(!c->tcp_req_info) {
+ log_err("could not create tcp commpoint");
+ sldns_buffer_free(c->buffer);
+ free(c->timeout);
+ free(c->ev);
+ free(c);
+ return NULL;
+ }
+ c->tcp_req_info->cp = c;
+ c->tcp_do_close = 1;
+ c->tcp_do_toggle_rw = 0;
+ }
/* add to parent free list */
c->tcp_free = parent->tcp_free;
parent->tcp_free = c;
@@ -2590,6 +2652,9 @@ comm_point_create_tcp_handler(struct comm_base *base,
{
log_err("could not basetset tcphdl event");
parent->tcp_free = c->tcp_free;
+ tcp_req_info_delete(c->tcp_req_info);
+ sldns_buffer_free(c->buffer);
+ free(c->timeout);
free(c->ev);
free(c);
return NULL;
@@ -2600,7 +2665,8 @@ comm_point_create_tcp_handler(struct comm_base *base,
struct comm_point*
comm_point_create_tcp(struct comm_base *base, int fd, int num,
int idle_timeout, struct tcl_list* tcp_conn_limit, size_t bufsize,
- comm_point_callback_type* callback, void* callback_arg)
+ struct sldns_buffer* spoolbuf, comm_point_callback_type* callback,
+ void* callback_arg)
{
struct comm_point* c = (struct comm_point*)calloc(1,
sizeof(struct comm_point));
@@ -2667,7 +2733,7 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num,
/* now prealloc the tcp handlers */
for(i=0; i<num; i++) {
c->tcp_handlers[i] = comm_point_create_tcp_handler(base,
- c, bufsize, callback, callback_arg);
+ c, bufsize, spoolbuf, callback, callback_arg);
if(!c->tcp_handlers[i]) {
comm_point_delete(c);
return NULL;
@@ -2949,6 +3015,8 @@ comm_point_close(struct comm_point* c)
}
}
tcl_close_connection(c->tcl_addr);
+ if(c->tcp_req_info)
+ tcp_req_info_clear(c->tcp_req_info);
/* close fd after removing from event lists, or epoll.. is messed up */
if(c->fd != -1 && !c->do_not_close) {
if(c->type == comm_tcp || c->type == comm_http) {
@@ -2992,6 +3060,9 @@ comm_point_delete(struct comm_point* c)
sldns_buffer_free(c->dnscrypt_buffer);
}
#endif
+ if(c->tcp_req_info) {
+ tcp_req_info_delete(c->tcp_req_info);
+ }
}
ub_event_free(c->ev->ev);
free(c->ev);
@@ -3032,8 +3103,12 @@ comm_point_send_reply(struct comm_reply *repinfo)
dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv,
&repinfo->addr, repinfo->c->type, repinfo->c->buffer);
#endif
- comm_point_start_listening(repinfo->c, -1,
- repinfo->c->tcp_timeout_msec);
+ if(repinfo->c->tcp_req_info) {
+ tcp_req_info_send_reply(repinfo->c->tcp_req_info);
+ } else {
+ comm_point_start_listening(repinfo->c, -1,
+ repinfo->c->tcp_timeout_msec);
+ }
}
}
@@ -3046,6 +3121,8 @@ comm_point_drop_reply(struct comm_reply* repinfo)
log_assert(repinfo->c->type != comm_tcp_accept);
if(repinfo->c->type == comm_udp)
return;
+ if(repinfo->c->tcp_req_info)
+ repinfo->c->tcp_req_info->is_drop = 1;
reclaim_tcp_handler(repinfo->c);
}
diff --git a/util/netevent.h b/util/netevent.h
index f6b6af688b94..d80c72b33431 100644
--- a/util/netevent.h
+++ b/util/netevent.h
@@ -268,6 +268,9 @@ struct comm_point {
/** the entry for the connection. */
struct tcl_addr* tcl_addr;
+ /** the structure to keep track of open requests on this channel */
+ struct tcp_req_info* tcp_req_info;
+
#ifdef USE_MSG_FASTOPEN
/** used to track if the sendto() call should be done when using TFO. */
int tcp_do_fastopen;
@@ -455,6 +458,8 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base,
* @param idle_timeout: TCP idle timeout in ms.
* @param tcp_conn_limit: TCP connection limit info.
* @param bufsize: size of buffer to create for handlers.
+ * @param spoolbuf: shared spool buffer for tcp_req_info structures.
+ * or NULL to not create those structures in the tcp handlers.
* @param callback: callback function pointer for TCP handlers.
* @param callback_arg: will be passed to your callback function.
* @return: returns the TCP listener commpoint. You can find the
@@ -464,7 +469,8 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base,
*/
struct comm_point* comm_point_create_tcp(struct comm_base* base,
int fd, int num, int idle_timeout, struct tcl_list* tcp_conn_limit,
- size_t bufsize, comm_point_callback_type* callback, void* callback_arg);
+ size_t bufsize, struct sldns_buffer* spoolbuf,
+ comm_point_callback_type* callback, void* callback_arg);
/**
* Create an outgoing TCP commpoint. No file descriptor is opened, left at -1.
diff --git a/validator/val_neg.c b/validator/val_neg.c
index c494a6be637f..4c08e6bbc92f 100644
--- a/validator/val_neg.c
+++ b/validator/val_neg.c
@@ -235,6 +235,7 @@ void neg_delete_data(struct val_neg_cache* neg, struct val_neg_data* el)
/* remove it from the lru list */
neg_lru_remove(neg, el);
+ log_assert(neg->first != el && neg->last != el);
/* go up the tree and reduce counts */
p = el;
diff --git a/winrc/combined.ico b/winrc/combined.ico
index aa65d11e2e6f..d2a1f2e5b854 100644
--- a/winrc/combined.ico
+++ b/winrc/combined.ico
Binary files differ
diff --git a/winrc/setup_left.bmp b/winrc/setup_left.bmp
index ddc17d07969a..aaf7393517d9 100644
--- a/winrc/setup_left.bmp
+++ b/winrc/setup_left.bmp
Binary files differ
diff --git a/winrc/setup_top.bmp b/winrc/setup_top.bmp
index 79998ec642fb..992906ec2c89 100644
--- a/winrc/setup_top.bmp
+++ b/winrc/setup_top.bmp
Binary files differ
diff --git a/winrc/unbound16.ico b/winrc/unbound16.ico
deleted file mode 100644
index e62634b70641..000000000000
--- a/winrc/unbound16.ico
+++ /dev/null
Binary files differ
diff --git a/winrc/unbound256.png b/winrc/unbound256.png
new file mode 100644
index 000000000000..6f65045eae3f
--- /dev/null
+++ b/winrc/unbound256.png
Binary files differ
diff --git a/winrc/unbound32.ico b/winrc/unbound32.ico
index 64272eed44b9..e03e1bcb6ae8 100644
--- a/winrc/unbound32.ico
+++ b/winrc/unbound32.ico
Binary files differ
diff --git a/winrc/unbound48.ico b/winrc/unbound48.ico
deleted file mode 100644
index 074d12ebcfd3..000000000000
--- a/winrc/unbound48.ico
+++ /dev/null
Binary files differ
diff --git a/winrc/unbound64.ico b/winrc/unbound64.ico
deleted file mode 100644
index c02f68f0a196..000000000000
--- a/winrc/unbound64.ico
+++ /dev/null
Binary files differ
diff --git a/winrc/unbound64.png b/winrc/unbound64.png
deleted file mode 100644
index b37bf3f11d24..000000000000
--- a/winrc/unbound64.png
+++ /dev/null
Binary files differ