diff options
Diffstat (limited to '')
59 files changed, 4559 insertions, 2575 deletions
diff --git a/external/unbound/Makefile.in b/external/unbound/Makefile.in index 8ca74367a..40cf9a57d 100644 --- a/external/unbound/Makefile.in +++ b/external/unbound/Makefile.in @@ -25,6 +25,7 @@ DNSTAP_SRC=@DNSTAP_SRC@ DNSTAP_OBJ=@DNSTAP_OBJ@ WITH_PYTHONMODULE=@WITH_PYTHONMODULE@ WITH_PYUNBOUND=@WITH_PYUNBOUND@ +PY_MAJOR_VERSION=@PY_MAJOR_VERSION@ PYTHON_SITE_PKG=@PYTHON_SITE_PKG@ PYTHONMOD_INSTALL=@PYTHONMOD_INSTALL@ PYTHONMOD_UNINSTALL=@PYTHONMOD_UNINSTALL@ @@ -393,7 +394,7 @@ libunbound_wrap.lo libunbound_wrap.o: libunbound/python/libunbound_wrap.c \ unbound.h libunbound/python/libunbound_wrap.c: $(srcdir)/libunbound/python/libunbound.i unbound.h @-if test ! -d libunbound/python; then $(INSTALL) -d libunbound/python; fi - $(SWIG) -python -o $@ $(CPPFLAGS) $(srcdir)/libunbound/python/libunbound.i + $(SWIG) -python -o $@ $(CPPFLAGS) -DPY_MAJOR_VERSION=$(PY_MAJOR_VERSION) $(srcdir)/libunbound/python/libunbound.i # Pyunbound python unbound wrapper _unbound.la: libunbound_wrap.lo libunbound.la @@ -599,12 +600,13 @@ dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_de $(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/pkthdr.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 \ +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)/util/rtt.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/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.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/data/msgreply.h $(srcdir)/util/data/packed_rrset.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)/util/storage/slabhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ @@ -614,8 +616,9 @@ dname.lo dname.o: $(srcdir)/util/data/dname.c config.h $(srcdir)/util/data/dname $(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)/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)/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 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)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/packed_rrset.h \ @@ -640,8 +643,8 @@ iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterato $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/util/netevent.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)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/config_file.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/config_file.h $(srcdir)/util/random.h \ + $(srcdir)/sldns/wire2str.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)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \ @@ -679,15 +682,16 @@ iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/i $(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)/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)/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/netevent.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/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)/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/netevent.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)/services/outside_network.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \ @@ -700,29 +704,30 @@ localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/serv $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.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)/sldns/sbuffer.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)/sldns/sbuffer.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)/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)/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)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.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 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 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)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/rtt.h \ - $(srcdir)/util/data/msgparse.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/net_help.h $(srcdir)/util/random.h $(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)/dnstap/dnstap.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rtt.h $(srcdir)/util/data/msgparse.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/net_help.h $(srcdir)/util/random.h $(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)/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)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ @@ -735,8 +740,9 @@ config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/ut $(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)/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)/sldns/wire2str.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/util/iana_ports.inc + $(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)/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 \ @@ -747,15 +753,14 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(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)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \ - $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h + $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.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 \ @@ -823,13 +828,14 @@ val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/ 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)/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)/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)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.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)/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)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ + $(srcdir)/sldns/wire2str.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)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ @@ -882,11 +888,11 @@ val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/val $(srcdir)/util/net_help.h $(srcdir)/util/regional.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)/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)/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/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)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ @@ -904,10 +910,10 @@ unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir $(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)/util/net_help.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)/services/cache/infra.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/random.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/random.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)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ @@ -948,11 +954,11 @@ cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.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/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.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)/util/rbtree.h \ - $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.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 \ @@ -971,18 +977,18 @@ remote.lo remote.o: $(srcdir)/daemon/remote.c config.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)/util/netevent.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)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.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)/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/rtt.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/localzone.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/util/data/dname.h $(srcdir)/validator/validator.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/services/mesh.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/data/dname.h $(srcdir)/validator/validator.h \ $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/iterator/iter_delegpt.h $(srcdir)/services/outside_network.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/iterator/iter_delegpt.h \ + $(srcdir)/services/outside_network.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.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 \ @@ -990,25 +996,26 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(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)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/validator/val_kcache.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)/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/val_kcache.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 \ $(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)/services/cache/rrset.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/util/fptr_wlist.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)/util/net_help.h $(srcdir)/util/mini_event.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/fptr_wlist.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/net_help.h $(srcdir)/util/mini_event.h \ $(srcdir)/util/rbtree.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)/util/netevent.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)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.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)/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)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ @@ -1026,8 +1033,8 @@ testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/test $(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/rtt.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rtt.h $(srcdir)/util/fptr_wlist.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/net_help.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \ @@ -1037,8 +1044,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(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)/util/netevent.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)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.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)/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)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ @@ -1070,10 +1077,11 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/util/netevent.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)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/validator/val_kcache.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)/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/val_kcache.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)/testcode/testpkts.h \ $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h @@ -1083,9 +1091,10 @@ fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/t $(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 $(srcdir)/util/rtt.h $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h \ - $(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 + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h $(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)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ @@ -1122,7 +1131,7 @@ context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbou $(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)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.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)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ @@ -1130,8 +1139,8 @@ libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbou $(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)/services/localzone.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.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)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ @@ -1159,13 +1168,12 @@ streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util 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 + $(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)/util/net_help.h + $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h \ @@ -1173,8 +1181,8 @@ 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)/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)/util/net_help.h $(srcdir)/services/cache/dns.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)/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 \ @@ -1197,7 +1205,8 @@ keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h \ sbuffer.lo sbuffer.o: $(srcdir)/sldns/sbuffer.c config.h $(srcdir)/sldns/sbuffer.h wire2str.lo wire2str.o: $(srcdir)/sldns/wire2str.c config.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/keyraw.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/sldns/keyraw.h \ parse.lo parse.o: $(srcdir)/sldns/parse.c config.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/sldns/sbuffer.h @@ -1217,7 +1226,6 @@ memmove.lo memmove.o: $(srcdir)/compat/memmove.c config.h snprintf.lo snprintf.o: $(srcdir)/compat/snprintf.c config.h strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h -reallocarray.lo reallocarray.o: $(srcdir)/compat/reallocarray.c config.h strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h \ @@ -1229,3 +1237,4 @@ arc4random.lo arc4random.o: $(srcdir)/compat/arc4random.c config.h $(srcdir)/com arc4random_uniform.lo arc4random_uniform.o: $(srcdir)/compat/arc4random_uniform.c config.h arc4_lock.lo arc4_lock.o: $(srcdir)/compat/arc4_lock.c config.h $(srcdir)/util/locks.h sha512.lo sha512.o: $(srcdir)/compat/sha512.c config.h +reallocarray.lo reallocarray.o: $(srcdir)/compat/reallocarray.c config.h diff --git a/external/unbound/configure b/external/unbound/configure index 425466ebd..630d6e450 100755 --- a/external/unbound/configure +++ b/external/unbound/configure @@ -677,6 +677,7 @@ WITH_PYTHONMODULE swig SWIG_LIB SWIG +PY_MAJOR_VERSION PYTHON_SITE_PKG PYTHON_LDFLAGS PYTHON_CPPFLAGS @@ -16100,6 +16101,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu as_fn_error $? "Python version >= 2.4.0 is required" "$LINENO" 5 fi + PY_MAJOR_VERSION="`$PYTHON -c "import sys; print(sys.version_info.major)"`" + # Have Python $as_echo "#define HAVE_PYTHON 1" >>confdefs.h diff --git a/external/unbound/configure.ac b/external/unbound/configure.ac index 602813834..de809afdd 100644 --- a/external/unbound/configure.ac +++ b/external/unbound/configure.ac @@ -475,6 +475,8 @@ if test x_$ub_test_python != x_no; then AC_ERROR([Python version >= 2.4.0 is required]) fi + PY_MAJOR_VERSION="`$PYTHON -c "import sys; print(sys.version_info.major)"`" + AC_SUBST(PY_MAJOR_VERSION) # Have Python AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.]) LIBS="$PYTHON_LDFLAGS $LIBS" diff --git a/external/unbound/contrib/README b/external/unbound/contrib/README index 34c8cc46a..8eae9b5b7 100644 --- a/external/unbound/contrib/README +++ b/external/unbound/contrib/README @@ -15,8 +15,6 @@ distribution but may be helpful. a local-zone and local-data include file for unbound.conf. * unbound-host.nagios.patch: makes unbound-host return status that fits right in with the nagios monitoring framework. Contributed by Migiel de Vos. -* unbound_unixsock.diff: Add Unix socket support for unbound-control. - Contributed by Ilya Bakulin, 2012-08-28. * patch_rsamd5_enable.diff: this patch enables RSAMD5 validation (otherwise it is treated as insecure). The RSAMD5 algorithm is deprecated (RFC6725). * create_unbound_ad_servers.sh: shell script to enter anti-ad server lists. diff --git a/external/unbound/contrib/unbound.spec_fedora b/external/unbound/contrib/unbound.spec_fedora index 6e02a0964..f8b2e7512 100644 --- a/external/unbound/contrib/unbound.spec_fedora +++ b/external/unbound/contrib/unbound.spec_fedora @@ -18,7 +18,6 @@ Source2: unbound.conf Source3: unbound.munin Source4: unbound_munin_ Source5: root.key -Source6: dlv.isc.org.key Patch1: unbound-1.2-glob.patch Group: System Environment/Daemons @@ -140,7 +139,6 @@ rm -rf ${RPM_BUILD_ROOT} %attr(0755,root,root) %dir %{_sysconfdir}/%{name} %ghost %attr(0755,unbound,unbound) %dir %{_localstatedir}/run/%{name} %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/%{name}/unbound.conf -%attr(0644,root,root) %config(noreplace) %{_sysconfdir}/%{name}/dlv.isc.org.key %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/%{name}/root.key %{_sbindir}/* %{_mandir}/*/* @@ -178,11 +176,6 @@ exit 0 %post /sbin/chkconfig --add %{name} -# dnssec-conf used to contain our DLV key, but now we include it via unbound -# If unbound had previously been configured with dnssec-configure, we need -# to migrate the location of the DLV key file (to keep DLV enabled, and because -# unbound won't start with a bad location for a DLV key file. -sed -i "s:/etc/pki/dnssec-keys[/]*dlv:/etc/unbound:" %{_sysconfdir}/unbound/unbound.conf %post libs -p /sbin/ldconfig diff --git a/external/unbound/contrib/unbound_unixsock.diff b/external/unbound/contrib/unbound_unixsock.diff deleted file mode 100644 index 09d05d392..000000000 --- a/external/unbound/contrib/unbound_unixsock.diff +++ /dev/null @@ -1,305 +0,0 @@ -diff --git a/daemon/remote.c b/daemon/remote.c -index a2b2204..b6990f3 100644 ---- a/daemon/remote.c -+++ b/daemon/remote.c -@@ -81,6 +81,11 @@ - #ifdef HAVE_NETDB_H - #include <netdb.h> - #endif -+#ifdef HAVE_PWD_H -+#include <pwd.h> -+#include <sys/stat.h> -+#include <fcntl.h> -+#endif - - /* just for portability */ - #ifdef SQ -@@ -235,7 +240,8 @@ void daemon_remote_delete(struct daemon_remote* rc) - * @return false on failure. - */ - static int --add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err) -+add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, -+ struct config_file* cfg) - { - struct addrinfo hints; - struct addrinfo* res; -@@ -246,29 +252,74 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err) - snprintf(port, sizeof(port), "%d", nr); - port[sizeof(port)-1]=0; - memset(&hints, 0, sizeof(hints)); -- hints.ai_socktype = SOCK_STREAM; -- hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; -- if((r = getaddrinfo(ip, port, &hints, &res)) != 0 || !res) { --#ifdef USE_WINSOCK -- if(!noproto_is_err && r == EAI_NONAME) { -- /* tried to lookup the address as name */ -- return 1; /* return success, but do nothing */ -+ -+ if(ip[0] == '/') { -+ /* This looks like UNIX socket! */ -+ fd = create_domain_accept_sock(ip); -+/* -+ * When unbound starts, it first creates a socket and then -+ * drops privs, so the socket is created as root user. -+ * This is fine, but we would like to set _unbound user group -+ * for this socket, and permissions should be 0660 so only -+ * root and _unbound group members can invoke unbound-control. -+ * The username used here is the same as username that unbound -+ * uses for its worker processes. -+ */ -+ -+/* -+ * Note: this code is an exact copy of code from daemon.c -+ * Normally this should be either wrapped into a function, -+ * or gui/gid values should be retrieved at config parsing time -+ * and then stored in configfile structure. -+ * This requires action from unbound developers! -+*/ -+#ifdef HAVE_GETPWNAM -+ struct passwd *pwd = NULL; -+ uid_t uid; -+ gid_t gid; -+ /* initialize, but not to 0 (root) */ -+ memset(&uid, 112, sizeof(uid)); -+ memset(&gid, 112, sizeof(gid)); -+ log_assert(cfg); -+ -+ if(cfg->username && cfg->username[0]) { -+ if((pwd = getpwnam(cfg->username)) == NULL) -+ fatal_exit("user '%s' does not exist.", -+ cfg->username); -+ uid = pwd->pw_uid; -+ gid = pwd->pw_gid; -+ endpwent(); - } -+ -+ chown(ip, 0, gid); -+ chmod(ip, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); -+#endif -+ } else { -+ hints.ai_socktype = SOCK_STREAM; -+ hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; -+ if((r = getaddrinfo(ip, port, &hints, &res)) != 0 || !res) { -+#ifdef USE_WINSOCK -+ if(!noproto_is_err && r == EAI_NONAME) { -+ /* tried to lookup the address as name */ -+ return 1; /* return success, but do nothing */ -+ } - #endif /* USE_WINSOCK */ -- log_err("control interface %s:%s getaddrinfo: %s %s", -- ip?ip:"default", port, gai_strerror(r), -+ log_err("control interface %s:%s getaddrinfo: %s %s", -+ ip?ip:"default", port, gai_strerror(r), - #ifdef EAI_SYSTEM - r==EAI_SYSTEM?(char*)strerror(errno):"" - #else - "" - #endif - ); -- return 0; -+ return 0; -+ } -+ -+ /* open fd */ -+ fd = create_tcp_accept_sock(res, 1, &noproto); -+ freeaddrinfo(res); - } - -- /* open fd */ -- fd = create_tcp_accept_sock(res, 1, &noproto); -- freeaddrinfo(res); - if(fd == -1 && noproto) { - if(!noproto_is_err) - return 1; /* return success, but do nothing */ -@@ -305,7 +356,7 @@ struct listen_port* daemon_remote_open_ports(struct config_file* cfg) - if(cfg->control_ifs) { - struct config_strlist* p; - for(p = cfg->control_ifs; p; p = p->next) { -- if(!add_open(p->str, cfg->control_port, &l, 1)) { -+ if(!add_open(p->str, cfg->control_port, &l, 1, cfg)) { - listening_ports_free(l); - return NULL; - } -@@ -313,12 +364,12 @@ struct listen_port* daemon_remote_open_ports(struct config_file* cfg) - } else { - /* defaults */ - if(cfg->do_ip6 && -- !add_open("::1", cfg->control_port, &l, 0)) { -+ !add_open("::1", cfg->control_port, &l, 0, cfg)) { - listening_ports_free(l); - return NULL; - } - if(cfg->do_ip4 && -- !add_open("127.0.0.1", cfg->control_port, &l, 1)) { -+ !add_open("127.0.0.1", cfg->control_port, &l, 1, cfg)) { - listening_ports_free(l); - return NULL; - } -diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c -index ea7ec3a..4cb04e2 100644 ---- a/services/listen_dnsport.c -+++ b/services/listen_dnsport.c -@@ -55,6 +55,10 @@ - #endif - #include <fcntl.h> - -+#ifndef USE_WINSOCK -+#include <sys/un.h> -+#endif -+ - /** number of queued TCP connections for listen() */ - #define TCP_BACKLOG 5 - -@@ -376,6 +380,53 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, - } - - int -+create_domain_accept_sock(char *path) { -+ int s; -+ struct sockaddr_un unixaddr; -+ -+#ifndef USE_WINSOCK -+ unixaddr.sun_len = sizeof(unixaddr); -+ unixaddr.sun_family = AF_UNIX; -+ strlcpy(unixaddr.sun_path, path, 104); -+ -+ if((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { -+ log_err("Cannot create UNIX socket %s (%s)", -+ path, strerror(errno)); -+ return -1; -+ } -+ -+ if(unlink(path) && errno != ENOENT) { -+ /* The socket already exists and cannot be removed */ -+ log_err("Cannot remove old UNIX socket %s (%s)", -+ path, strerror(errno)); -+ return -1; -+ } -+ -+ if(bind(s, (struct sockaddr *) &unixaddr, -+ sizeof(struct sockaddr_un)) == -1) { -+ log_err("Cannot bind UNIX socket %s (%s)", -+ path, strerror(errno)); -+ return -1; -+ } -+ -+ if(!fd_set_nonblock(s)) { -+ log_err("Cannot set non-blocking mode"); -+ return -1; -+ } -+ -+ if(listen(s, TCP_BACKLOG) == -1) { -+ log_err("can't listen: %s", strerror(errno)); -+ return -1; -+ } -+ -+ return s; -+#else -+ log_err("UNIX sockets are not supported"); -+ return -1; -+#endif -+} -+ -+int - create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto) - { - int s; -diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c -index a872f92..10631fd 100644 ---- a/smallapp/unbound-control.c -+++ b/smallapp/unbound-control.c -@@ -59,6 +59,8 @@ - #include "util/locks.h" - #include "util/net_help.h" - -+#include <sys/un.h> -+ - /** Give unbound-control usage, and exit (1). */ - static void - usage() -@@ -158,6 +160,7 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) - { - struct sockaddr_storage addr; - socklen_t addrlen; -+ int addrfamily = 0; - int fd; - /* use svr or the first config entry */ - if(!svr) { -@@ -176,12 +179,21 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) - if(strchr(svr, '@')) { - if(!extstrtoaddr(svr, &addr, &addrlen)) - fatal_exit("could not parse IP@port: %s", svr); -+ } else if(svr[0] == '/') { -+ struct sockaddr_un* unixsock = (struct sockaddr_un *) &addr; -+ unixsock->sun_family = AF_UNIX; -+ unixsock->sun_len = sizeof(unixsock); -+ strlcpy(unixsock->sun_path, svr, 104); -+ addrlen = sizeof(struct sockaddr_un); -+ addrfamily = AF_UNIX; - } else { - if(!ipstrtoaddr(svr, cfg->control_port, &addr, &addrlen)) - fatal_exit("could not parse IP: %s", svr); - } -- fd = socket(addr_is_ip6(&addr, addrlen)?AF_INET6:AF_INET, -- SOCK_STREAM, 0); -+ -+ if(addrfamily != AF_UNIX) -+ addrfamily = addr_is_ip6(&addr, addrlen)?AF_INET6:AF_INET; -+ fd = socket(addrfamily, SOCK_STREAM, 0); - if(fd == -1) { - #ifndef USE_WINSOCK - fatal_exit("socket: %s", strerror(errno)); -diff --git a/util/net_help.c b/util/net_help.c -index b3136a3..5b5b4a3 100644 ---- a/util/net_help.c -+++ b/util/net_help.c -@@ -45,6 +45,7 @@ - #include "util/module.h" - #include "util/regional.h" - #include <fcntl.h> -+#include <sys/un.h> - #include <openssl/ssl.h> - #include <openssl/err.h> - -@@ -135,7 +136,7 @@ log_addr(enum verbosity_value v, const char* str, - { - uint16_t port; - const char* family = "unknown"; -- char dest[100]; -+ char dest[108]; - int af = (int)((struct sockaddr_in*)addr)->sin_family; - void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr; - if(verbosity < v) -@@ -148,15 +149,23 @@ log_addr(enum verbosity_value v, const char* str, - case AF_UNIX: family="unix"; break; - default: break; - } -- if(inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)) == 0) { -- strncpy(dest, "(inet_ntop error)", sizeof(dest)); -+ -+ if(af != AF_UNIX) { -+ if(inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)) == 0) { -+ strncpy(dest, "(inet_ntop error)", sizeof(dest)); -+ } -+ dest[sizeof(dest)-1] = 0; -+ port = ntohs(((struct sockaddr_in*)addr)->sin_port); -+ if(verbosity >= 4) -+ verbose(v, "%s %s %s port %d (len %d)", str, family, -+ dest, (int)port, (int)addrlen); -+ else verbose(v, "%s %s port %d", str, dest, (int)port); -+ } else { -+ struct sockaddr_un* unixsock; -+ unixsock = (struct sockaddr_un *) addr; -+ strlcpy(dest, unixsock->sun_path, sizeof(dest)); -+ verbose(v, "%s %s %s", str, family, dest); - } -- dest[sizeof(dest)-1] = 0; -- port = ntohs(((struct sockaddr_in*)addr)->sin_port); -- if(verbosity >= 4) -- verbose(v, "%s %s %s port %d (len %d)", str, family, dest, -- (int)port, (int)addrlen); -- else verbose(v, "%s %s port %d", str, dest, (int)port); - } - - int diff --git a/external/unbound/daemon/remote.c b/external/unbound/daemon/remote.c index 24008bf17..93d0eda28 100644 --- a/external/unbound/daemon/remote.c +++ b/external/unbound/daemon/remote.c @@ -140,34 +140,45 @@ timeval_divide(struct timeval* avg, const struct timeval* sum, size_t d) /* * The following function was generated using the openssl utility, using - * the command : "openssl dhparam -dsaparam -C 512" + * the command : "openssl dhparam -dsaparam -C 1024" + * (some openssl versions reject DH that is 'too small', eg. 512). */ #ifndef S_SPLINT_S -DH *get_dh512() -{ - static unsigned char dh512_p[]={ - 0xC9,0xD7,0x05,0xDA,0x5F,0xAB,0x14,0xE8,0x11,0x56,0x77,0x85, - 0xB1,0x24,0x2C,0x95,0x60,0xEA,0xE2,0x10,0x6F,0x0F,0x84,0xEC, - 0xF4,0x45,0xE8,0x90,0x7A,0xA7,0x03,0xFF,0x5B,0x88,0x53,0xDE, - 0xC4,0xDE,0xBC,0x42,0x78,0x71,0x23,0x7E,0x24,0xA5,0x5E,0x4E, - 0xEF,0x6F,0xFF,0x5F,0xAF,0xBE,0x8A,0x77,0x62,0xB4,0x65,0x82, - 0x7E,0xC9,0xED,0x2F, - }; - static unsigned char dh512_g[]={ - 0x8D,0x3A,0x52,0xBC,0x8A,0x71,0x94,0x33,0x2F,0xE1,0xE8,0x4C, - 0x73,0x47,0x03,0x4E,0x7D,0x40,0xE5,0x84,0xA0,0xB5,0x6D,0x10, - 0x6F,0x90,0x43,0x05,0x1A,0xF9,0x0B,0x6A,0xD1,0x2A,0x9C,0x25, - 0x0A,0xB9,0xD1,0x14,0xDC,0x35,0x1C,0x48,0x7C,0xC6,0x0C,0x6D, - 0x32,0x1D,0xD3,0xC8,0x10,0xA8,0x82,0x14,0xA2,0x1C,0xF4,0x53, - 0x23,0x3B,0x1C,0xB9, - }; +DH *get_dh1024() +{ + static unsigned char dh1024_p[]={ + 0xB3,0x67,0x2E,0x3B,0x68,0xC5,0xDA,0x58,0x46,0xD6,0x2B,0xD3, + 0x41,0x78,0x97,0xE4,0xE1,0x61,0x71,0x68,0xE6,0x0F,0x1D,0x78, + 0x05,0xAA,0xF0,0xFF,0x30,0xDF,0xAC,0x49,0x7F,0xE0,0x90,0xFE, + 0xB9,0x56,0x4E,0x3F,0xE2,0x98,0x8A,0xED,0xF5,0x28,0x39,0xEF, + 0x2E,0xA6,0xB7,0x67,0xB2,0x43,0xE4,0x53,0xF8,0xEB,0x2C,0x1F, + 0x06,0x77,0x3A,0x6F,0x62,0x98,0xC1,0x3B,0xF7,0xBA,0x4D,0x93, + 0xF7,0xEB,0x5A,0xAD,0xC5,0x5F,0xF0,0xB7,0x24,0x35,0x81,0xF7, + 0x7F,0x1F,0x24,0xC0,0xDF,0xD3,0xD8,0x40,0x72,0x7E,0xF3,0x19, + 0x2B,0x26,0x27,0xF4,0xB6,0xB3,0xD4,0x7D,0x08,0x23,0xBE,0x68, + 0x2B,0xCA,0xB4,0x46,0xA8,0x9E,0xDD,0x6C,0x3D,0x75,0xA6,0x48, + 0xF7,0x44,0x43,0xBF,0x91,0xC2,0xB4,0x49, + }; + static unsigned char dh1024_g[]={ + 0x5F,0x37,0xB5,0x80,0x4D,0xB4,0xC4,0xB2,0x37,0x12,0xD5,0x2F, + 0x56,0x81,0xB0,0xDF,0x3D,0x27,0xA2,0x54,0xE7,0x14,0x65,0x2D, + 0x72,0xA8,0x97,0xE0,0xA9,0x4A,0x09,0x5E,0x89,0xBE,0x34,0x9A, + 0x90,0x98,0xC1,0xE8,0xBB,0x01,0x2B,0xC2,0x74,0x74,0x90,0x59, + 0x0B,0x72,0x62,0x5C,0xFD,0x49,0x63,0x4B,0x38,0x91,0xF1,0x7F, + 0x13,0x25,0xEB,0x52,0x50,0x47,0xA2,0x8C,0x32,0x28,0x42,0xAC, + 0xBD,0x7A,0xCC,0x58,0xBE,0x36,0xDA,0x6A,0x24,0x06,0xC7,0xF1, + 0xDA,0x8D,0x8A,0x3B,0x03,0xFA,0x6F,0x25,0xE5,0x20,0xA7,0xD6, + 0x6F,0x74,0x61,0x53,0x14,0x81,0x29,0x04,0xB5,0x61,0x12,0x53, + 0xA3,0xD6,0x09,0x98,0x0C,0x8F,0x1C,0xBB,0xD7,0x1C,0x2C,0xEE, + 0x56,0x4B,0x74,0x8F,0x4A,0xF8,0xA9,0xD5, + }; DH *dh; if ((dh=DH_new()) == NULL) return(NULL); - dh->p=BN_bin2bn(dh512_p,sizeof(dh512_p),NULL); - dh->g=BN_bin2bn(dh512_g,sizeof(dh512_g),NULL); + dh->p=BN_bin2bn(dh1024_p,sizeof(dh1024_p),NULL); + dh->g=BN_bin2bn(dh1024_g,sizeof(dh1024_g),NULL); if ((dh->p == NULL) || (dh->g == NULL)) - { DH_free(dh); return(NULL); } + { DH_free(dh); return(NULL); } dh->length = 160; return(dh); } @@ -218,7 +229,7 @@ daemon_remote_create(struct config_file* cfg) /* Since we have no certificates and hence no source of * DH params, let's generate and set them */ - if(!SSL_CTX_set_tmp_dh(rc->ctx,get_dh512())) { + if(!SSL_CTX_set_tmp_dh(rc->ctx,get_dh1024())) { log_crypto_err("Wanted to set DH param, but failed"); return NULL; } @@ -1892,6 +1903,21 @@ do_insecure_remove(SSL* ssl, struct worker* worker, char* arg) send_ok(ssl); } +static void +do_insecure_list(SSL* ssl, struct worker* worker) +{ + char buf[257]; + struct trust_anchor* a; + if(worker->env.anchors) { + RBTREE_FOR(a, struct trust_anchor*, worker->env.anchors->tree) { + if(a->numDS == 0 && a->numDNSKEY == 0) { + dname_str(a->name, buf); + ssl_printf(ssl, "%s\n", buf); + } + } + } +} + /** do the status command */ static void do_status(SSL* ssl, struct worker* worker) @@ -2252,6 +2278,54 @@ do_list_local_data(SSL* ssl, struct worker* worker) lock_rw_unlock(&zones->lock); } +/** struct for user arg ratelimit list */ +struct ratelimit_list_arg { + /** the infra cache */ + struct infra_cache* infra; + /** the SSL to print to */ + SSL* ssl; + /** all or only ratelimited */ + int all; + /** current time */ + time_t now; +}; + +/** list items in the ratelimit table */ +static void +rate_list(struct lruhash_entry* e, void* arg) +{ + struct ratelimit_list_arg* a = (struct ratelimit_list_arg*)arg; + struct rate_key* k = (struct rate_key*)e->key; + struct rate_data* d = (struct rate_data*)e->data; + char buf[257]; + int lim = infra_find_ratelimit(a->infra, k->name, k->namelen); + int max = infra_rate_max(d, a->now); + if(a->all == 0) { + if(max < lim) + return; + } + dname_str(k->name, buf); + ssl_printf(a->ssl, "%s %d limit %d\n", buf, max, lim); +} + +/** do the ratelimit_list command */ +static void +do_ratelimit_list(SSL* ssl, struct worker* worker, char* arg) +{ + struct ratelimit_list_arg a; + a.all = 0; + a.infra = worker->env.infra_cache; + a.now = *worker->env.now; + a.ssl = ssl; + arg = skipwhite(arg); + if(strcmp(arg, "+a") == 0) + a.all = 1; + if(a.infra->domain_rates==NULL || + (a.all == 0 && infra_dp_ratelimit == 0)) + return; + slabhash_traverse(a.infra->domain_rates, 0, rate_list, &a); +} + /** tell other processes to execute the command */ static void distribute_cmd(struct daemon_remote* rc, SSL* ssl, char* cmd) @@ -2312,12 +2386,18 @@ execute_cmd(struct daemon_remote* rc, SSL* ssl, char* cmd, } else if(cmdcmp(p, "list_stubs", 10)) { do_list_stubs(ssl, worker); return; + } else if(cmdcmp(p, "list_insecure", 13)) { + do_insecure_list(ssl, worker); + return; } else if(cmdcmp(p, "list_local_zones", 16)) { do_list_local_zones(ssl, worker); return; } else if(cmdcmp(p, "list_local_data", 15)) { do_list_local_data(ssl, worker); return; + } else if(cmdcmp(p, "ratelimit_list", 14)) { + do_ratelimit_list(ssl, worker, p+14); + return; } else if(cmdcmp(p, "stub_add", 8)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); diff --git a/external/unbound/daemon/worker.c b/external/unbound/daemon/worker.c index 93481354f..f4e87289a 100644 --- a/external/unbound/daemon/worker.c +++ b/external/unbound/daemon/worker.c @@ -86,6 +86,8 @@ /** Size of an UDP datagram */ #define NORMAL_UDP_SIZE 512 /* bytes */ +/** ratelimit for error responses */ +#define ERROR_RATELIMIT 100 /* qps */ /** * seconds to add to prefetch leeway. This is a TTL that expires old rrsets @@ -291,6 +293,26 @@ worker_handle_service_reply(struct comm_point* c, void* arg, int error, return 0; } +/** ratelimit error replies + * @param worker: the worker struct with ratelimit counter + * @param err: error code that would be wanted. + * @return value of err if okay, or -1 if it should be discarded instead. + */ +static int +worker_err_ratelimit(struct worker* worker, int err) +{ + if(worker->err_limit_time == *worker->env.now) { + /* see if limit is exceeded for this second */ + if(worker->err_limit_count++ > ERROR_RATELIMIT) + return -1; + } else { + /* new second, new limits */ + worker->err_limit_time = *worker->env.now; + worker->err_limit_count = 1; + } + return err; +} + /** check request sanity. * @param pkt: the wire packet to examine for sanity. * @param worker: parameters for checking. @@ -315,32 +337,32 @@ worker_check_request(sldns_buffer* pkt, struct worker* worker) if(LDNS_TC_WIRE(sldns_buffer_begin(pkt))) { LDNS_TC_CLR(sldns_buffer_begin(pkt)); verbose(VERB_QUERY, "request bad, has TC bit on"); - return LDNS_RCODE_FORMERR; + return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_QUERY) { verbose(VERB_QUERY, "request unknown opcode %d", LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt))); - return LDNS_RCODE_NOTIMPL; + return worker_err_ratelimit(worker, LDNS_RCODE_NOTIMPL); } if(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) != 1) { verbose(VERB_QUERY, "request wrong nr qd=%d", LDNS_QDCOUNT(sldns_buffer_begin(pkt))); - return LDNS_RCODE_FORMERR; + return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0) { verbose(VERB_QUERY, "request wrong nr an=%d", LDNS_ANCOUNT(sldns_buffer_begin(pkt))); - return LDNS_RCODE_FORMERR; + return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_NSCOUNT(sldns_buffer_begin(pkt)) != 0) { verbose(VERB_QUERY, "request wrong nr ns=%d", LDNS_NSCOUNT(sldns_buffer_begin(pkt))); - return LDNS_RCODE_FORMERR; + return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) > 1) { verbose(VERB_QUERY, "request wrong nr ar=%d", LDNS_ARCOUNT(sldns_buffer_begin(pkt))); - return LDNS_RCODE_FORMERR; + return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } return 0; } @@ -813,6 +835,10 @@ worker_handle_request(struct comm_point* c, void* arg, int error, if(!query_info_parse(&qinfo, c->buffer)) { verbose(VERB_ALGO, "worker parse request: formerror."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) { + comm_point_drop_reply(repinfo); + return 0; + } sldns_buffer_rewind(c->buffer); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), diff --git a/external/unbound/daemon/worker.h b/external/unbound/daemon/worker.h index ff69bc1ac..63613430b 100644 --- a/external/unbound/daemon/worker.h +++ b/external/unbound/daemon/worker.h @@ -103,6 +103,10 @@ struct worker { struct comm_point* cmd_com; /** timer for statistics */ struct comm_timer* stat_timer; + /** ratelimit for errors, time value */ + time_t err_limit_time; + /** ratelimit for errors, packet count */ + unsigned int err_limit_count; /** random() table for this worker. */ struct ub_randstate* rndstate; diff --git a/external/unbound/doc/Changelog b/external/unbound/doc/Changelog index 31f84c445..f06654de4 100644 --- a/external/unbound/doc/Changelog +++ b/external/unbound/doc/Changelog @@ -1,3 +1,81 @@ +29 May 2015: Wouter + - Fix that unparseable error responses are ratelimited. + - SOA negative TTL is capped at minimumttl in its rdata section. + - cache-max-negative-ttl config option, default 3600. + +26 May 2015: Wouter + - Document that ratelimit works with unbound-control set_option. + +21 May 2015: Wouter + - iana portlist update. + - documentation proposes ratelimit of 1000 (closer to what upstream + servers expect from us). + +20 May 2015: Wouter + - DLV is going to be decommissioned. Advice to stop using it, and + put text in the example configuration and man page to that effect. + +10 May 2015: Wouter + - Change syntax of particular validator error to be easier for + machine parse, swap rrset and ip adres info so it looks like: + validation failure <www.example.nl. TXT IN>: signature crypto + failed from 2001:DB8:7:bba4::53 for <*.example.nl. NSEC IN> + +1 May 2015: Wouter + - caps-whitelist in unbound.conf allows whitelist of loadbalancers + that cannot work with caps-for-id or its fallback. + +30 April 2015: Wouter + - Unit test for type ANY synthesis. + +22 April 2015: Wouter + - Removed contrib/unbound_unixsock.diff, because it has been + integrated, use control-interface: /path in unbound.conf. + - iana portlist update. + +17 April 2015: Wouter + - Synthesize ANY responses from cache. Does not search exhaustively, + but MX,A,AAAA,SOA,NS also CNAME. + - Fix leaked dns64prefix configuration string. + +16 April 2015: Wouter + - Add local-zone type inform_deny, that logs query and drops answer. + - Ratelimit does not apply to prefetched queries, and ratelimit-factor + is default 10. Repeated normal queries get resolved and with + prefetch stay in the cache. + - Fix bug#664: libunbound python3 related fixes (from Tomas Hozza) + Use print_function also for Python2. + libunbound examples: produce sorted output. + libunbound-Python: libldns is not used anymore. + Fix issue with Python 3 mapping of FILE* using file_py3.i from ldns. + +10 April 2015: Wouter + - unbound-control ratelimit_list lists high rate domains. + - ratelimit feature, ratelimit: 100, or some sensible qps, can be + used to turn it on. It ratelimits recursion effort per zone. + For particular names you can configure exceptions in unbound.conf. + - Fix that get_option for cache-sizes does not print double newline. + - Fix#663: ssl handshake fails when using unix socket because dh size + is too small. + +8 April 2015: Wouter + - Fix crash in dnstap: Do not try to log TCP responses after timeout. + +7 April 2015: Wouter + - Libunbound skips dos-line-endings from etc/hosts. + - Unbound exits with a fatal error when the auto-trust-anchor-file + fails to be writable. This is seconds after startup. You can + load a readonly auto-trust-anchor-file with trust-anchor-file. + The file has to be writable to notice the trust anchor change, + without it, a trust anchor change will be unnoticed and the system + will then become inoperable. + - unbound-control list_insecure command shows the negative trust + anchors currently configured, patch from Jelte Jansen. + +2 April 2015: Wouter + - Fix #660: Fix interface-automatic broken in the presence of + asymmetric routing. + 26 March 2015: Wouter - remote.c probedelay line is easier to read. - rename ldns subdirectory to sldns to avoid name collision. diff --git a/external/unbound/doc/example.conf.in b/external/unbound/doc/example.conf.in index 69b3cf39e..efe64f394 100644 --- a/external/unbound/doc/example.conf.in +++ b/external/unbound/doc/example.conf.in @@ -139,6 +139,9 @@ server: # cache. Items are not cached for longer. In seconds. # cache-max-ttl: 86400 + # the time to live (TTL) value cap for negative responses in the cache + # cache-max-negative-ttl: 3600 + # the time to live (TTL) value for cached roundtrip times, lameness and # EDNS version information for hosts. In seconds. # infra-host-ttl: 900 @@ -296,6 +299,10 @@ server: # Use 0x20-encoded random bits in the query to foil spoof attempts. # This feature is an experimental implementation of draft dns-0x20. # use-caps-for-id: no + + # Domains (and domains in them) without support for dns-0x20 and + # the fallback fails because they keep sending different answers. + # caps-whitelist: "licdn.com" # Enforce privacy of these addresses. Strips them away from answers. # It may cause DNSSEC validation to additionally mark it as bogus. @@ -358,7 +365,7 @@ server: # File with DLV trusted keys. Same format as trust-anchor-file. # There can be only one DLV configured, it is trusted from root down. - # Download http://ftp.isc.org/www/dlv/dlv.isc.org.key + # DLV is going to be decommissioned. Please do not use it any more. # dlv-anchor-file: "dlv.isc.org.key" # File with trusted keys for validation. Specify more than one file @@ -510,6 +517,7 @@ server: # o nodefault can be used to normally resolve AS112 zones. # o typetransparent resolves normally for other types and other names # o inform resolves normally, but logs client IP address + # o inform_deny drops queries and logs client IP address # # defaults are localhost address, reverse for 127.0.0.1 and ::1 # and nxdomain for AS112 zones. If you configure one of these zones @@ -551,6 +559,26 @@ server: # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4. # dns64-prefix: 64:ff9b::0/96 + # ratelimit for uncached, new queries, this limits recursion effort. + # ratelimiting is experimental, and may help against randomqueryflood. + # if 0(default) it is disabled, otherwise state qps allowed per zone. + # ratelimit: 0 + + # ratelimits are tracked in a cache, size in bytes of cache (or k,m). + # ratelimit-size: 4m + # ratelimit cache slabs, reduces lock contention if equal to cpucount. + # ratelimit-slabs: 4 + + # 0 blocks when ratelimited, otherwise let 1/xth traffic through + # ratelimit-factor: 10 + + # override the ratelimit for a specific domain name. + # give this setting multiple times to have multiple overrides. + # ratelimit-for-domain: example.com 1000 + # override the ratelimits for all domains below a domain name + # can give this multiple times, the name closest to the zone is used. + # ratelimit-below-domain: example 1000 + # Python config section. To enable: # o use --with-pythonmodule to configure before compiling. # o list python in the module-config string (above) to enable. diff --git a/external/unbound/doc/unbound-control.8.in b/external/unbound/doc/unbound-control.8.in index 259eee1d0..9c7a7cf00 100644 --- a/external/unbound/doc/unbound-control.8.in +++ b/external/unbound/doc/unbound-control.8.in @@ -177,7 +177,8 @@ harden\-glue, harden\-dnssec\-stripped, harden\-below\-nxdomain, harden\-referral\-path, prefetch, prefetch\-key, log\-queries, hide\-identity, hide\-version, identity, version, val\-log\-level, val\-log\-squelch, ignore\-cd\-flag, add\-holddown, del\-holddown, -keep\-missing, tcp\-upstream, ssl\-upstream, max\-udp\-size. +keep\-missing, tcp\-upstream, ssl\-upstream, max\-udp\-size, ratelimit, +cache\-max\-ttl, cache\-min\-ttl, cache\-max\-negative\-ttl. .TP .B get_option \fIopt Get the value of the option. Give the option name without a trailing ':'. @@ -197,6 +198,9 @@ This includes the root hints in use. .B list_forwards List the forward zones in use. These are printed zone by zone to the output. .TP +.B list_insecure +List the zones with domain\-insecure. +.TP .B list_local_zones List the local zones in use. These are printed one per line with zone type. .TP @@ -252,6 +256,13 @@ port number can be set explicitly (default port is 53 (DNS)). By default the forwarder information from the config file for the root "." is used. The config file is not changed, so after a reload these changes are gone. Other forward zones from the config file are not affected by this command. +.TP +.B ratelimit_list \fR[\fI+a\fR] +List the domains that are ratelimited. Printed one per line with current +estimated qps and qps limit from config. With +a it prints all domains, not +just the ratelimited domains, with their estimated qps. The ratelimited +domains return an error for uncached (new) queries, but cached queries work +as normal. .SH "EXIT CODE" The unbound\-control program exits with status code 1 on error, 0 on success. .SH "SET UP" diff --git a/external/unbound/doc/unbound.conf.5.in b/external/unbound/doc/unbound.conf.5.in index 91b8b24ae..8836ed50c 100644 --- a/external/unbound/doc/unbound.conf.5.in +++ b/external/unbound/doc/unbound.conf.5.in @@ -302,6 +302,10 @@ Zero makes sure the data in the cache is as the domain owner intended, higher values, especially more than an hour or so, can lead to trouble as the data in the cache does not match up with the actual data any more. .TP +.B cache\-max\-negative\-ttl: \fI<seconds> +Time to live maximum for negative responses, these have a SOA in the +authority section that is limited in time. Default is 3600. +.TP .B infra\-host\-ttl: \fI<seconds> Time to live for entries in the host cache. The host cache contains roundtrip timing, lameness and EDNS support information. Default is 900. @@ -574,6 +578,12 @@ authority servers and checks if the reply still has the correct casing. Disabled by default. This feature is an experimental implementation of draft dns\-0x20. .TP +.B caps\-whitelist: \fI<domain> +Whitelist the domain so that it does not receive caps\-for\-id perturbed +queries. For domains that do not support 0x20 and also fail with fallback +because they keep sending different answers, like some load balancers. +Can be given multiple times, for different domains. +.TP .B private\-address: \fI<IP address or subnet> Give IPv4 of IPv6 addresses or classless subnets. These are addresses on your private network, and are not allowed to be returned for public @@ -674,14 +684,19 @@ It is possible to use wildcards with this statement, the wildcard is expanded on start and on reload. .TP .B dlv\-anchor\-file: \fI<filename> +This option was used during early days DNSSEC deployment when no parent-side +DS record registrations were easily available. Nowadays, it is best to have +DS records registered with the parent zone (many top level zones are signed). File with trusted keys for DLV (DNSSEC Lookaside Validation). Both DS and DNSKEY entries can be used in the file, in the same format as for \fItrust\-anchor\-file:\fR statements. Only one DLV can be configured, more would be slow. The DLV configured is used as a root trusted DLV, this means that it is a lookaside for the root. Default is "", or no dlv anchor file. +DLV is going to be decommissioned. Please do not use it any more. .TP .B dlv\-anchor: \fI<"Resource Record"> Much like trust\-anchor, this is a DLV anchor with the DS or DNSKEY inline. +DLV is going to be decommissioned. Please do not use it any more. .TP .B domain\-insecure: \fI<domain name> Sets domain name to be insecure, DNSSEC chain of trust is ignored towards @@ -815,10 +830,10 @@ data leakage about the local network to the upstream DNS servers. .B local\-zone: \fI<zone> <type> Configure a local zone. The type determines the answer to give if there is no match from local\-data. The types are deny, refuse, static, -transparent, redirect, nodefault, typetransparent, inform, and are explained -below. After that the default settings are listed. Use local\-data: to -enter data into the local zone. Answers for local zones are authoritative -DNS answers. By default the zones are class IN. +transparent, redirect, nodefault, typetransparent, inform, inform_deny, +and are explained below. After that the default settings are listed. Use +local\-data: to enter data into the local zone. Answers for local zones +are authoritative DNS answers. By default the zones are class IN. .IP If you need more complicated authoritative data, with referrals, wildcards, CNAME/DNAME support, or DNSSEC authoritative service, setup a stub\-zone for @@ -872,6 +887,10 @@ info: zonename inform IP@port queryname type class. This option can be used for normal resolution, but machines looking up infected names are logged, eg. to run antivirus on them. .TP 10 +\h'5'\fIinform_deny\fR +The query is dropped, like 'deny', and logged, like 'inform'. Ie. find +infected machines without answering the queries. +.TP 10 \h'5'\fInodefault\fR Used to turn off default contents for AS112 zones. The other types also turn off default contents for the zone. The 'nodefault' option @@ -978,6 +997,51 @@ it as detailed in the stub zone section below. Configure local data shorthand for a PTR record with the reversed IPv4 or IPv6 address and the host name. For example "192.0.2.4 www.example.com". TTL can be inserted like this: "2001:DB8::4 7200 www.example.com" +.TP 5 +.B ratelimit: \fI<number or 0> +Enable ratelimiting of queries sent to nameserver for performing recursion. +If 0, the default, it is disabled. This option is experimental at this time. +The ratelimit is in queries per second that are allowed. More queries are +turned away with an error (servfail). This stops recursive floods, eg. random +query names, but not spoofed reflection floods. Cached responses are not +ratelimited by this setting. The zone of the query is determined by examining +the nameservers for it, the zone name is used to keep track of the rate. +For example, 1000 may be a suitable value to stop the server from being +overloaded with random names, and keeps unbound from sending traffic to the +nameservers for those zones. +.TP 5 +.B ratelimit\-size: \fI<memory size> +Give the size of the data structure in which the current ongoing rates are +kept track in. Default 4m. In bytes or use m(mega), k(kilo), g(giga). +The ratelimit structure is small, so this data structure likely does +not need to be large. +.TP 5 +.B ratelimit\-slabs: \fI<number> +Give power of 2 number of slabs, this is used to reduce lock contention +in the ratelimit tracking data structure. Close to the number of cpus is +a fairly good setting. +.TP 5 +.B ratelimit\-factor: \fI<number> +Set the amount of queries to rate limit when the limit is exceeded. +If set to 0, all queries are dropped for domains where the limit is +exceeded. If set to another value, 1 in that number is allowed through +to complete. Default is 10, allowing 1/10 traffic to flow normally. +This can make ordinary queries complete (if repeatedly queried for), +and enter the cache, whilst also mitigiting the traffic flow by the +factor given. +.TP 5 +.B ratelimit\-for\-domain: \fI<domain> <number qps> +Override the global ratelimit for an exact match domain name with the listed +number. You can give this for any number of names. For example, for +a top\-level\-domain you may want to have a higher limit than other names. +.TP 5 +.B ratelimit\-below\-domain: \fI<domain> <number qps> +Override the global ratelimit for a domain name that ends in this name. +You can give this multiple times, it then describes different settings +in different parts of the namespace. The closest matching suffix is used +to determine the qps limit. The rate for the exact matching domain name +is not changed, use ratelimit\-for\-domain to set that, you might want +to use different settings for a top\-level\-domain and subdomains. .SS "Remote Control Options" In the .B remote\-control: diff --git a/external/unbound/iterator/iter_utils.c b/external/unbound/iterator/iter_utils.c index 5ec5752bf..bc94ef682 100644 --- a/external/unbound/iterator/iter_utils.c +++ b/external/unbound/iterator/iter_utils.c @@ -65,6 +65,7 @@ #include "validator/val_utils.h" #include "validator/val_sigcrypt.h" #include "sldns/sbuffer.h" +#include "sldns/str2wire.h" /** time when nameserver glue is said to be 'recent' */ #define SUSPICION_RECENT_EXPIRY 86400 @@ -105,6 +106,40 @@ read_fetch_policy(struct iter_env* ie, const char* str) return 1; } +/** apply config caps whitelist items to name tree */ +static int +caps_white_apply_cfg(rbtree_t* ntree, struct config_file* cfg) +{ + struct config_strlist* p; + for(p=cfg->caps_whitelist; p; p=p->next) { + struct name_tree_node* n; + size_t len; + uint8_t* nm = sldns_str2wire_dname(p->str, &len); + if(!nm) { + log_err("could not parse %s", p->str); + return 0; + } + n = (struct name_tree_node*)calloc(1, sizeof(*n)); + if(!n) { + log_err("out of memory"); + free(nm); + return 0; + } + n->node.key = n; + n->name = nm; + n->len = len; + n->labs = dname_count_labels(nm); + n->dclass = LDNS_RR_CLASS_IN; + if(!name_tree_insert(ntree, n, nm, len, n->labs, n->dclass)) { + /* duplicate element ignored, idempotent */ + free(n->name); + free(n); + } + } + name_tree_init_parents(ntree); + return 1; +} + int iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg) { @@ -128,6 +163,16 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg) log_err("Could not set private addresses"); return 0; } + if(cfg->caps_whitelist) { + if(!iter_env->caps_white) + iter_env->caps_white = rbtree_create(name_tree_compare); + if(!iter_env->caps_white || !caps_white_apply_cfg( + iter_env->caps_white, cfg)) { + log_err("Could not set capsforid whitelist"); + return 0; + } + + } iter_env->supports_ipv6 = cfg->do_ip6; iter_env->supports_ipv4 = cfg->do_ip4; return 1; diff --git a/external/unbound/iterator/iterator.c b/external/unbound/iterator/iterator.c index 02de86e12..96918fa97 100644 --- a/external/unbound/iterator/iterator.c +++ b/external/unbound/iterator/iterator.c @@ -61,6 +61,7 @@ #include "util/data/msgencode.h" #include "util/fptr_wlist.h" #include "util/config_file.h" +#include "util/random.h" #include "sldns/rrdef.h" #include "sldns/wire2str.h" #include "sldns/parseutil.h" @@ -83,6 +84,16 @@ iter_init(struct module_env* env, int id) return 1; } +/** delete caps_whitelist element */ +static void +caps_free(struct rbnode_t* n, void* ATTR_UNUSED(d)) +{ + if(n) { + free(((struct name_tree_node*)n)->name); + free(n); + } +} + void iter_deinit(struct module_env* env, int id) { @@ -93,6 +104,10 @@ iter_deinit(struct module_env* env, int id) free(iter_env->target_fetch_policy); priv_delete(iter_env->priv); donotq_delete(iter_env->donotq); + if(iter_env->caps_white) { + traverse_postorder(iter_env->caps_white, caps_free, NULL); + free(iter_env->caps_white); + } free(iter_env); env->modinfo[id] = NULL; } @@ -120,6 +135,7 @@ iter_new(struct module_qstate* qstate, int id) iq->query_restart_count = 0; iq->referral_count = 0; iq->sent_count = 0; + iq->ratelimit_ok = 0; iq->target_count = NULL; iq->wait_priming_stub = 0; iq->refetch_glue = 0; @@ -457,6 +473,16 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq, return 1; } +/** see if target name is caps-for-id whitelisted */ +static int +is_caps_whitelisted(struct iter_env* ie, struct iter_qstate* iq) +{ + if(!ie->caps_white) return 0; /* no whitelist, or no capsforid */ + return name_tree_lookup(ie->caps_white, iq->qchase.qname, + iq->qchase.qname_len, dname_count_labels(iq->qchase.qname), + iq->qchase.qclass) != NULL; +} + /** create target count structure for this query */ static void target_count_create(struct iter_qstate* iq) @@ -1125,6 +1151,32 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, * results of priming. */ return 0; } + if(!iq->ratelimit_ok && qstate->prefetch_leeway) + iq->ratelimit_ok = 1; /* allow prefetches, this keeps + otherwise valid data in the cache */ + if(!iq->ratelimit_ok && infra_ratelimit_exceeded( + qstate->env->infra_cache, iq->dp->name, + iq->dp->namelen, *qstate->env->now)) { + /* and increment the rate, so that the rate for time + * now will also exceed the rate, keeping cache fresh */ + (void)infra_ratelimit_inc(qstate->env->infra_cache, + iq->dp->name, iq->dp->namelen, + *qstate->env->now); + /* see if we are passed through with slip factor */ + if(qstate->env->cfg->ratelimit_factor != 0 && + ub_random_max(qstate->env->rnd, + qstate->env->cfg->ratelimit_factor) == 1) { + iq->ratelimit_ok = 1; + log_nametypeclass(VERB_ALGO, "ratelimit allowed through for " + "delegation point", iq->dp->name, + LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); + } else { + log_nametypeclass(VERB_ALGO, "ratelimit exceeded with " + "delegation point", iq->dp->name, + LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + } /* see if this dp not useless. * It is useless if: @@ -1914,6 +1966,15 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, return 0; } + /* if not forwarding, check ratelimits per delegationpoint name */ + if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { + if(!infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name, + iq->dp->namelen, *qstate->env->now)) { + verbose(VERB_ALGO, "query exceeded ratelimits"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + } + /* We have a valid target. */ if(verbosity >= VERB_QUERY) { log_query_info(VERB_QUERY, "sending query:", &iq->qchase); @@ -1928,11 +1989,15 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->qchase.qname, iq->qchase.qname_len, iq->qchase.qtype, iq->qchase.qclass, iq->chase_flags | (iq->chase_to_rd?BIT_RD:0), EDNS_DO|BIT_CD, - iq->dnssec_expected, iq->caps_fallback, &target->addr, - target->addrlen, iq->dp->name, iq->dp->namelen, qstate); + iq->dnssec_expected, iq->caps_fallback || is_caps_whitelisted( + ie, iq), &target->addr, target->addrlen, iq->dp->name, + iq->dp->namelen, qstate); if(!outq) { log_addr(VERB_DETAIL, "error sending query to auth server", &target->addr, target->addrlen); + if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) + infra_ratelimit_dec(qstate->env->infra_cache, iq->dp->name, + iq->dp->namelen, *qstate->env->now); return next_state(iq, QUERYTARGETS_STATE); } outbound_list_insert(&iq->outlist, outq); @@ -2083,6 +2148,14 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, * delegation point, and back to the QUERYTARGETS_STATE. */ verbose(VERB_DETAIL, "query response was REFERRAL"); + if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { + /* we have a referral, no ratelimit, we can send + * our queries to the given name */ + infra_ratelimit_dec(qstate->env->infra_cache, + iq->dp->name, iq->dp->namelen, + *qstate->env->now); + } + /* if hardened, only store referral if we asked for it */ if(!qstate->env->cfg->harden_referral_path || ( qstate->qinfo.qtype == LDNS_RR_TYPE_NS diff --git a/external/unbound/iterator/iterator.h b/external/unbound/iterator/iterator.h index cb8043fd5..aaf0fb383 100644 --- a/external/unbound/iterator/iterator.h +++ b/external/unbound/iterator/iterator.h @@ -51,6 +51,7 @@ struct iter_forwards; struct iter_donotq; struct iter_prep_list; struct iter_priv; +struct rbtree_t; /** max number of targets spawned for a query and its subqueries */ #define MAX_TARGET_COUNT 32 @@ -96,6 +97,9 @@ struct iter_env { /** private address space and private domains */ struct iter_priv* priv; + /** whitelist for capsforid names */ + struct rbtree_t* caps_white; + /** The maximum dependency depth that this resolver will pursue. */ int max_dependency_depth; @@ -259,6 +263,9 @@ struct iter_qstate { * subqueries, the malloced-array is shared, [0] refcount. */ int* target_count; + /** if true, already tested for ratelimiting and passed the test */ + int ratelimit_ok; + /** * The query must store NS records from referrals as parentside RRs * Enabled once it hits resolution problems, to throttle retries. diff --git a/external/unbound/libunbound/libunbound.c b/external/unbound/libunbound/libunbound.c index a37da9ee4..37288f256 100644 --- a/external/unbound/libunbound/libunbound.c +++ b/external/unbound/libunbound/libunbound.c @@ -1028,6 +1028,7 @@ ub_ctx_hosts(struct ub_ctx* ctx, const char* fname) "\\hosts"); retval=ub_ctx_hosts(ctx, buf); } + free(name); return retval; } return UB_READFILE; @@ -1052,6 +1053,8 @@ ub_ctx_hosts(struct ub_ctx* ctx, const char* fname) /* skip addr */ while(isxdigit((unsigned char)*parse) || *parse == '.' || *parse == ':') parse++; + if(*parse == '\r') + parse++; if(*parse == '\n' || *parse == 0) continue; if(*parse == '%') @@ -1065,7 +1068,8 @@ ub_ctx_hosts(struct ub_ctx* ctx, const char* fname) *parse++ = 0; /* end delimiter for addr ... */ /* go to names and add them */ while(*parse) { - while(*parse == ' ' || *parse == '\t' || *parse=='\n') + while(*parse == ' ' || *parse == '\t' || *parse=='\n' + || *parse=='\r') parse++; if(*parse == 0 || *parse == '#') break; diff --git a/external/unbound/libunbound/python/Makefile b/external/unbound/libunbound/python/Makefile index 86ba17747..01b057731 100644 --- a/external/unbound/libunbound/python/Makefile +++ b/external/unbound/libunbound/python/Makefile @@ -48,17 +48,14 @@ help: #../../.libs/libunbound.so.0: ../../Makefile #$(MAKE) -C ../.. -#../../ldns-src/lib/libldns.so: ../../ldns-src/Makefile - #$(MAKE) -C ../../ldns-src - clean: rm -rdf examples/unbound rm -f _unbound.so libunbound_wrap.o $(MAKE) -C ../.. clean -testenv: ../../.libs/libunbound.so.2 ../../ldns-src/lib/libldns.so ../../.libs/_unbound.so +testenv: ../../.libs/libunbound.so.2 ../../.libs/_unbound.so rm -rdf examples/unbound - cd examples && mkdir unbound && ln -s ../../unbound.py unbound/__init__.py && ln -s ../../_unbound.so unbound/_unbound.so && ln -s ../../../../.libs/libunbound.so.2 unbound/libunbound.so.2 && ln -s ../../../../ldns-src/lib/libldns.so.1 unbound/libldns.so.1 && ls -la + cd examples && mkdir unbound && ln -s ../../unbound.py unbound/__init__.py && ln -s ../../_unbound.so unbound/_unbound.so && ln -s ../../../../.libs/libunbound.so.2 unbound/libunbound.so.2 && ls -la cd examples && if test -f ../../../.libs/_unbound.so; then cp ../../../.libs/_unbound.so . ; fi @echo "Run a script by typing ./script_name.py" cd examples && LD_LIBRARY_PATH=unbound bash diff --git a/external/unbound/libunbound/python/examples/async-lookup.py b/external/unbound/libunbound/python/examples/async-lookup.py index cbb8ea02d..936be3218 100644 --- a/external/unbound/libunbound/python/examples/async-lookup.py +++ b/external/unbound/libunbound/python/examples/async-lookup.py @@ -32,6 +32,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import unbound import time @@ -39,9 +40,9 @@ ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") def call_back(my_data,status,result): - print("Call_back:", my_data) + print("Call_back:", sorted(my_data)) if status == 0 and result.havedata: - print("Result:", result.data.address_list) + print("Result:", sorted(result.data.address_list)) my_data['done_flag'] = True diff --git a/external/unbound/libunbound/python/examples/dns-lookup.py b/external/unbound/libunbound/python/examples/dns-lookup.py index b3f4008fd..a175dfb0e 100644 --- a/external/unbound/libunbound/python/examples/dns-lookup.py +++ b/external/unbound/libunbound/python/examples/dns-lookup.py @@ -32,6 +32,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import unbound ctx = unbound.ub_ctx() @@ -39,6 +40,6 @@ ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("www.nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: - print("Result:", result.data.address_list) + print("Result:", sorted(result.data.address_list)) elif status != 0: print("Error:", unbound.ub_strerror(status)) diff --git a/external/unbound/libunbound/python/examples/dnssec-valid.py b/external/unbound/libunbound/python/examples/dnssec-valid.py index 5c3cad9e9..386f4c277 100644 --- a/external/unbound/libunbound/python/examples/dnssec-valid.py +++ b/external/unbound/libunbound/python/examples/dnssec-valid.py @@ -32,6 +32,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import os from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN @@ -48,7 +49,7 @@ if os.path.isfile("keys"): status, result = ctx.resolve("www.nic.cz", RR_TYPE_A, RR_CLASS_IN) if status == 0 and result.havedata: - print("Result:", result.data.address_list) + print("Result:", sorted(result.data.address_list)) if result.secure: print("Result is secure") diff --git a/external/unbound/libunbound/python/examples/dnssec_test.py b/external/unbound/libunbound/python/examples/dnssec_test.py index 0d62b9ff2..430e51a80 100644 --- a/external/unbound/libunbound/python/examples/dnssec_test.py +++ b/external/unbound/libunbound/python/examples/dnssec_test.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +from __future__ import print_function from unbound import ub_ctx, RR_TYPE_A, RR_TYPE_RRSIG, RR_TYPE_NSEC, RR_TYPE_NSEC3 import ldns @@ -12,16 +13,16 @@ def dnssecParse(domain, rrType=RR_TYPE_A): raise RuntimeError("Error parsing DNS packet") rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_ANSWER) - print("RRSIGs from answer:", rrsigs) + print("RRSIGs from answer:", sorted(rrsigs)) rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_AUTHORITY) - print("RRSIGs from authority:", rrsigs) + print("RRSIGs from authority:", sorted(rrsigs)) nsecs = pkt.rr_list_by_type(RR_TYPE_NSEC, ldns.LDNS_SECTION_AUTHORITY) - print("NSECs:", nsecs) + print("NSECs:", sorted(nsecs)) nsec3s = pkt.rr_list_by_type(RR_TYPE_NSEC3, ldns.LDNS_SECTION_AUTHORITY) - print("NSEC3s:", nsec3s) + print("NSEC3s:", sorted(nsec3s)) print("---") diff --git a/external/unbound/libunbound/python/examples/example8-1.py b/external/unbound/libunbound/python/examples/example8-1.py index ca868e510..723c4060e 100644 --- a/external/unbound/libunbound/python/examples/example8-1.py +++ b/external/unbound/libunbound/python/examples/example8-1.py @@ -33,6 +33,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import unbound ctx = unbound.ub_ctx() @@ -42,20 +43,20 @@ status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.mx_list: + for k in sorted(result.data.mx_list): print(" priority:%d address:%s" % k) status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.address_list: + for k in sorted(result.data.address_list): print(" address:%s" % k) status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.domain_list: + for k in sorted(result.data.domain_list): print(" host: %s" % k) diff --git a/external/unbound/libunbound/python/examples/idn-lookup.py b/external/unbound/libunbound/python/examples/idn-lookup.py index 2170637d3..f28315067 100644 --- a/external/unbound/libunbound/python/examples/idn-lookup.py +++ b/external/unbound/libunbound/python/examples/idn-lookup.py @@ -33,6 +33,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import unbound import locale @@ -45,18 +46,18 @@ status, result = ctx.resolve(u"www.háčkyčárky.cz", unbound.RR_TYPE_A, unboun if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.address_list: + for k in sorted(result.data.address_list): print(" address:%s" % k) status, result = ctx.resolve(u"háčkyčárky.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.mx_list_idn: + for k in sorted(result.data.mx_list_idn): print(" priority:%d address:%s" % k) status, result = ctx.resolve(unbound.reverse('217.31.204.66')+'.in-addr.arpa', unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result.data:", result.data) - for k in result.data.domain_list_idn: + for k in sorted(result.data.domain_list_idn): print(" dname:%s" % k) diff --git a/external/unbound/libunbound/python/examples/mx-lookup.py b/external/unbound/libunbound/python/examples/mx-lookup.py index f83f690f8..e9394b355 100644 --- a/external/unbound/libunbound/python/examples/mx-lookup.py +++ b/external/unbound/libunbound/python/examples/mx-lookup.py @@ -33,6 +33,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import unbound ctx = unbound.ub_ctx() @@ -42,12 +43,12 @@ status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.mx_list: + for k in sorted(result.data.mx_list): print(" priority:%d address:%s" % k) status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.address_list: + for k in sorted(result.data.address_list): print(" address:%s" % k) diff --git a/external/unbound/libunbound/python/examples/ns-lookup.py b/external/unbound/libunbound/python/examples/ns-lookup.py index bcd51de6d..49f567283 100644 --- a/external/unbound/libunbound/python/examples/ns-lookup.py +++ b/external/unbound/libunbound/python/examples/ns-lookup.py @@ -33,6 +33,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import unbound ctx = unbound.ub_ctx() @@ -42,6 +43,6 @@ status, result = ctx.resolve("vutbr.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) - for k in result.data.domain_list: + for k in sorted(result.data.domain_list): print(" host: %s" % k) diff --git a/external/unbound/libunbound/python/examples/reverse-lookup.py b/external/unbound/libunbound/python/examples/reverse-lookup.py index 7e06844ec..c9a13fea6 100644 --- a/external/unbound/libunbound/python/examples/reverse-lookup.py +++ b/external/unbound/libunbound/python/examples/reverse-lookup.py @@ -32,6 +32,7 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ''' +from __future__ import print_function import unbound ctx = unbound.ub_ctx() @@ -39,5 +40,5 @@ ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve(unbound.reverse("74.125.43.147") + ".in-addr.arpa.", unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) if status == 0 and result.havedata: - print("Result.data:", result.data, result.data.domain_list) + print("Result.data:", result.data, sorted(result.data.domain_list)) diff --git a/external/unbound/libunbound/python/file_py3.i b/external/unbound/libunbound/python/file_py3.i new file mode 100644 index 000000000..5d8b5a271 --- /dev/null +++ b/external/unbound/libunbound/python/file_py3.i @@ -0,0 +1,155 @@ +/* + * file_py3.i: Typemaps for FILE* for Python 3 + * + * Copyright (c) 2011, Karel Slany (karel.slany AT nic.cz) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the organization nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +%{ +#include <unistd.h> +#include <fcntl.h> +%} + +%types(FILE *); + +//#define SWIG_FILE3_DEBUG + +/* converts basic file descriptor flags onto a string */ +%fragment("fdfl_to_str", "header") { +const char * +fdfl_to_str(int fdfl) { + + static const char * const file_mode[] = {"w+", "w", "r"}; + + if (fdfl & O_RDWR) { + return file_mode[0]; + } else if (fdfl & O_WRONLY) { + return file_mode[1]; + } else { + return file_mode[2]; + } +} +} + +%fragment("is_obj_file", "header") { +int +is_obj_file(PyObject *obj) { + int fd, fdfl; + if (!PyLong_Check(obj) && /* is not an integer */ + PyObject_HasAttrString(obj, "fileno") && /* has fileno method */ + (PyObject_CallMethod(obj, "flush", NULL) != NULL) && /* flush() succeeded */ + ((fd = PyObject_AsFileDescriptor(obj)) != -1) && /* got file descriptor */ + ((fdfl = fcntl(fd, F_GETFL)) != -1) /* got descriptor flags */ + ) { + return 1; + } + else { + return 0; + } +} +} + +%fragment("obj_to_file","header", fragment="fdfl_to_str,is_obj_file") { +FILE * +obj_to_file(PyObject *obj) { + int fd, fdfl; + FILE *fp; + if (is_obj_file(obj)) { + fd = PyObject_AsFileDescriptor(obj); + fdfl = fcntl(fd, F_GETFL); + fp = fdopen(dup(fd), fdfl_to_str(fdfl)); /* the FILE* must be flushed + and closed after being used */ +#ifdef SWIG_FILE3_DEBUG + fprintf(stderr, "opening fd %d (fl %d \"%s\") as FILE %p\n", + fd, fdfl, fdfl_to_str(fdfl), (void *)fp); +#endif + return fp; + } + return NULL; +} +} + +/* returns -1 if error occurred */ +/* caused magic SWIG Syntax errors when was commented out */ +#if 0 +%fragment("dispose_file", "header") { +int +dispose_file(FILE **fp) { +#ifdef SWIG_FILE3_DEBUG + fprintf(stderr, "flushing FILE %p\n", (void *)fp); +#endif + if (*fp == NULL) { + return 0; + } + if ((fflush(*fp) == 0) && /* flush file */ + (fclose(*fp) == 0)) { /* close file */ + *fp = NULL; + return 0; + } + return -1; +} +} +#endif + +%typemap(arginit, noblock = 1) FILE* { + $1 = NULL; +} + +/* + * added due to ub_ctx_debugout since since it is overloaded: + * takes void* and FILE*. In reality only FILE* but the wrapper + * and the function is declared in such way. + */ +%typemap(typecheck, noblock = 1, fragment = "is_obj_file", precedence = SWIG_TYPECHECK_POINTER) FILE* { + $1 = is_obj_file($input); +} + +%typemap(check, noblock = 1) FILE* { + if ($1 == NULL) { + /* The generated wrapper function raises TypeError on mismatching types. */ + SWIG_exception_fail(SWIG_TypeError, "in method '" "$symname" "', argument " + "$argnum"" of type '" "$type""'"); + } +} + +%typemap(in, noblock = 1, fragment = "obj_to_file") FILE* { + $1 = obj_to_file($input); +} + +/* + * Commented out due the way how ub_ctx_debugout() uses the parameter. + * This typemap would cause the FILE* to be closed after return from + * the function. This caused Python interpreter to crash, since the + * function just stores the FILE* internally in ctx and use it for + * logging. So we'll leave the closing of the file on the OS. + */ +/*%typemap(freearg, noblock = 1, fragment = "dispose_file") FILE* { + if (dispose_file(&$1) == -1) { + SWIG_exception_fail(SWIG_IOError, "closing file in method '" "$symname" "', argument " + "$argnum"" of type '" "$type""'"); + } +}*/ diff --git a/external/unbound/libunbound/python/libunbound.i b/external/unbound/libunbound/python/libunbound.i index 1bef79f22..3c0e45b7d 100644 --- a/external/unbound/libunbound/python/libunbound.i +++ b/external/unbound/libunbound/python/libunbound.i @@ -60,7 +60,11 @@ %} //%include "doc.i" +#if PY_MAJOR_VERSION >= 3 +%include "file_py3.i" // python 3 FILE * +#else %include "file.i" +#endif %feature("docstring") strerror "Convert error value to a human readable string." diff --git a/external/unbound/pythonmod/interface.i b/external/unbound/pythonmod/interface.i index b2dd08904..4b20c6ec1 100644 --- a/external/unbound/pythonmod/interface.i +++ b/external/unbound/pythonmod/interface.i @@ -29,15 +29,15 @@ #include "iterator/iter_delegpt.h" #include "iterator/iter_hints.h" #include "iterator/iter_utils.h" - #include "ldns/wire2str.h" - #include "ldns/str2wire.h" - #include "ldns/pkthdr.h" + #include "sldns/wire2str.h" + #include "sldns/str2wire.h" + #include "sldns/pkthdr.h" %} %include "stdint.i" // uint_16_t can be known type now %inline %{ - //converts [len][data][len][data][0] string to a List of labels (PyStrings) + //converts [len][data][len][data][0] string to a List of labels (PyBytes) PyObject* GetNameAsLabelList(const char* name, int len) { PyObject* list; int cnt=0, i; @@ -79,8 +79,8 @@ struct query_info { %inline %{ enum enum_rr_class { RR_CLASS_IN = 1, - RR_CLASS_CH = 3, - RR_CLASS_HS = 4, + RR_CLASS_CH = 3, + RR_CLASS_HS = 4, RR_CLASS_NONE = 254, RR_CLASS_ANY = 255, }; @@ -164,7 +164,7 @@ struct query_info { char buf[LDNS_MAX_DOMAINLEN+1]; buf[0] = '\0'; dname_str((uint8_t*)dname, buf); - return PyString_FromString(buf); + return PyBytes_FromString(buf); } %} @@ -440,7 +440,7 @@ struct comm_reply { reply_addr2str(reply, dest, 64); if (dest[0] == 0) return Py_None; - return PyString_FromString(dest); + return PyBytes_FromString(dest); } PyObject* _comm_reply_family_get(struct comm_reply* reply) { @@ -448,9 +448,9 @@ struct comm_reply { int af = (int)((struct sockaddr_in*) &(reply->addr))->sin_family; switch(af) { - case AF_INET: return PyString_FromString("ip4"); - case AF_INET6: return PyString_FromString("ip6"); - case AF_UNIX: return PyString_FromString("unix"); + case AF_INET: return PyBytes_FromString("ip4"); + case AF_INET6: return PyBytes_FromString("ip6"); + case AF_UNIX: return PyBytes_FromString("unix"); } return Py_None; @@ -711,13 +711,13 @@ struct delegpt { %inline %{ PyObject* _get_dp_dname(struct delegpt* dp) { - return PyString_FromStringAndSize((char*)dp->name, dp->namelen); + return PyBytes_FromStringAndSize((char*)dp->name, dp->namelen); } PyObject* _get_dp_dname_components(struct delegpt* dp) { return GetNameAsLabelList((char*)dp->name, dp->namelen); } PyObject* _get_dpns_dname(struct delegpt_ns* dpns) { - return PyString_FromStringAndSize((char*)dpns->name, dpns->namelen); + return PyBytes_FromStringAndSize((char*)dpns->name, dpns->namelen); } PyObject* _get_dpns_dname_components(struct delegpt_ns* dpns) { return GetNameAsLabelList((char*)dpns->name, dpns->namelen); @@ -728,7 +728,7 @@ struct delegpt { delegpt_addr_addr2str(target, dest, 64); if (dest[0] == 0) return Py_None; - return PyString_FromString(dest); + return PyBytes_FromString(dest); } %} @@ -842,7 +842,7 @@ int checkList(PyObject *l) for (i=0; i < PyList_Size(l); i++) { item = PyList_GetItem(l, i); - if (!PyString_Check(item)) + if (!PyBytes_Check(item)) return 0; } return 1; @@ -864,12 +864,12 @@ int pushRRList(sldns_buffer* qb, PyObject *l, uint32_t default_ttl, int qsec, len = sldns_buffer_remaining(qb); if(qsec) { - if(sldns_str2wire_rr_question_buf(PyString_AsString(item), + if(sldns_str2wire_rr_question_buf(PyBytes_AsString(item), sldns_buffer_current(qb), &len, NULL, NULL, 0, NULL, 0) != 0) return 0; } else { - if(sldns_str2wire_rr_buf(PyString_AsString(item), + if(sldns_str2wire_rr_buf(PyBytes_AsString(item), sldns_buffer_current(qb), &len, NULL, default_ttl, NULL, 0, NULL, 0) != 0) return 0; diff --git a/external/unbound/pythonmod/pythonmod.c b/external/unbound/pythonmod/pythonmod.c index 190d41a81..48dbc0169 100644 --- a/external/unbound/pythonmod/pythonmod.c +++ b/external/unbound/pythonmod/pythonmod.c @@ -133,7 +133,13 @@ int pythonmod_init(struct module_env* env, int id) /* Initialize Python libraries */ if (!Py_IsInitialized()) { - Py_SetProgramName("unbound"); +#if PY_MAJOR_VERSION >= 3 + wchar_t progname[8]; + mbstowcs(progname, "unbound", 8); +#else + char *progname = "unbound"; +#endif + Py_SetProgramName(progname); Py_NoSiteFlag = 1; Py_Initialize(); PyEval_InitThreads(); diff --git a/external/unbound/services/cache/dns.c b/external/unbound/services/cache/dns.c index cec2629e1..53127ce59 100644 --- a/external/unbound/services/cache/dns.c +++ b/external/unbound/services/cache/dns.c @@ -389,6 +389,18 @@ dns_msg_authadd(struct dns_msg* msg, struct regional* region, return 1; } +/** add rrset to answer section */ +static int +dns_msg_ansadd(struct dns_msg* msg, struct regional* region, + struct ub_packed_rrset_key* rrset, time_t now) +{ + if(!(msg->rep->rrsets[msg->rep->rrset_count++] = + packed_rrset_copy_region(rrset, region, now))) + return 0; + msg->rep->an_numrrsets++; + return 1; +} + struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, @@ -635,6 +647,58 @@ synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region, return msg; } +/** Fill TYPE_ANY response with some data from cache */ +static struct dns_msg* +fill_any(struct module_env* env, + uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, + struct regional* region) +{ + time_t now = *env->now; + struct dns_msg* msg = NULL; + uint16_t lookup[] = {LDNS_RR_TYPE_A, LDNS_RR_TYPE_AAAA, + LDNS_RR_TYPE_MX, LDNS_RR_TYPE_SOA, LDNS_RR_TYPE_NS, 0}; + int i, num=5; /* number of RR types to look up */ + log_assert(lookup[num] == 0); + + 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( + env->rrset_cache, qname, qnamelen, lookup[i], + qclass, 0, now, 0); + struct packed_rrset_data *d; + if(!rrset) + continue; + + /* only if rrset from answer section */ + d = (struct packed_rrset_data*)rrset->entry.data; + if(d->trust == rrset_trust_add_noAA || + d->trust == rrset_trust_auth_noAA || + d->trust == rrset_trust_add_AA || + d->trust == rrset_trust_auth_AA) { + lock_rw_unlock(&rrset->entry.lock); + continue; + } + + /* create msg if none */ + if(!msg) { + msg = dns_msg_create(qname, qnamelen, qtype, qclass, + region, (size_t)(num-i)); + if(!msg) { + lock_rw_unlock(&rrset->entry.lock); + return NULL; + } + } + + /* add RRset to response */ + if(!dns_msg_ansadd(msg, region, rrset, now)) { + lock_rw_unlock(&rrset->entry.lock); + return NULL; + } + lock_rw_unlock(&rrset->entry.lock); + } + return msg; +} + struct dns_msg* dns_cache_lookup(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, @@ -747,6 +811,11 @@ dns_cache_lookup(struct module_env* env, } } + /* fill common RR types for ANY response to avoid requery */ + if(qtype == LDNS_RR_TYPE_ANY) { + return fill_any(env, qname, qnamelen, qtype, qclass, region); + } + return NULL; } diff --git a/external/unbound/services/cache/infra.c b/external/unbound/services/cache/infra.c index 61bab3fe5..c0049d8b6 100644 --- a/external/unbound/services/cache/infra.c +++ b/external/unbound/services/cache/infra.c @@ -40,6 +40,7 @@ */ #include "config.h" #include "sldns/rrdef.h" +#include "sldns/str2wire.h" #include "services/cache/infra.h" #include "util/storage/slabhash.h" #include "util/storage/lookup3.h" @@ -57,6 +58,9 @@ * can do this number of packets (until those all timeout too) */ #define TIMEOUT_COUNT_MAX 3 +/** ratelimit value for delegation point */ +int infra_dp_ratelimit = 0; + size_t infra_sizefunc(void* k, void* ATTR_UNUSED(d)) { @@ -99,6 +103,114 @@ infra_deldatafunc(void* d, void* ATTR_UNUSED(arg)) free(data); } +size_t +rate_sizefunc(void* k, void* ATTR_UNUSED(d)) +{ + struct rate_key* key = (struct rate_key*)k; + return sizeof(*key) + sizeof(struct rate_data) + key->namelen + + lock_get_mem(&key->entry.lock); +} + +int +rate_compfunc(void* key1, void* key2) +{ + struct rate_key* k1 = (struct rate_key*)key1; + struct rate_key* k2 = (struct rate_key*)key2; + if(k1->namelen != k2->namelen) { + if(k1->namelen < k2->namelen) + return -1; + return 1; + } + return query_dname_compare(k1->name, k2->name); +} + +void +rate_delkeyfunc(void* k, void* ATTR_UNUSED(arg)) +{ + struct rate_key* key = (struct rate_key*)k; + if(!key) + return; + lock_rw_destroy(&key->entry.lock); + free(key->name); + free(key); +} + +void +rate_deldatafunc(void* d, void* ATTR_UNUSED(arg)) +{ + struct rate_data* data = (struct rate_data*)d; + free(data); +} + +/** find or create element in domainlimit tree */ +static struct domain_limit_data* domain_limit_findcreate( + struct infra_cache* infra, char* name) +{ + uint8_t* nm; + int labs; + size_t nmlen; + struct domain_limit_data* d; + + /* parse name */ + nm = sldns_str2wire_dname(name, &nmlen); + if(!nm) { + log_err("could not parse %s", name); + return NULL; + } + labs = dname_count_labels(nm); + + /* can we find it? */ + d = (struct domain_limit_data*)name_tree_find(&infra->domain_limits, + nm, nmlen, labs, LDNS_RR_CLASS_IN); + if(d) { + free(nm); + return d; + } + + /* create it */ + d = (struct domain_limit_data*)calloc(1, sizeof(*d)); + if(!d) { + free(nm); + return NULL; + } + d->node.node.key = &d->node; + d->node.name = nm; + d->node.len = nmlen; + d->node.labs = labs; + d->node.dclass = LDNS_RR_CLASS_IN; + d->lim = -1; + d->below = -1; + if(!name_tree_insert(&infra->domain_limits, &d->node, nm, nmlen, + labs, LDNS_RR_CLASS_IN)) { + log_err("duplicate element in domainlimit tree"); + free(nm); + free(d); + return NULL; + } + return d; +} + +/** insert rate limit configuration into lookup tree */ +static int infra_ratelimit_cfg_insert(struct infra_cache* infra, + struct config_file* cfg) +{ + struct config_str2list* p; + struct domain_limit_data* d; + for(p = cfg->ratelimit_for_domain; p; p = p->next) { + d = domain_limit_findcreate(infra, p->str); + if(!d) + return 0; + d->lim = atoi(p->str2); + } + for(p = cfg->ratelimit_below_domain; p; p = p->next) { + d = domain_limit_findcreate(infra, p->str); + if(!d) + return 0; + d->below = atoi(p->str2); + } + return 1; +} + struct infra_cache* infra_create(struct config_file* cfg) { @@ -114,15 +226,44 @@ infra_create(struct config_file* cfg) return NULL; } infra->host_ttl = cfg->host_ttl; + name_tree_init(&infra->domain_limits); + infra_dp_ratelimit = cfg->ratelimit; + if(cfg->ratelimit != 0) { + infra->domain_rates = slabhash_create(cfg->ratelimit_slabs, + INFRA_HOST_STARTSIZE, cfg->ratelimit_size, + &rate_sizefunc, &rate_compfunc, &rate_delkeyfunc, + &rate_deldatafunc, NULL); + if(!infra->domain_rates) { + infra_delete(infra); + return NULL; + } + /* insert config data into ratelimits */ + if(!infra_ratelimit_cfg_insert(infra, cfg)) { + infra_delete(infra); + return NULL; + } + name_tree_init_parents(&infra->domain_limits); + } return infra; } +/** delete domain_limit entries */ +static void domain_limit_free(rbnode_t* n, void* ATTR_UNUSED(arg)) +{ + if(n) { + free(((struct domain_limit_data*)n)->node.name); + free(n); + } +} + void infra_delete(struct infra_cache* infra) { if(!infra) return; slabhash_delete(infra->hosts); + slabhash_delete(infra->domain_rates); + traverse_postorder(&infra->domain_limits, domain_limit_free, NULL); free(infra); } @@ -562,8 +703,178 @@ infra_get_lame_rtt(struct infra_cache* infra, return 1; } +int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, + size_t namelen) +{ + int labs = dname_count_labels(name); + struct domain_limit_data* d = (struct domain_limit_data*) + name_tree_lookup(&infra->domain_limits, name, namelen, labs, + LDNS_RR_CLASS_IN); + if(!d) return infra_dp_ratelimit; + + if(d->node.labs == labs && d->lim != -1) + return d->lim; /* exact match */ + + /* find 'below match' */ + if(d->node.labs == labs) + d = (struct domain_limit_data*)d->node.parent; + while(d) { + if(d->below != -1) + return d->below; + d = (struct domain_limit_data*)d->node.parent; + } + return infra_dp_ratelimit; +} + +/** find data item in array, for write access, caller unlocks */ +static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra, + uint8_t* name, size_t namelen, int wr) +{ + struct rate_key key; + hashvalue_t h = dname_query_hash(name, 0xab); + memset(&key, 0, sizeof(key)); + key.name = name; + key.namelen = namelen; + key.entry.hash = h; + return slabhash_lookup(infra->domain_rates, h, &key, wr); +} + +/** create rate data item for name, number 1 in now */ +static void infra_create_ratedata(struct infra_cache* infra, + uint8_t* name, size_t namelen, time_t timenow) +{ + hashvalue_t h = dname_query_hash(name, 0xab); + struct rate_key* k = (struct rate_key*)calloc(1, sizeof(*k)); + struct rate_data* d = (struct rate_data*)calloc(1, sizeof(*d)); + if(!k || !d) { + free(k); + free(d); + return; /* alloc failure */ + } + k->namelen = namelen; + k->name = memdup(name, namelen); + if(!k->name) { + free(k); + free(d); + return; /* alloc failure */ + } + lock_rw_init(&k->entry.lock); + k->entry.hash = h; + k->entry.key = k; + k->entry.data = d; + d->qps[0] = 1; + d->timestamp[0] = timenow; + slabhash_insert(infra->domain_rates, h, &k->entry, d, NULL); +} + +/** find the second and return its rate counter, if none, remove oldest */ +static int* infra_rate_find_second(void* data, time_t t) +{ + struct rate_data* d = (struct rate_data*)data; + int i, oldest; + for(i=0; i<RATE_WINDOW; i++) { + if(d->timestamp[i] == t) + return &(d->qps[i]); + } + /* remove oldest timestamp, and insert it at t with 0 qps */ + oldest = 0; + for(i=0; i<RATE_WINDOW; i++) { + if(d->timestamp[i] < d->timestamp[oldest]) + oldest = i; + } + d->timestamp[oldest] = t; + d->qps[oldest] = 0; + return &(d->qps[oldest]); +} + +int infra_rate_max(void* data, time_t now) +{ + struct rate_data* d = (struct rate_data*)data; + int i, max = 0; + for(i=0; i<RATE_WINDOW; i++) { + if(now-d->timestamp[i] <= RATE_WINDOW) { + if(d->qps[i] > max) + max = d->qps[i]; + } + } + return max; +} + +int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, + size_t namelen, time_t timenow) +{ + int lim, max; + struct lruhash_entry* entry; + + if(!infra_dp_ratelimit) + return 1; /* not enabled */ + + /* find ratelimit */ + lim = infra_find_ratelimit(infra, name, namelen); + + /* find or insert ratedata */ + entry = infra_find_ratedata(infra, name, namelen, 1); + if(entry) { + int premax = infra_rate_max(entry->data, timenow); + int* cur = infra_rate_find_second(entry->data, timenow); + (*cur)++; + max = infra_rate_max(entry->data, timenow); + lock_rw_unlock(&entry->lock); + + if(premax < lim && max >= lim) { + char buf[257]; + dname_str(name, buf); + verbose(VERB_OPS, "ratelimit exceeded %s %d", buf, lim); + } + return (max < lim); + } + + /* create */ + infra_create_ratedata(infra, name, namelen, timenow); + return (1 < lim); +} + +void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name, + size_t namelen, time_t timenow) +{ + struct lruhash_entry* entry; + int* cur; + if(!infra_dp_ratelimit) + return; /* not enabled */ + entry = infra_find_ratedata(infra, name, namelen, 1); + if(!entry) return; /* not cached */ + cur = infra_rate_find_second(entry->data, timenow); + if((*cur) > 0) + (*cur)--; + lock_rw_unlock(&entry->lock); +} + +int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, + size_t namelen, time_t timenow) +{ + struct lruhash_entry* entry; + int lim, max; + if(!infra_dp_ratelimit) + return 0; /* not enabled */ + + /* find ratelimit */ + lim = infra_find_ratelimit(infra, name, namelen); + + /* find current rate */ + entry = infra_find_ratedata(infra, name, namelen, 0); + if(!entry) + return 0; /* not cached */ + max = infra_rate_max(entry->data, timenow); + lock_rw_unlock(&entry->lock); + + return (max >= lim); +} + size_t infra_get_mem(struct infra_cache* infra) { - return sizeof(*infra) + slabhash_get_mem(infra->hosts); + size_t s = sizeof(*infra) + slabhash_get_mem(infra->hosts); + if(infra->domain_rates) s += slabhash_get_mem(infra->domain_rates); + /* ignore domain_limits because walk through tree is big */ + return s; } diff --git a/external/unbound/services/cache/infra.h b/external/unbound/services/cache/infra.h index fc54f7f0d..fc7abb7c4 100644 --- a/external/unbound/services/cache/infra.h +++ b/external/unbound/services/cache/infra.h @@ -42,6 +42,7 @@ #ifndef SERVICES_CACHE_INFRA_H #define SERVICES_CACHE_INFRA_H #include "util/storage/lruhash.h" +#include "util/storage/dnstree.h" #include "util/rtt.h" struct slabhash; struct config_file; @@ -108,6 +109,55 @@ struct infra_cache { struct slabhash* hosts; /** TTL value for host information, in seconds */ int host_ttl; + /** hash table with query rates per name: rate_key, rate_data */ + struct slabhash* domain_rates; + /** ratelimit settings for domains, struct domain_limit_data */ + rbtree_t domain_limits; +}; + +/** ratelimit, unless overridden by domain_limits, 0 is off */ +extern int infra_dp_ratelimit; + +/** + * ratelimit settings for domains + */ +struct domain_limit_data { + /** key for rbtree, must be first in struct, name of domain */ + struct name_tree_node node; + /** ratelimit for exact match with this name, -1 if not set */ + int lim; + /** ratelimit for names below this name, -1 if not set */ + int below; +}; + +/** + * key for ratelimit lookups, a domain name + */ +struct rate_key { + /** lruhash key entry */ + struct lruhash_entry entry; + /** domain name in uncompressed wireformat */ + uint8_t* name; + /** length of name */ + size_t namelen; +}; + +/** number of seconds to track qps rate */ +#define RATE_WINDOW 2 + +/** + * Data for ratelimits per domain name + * It is incremented when a non-cache-lookup happens for that domain name. + * The name is the delegation point we have for the name. + * If a new delegation point is found (a referral reply), the previous + * delegation point is decremented, and the new one is charged with the query. + */ +struct rate_data { + /** queries counted, for that second. 0 if not in use. */ + int qps[RATE_WINDOW]; + /** what the timestamp is of the qps array members, counter is + * valid for that timestamp. Usually now and now-1. */ + time_t timestamp[RATE_WINDOW]; }; /** infra host cache default hash lookup size */ @@ -287,6 +337,51 @@ long long infra_get_host_rto(struct infra_cache* infra, int* tA, int* tAAAA, int* tother); /** + * Increment the query rate counter for a delegation point. + * @param infra: infra cache. + * @param name: zone name + * @param namelen: zone name length + * @param timenow: what time it is now. + * @return 1 if it could be incremented. 0 if the increment overshot the + * ratelimit or if in the previous second the ratelimit was exceeded. + * Failures like alloc failures are not returned (probably as 1). + */ +int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, + size_t namelen, time_t timenow); + +/** + * Decrement the query rate counter for a delegation point. + * Because the reply received for the delegation point was pleasant, + * we do not charge this delegation point with it (i.e. it was a referral). + * Should call it with same second as when inc() was called. + * @param infra: infra cache. + * @param name: zone name + * @param namelen: zone name length + * @param timenow: what time it is now. + */ +void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name, + size_t namelen, time_t timenow); + +/** + * See if the query rate counter for a delegation point is exceeded. + * So, no queries are going to be allowed. + * @param infra: infra cache. + * @param name: zone name + * @param namelen: zone name length + * @param timenow: what time it is now. + * @return true if exceeded. + */ +int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, + size_t namelen, time_t timenow); + +/** find the maximum rate stored, not too old. 0 if no information. */ +int infra_rate_max(void* data, time_t now); + +/** find the ratelimit in qps for a domain */ +int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, + size_t namelen); + +/** * Get memory used by the infra cache. * @param infra: infrastructure cache. * @return memory in use in bytes. @@ -306,4 +401,16 @@ void infra_delkeyfunc(void* k, void* arg); /** delete data and destroy the lameness hashtable */ void infra_deldatafunc(void* d, void* arg); +/** calculate size for the hashtable */ +size_t rate_sizefunc(void* k, void* d); + +/** compare two names, returns -1, 0, or +1 */ +int rate_compfunc(void* key1, void* key2); + +/** delete key, and destroy the lock */ +void rate_delkeyfunc(void* k, void* arg); + +/** delete data */ +void rate_deldatafunc(void* d, void* arg); + #endif /* SERVICES_CACHE_INFRA_H */ diff --git a/external/unbound/services/localzone.c b/external/unbound/services/localzone.c index 51491656f..c50ad0f15 100644 --- a/external/unbound/services/localzone.c +++ b/external/unbound/services/localzone.c @@ -1027,6 +1027,10 @@ void local_zones_print(struct local_zones* zones) log_nametypeclass(0, "inform zone", z->name, 0, z->dclass); break; + case local_zone_inform_deny: + log_nametypeclass(0, "inform_deny zone", + z->name, 0, z->dclass); + break; default: log_nametypeclass(0, "badtyped zone", z->name, 0, z->dclass); @@ -1124,7 +1128,7 @@ lz_zone_answer(struct local_zone* z, struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, struct regional* temp, struct local_data* ld) { - if(z->type == local_zone_deny) { + if(z->type == local_zone_deny || z->type == local_zone_inform_deny) { /** no reply at all, signal caller by clearing buffer. */ sldns_buffer_clear(buf); sldns_buffer_flip(buf); @@ -1211,7 +1215,8 @@ local_zones_answer(struct local_zones* zones, struct query_info* qinfo, lock_rw_rdlock(&z->lock); lock_rw_unlock(&zones->lock); - if(z->type == local_zone_inform && repinfo) + if((z->type == local_zone_inform || z->type == local_zone_inform_deny) + && repinfo) lz_inform_print(z, qinfo, repinfo); if(local_data_answer(z, qinfo, edns, buf, temp, labs, &ld)) { @@ -1234,6 +1239,7 @@ const char* local_zone_type2str(enum localzone_type t) case local_zone_static: return "static"; case local_zone_nodefault: return "nodefault"; case local_zone_inform: return "inform"; + case local_zone_inform_deny: return "inform_deny"; } return "badtyped"; } @@ -1254,6 +1260,8 @@ int local_zone_str2type(const char* type, enum localzone_type* t) *t = local_zone_redirect; else if(strcmp(type, "inform") == 0) *t = local_zone_inform; + else if(strcmp(type, "inform_deny") == 0) + *t = local_zone_inform_deny; else return 0; return 1; } diff --git a/external/unbound/services/localzone.h b/external/unbound/services/localzone.h index 29ba8663f..3d62a69d1 100644 --- a/external/unbound/services/localzone.h +++ b/external/unbound/services/localzone.h @@ -73,7 +73,9 @@ enum localzone_type { * nodefault is used in config not during service. */ local_zone_nodefault, /** log client address, but no block (transparent) */ - local_zone_inform + local_zone_inform, + /** log client address, and block (drop) */ + local_zone_inform_deny }; /** diff --git a/external/unbound/services/outside_network.c b/external/unbound/services/outside_network.c index dc3d2f404..f105bc0d4 100644 --- a/external/unbound/services/outside_network.c +++ b/external/unbound/services/outside_network.c @@ -1510,7 +1510,8 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c, log_assert(rem); /* should have been present */ sq->to_be_deleted = 1; verbose(VERB_ALGO, "svcd callbacks start"); - if(sq->outnet->use_caps_for_id && error == NETEVENT_NOERROR && c) { + if(sq->outnet->use_caps_for_id && error == NETEVENT_NOERROR && c && + !sq->nocaps) { /* noerror and nxdomain must have a qname in reply */ if(sldns_buffer_read_u16_at(c->buffer, 4) == 0 && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) @@ -1590,7 +1591,7 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error, infra_update_tcp_works(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen); #ifdef USE_DNSTAP - if(sq->outnet->dtenv && + if(error==NETEVENT_NOERROR && sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_response_messages || sq->outnet->dtenv->log_forwarder_response_messages)) dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, diff --git a/external/unbound/smallapp/unbound-control.c b/external/unbound/smallapp/unbound-control.c index 3b47d3bf8..d4b147d67 100644 --- a/external/unbound/smallapp/unbound-control.c +++ b/external/unbound/smallapp/unbound-control.c @@ -109,6 +109,7 @@ usage() printf(" get_option opt get option value\n"); printf(" list_stubs list stub-zones and root hints in use\n"); printf(" list_forwards list forward-zones in use\n"); + printf(" list_insecure list domain-insecure zones\n"); printf(" list_local_zones list local-zones in use\n"); printf(" list_local_data list local-data RRs in use\n"); printf(" insecure_add zone add domain-insecure zone\n"); @@ -122,6 +123,8 @@ usage() printf(" forward [off | addr ...] without arg show forward setup\n"); printf(" or off to turn off root forwarding\n"); printf(" or give list of ip addresses\n"); + printf(" ratelimit_list [+a] list ratelimited domains\n"); + printf(" +a list all, also not ratelimited\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); diff --git a/external/unbound/testcode/unitmsgparse.c b/external/unbound/testcode/unitmsgparse.c index ba4e234c8..627d10b78 100644 --- a/external/unbound/testcode/unitmsgparse.c +++ b/external/unbound/testcode/unitmsgparse.c @@ -497,9 +497,11 @@ testfromdrillfile(sldns_buffer* pkt, struct alloc_cache* alloc, void msgparse_test(void) { + time_t origttl = MAX_NEG_TTL; sldns_buffer* pkt = sldns_buffer_new(65553); sldns_buffer* out = sldns_buffer_new(65553); struct alloc_cache super_a, alloc; + MAX_NEG_TTL = 86400; /* init */ alloc_init(&super_a, NULL, 0); alloc_init(&alloc, &super_a, 2); @@ -536,4 +538,5 @@ void msgparse_test(void) alloc_clear(&super_a); sldns_buffer_free(pkt); sldns_buffer_free(out); + MAX_NEG_TTL = origttl; } diff --git a/external/unbound/testdata/fwd_any.rpl b/external/unbound/testdata/fwd_any.rpl new file mode 100644 index 000000000..4284ee79e --- /dev/null +++ b/external/unbound/testdata/fwd_any.rpl @@ -0,0 +1,161 @@ +; This is a comment. +; config options go here. +forward-zone: name: "." forward-addr: 216.0.0.1 +CONFIG_END + +SCENARIO_BEGIN Test query and cache with type ANY +RANGE_BEGIN 0 1000 +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 + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN ANY +SECTION ANSWER +;; different type in this answer. +www.example.com. IN TXT "text" +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN AAAA +SECTION ANSWER +www.example.com. IN AAAA ::5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR RD RA NOERROR +SECTION QUESTION +www.foo.com. IN ANY +SECTION ANSWER +www.foo.com. IN A 1.2.3.77 +www.foo.com. IN AAAA ::77 +ENTRY_END + +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END +; unneccesary nothing steps. +STEP 20 NOTHING +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH opcode qname qtype +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +; test cache synthesis +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN ANY +ENTRY_END +STEP 50 NOTHING +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH opcode qname qtype +SECTION QUESTION +www.example.com. IN ANY +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +; and again +; the synthesized result itself is not added to the cache +STEP 62 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN ANY +ENTRY_END +STEP 63 NOTHING +STEP 64 CHECK_ANSWER +ENTRY_BEGIN +MATCH opcode qname qtype +SECTION QUESTION +www.example.com. IN ANY +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +; AAAA lookup to add more data in cache +STEP 70 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN AAAA +ENTRY_END +STEP 80 NOTHING +STEP 90 CHECK_ANSWER +ENTRY_BEGIN +MATCH opcode qname qtype +SECTION QUESTION +www.example.com. IN AAAA +SECTION ANSWER +www.example.com. IN AAAA ::5 +ENTRY_END + +; test cache synthesis of AAAA, and two rrsets. +STEP 100 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN ANY +ENTRY_END +STEP 110 NOTHING +STEP 120 CHECK_ANSWER +ENTRY_BEGIN +MATCH opcode qname qtype +SECTION QUESTION +www.example.com. IN ANY +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +www.example.com. IN AAAA ::5 +ENTRY_END + +; test query that is not synthesized from cache. +STEP 130 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.foo.com. IN ANY +ENTRY_END +STEP 140 NOTHING +STEP 150 CHECK_ANSWER +ENTRY_BEGIN +MATCH opcode qname qtype +SECTION QUESTION +www.foo.com. IN ANY +SECTION ANSWER +www.foo.com. IN A 1.2.3.77 +www.foo.com. IN AAAA ::77 +ENTRY_END + +SCENARIO_END diff --git a/external/unbound/testdata/fwd_capsid_white.tpkg b/external/unbound/testdata/fwd_capsid_white.tpkg Binary files differnew file mode 100644 index 000000000..199befb56 --- /dev/null +++ b/external/unbound/testdata/fwd_capsid_white.tpkg diff --git a/external/unbound/testdata/iter_domain_sale.rpl b/external/unbound/testdata/iter_domain_sale.rpl new file mode 100644 index 000000000..ff612780a --- /dev/null +++ b/external/unbound/testdata/iter_domain_sale.rpl @@ -0,0 +1,273 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test resolver with a domain sale +; and the old operator is nasty, keeps running his server with the old data. +; and lots of lookups keep going towards the domain. +; eventually, the NS record has to timeout. + +; 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 A +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. (before sale of domain) +RANGE_BEGIN 0 20 + 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 A +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. (after sale of domain) +RANGE_BEGIN 30 200 + 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 A +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 8.8.8.8 +ENTRY_END +RANGE_END + +; ns.example.com. first owner +RANGE_BEGIN 0 200 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname +ADJUST copy_id copy_query +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 1.2.3.4 +ENTRY_END + +; nxdomains for any name,type +; last in RANGE so that it matches everything left over. +; it includes the NS record. +ENTRY_BEGIN +MATCH opcode +ADJUST copy_id copy_query +REPLY QR AA NXDOMAIN +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +SECTION AUTHORITY +example.com. 3600 IN SOA a. b. 1 2 3 4 5 +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns.example.com. new owner +RANGE_BEGIN 0 200 + ADDRESS 8.8.8.8 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 8.8.8.8 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 88.88.88.88 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 8.8.8.8 +ENTRY_END +RANGE_END + +; Fetch the old record from the old owner. +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 5 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 1.2.3.4 +ENTRY_END + +; the domain is sold (right at this time). +; but the information stays in the cache. + +; after 1800 secs still the cached answer +STEP 20 TIME_PASSES ELAPSE 1800 + +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 1800 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 1800 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 1800 IN A 1.2.3.4 +ENTRY_END + +; and ask another query +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +nx1.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +nx1.example.com. IN A +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. +SECTION ADDITIONAL +ns.example.com. 1800 IN A 1.2.3.4 +ENTRY_END + +; after another 1900 seconds the domain must have timed out. +STEP 70 TIME_PASSES ELAPSE 1900 + +; the NS record should have timed out. +STEP 80 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 90 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 88.88.88.88 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 8.8.8.8 +ENTRY_END + +SCENARIO_END diff --git a/external/unbound/testdata/iter_domain_sale_nschange.rpl b/external/unbound/testdata/iter_domain_sale_nschange.rpl new file mode 100644 index 000000000..bc396f67c --- /dev/null +++ b/external/unbound/testdata/iter_domain_sale_nschange.rpl @@ -0,0 +1,342 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test resolver with a domain sale and NS changes +; and the old operator is nasty, keeps running his server with the old data. +; and lots of lookups keep going towards the domain. +; and the old server is changing the NS record of the old domain. + +; 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 A +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. (before sale of domain) +RANGE_BEGIN 0 20 + 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 A +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. (after sale of domain) +RANGE_BEGIN 30 200 + 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 A +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 8.8.8.8 +ENTRY_END +RANGE_END + +; ns.example.com. first owner +RANGE_BEGIN 0 30 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname +ADJUST copy_id copy_query +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 1.2.3.4 +ENTRY_END + +; nxdomains for any name,type +; last in RANGE so that it matches everything left over. +; it includes the NS record. +ENTRY_BEGIN +MATCH opcode +ADJUST copy_id copy_query +REPLY QR AA NXDOMAIN +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +SECTION AUTHORITY +example.com. 3600 IN SOA a. b. 1 2 3 4 5 +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns.example.com. first owner, NS changed +RANGE_BEGIN 40 200 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS nsb.example.com. +SECTION ADDITIONAL +nsb.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname +ADJUST copy_id copy_query +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 3600 IN NS nsb.example.com. +SECTION ADDITIONAL +nsb.example.com. 3600 IN A 1.2.3.4 +ENTRY_END + +; nxdomains for any name,type +; last in RANGE so that it matches everything left over. +; it includes the NS record. +ENTRY_BEGIN +MATCH opcode +ADJUST copy_id copy_query +REPLY QR AA NXDOMAIN +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +SECTION AUTHORITY +example.com. 3600 IN SOA a. b. 1 2 3 4 5 +example.com. 3600 IN NS nsb.example.com. +SECTION ADDITIONAL +nsb.example.com. 3600 IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns.example.com. new owner +RANGE_BEGIN 0 200 + ADDRESS 8.8.8.8 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 8.8.8.8 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 88.88.88.88 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 8.8.8.8 +ENTRY_END +RANGE_END + +; Fetch the old record from the old owner. +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 5 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 1.2.3.4 +ENTRY_END + +; the domain is sold (right at this time). +; but the information stays in the cache. + +; after 1800 secs still the cached answer +STEP 20 TIME_PASSES ELAPSE 1800 + +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 1800 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 1800 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 1800 IN A 1.2.3.4 +ENTRY_END + +; and ask another query +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +nx1.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +nx1.example.com. IN A +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. +SECTION ADDITIONAL +nsb.example.com. 3600 IN A 1.2.3.4 +ENTRY_END + +STEP 62 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +nx1.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 63 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +nx1.example.com. IN A +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. +SECTION ADDITIONAL +nsb.example.com. 3600 IN A 1.2.3.4 +ENTRY_END + +; after another 1900 seconds the domain must have timed out. +STEP 70 TIME_PASSES ELAPSE 1900 + +; the NS record should have timed out. +STEP 80 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END +; recursion happens here. +STEP 90 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 3600 IN A 88.88.88.88 +SECTION AUTHORITY +example.com. 3600 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3600 IN A 8.8.8.8 +ENTRY_END + +SCENARIO_END diff --git a/external/unbound/testdata/root_anchor.tpkg b/external/unbound/testdata/root_anchor.tpkg Binary files differnew file mode 100644 index 000000000..dfb4c5a1c --- /dev/null +++ b/external/unbound/testdata/root_anchor.tpkg diff --git a/external/unbound/util/config_file.c b/external/unbound/util/config_file.c index 9c6b43cab..5d31301fa 100644 --- a/external/unbound/util/config_file.c +++ b/external/unbound/util/config_file.c @@ -56,6 +56,7 @@ #include "util/fptr_wlist.h" #include "util/data/dname.h" #include "util/rtt.h" +#include "services/cache/infra.h" #include "sldns/wire2str.h" #include "sldns/parseutil.h" #ifdef HAVE_GLOB_H @@ -131,6 +132,7 @@ config_create(void) cfg->bogus_ttl = 60; cfg->min_ttl = 0; cfg->max_ttl = 3600 * 24; + cfg->max_negative_ttl = 3600; cfg->prefetch = 0; cfg->prefetch_key = 0; cfg->infra_cache_slabs = 4; @@ -172,6 +174,7 @@ config_create(void) cfg->harden_referral_path = 0; cfg->harden_algo_downgrade = 1; cfg->use_caps_bits_for_id = 0; + cfg->caps_whitelist = NULL; cfg->private_address = NULL; cfg->private_domain = NULL; cfg->unwanted_threshold = 0; @@ -228,6 +231,12 @@ config_create(void) if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH))) goto error_exit; #endif + cfg->ratelimit = 0; + cfg->ratelimit_slabs = 4; + cfg->ratelimit_size = 4*1024*1024; + cfg->ratelimit_for_domain = NULL; + cfg->ratelimit_below_domain = NULL; + cfg->ratelimit_factor = 10; return cfg; error_exit: config_delete(cfg); @@ -381,6 +390,8 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("prefetch-key:", prefetch_key) 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) + { IS_NUMBER_OR_ZERO; cfg->max_negative_ttl = atoi(val); MAX_NEG_TTL=(time_t)cfg->max_negative_ttl;} else if(strcmp(opt, "cache-min-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=(time_t)cfg->min_ttl;} else if(strcmp(opt, "infra-cache-min-rtt:") == 0) { @@ -409,6 +420,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("harden-referral-path:", harden_referral_path) else S_YNO("harden-algo-downgrade:", harden_algo_downgrade) else S_YNO("use-caps-for-id", use_caps_bits_for_id) + else S_STRLIST("caps-whitelist:", caps_whitelist) else S_SIZET_OR_ZERO("unwanted-reply-threshold:", unwanted_threshold) else S_STRLIST("private-address:", private_address) else S_STRLIST("private-domain:", private_domain) @@ -448,6 +460,13 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("control-cert-file:", control_cert_file) else S_STR("module-config:", module_conf) else S_STR("python-script:", python_script) + else if(strcmp(opt, "ratelimit:") == 0) { + IS_NUMBER_OR_ZERO; cfg->ratelimit = atoi(val); + infra_dp_ratelimit=cfg->ratelimit; + } + else S_MEMSIZE("ratelimit-size:", ratelimit_size) + else S_POW2("ratelimit-slabs:", ratelimit_slabs) + else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor) /* val_sig_skew_min and max are copied into val_env during init, * so this does not update val_env with set_option */ else if(strcmp(opt, "val-sig-skew-min:") == 0) @@ -470,7 +489,8 @@ int config_set_option(struct config_file* cfg, const char* opt, * interface, outgoing-interface, access-control, * stub-zone, name, stub-addr, stub-host, stub-prime * forward-first, stub-first, - * forward-zone, name, forward-addr, forward-host */ + * forward-zone, name, forward-addr, forward-host, + * ratelimit-for-domain, ratelimit-below-domain */ return 0; } return 1; @@ -582,8 +602,8 @@ config_collate_cat(struct config_strlist* list) #define O_MEM(opt, str, var) if(strcmp(opt, str)==0) { \ if(cfg->var > 1024*1024*1024) { \ size_t f=cfg->var/(size_t)1000000, b=cfg->var%(size_t)1000000; \ - snprintf(buf, len, "%u%6.6u\n", (unsigned)f, (unsigned)b); \ - } else snprintf(buf, len, "%u\n", (unsigned)cfg->var); \ + snprintf(buf, len, "%u%6.6u", (unsigned)f, (unsigned)b); \ + } else snprintf(buf, len, "%u", (unsigned)cfg->var); \ func(buf, arg);} /** compare and print list option */ #define O_LST(opt, name, lst) if(strcmp(opt, name)==0) { \ @@ -635,6 +655,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "prefetch-key", prefetch_key) else O_YNO(opt, "prefetch", prefetch) 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) else O_DEC(opt, "infra-host-ttl", host_ttl) else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs) @@ -670,6 +691,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "harden-referral-path", harden_referral_path) else O_YNO(opt, "harden-algo-downgrade", harden_algo_downgrade) else O_YNO(opt, "use-caps-for-id", use_caps_bits_for_id) + else O_LST(opt, "caps-whitelist", caps_whitelist) else O_DEC(opt, "unwanted-reply-threshold", unwanted_threshold) else O_YNO(opt, "do-not-query-localhost", donotquery_localhost) else O_STR(opt, "module-config", module_conf) @@ -710,6 +732,12 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) else O_STR(opt, "python-script", python_script) + else O_DEC(opt, "ratelimit", ratelimit) + else O_MEM(opt, "ratelimit-size", ratelimit_size) + else O_DEC(opt, "ratelimit-slabs", ratelimit_slabs) + else O_LS2(opt, "ratelimit-for-domain", ratelimit_for_domain) + else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain) + else O_DEC(opt, "ratelimit-factor", ratelimit_factor) else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min) else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max) /* not here: @@ -897,6 +925,7 @@ config_delete(struct config_file* cfg) free(cfg->version); free(cfg->module_conf); free(cfg->outgoing_avail_ports); + config_delstrlist(cfg->caps_whitelist); config_delstrlist(cfg->private_address); config_delstrlist(cfg->private_domain); config_delstrlist(cfg->auto_trust_anchor_file_list); @@ -916,9 +945,12 @@ config_delete(struct config_file* cfg) free(cfg->server_cert_file); free(cfg->control_key_file); free(cfg->control_cert_file); + free(cfg->dns64_prefix); free(cfg->dnstap_socket_path); free(cfg->dnstap_identity); free(cfg->dnstap_version); + config_deldblstrlist(cfg->ratelimit_for_domain); + config_deldblstrlist(cfg->ratelimit_below_domain); free(cfg); } @@ -1205,6 +1237,7 @@ config_apply(struct config_file* config) { MAX_TTL = (time_t)config->max_ttl; MIN_TTL = (time_t)config->min_ttl; + MAX_NEG_TTL = (time_t)config->max_negative_ttl; RTT_MIN_TIMEOUT = config->infra_cache_min_rtt; EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size; MINIMAL_RESPONSES = config->minimal_responses; diff --git a/external/unbound/util/config_file.h b/external/unbound/util/config_file.h index a3479b28f..1c3c31dcf 100644 --- a/external/unbound/util/config_file.h +++ b/external/unbound/util/config_file.h @@ -179,6 +179,8 @@ struct config_file { int harden_algo_downgrade; /** use 0x20 bits in query as random ID bits */ int use_caps_bits_for_id; + /** 0x20 whitelist, domains that do not use capsforid */ + struct config_strlist* caps_whitelist; /** strip away these private addrs from answers, no DNS Rebinding */ struct config_strlist* private_address; /** allow domain (and subdomains) to use private address space */ @@ -189,6 +191,8 @@ struct config_file { int max_ttl; /** the number of seconds minimum TTL used for RRsets and messages */ int min_ttl; + /** the number of seconds maximal negative TTL for SOA in auth */ + int max_negative_ttl; /** if prefetching of messages should be performed. */ int prefetch; /** if prefetching of DNSKEYs should be performed. */ @@ -345,6 +349,19 @@ struct config_file { int dnstap_log_forwarder_query_messages; /** true to log dnstap FORWARDER_RESPONSE message events */ int dnstap_log_forwarder_response_messages; + + /** ratelimit 0 is off, otherwise qps (unless overridden) */ + int ratelimit; + /** number of slabs for ratelimit cache */ + size_t ratelimit_slabs; + /** memory size in bytes for ratelimit cache */ + size_t ratelimit_size; + /** ratelimits for domain (exact match) */ + struct config_str2list* ratelimit_for_domain; + /** ratelimits below domain */ + struct config_str2list* ratelimit_below_domain; + /** ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */ + int ratelimit_factor; }; /** from cfg username, after daemonise setup performed */ diff --git a/external/unbound/util/configlexer.c b/external/unbound/util/configlexer.c index fcade1ac3..83087781f 100644 --- a/external/unbound/util/configlexer.c +++ b/external/unbound/util/configlexer.c @@ -363,8 +363,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 166 -#define YY_END_OF_BUFFER 167 +#define YY_NUM_RULES 174 +#define YY_END_OF_BUFFER 175 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,190 +372,198 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[1655] = +static yyconst flex_int16_t yy_accept[1731] = { 0, - 1, 1, 148, 148, 152, 152, 156, 156, 160, 160, - 1, 1, 167, 164, 1, 146, 146, 165, 2, 165, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 148, - 149, 149, 150, 165, 152, 153, 153, 154, 165, 159, - 156, 157, 157, 158, 165, 160, 161, 161, 162, 165, - 163, 147, 2, 151, 165, 163, 164, 0, 1, 2, - 2, 2, 2, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 148, 0, 152, 0, 159, 0, 156, 160, - 0, 163, 0, 2, 2, 163, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 163, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 163, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 68, 164, 164, - 164, 164, 164, 6, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 163, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 163, 164, 164, 164, 164, 30, - 164, 164, 164, 164, 164, 164, 164, 164, 133, 164, - 12, 13, 164, 15, 14, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 126, 164, 164, 164, 164, 164, 3, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 155, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 33, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 34, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 83, - 155, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 82, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 66, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 20, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 31, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 32, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 22, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 26, 164, 27, 164, - 164, 164, 69, 164, 70, 164, 67, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 5, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 85, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 23, 164, 164, 164, 164, 164, 110, 109, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 35, 164, 164, - 164, 164, 164, 164, 164, 164, 72, 71, 164, 164, - 164, 164, 164, 164, 164, 106, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 52, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 56, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 108, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 4, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 103, 164, 164, 164, 164, 164, 164, 164, 119, - 164, 104, 164, 131, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 21, 164, 164, 164, 164, 74, - 164, 75, 73, 164, 164, 164, 164, 164, 164, 164, - 81, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 105, 164, 164, 164, 164, 130, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 65, - 164, 164, 164, 164, 164, 164, 164, 164, 28, 164, - 164, 17, 164, 164, 164, 16, 164, 90, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 42, 43, 164, 164, 164, 164, 164, 164, 164, - 134, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 76, 164, 164, 164, 164, 164, - 164, 80, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 84, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 125, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 94, 164, 98, - 164, 164, 164, 164, 79, 164, 164, 117, 164, 164, - 164, 164, 132, 164, 164, 164, 164, 164, 164, 164, - 139, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 97, 164, 164, 164, 164, 164, 44, 45, - 164, 29, 51, 99, 164, 111, 107, 164, 164, 38, - 164, 101, 164, 164, 164, 164, 164, 7, 164, 64, - 116, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 86, 138, 164, - 164, 164, 164, 164, 164, 164, 164, 127, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 100, 164, 37, 39, 164, 164, 164, 164, - 164, 63, 164, 164, 164, 164, 121, 18, 19, 164, - 164, 164, 164, 164, 164, 164, 61, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 123, 120, 164, 164, - 164, 164, 164, 164, 164, 164, 36, 164, 164, 164, - 164, 164, 164, 164, 11, 164, 164, 164, 164, 164, - 164, 164, 164, 10, 164, 164, 40, 164, 129, 122, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 93, 92, 164, 124, 118, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 46, 164, 128, 164, 164, 164, - 164, 41, 164, 164, 164, 87, 89, 112, 164, 164, - 164, 91, 164, 164, 164, 164, 164, 164, 164, 164, - 135, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 24, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 137, 164, 164, 115, 164, 164, 164, 164, 164, - - 164, 164, 49, 164, 25, 164, 9, 164, 164, 113, - 53, 164, 164, 164, 96, 164, 164, 164, 164, 164, - 164, 136, 77, 164, 164, 164, 164, 55, 59, 54, - 164, 47, 164, 8, 164, 164, 95, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 60, 58, 164, 48, - 164, 114, 164, 164, 88, 164, 164, 164, 164, 164, - 164, 78, 57, 50, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 62, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - - 164, 164, 164, 164, 164, 164, 164, 164, 164, 102, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 142, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 140, 164, 143, 144, 164, 164, 164, 164, - 164, 141, 145, 0 + 1, 1, 156, 156, 160, 160, 164, 164, 168, 168, + 1, 1, 175, 172, 1, 154, 154, 173, 2, 173, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 156, + 157, 157, 158, 173, 160, 161, 161, 162, 173, 167, + 164, 165, 165, 166, 173, 168, 169, 169, 170, 173, + 171, 155, 2, 159, 173, 171, 172, 0, 1, 2, + 2, 2, 2, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 156, 0, 160, 0, 167, 0, 164, + 168, 0, 171, 0, 2, 2, 171, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 171, 172, 172, 172, + + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 171, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 70, 172, 172, 172, 172, 172, 6, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 171, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 171, 172, 172, 172, 172, 172, 30, + 172, 172, 172, 172, 172, 172, 172, 172, 135, 172, + 12, 13, 172, 15, 14, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 128, 172, 172, 172, 172, 172, 172, + 3, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 171, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 163, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 33, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 34, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 85, 163, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 84, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 68, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 20, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 31, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 32, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 22, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 148, 172, 172, + 172, 172, 172, 172, 26, 172, 27, 172, 172, 172, + 71, 172, 72, 172, 69, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 5, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 87, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 23, 172, 172, 172, 172, 172, 112, 111, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 35, 172, 172, 172, 172, 172, 172, 172, 172, 74, + 73, 172, 172, 172, 172, 172, 172, 172, 108, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 53, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 172, 57, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 110, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 4, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 105, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 121, 172, 106, 172, 133, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 21, 172, 172, 172, + + 172, 76, 172, 77, 75, 172, 172, 172, 172, 172, + 172, 172, 83, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 107, 172, 172, 172, 172, 132, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 67, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 28, 172, 172, 17, 172, + 172, 172, 16, 172, 92, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 42, + 44, 172, 172, 172, 172, 172, 172, 172, 172, 136, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 78, 172, 172, 172, 172, 172, 172, + 82, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 86, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 127, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 96, 172, 100, 172, 172, 172, 172, 81, 172, + 172, 63, 172, 119, 172, 172, 172, 172, 134, 172, + 172, 172, 172, 172, 172, 172, 141, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 99, 172, + + 172, 172, 172, 172, 45, 46, 172, 29, 52, 101, + 172, 113, 109, 172, 172, 38, 172, 103, 172, 172, + 172, 172, 172, 7, 172, 66, 172, 172, 172, 150, + 172, 118, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 88, + 140, 172, 172, 172, 172, 172, 172, 172, 172, 129, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 102, 172, 37, 39, 172, 172, + 172, 172, 172, 65, 172, 172, 172, 149, 172, 172, + + 172, 172, 123, 18, 19, 172, 172, 172, 172, 172, + 172, 172, 62, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 125, 122, 172, 172, 172, 172, 172, + 172, 172, 172, 36, 172, 172, 172, 172, 172, 172, + 172, 11, 172, 172, 172, 172, 172, 172, 172, 172, + 10, 172, 172, 172, 153, 172, 40, 172, 131, 124, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 95, 94, 172, 172, 126, 120, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 47, 172, 130, 172, 172, + + 172, 172, 172, 172, 41, 172, 172, 172, 89, 91, + 114, 172, 172, 172, 93, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 137, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 24, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 139, 172, + 172, 117, 172, 172, 172, 172, 172, 172, 172, 50, + 172, 25, 172, 9, 172, 172, 172, 172, 115, 54, + 172, 172, 172, 98, 172, 172, 172, 172, 172, 172, + 172, 138, 79, 172, 172, 172, 172, 56, 60, 55, + + 172, 48, 172, 8, 172, 151, 172, 172, 97, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 61, + 59, 172, 49, 172, 172, 116, 172, 172, 90, 43, + 172, 172, 172, 172, 172, 172, 80, 58, 51, 152, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 64, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 104, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + + 172, 172, 172, 172, 144, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 142, 172, + 145, 146, 172, 172, 172, 172, 172, 143, 147, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -598,750 +606,784 @@ static yyconst flex_int32_t yy_meta[40] = 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[1669] = +static yyconst flex_int16_t yy_base[1745] = { 0, 0, 0, 37, 40, 44, 51, 63, 75, 56, 68, - 87, 108, 2501, 2145, 50, 3281, 3281, 3281, 129, 94, + 87, 108, 2883, 2837, 50, 3431, 3431, 3431, 129, 94, 70, 104, 130, 90, 92, 115, 127, 95, 84, 111, - 137, 148, 50, 150, 155, 157, 163, 171, 178, 2001, - 3281, 3281, 3281, 70, 1900, 3281, 3281, 3281, 42, 1856, - 1448, 3281, 3281, 3281, 195, 1202, 3281, 3281, 3281, 141, - 1174, 3281, 202, 3281, 206, 122, 1044, 212, 120, 0, - 223, 0, 0, 103, 147, 154, 158, 192, 199, 207, - 208, 205, 209, 221, 218, 220, 224, 225, 229, 230, - 231, 238, 251, 236, 247, 250, 237, 248, 256, 259, - - 167, 263, 254, 249, 264, 265, 271, 273, 274, 125, - 275, 277, 284, 278, 281, 285, 288, 286, 289, 292, - 296, 298, 1016, 308, 746, 315, 650, 326, 474, 368, - 319, 301, 330, 334, 0, 327, 331, 337, 314, 305, - 333, 335, 343, 340, 346, 349, 370, 350, 339, 352, - 49, 356, 354, 353, 361, 363, 362, 366, 372, 365, - 377, 386, 382, 394, 401, 388, 387, 403, 399, 407, - 410, 406, 182, 395, 411, 342, 412, 409, 414, 416, - 418, 419, 427, 423, 426, 425, 435, 429, 433, 441, - 436, 444, 447, 446, 450, 451, 457, 455, 453, 456, - - 462, 461, 464, 471, 476, 477, 479, 465, 475, 482, - 483, 484, 494, 488, 491, 495, 501, 497, 498, 499, - 505, 503, 506, 507, 508, 509, 515, 519, 513, 512, - 514, 527, 528, 530, 531, 536, 537, 538, 539, 543, - 545, 546, 549, 547, 553, 561, 557, 559, 560, 566, - 567, 569, 575, 571, 568, 572, 579, 581, 582, 584, - 602, 591, 587, 590, 574, 597, 599, 608, 600, 607, - 609, 615, 613, 623, 630, 626, 627, 631, 634, 635, - 636, 639, 638, 641, 643, 644, 646, 647, 657, 659, - 660, 670, 666, 667, 648, 673, 664, 674, 681, 679, - - 680, 682, 683, 684, 686, 688, 692, 3281, 695, 690, - 697, 698, 701, 3281, 699, 702, 703, 710, 704, 721, - 706, 708, 714, 723, 718, 720, 726, 728, 748, 731, - 729, 739, 737, 732, 757, 736, 759, 738, 743, 750, - 762, 741, 766, 767, 768, 769, 773, 775, 778, 779, - 772, 783, 780, 786, 788, 789, 793, 794, 800, 801, - 803, 806, 812, 809, 816, 822, 811, 818, 820, 826, - 825, 828, 819, 835, 831, 827, 834, 843, 838, 840, - 850, 848, 849, 847, 853, 855, 859, 860, 862, 866, - 863, 867, 872, 877, 865, 871, 879, 878, 886, 893, - - 894, 887, 895, 902, 903, 880, 904, 890, 900, 907, - 909, 910, 911, 912, 915, 916, 922, 919, 923, 921, - 928, 930, 932, 934, 936, 937, 940, 943, 941, 942, - 951, 952, 954, 956, 955, 958, 962, 957, 964, 3281, - 972, 971, 968, 974, 976, 977, 979, 1005, 3281, 981, - 3281, 3281, 982, 3281, 3281, 985, 983, 986, 993, 1028, - 997, 991, 987, 998, 1007, 1008, 1018, 1011, 1020, 1000, - 1031, 1022, 1013, 1023, 1037, 1038, 1034, 1025, 1048, 1051, - 1057, 1059, 1055, 1056, 1060, 1061, 1063, 1065, 1064, 1067, - 1072, 1078, 1074, 3281, 1076, 1075, 1082, 1077, 1084, 3281, - - 1085, 1086, 1088, 1090, 1094, 1097, 1096, 1098, 1100, 1101, - 1099, 1107, 1113, 1103, 1111, 1127, 1129, 1126, 1112, 1128, - 1132, 1114, 1133, 1141, 1139, 1138, 1144, 1148, 1145, 1147, - 1150, 1151, 1154, 1152, 1153, 1155, 1178, 1159, 1160, 1161, - 1164, 1162, 1168, 1170, 1172, 1173, 1180, 1191, 1190, 1192, - 1193, 1197, 1205, 1208, 1198, 1201, 1211, 1212, 1217, 1215, - 1219, 1221, 1222, 1229, 1226, 3281, 1236, 1237, 1223, 1232, - 1233, 1239, 1243, 1244, 1246, 1247, 1248, 1249, 1251, 1255, - 3281, 1254, 1256, 1257, 1261, 1262, 1264, 1270, 1275, 1282, - 3281, 1285, 1286, 1278, 1283, 1271, 1289, 1288, 1294, 1295, - - 1296, 1297, 1301, 1304, 1305, 1293, 1312, 1306, 1308, 1310, - 1316, 1317, 1318, 1319, 1325, 1104, 1320, 1326, 1336, 1333, - 1335, 1338, 1339, 1340, 1345, 1342, 1346, 1343, 1344, 3281, - 239, 1347, 1349, 1350, 1356, 1359, 1358, 1365, 1366, 1367, - 1368, 1371, 1373, 1374, 1376, 1377, 1378, 1381, 1385, 1382, - 1389, 1391, 1394, 1392, 1398, 1399, 1400, 1403, 1402, 1409, - 1406, 1411, 1412, 1416, 1417, 1414, 1418, 1420, 1422, 1425, - 1424, 1432, 3281, 1435, 1431, 1434, 1436, 1443, 1451, 1447, - 1452, 1449, 1454, 1460, 1457, 1459, 1465, 1467, 1469, 1471, - 1461, 1472, 1479, 1482, 1480, 1483, 1484, 1481, 3281, 1491, - - 1473, 1486, 1489, 1494, 1497, 1496, 1499, 1501, 1507, 1508, - 1512, 3281, 1515, 1509, 1516, 1520, 1521, 1525, 1522, 1529, - 1530, 1531, 1532, 1533, 1542, 1534, 1539, 1537, 3281, 1551, - 1553, 1549, 1560, 1547, 1557, 1558, 1562, 1559, 1563, 1570, - 1564, 1567, 1571, 1572, 1568, 1566, 1574, 1575, 1577, 1578, - 3281, 1595, 1593, 1596, 1597, 1598, 1606, 1581, 1603, 1605, - 1582, 1607, 1610, 1609, 1611, 1613, 1616, 1618, 1619, 1620, - 1621, 1622, 1623, 1632, 1638, 1626, 1640, 1630, 1642, 1629, - 1646, 1652, 1658, 1654, 3281, 1657, 1659, 1660, 1661, 1662, - 1668, 1670, 1664, 1666, 1671, 1672, 1673, 1687, 1674, 1676, - - 1680, 1684, 1678, 1686, 1689, 1700, 1705, 1690, 1696, 1702, - 1688, 1713, 1714, 1716, 1698, 1722, 3281, 1706, 3281, 1721, - 1727, 1730, 3281, 1732, 3281, 1734, 3281, 1735, 1736, 1729, - 1715, 1739, 1741, 1742, 1748, 1723, 1749, 1745, 1751, 1752, - 1754, 1755, 3281, 1758, 1761, 1763, 1759, 1765, 1766, 1768, - 1769, 1777, 1771, 1783, 1780, 1782, 1784, 3281, 1787, 1788, - 1792, 1793, 1796, 1800, 1798, 1797, 1805, 1801, 1809, 1820, - 1807, 1816, 1817, 1818, 1819, 1827, 1821, 1823, 1830, 1832, - 1825, 1831, 1833, 1835, 1840, 1841, 1847, 1839, 1845, 1846, - 3281, 1850, 1848, 1857, 1860, 1858, 3281, 3281, 1862, 1868, - - 1870, 1866, 1876, 1873, 1877, 1878, 1884, 1881, 1883, 1888, - 1890, 1891, 1893, 1894, 1895, 1897, 1898, 3281, 1904, 1902, - 1911, 1909, 1907, 1919, 1910, 1921, 3281, 3281, 1917, 1922, - 1926, 1928, 1934, 1932, 1931, 3281, 1933, 1936, 1937, 1938, - 1941, 1945, 1939, 1950, 1952, 1955, 1956, 1958, 1964, 1960, - 1957, 1961, 1974, 1963, 1977, 3281, 1971, 1979, 1981, 1982, - 1983, 1984, 1985, 1986, 1988, 1989, 1990, 1995, 2003, 1999, - 2002, 2004, 2007, 2008, 2012, 2014, 2015, 2022, 2023, 3281, - 2030, 2016, 2032, 2018, 2036, 2037, 2044, 2033, 2029, 2031, - 2040, 2041, 2042, 2054, 2048, 2056, 2050, 3281, 2058, 2062, - - 2064, 2059, 2068, 2065, 2071, 2069, 2073, 3281, 2075, 2081, - 2078, 2083, 2085, 2082, 2088, 2086, 2092, 2093, 2094, 2096, - 2099, 2101, 2103, 2105, 2110, 2111, 2118, 2116, 2122, 2128, - 2120, 2124, 2132, 2126, 2129, 2130, 2134, 2140, 2139, 2148, - 2137, 3281, 2141, 2151, 2153, 2154, 2157, 2158, 2147, 3281, - 2163, 3281, 2155, 3281, 2165, 2170, 2166, 2171, 2172, 2173, - 2174, 2176, 2184, 2175, 3281, 2182, 2185, 2187, 2188, 3281, - 2199, 3281, 3281, 2191, 2193, 2200, 2201, 2204, 2208, 2212, - 3281, 2202, 2213, 2214, 2216, 2217, 2219, 2220, 2222, 2221, - 2223, 2224, 3281, 2230, 2226, 2227, 2237, 3281, 2239, 2241, - - 2229, 2242, 2248, 2249, 2251, 2252, 2257, 2263, 2259, 3281, - 2260, 2261, 2266, 2262, 2269, 2271, 2267, 2268, 3281, 2282, - 2283, 3281, 2272, 2284, 2286, 3281, 2289, 3281, 2290, 2291, - 2292, 2294, 2298, 2299, 2301, 2293, 2305, 2310, 2307, 2314, - 2311, 3281, 3281, 2316, 2322, 2323, 2318, 2326, 2327, 2329, - 3281, 2331, 2333, 2334, 2335, 2336, 2337, 2342, 2340, 2343, - 2345, 2346, 2348, 2349, 3281, 2352, 2353, 2354, 2359, 2364, - 2361, 3281, 2363, 2366, 2365, 2367, 2370, 2371, 2385, 2387, - 2379, 2389, 2391, 2394, 2395, 2397, 2399, 2400, 3281, 2401, - 2403, 2404, 2408, 2409, 2405, 2410, 2415, 2418, 2420, 2422, - - 3281, 2425, 2412, 2428, 2426, 2430, 2432, 2433, 2434, 2436, - 2440, 2441, 2443, 2444, 2446, 2454, 2451, 3281, 2448, 3281, - 2450, 2461, 2469, 2465, 3281, 2463, 2467, 3281, 2470, 2471, - 2472, 2481, 3281, 2483, 2475, 2484, 2486, 2477, 2487, 2493, - 3281, 2495, 2497, 2502, 2503, 2490, 2504, 2505, 2496, 2507, - 2519, 2511, 3281, 2513, 2515, 2526, 2522, 2523, 3281, 3281, - 2527, 3281, 3281, 3281, 2532, 3281, 3281, 2533, 2535, 3281, - 2537, 3281, 2544, 2540, 2542, 2524, 2543, 3281, 2550, 3281, - 3281, 2547, 2551, 2545, 2555, 2557, 2562, 2564, 2554, 2565, - 2567, 2568, 2569, 2570, 2571, 2573, 2576, 2574, 2577, 2582, - - 2578, 2584, 2586, 2587, 2588, 2590, 2606, 3281, 3281, 2594, - 2599, 2596, 2601, 2603, 2607, 2608, 2609, 3281, 2616, 2611, - 2622, 2613, 2619, 2623, 2624, 2625, 2631, 2638, 2632, 2634, - 2635, 2636, 3281, 2639, 3281, 3281, 2642, 2643, 2648, 2645, - 2651, 3281, 2653, 2655, 2664, 2666, 3281, 3281, 3281, 2667, - 2657, 2661, 2671, 2672, 2659, 2673, 3281, 2675, 2680, 2682, - 2683, 2689, 2692, 2699, 2696, 2701, 3281, 3281, 2702, 2703, - 2704, 2684, 2705, 2706, 2708, 2710, 3281, 2712, 2711, 2717, - 2716, 2718, 2723, 2719, 3281, 2721, 2726, 2731, 2733, 2734, - 2736, 2737, 2739, 3281, 2738, 2741, 3281, 2749, 3281, 3281, - - 2742, 2751, 2753, 2758, 2760, 2764, 2755, 2761, 2770, 2767, - 2768, 3281, 3281, 2771, 3281, 3281, 2769, 2774, 2776, 2778, - 2781, 2783, 2780, 2784, 2785, 2788, 2790, 2793, 2796, 2797, - 2800, 2802, 2803, 2805, 3281, 2807, 3281, 2806, 2813, 2814, - 2819, 3281, 2820, 2815, 2808, 3281, 3281, 3281, 2816, 2830, - 2832, 3281, 2834, 2835, 2822, 2837, 2836, 2845, 2838, 2847, - 3281, 2848, 2849, 2851, 2852, 2853, 2855, 2857, 2858, 2860, - 2859, 2869, 2861, 2873, 2870, 3281, 2878, 2874, 2879, 2882, - 2884, 2886, 2887, 2888, 2890, 2891, 2892, 2893, 2900, 2896, - 2907, 3281, 2910, 2898, 3281, 2911, 2904, 2915, 2922, 2924, - - 2926, 2927, 3281, 2929, 3281, 2930, 3281, 2934, 2935, 3281, - 3281, 2936, 2938, 2941, 3281, 2942, 2939, 2943, 2945, 2948, - 2949, 3281, 3281, 2950, 2952, 2956, 2960, 3281, 3281, 3281, - 2966, 3281, 2967, 3281, 2973, 2953, 3281, 2958, 2975, 2961, - 2977, 2978, 2979, 2980, 2981, 2983, 3281, 3281, 2988, 3281, - 2990, 3281, 2991, 2993, 3281, 3001, 2995, 2997, 2998, 3004, - 3005, 3281, 3281, 3281, 3006, 3007, 3011, 3012, 3008, 3013, - 3014, 3015, 3019, 3016, 3023, 3032, 3020, 3033, 3040, 3036, - 3281, 3034, 3038, 3046, 3047, 3044, 3043, 3051, 3052, 3053, - 3054, 3055, 3059, 3060, 3064, 3061, 3062, 3071, 3074, 3077, - - 3073, 3086, 3084, 3087, 3085, 3088, 3095, 3089, 3093, 3281, - 3091, 3097, 3098, 3099, 3100, 3105, 3102, 3113, 3118, 3115, - 3122, 3109, 3124, 3125, 3126, 3111, 3131, 3127, 3281, 3134, - 3135, 3137, 3138, 3141, 3143, 3144, 3147, 3150, 3145, 3154, - 3159, 3160, 3281, 3161, 3281, 3281, 3164, 3151, 3155, 3172, - 3176, 3281, 3281, 3281, 3189, 3196, 3203, 3210, 3217, 94, - 3224, 3231, 3238, 3245, 3252, 3259, 3266, 3273 + 137, 148, 50, 150, 161, 158, 154, 167, 182, 2287, + 3431, 3431, 3431, 70, 2251, 3431, 3431, 3431, 42, 1839, + 1625, 3431, 3431, 3431, 199, 1573, 3431, 3431, 3431, 141, + 1198, 3431, 203, 3431, 207, 122, 861, 213, 120, 0, + 224, 0, 0, 103, 147, 140, 206, 171, 170, 208, + 210, 211, 200, 226, 217, 214, 225, 227, 232, 180, + 230, 235, 242, 229, 246, 247, 240, 249, 252, 253, + + 257, 258, 259, 261, 262, 267, 268, 269, 274, 275, + 276, 278, 280, 284, 283, 286, 282, 290, 292, 299, + 303, 293, 296, 812, 318, 609, 321, 447, 327, 359, + 174, 332, 164, 336, 340, 0, 317, 333, 341, 311, + 335, 337, 339, 342, 349, 346, 352, 355, 376, 357, + 345, 360, 49, 359, 361, 367, 368, 372, 370, 369, + 378, 371, 373, 382, 392, 399, 400, 401, 386, 408, + 404, 411, 417, 413, 415, 402, 418, 414, 419, 423, + 416, 425, 429, 426, 432, 435, 433, 302, 437, 443, + 439, 440, 441, 454, 460, 457, 456, 446, 461, 467, + + 466, 475, 463, 464, 473, 474, 477, 483, 488, 486, + 489, 479, 491, 493, 494, 492, 502, 500, 503, 505, + 512, 508, 509, 511, 513, 515, 517, 518, 519, 521, + 525, 531, 524, 523, 529, 530, 539, 541, 542, 547, + 554, 548, 549, 550, 556, 558, 560, 562, 566, 567, + 574, 570, 571, 579, 572, 573, 588, 580, 591, 581, + 583, 585, 593, 595, 599, 615, 601, 610, 604, 605, + 606, 608, 637, 612, 620, 611, 623, 641, 622, 633, + 644, 643, 645, 651, 646, 652, 653, 656, 655, 654, + 660, 661, 662, 663, 674, 673, 667, 685, 681, 682, + + 664, 683, 689, 690, 697, 693, 694, 695, 696, 698, + 701, 704, 708, 3431, 710, 705, 712, 713, 715, 3431, + 716, 717, 718, 719, 724, 723, 735, 721, 733, 738, + 740, 734, 741, 742, 743, 763, 745, 750, 752, 748, + 753, 760, 756, 767, 770, 772, 775, 774, 754, 777, + 778, 780, 783, 788, 791, 794, 795, 796, 797, 801, + 802, 803, 804, 808, 816, 810, 822, 811, 828, 831, + 825, 833, 835, 841, 818, 837, 840, 843, 845, 846, + 847, 853, 850, 852, 856, 857, 854, 860, 870, 862, + 873, 875, 877, 878, 880, 881, 883, 889, 863, 887, + + 893, 894, 886, 888, 898, 905, 906, 914, 907, 915, + 912, 916, 923, 924, 917, 925, 928, 929, 930, 931, + 933, 932, 935, 938, 939, 945, 942, 943, 948, 953, + 955, 957, 958, 959, 962, 963, 967, 965, 966, 975, + 976, 978, 980, 979, 982, 986, 981, 988, 991, 3431, + 1001, 995, 992, 998, 892, 1003, 1005, 1031, 3431, 1007, + 3431, 3431, 1006, 3431, 3431, 1008, 1009, 1010, 1018, 1054, + 1019, 1011, 1012, 1025, 1027, 1032, 1033, 1020, 1041, 1044, + 1046, 1038, 1045, 1048, 1052, 1062, 1049, 1059, 1069, 1071, + 1080, 1081, 1079, 1078, 1083, 1085, 1068, 1087, 1088, 1090, + + 1094, 1101, 1097, 3431, 1098, 1100, 1099, 1104, 1106, 1108, + 3431, 1109, 1110, 1112, 1114, 1117, 1118, 1120, 1122, 1123, + 1124, 1127, 1128, 1125, 1132, 1135, 1145, 1151, 1144, 1137, + 1147, 1150, 1153, 1157, 1165, 1161, 1154, 1162, 1168, 1166, + 1170, 1177, 1167, 1179, 1171, 1173, 1178, 1180, 1201, 1181, + 1184, 1188, 1187, 1189, 1191, 1193, 1211, 1203, 1209, 1216, + 1219, 1208, 1220, 1225, 1228, 1235, 1226, 1227, 1230, 1237, + 1195, 1240, 1239, 1242, 1246, 1251, 1248, 3431, 1258, 1254, + 1255, 1259, 1262, 1260, 1264, 1266, 1263, 1268, 1269, 1270, + 1276, 1283, 3431, 1271, 1277, 1281, 1286, 1287, 1288, 1294, + + 1297, 1304, 3431, 1306, 1307, 1309, 1300, 1302, 1310, 1313, + 1314, 1318, 1319, 1315, 1322, 1325, 1327, 1328, 1329, 1333, + 1332, 1334, 1339, 1341, 1340, 1343, 1342, 1346, 1344, 1351, + 1357, 1361, 1358, 1365, 1362, 1366, 1367, 1372, 1369, 1374, + 1370, 1371, 3431, 125, 1376, 1377, 1375, 1391, 1393, 1394, + 1397, 1384, 1400, 1401, 1403, 1385, 1405, 1407, 1409, 1410, + 1411, 1412, 1415, 1419, 1422, 1413, 1430, 1421, 1425, 1431, + 1423, 1435, 1437, 1378, 1438, 1443, 1444, 1441, 1445, 1446, + 1449, 1450, 1454, 1451, 1452, 1453, 3431, 1469, 1461, 1455, + 1467, 1471, 1478, 1474, 1479, 1481, 1482, 1488, 1484, 1490, + + 1492, 1498, 1496, 1501, 1486, 1489, 1508, 1509, 1510, 1512, + 1511, 1502, 3431, 1514, 1517, 1519, 1531, 1521, 1522, 1528, + 1524, 1533, 1523, 1540, 1534, 1543, 3431, 1544, 1545, 1546, + 1553, 1554, 1556, 1557, 1559, 1560, 1561, 1563, 1564, 1567, + 1570, 1572, 1575, 3431, 1581, 1584, 1585, 1591, 1583, 1577, + 1587, 1594, 1589, 1595, 1602, 1599, 1600, 1603, 1604, 1605, + 1601, 1607, 1608, 1611, 1610, 1612, 3431, 1628, 1625, 1629, + 1636, 1630, 1640, 1639, 1631, 1641, 1624, 1645, 1646, 1647, + 1648, 1649, 1652, 1654, 1655, 1656, 1657, 1658, 1659, 1667, + 1661, 1662, 1675, 1676, 1679, 1678, 1681, 1687, 1688, 1689, + + 3431, 1693, 1694, 1695, 1696, 1697, 1703, 1705, 1701, 1706, + 1707, 1708, 1709, 1718, 1711, 1717, 1719, 1721, 1714, 1722, + 1724, 1731, 1729, 1737, 1735, 1742, 1744, 3431, 1745, 1753, + 1749, 1755, 1747, 1761, 3431, 1757, 3431, 1764, 1770, 1773, + 3431, 1777, 3431, 1779, 3431, 1723, 1780, 1772, 1758, 1760, + 1784, 1782, 1786, 1788, 1790, 1792, 1793, 1762, 1794, 1795, + 3431, 1798, 1796, 1801, 1806, 1799, 1803, 1809, 1805, 1815, + 1807, 1826, 1820, 1827, 1824, 1829, 1830, 3431, 1831, 1832, + 1834, 1837, 1841, 1848, 1845, 1842, 1849, 1835, 1853, 1863, + 1861, 1852, 1864, 1865, 1866, 1872, 1868, 1869, 1876, 1873, + + 1877, 1879, 1880, 1882, 1881, 1884, 1892, 1886, 1888, 1889, + 3431, 1898, 1890, 1894, 1902, 1904, 3431, 3431, 1913, 1915, + 1916, 1907, 1917, 1909, 1922, 1924, 1930, 1936, 1919, 1927, + 1929, 1932, 1937, 1938, 1941, 1943, 1944, 1950, 1945, 1948, + 3431, 1958, 1952, 1960, 1961, 1963, 1969, 1968, 1971, 3431, + 3431, 1976, 1972, 1973, 1975, 1982, 1979, 1978, 3431, 1986, + 1988, 1993, 1997, 1999, 2000, 1987, 1990, 2008, 1989, 2011, + 2001, 2012, 2014, 2020, 2016, 2017, 2019, 2022, 2023, 2030, + 3431, 2027, 2032, 2034, 2037, 2038, 2039, 2040, 2043, 2041, + 2044, 2045, 2053, 2054, 2056, 2057, 2058, 2062, 2059, 2066, + + 2068, 2069, 2075, 2071, 3431, 2085, 2072, 2086, 2082, 2084, + 2087, 2094, 2091, 2092, 2093, 2095, 2097, 2096, 2099, 2100, + 2101, 2108, 3431, 2109, 2120, 2106, 2116, 2122, 2114, 2124, + 2127, 2129, 3431, 2130, 2137, 2134, 2136, 2139, 2141, 2133, + 2144, 2147, 2148, 2149, 2150, 2155, 2157, 2152, 2158, 2160, + 2161, 2163, 2168, 2175, 2165, 2169, 2182, 2181, 2190, 2192, + 2178, 2188, 2196, 2193, 2194, 2195, 2197, 2206, 2199, 2208, + 2202, 3431, 2209, 2210, 2216, 2218, 2213, 2219, 2223, 2220, + 2227, 3431, 2224, 3431, 2230, 3431, 2231, 2235, 2232, 2237, + 2238, 2239, 2240, 2245, 2253, 2241, 3431, 2259, 2247, 2254, + + 2257, 3431, 2262, 3431, 3431, 2249, 2267, 2273, 2269, 2274, + 2270, 2277, 3431, 2278, 2279, 2282, 2280, 2284, 2288, 2290, + 2291, 2292, 2293, 2294, 3431, 2296, 2295, 2298, 2306, 3431, + 2304, 2309, 2310, 2312, 2319, 2320, 2322, 2311, 2323, 2331, + 2328, 3431, 2330, 2324, 2335, 2332, 2337, 2344, 2340, 2346, + 2341, 2342, 2350, 2355, 2356, 3431, 2358, 2360, 3431, 2359, + 2361, 2362, 3431, 2367, 3431, 2369, 2370, 2366, 2371, 2377, + 2374, 2387, 2379, 2384, 2389, 2382, 2393, 2396, 2390, 3431, + 3431, 2400, 2397, 2402, 2407, 2403, 2405, 2409, 2412, 3431, + 2413, 2416, 2417, 2418, 2419, 2425, 2420, 2427, 2428, 2422, + + 2429, 2430, 2431, 3431, 2435, 2439, 2441, 2444, 2442, 2445, + 3431, 2447, 2448, 2449, 2453, 2455, 2469, 2472, 2474, 2464, + 2476, 2479, 2481, 2482, 2484, 2486, 2487, 3431, 2452, 2489, + 2490, 2492, 2493, 2494, 2495, 2496, 2503, 2499, 2505, 3431, + 2507, 2508, 2510, 2516, 2513, 2520, 2517, 2521, 2524, 2525, + 2526, 2527, 2528, 2529, 2534, 2536, 2535, 2538, 2540, 2553, + 2542, 3431, 2545, 3431, 2549, 2555, 2562, 2559, 3431, 2561, + 2563, 3431, 2566, 3431, 2564, 2569, 2570, 2580, 3431, 2582, + 2571, 2583, 2575, 2577, 2573, 2588, 3431, 2593, 2595, 2600, + 2596, 2586, 2594, 2603, 2602, 2604, 2610, 2611, 3431, 2612, + + 2613, 2619, 2615, 2459, 3431, 3431, 2620, 3431, 3431, 3431, + 2625, 3431, 3431, 2626, 2630, 3431, 2633, 3431, 2639, 2635, + 2627, 2616, 2637, 3431, 2641, 3431, 2649, 2645, 2646, 3431, + 2648, 3431, 2650, 2651, 2652, 2654, 2657, 2665, 2668, 2658, + 2660, 2662, 2669, 2671, 2672, 2673, 2676, 2679, 2680, 2682, + 2684, 2685, 2686, 2687, 2689, 2690, 2691, 2699, 2704, 3431, + 3431, 2692, 2701, 2694, 2707, 2708, 2710, 2713, 2714, 3431, + 2721, 2723, 2718, 2722, 2724, 2726, 2729, 2728, 2734, 2740, + 2736, 2738, 2739, 2741, 3431, 2743, 3431, 3431, 2746, 2748, + 2750, 2752, 2755, 3431, 2756, 2764, 2757, 3431, 2769, 2759, + + 2772, 2775, 3431, 3431, 3431, 2776, 2765, 2779, 2780, 2781, + 2782, 2783, 3431, 2784, 2789, 2790, 2792, 2797, 2803, 2798, + 2800, 2809, 2811, 3431, 3431, 2817, 2814, 2815, 2804, 2806, + 2816, 2822, 2819, 3431, 2823, 2825, 2828, 2829, 2830, 2832, + 2835, 3431, 2834, 2836, 2840, 2846, 2842, 2848, 2849, 2850, + 3431, 2852, 2854, 2858, 3431, 2862, 3431, 2865, 3431, 3431, + 2860, 2868, 2871, 2876, 2878, 2882, 2866, 2872, 2888, 2890, + 2887, 3431, 3431, 2879, 2897, 3431, 3431, 2893, 2894, 2895, + 2896, 2898, 2901, 2902, 2906, 2903, 2904, 2907, 2909, 2915, + 2917, 2918, 2919, 2923, 2926, 3431, 2924, 3431, 2929, 2931, + + 2932, 2933, 2935, 2940, 3431, 2941, 2939, 2934, 3431, 3431, + 3431, 2952, 2953, 2955, 3431, 2956, 2958, 2945, 2960, 2963, + 2962, 2971, 2969, 2973, 3431, 2970, 2975, 2977, 2974, 2979, + 2982, 2983, 2984, 2986, 2985, 2996, 2987, 3000, 3003, 3431, + 3005, 2993, 3009, 3001, 2997, 3017, 3021, 3007, 3012, 3014, + 3023, 3018, 3025, 3027, 3028, 3036, 3033, 3038, 3431, 3040, + 3029, 3431, 3041, 3035, 3052, 3043, 3054, 3056, 3058, 3431, + 3060, 3431, 3061, 3431, 3065, 3066, 3068, 3069, 3431, 3431, + 3070, 3072, 3076, 3431, 3077, 3073, 3079, 3080, 3083, 3084, + 3086, 3431, 3431, 3087, 3089, 3093, 3090, 3431, 3431, 3431, + + 3099, 3431, 3102, 3431, 3095, 3431, 3104, 3108, 3431, 3110, + 3112, 3114, 3115, 3116, 3117, 3119, 3120, 3118, 3122, 3431, + 3431, 3127, 3431, 3130, 3133, 3431, 3134, 3135, 3431, 3431, + 3144, 3141, 3142, 3143, 3145, 3148, 3431, 3431, 3431, 3431, + 3149, 3150, 3152, 3154, 3151, 3156, 3157, 3159, 3161, 3158, + 3166, 3175, 3168, 3176, 3183, 3181, 3431, 3177, 3179, 3189, + 3190, 3186, 3188, 3187, 3194, 3196, 3197, 3199, 3202, 3204, + 3211, 3203, 3213, 3218, 3219, 3220, 3207, 3232, 3229, 3230, + 3217, 3231, 3238, 3234, 3235, 3431, 3239, 3240, 3241, 3242, + 3245, 3247, 3243, 3256, 3263, 3249, 3251, 3261, 3266, 3267, + + 3268, 3269, 3271, 3270, 3431, 3272, 3273, 3279, 3281, 3282, + 3284, 3285, 3286, 3291, 3292, 3294, 3296, 3301, 3431, 3297, + 3431, 3431, 3305, 3306, 3307, 3312, 3314, 3431, 3431, 3431, + 3339, 3346, 3353, 3360, 3367, 94, 3374, 3381, 3388, 3395, + 3402, 3409, 3416, 3423 } ; -static yyconst flex_int16_t yy_def[1669] = +static yyconst flex_int16_t yy_def[1745] = { 0, - 1654, 1, 1655, 1655, 1656, 1656, 1657, 1657, 1658, 1658, - 1659, 1659, 1654, 1660, 1654, 1654, 1654, 1654, 1661, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1662, - 1654, 1654, 1654, 1662, 1663, 1654, 1654, 1654, 1663, 1664, - 1654, 1654, 1654, 1654, 1664, 1665, 1654, 1654, 1654, 1665, - 1666, 1654, 1667, 1654, 1666, 1666, 1660, 1660, 1654, 1668, - 1661, 1668, 1661, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1662, 1662, 1663, 1663, 1664, 1664, 1654, 1665, - 1665, 1666, 1666, 1667, 1667, 1666, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1666, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1666, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, - 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1666, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1666, 1660, 1660, 1660, 1660, 1654, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, - 1654, 1654, 1660, 1654, 1654, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1654, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1666, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, - 1666, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1654, 1660, - 1660, 1660, 1654, 1660, 1654, 1660, 1654, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1654, 1654, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1654, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, - 1660, 1654, 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1654, - 1660, 1654, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1654, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, - 1660, 1654, 1660, 1660, 1660, 1654, 1660, 1654, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1654, - 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1654, 1660, 1660, - 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1654, 1654, - 1660, 1654, 1654, 1654, 1660, 1654, 1654, 1660, 1660, 1654, - 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1654, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1654, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1654, 1660, 1654, 1654, 1660, 1660, 1660, 1660, - 1660, 1654, 1660, 1660, 1660, 1660, 1654, 1654, 1654, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1654, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1654, 1660, 1660, 1654, 1660, 1654, 1654, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1654, 1660, 1654, 1654, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1654, 1660, 1654, 1660, 1660, 1660, - 1660, 1654, 1660, 1660, 1660, 1654, 1654, 1654, 1660, 1660, - 1660, 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1654, 1660, 1654, 1660, 1654, 1660, 1660, 1654, - 1654, 1660, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1654, 1660, 1660, 1660, 1660, 1654, 1654, 1654, - 1660, 1654, 1660, 1654, 1660, 1660, 1654, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1654, 1660, 1654, - 1660, 1654, 1660, 1660, 1654, 1660, 1660, 1660, 1660, 1660, - 1660, 1654, 1654, 1654, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1654, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1654, 1660, - 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, - 1660, 1660, 1654, 1660, 1654, 1654, 1660, 1660, 1660, 1660, - 1660, 1654, 1654, 0, 1654, 1654, 1654, 1654, 1654, 1654, - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654 + 1730, 1, 1731, 1731, 1732, 1732, 1733, 1733, 1734, 1734, + 1735, 1735, 1730, 1736, 1730, 1730, 1730, 1730, 1737, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1738, + 1730, 1730, 1730, 1738, 1739, 1730, 1730, 1730, 1739, 1740, + 1730, 1730, 1730, 1730, 1740, 1741, 1730, 1730, 1730, 1741, + 1742, 1730, 1743, 1730, 1742, 1742, 1736, 1736, 1730, 1744, + 1737, 1744, 1737, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1738, 1738, 1739, 1739, 1740, 1740, 1730, + 1741, 1741, 1742, 1742, 1743, 1743, 1742, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1742, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1742, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1742, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1742, 1736, 1736, 1736, 1736, 1736, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, + 1730, 1730, 1736, 1730, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1742, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1730, 1742, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, + 1736, 1736, 1736, 1736, 1730, 1736, 1730, 1736, 1736, 1736, + 1730, 1736, 1730, 1736, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1730, 1736, 1736, 1736, 1736, 1736, 1730, 1730, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1730, 1736, 1730, 1736, 1730, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, + + 1736, 1730, 1736, 1730, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1730, 1736, + 1736, 1736, 1730, 1736, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1730, 1736, 1730, 1736, 1736, 1736, 1736, 1730, 1736, + 1736, 1730, 1736, 1730, 1736, 1736, 1736, 1736, 1730, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, + + 1736, 1736, 1736, 1736, 1730, 1730, 1736, 1730, 1730, 1730, + 1736, 1730, 1730, 1736, 1736, 1730, 1736, 1730, 1736, 1736, + 1736, 1736, 1736, 1730, 1736, 1730, 1736, 1736, 1736, 1730, + 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1730, 1736, 1730, 1730, 1736, 1736, + 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1730, 1736, 1736, + + 1736, 1736, 1730, 1730, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1730, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1730, 1736, 1736, 1736, 1730, 1736, 1730, 1736, 1730, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1730, 1730, 1736, 1736, 1730, 1730, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1730, 1736, 1736, + + 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1730, 1730, + 1730, 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, + 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1736, 1730, 1736, 1730, 1736, 1736, 1736, 1736, 1730, 1730, + 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1730, 1730, 1736, 1736, 1736, 1736, 1730, 1730, 1730, + + 1736, 1730, 1736, 1730, 1736, 1730, 1736, 1736, 1730, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, + 1730, 1736, 1730, 1736, 1736, 1730, 1736, 1736, 1730, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1730, 1730, 1730, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + + 1736, 1736, 1736, 1736, 1730, 1736, 1736, 1736, 1736, 1736, + 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1730, 1736, + 1730, 1730, 1736, 1736, 1736, 1736, 1736, 1730, 1730, 0, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1730, 1730, 1730 } ; -static yyconst flex_int16_t yy_nxt[3321] = +static yyconst flex_int16_t yy_nxt[3471] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 18, 20, 21, 14, 22, 23, 24, 25, 14, 26, 27, 28, 29, 30, 31, 32, 33, 34, 14, 35, 36, 37, 38, 39, 14, 14, 14, 14, 41, - 42, 43, 41, 42, 43, 125, 46, 47, 125, 44, + 42, 43, 41, 42, 43, 126, 46, 47, 126, 44, 48, 69, 44, 46, 47, 70, 49, 48, 57, 58, 59, 68, 68, 49, 51, 52, 53, 54, 60, 18, - 57, 58, 59, 123, 123, 55, 51, 52, 53, 54, - 60, 18, 68, 104, 215, 74, 75, 55, 15, 16, + 57, 58, 59, 124, 124, 55, 51, 52, 53, 54, + 60, 18, 68, 104, 219, 74, 75, 55, 15, 16, 17, 62, 63, 64, 67, 67, 68, 67, 67, 65, 67, 95, 68, 76, 68, 67, 85, 68, 66, 15, - 16, 17, 62, 63, 64, 68, 68, 77, 137, 87, + 16, 17, 62, 63, 64, 68, 68, 77, 138, 87, 65, 69, 94, 68, 78, 70, 86, 68, 88, 66, - 72, 79, 72, 72, 133, 72, 89, 68, 96, 68, - 72, 73, 68, 90, 130, 130, 91, 80, 136, 68, - 97, 81, 179, 92, 82, 93, 83, 84, 98, 68, - 68, 101, 68, 138, 99, 102, 68, 68, 100, 68, - 68, 105, 109, 140, 112, 68, 116, 106, 117, 68, - 107, 103, 110, 68, 113, 111, 139, 108, 114, 115, - 68, 121, 169, 118, 68, 122, 127, 119, 127, 127, - - 240, 127, 120, 72, 68, 72, 72, 132, 72, 132, - 132, 68, 132, 67, 135, 67, 67, 68, 67, 68, - 68, 68, 141, 67, 72, 142, 72, 72, 147, 72, - 68, 143, 68, 68, 72, 73, 68, 68, 144, 145, - 146, 68, 68, 68, 149, 153, 148, 154, 68, 68, - 68, 133, 150, 156, 151, 152, 157, 155, 159, 68, - 68, 68, 68, 68, 161, 163, 68, 160, 68, 164, - 158, 68, 167, 165, 166, 68, 68, 68, 168, 171, - 173, 172, 170, 68, 162, 68, 68, 68, 175, 68, - 68, 182, 176, 68, 184, 174, 68, 68, 68, 178, - - 68, 68, 183, 189, 68, 177, 180, 181, 68, 191, - 68, 123, 123, 133, 185, 186, 187, 68, 125, 188, - 192, 125, 130, 130, 190, 198, 68, 127, 193, 127, - 127, 132, 127, 132, 132, 72, 132, 72, 72, 133, - 72, 197, 194, 68, 196, 68, 135, 68, 195, 68, - 201, 68, 68, 204, 68, 68, 202, 203, 68, 205, - 199, 68, 68, 212, 68, 68, 68, 200, 68, 214, - 213, 217, 216, 68, 68, 68, 243, 68, 68, 218, - 131, 206, 68, 223, 68, 224, 207, 220, 219, 68, - 221, 208, 222, 228, 68, 229, 209, 226, 68, 68, - - 68, 230, 210, 211, 225, 227, 68, 68, 232, 233, - 235, 68, 231, 68, 237, 68, 236, 238, 68, 68, - 234, 68, 68, 68, 68, 239, 68, 241, 68, 242, - 68, 68, 244, 247, 251, 68, 245, 68, 68, 68, - 253, 68, 255, 259, 254, 68, 246, 68, 68, 249, - 250, 261, 248, 68, 258, 252, 68, 257, 133, 68, - 256, 262, 68, 68, 267, 68, 260, 68, 68, 68, - 264, 266, 268, 68, 68, 129, 68, 68, 263, 273, - 269, 265, 271, 68, 274, 275, 270, 68, 68, 68, - 276, 68, 277, 278, 68, 68, 68, 280, 272, 281, - - 68, 283, 279, 68, 285, 282, 68, 68, 287, 68, - 68, 68, 286, 68, 284, 68, 292, 68, 68, 68, - 68, 68, 297, 294, 68, 68, 68, 68, 289, 288, - 291, 68, 290, 296, 298, 302, 293, 299, 295, 68, - 68, 300, 68, 68, 301, 306, 307, 308, 68, 68, - 68, 68, 309, 304, 305, 68, 314, 68, 68, 68, - 303, 68, 316, 315, 313, 68, 312, 310, 319, 68, - 311, 68, 68, 68, 317, 322, 321, 323, 68, 68, - 68, 68, 329, 68, 68, 318, 68, 68, 330, 320, - 328, 68, 324, 68, 68, 325, 68, 335, 326, 68, - - 327, 331, 133, 68, 332, 348, 333, 334, 346, 68, - 337, 68, 68, 336, 68, 351, 338, 339, 345, 68, - 68, 68, 355, 347, 349, 68, 340, 68, 341, 342, - 343, 350, 352, 344, 353, 68, 354, 358, 68, 68, - 361, 362, 68, 68, 360, 356, 68, 68, 68, 357, - 68, 68, 367, 68, 359, 68, 68, 368, 68, 68, - 68, 380, 128, 364, 365, 366, 363, 371, 373, 68, - 370, 68, 68, 369, 374, 375, 68, 377, 68, 68, - 372, 376, 68, 379, 378, 68, 68, 383, 384, 382, - 381, 68, 68, 68, 68, 68, 68, 389, 68, 388, - - 68, 386, 68, 390, 68, 392, 387, 68, 393, 68, - 68, 68, 385, 68, 68, 68, 68, 395, 68, 396, - 68, 391, 68, 394, 402, 397, 68, 401, 403, 400, - 68, 398, 68, 68, 399, 68, 404, 409, 68, 407, - 68, 68, 405, 68, 68, 408, 419, 406, 68, 68, - 68, 68, 421, 68, 410, 68, 420, 418, 126, 411, - 68, 412, 68, 417, 422, 426, 413, 427, 414, 68, - 423, 68, 425, 424, 68, 430, 415, 428, 68, 68, - 68, 68, 436, 431, 68, 133, 416, 68, 432, 435, - 68, 68, 68, 429, 440, 68, 434, 439, 68, 433, - - 68, 68, 437, 443, 441, 68, 68, 448, 445, 438, - 442, 449, 68, 68, 451, 68, 444, 452, 68, 453, - 454, 68, 446, 68, 68, 447, 450, 455, 68, 456, - 68, 68, 68, 460, 68, 458, 459, 68, 68, 68, - 68, 461, 464, 68, 457, 462, 68, 68, 465, 467, - 68, 463, 68, 466, 468, 68, 470, 473, 469, 68, - 68, 68, 68, 476, 475, 68, 472, 68, 471, 474, - 478, 68, 68, 483, 68, 68, 480, 68, 68, 68, - 479, 484, 485, 68, 68, 477, 482, 486, 481, 68, - 68, 68, 68, 491, 487, 488, 490, 489, 68, 68, - - 493, 495, 68, 492, 494, 68, 68, 68, 496, 499, - 497, 502, 68, 500, 68, 68, 68, 501, 503, 68, - 504, 68, 68, 68, 68, 498, 508, 68, 68, 513, - 505, 68, 509, 68, 68, 68, 515, 516, 506, 510, - 68, 507, 68, 512, 68, 511, 68, 518, 68, 68, - 514, 517, 68, 68, 68, 68, 522, 523, 525, 526, - 519, 521, 524, 68, 68, 520, 68, 133, 68, 68, - 68, 528, 531, 532, 68, 529, 68, 535, 533, 537, - 68, 527, 530, 68, 68, 536, 68, 538, 68, 68, - 534, 68, 539, 68, 68, 68, 541, 68, 68, 68, - - 554, 552, 553, 68, 540, 68, 551, 542, 549, 68, - 68, 550, 68, 565, 562, 571, 543, 68, 566, 68, - 68, 563, 544, 68, 564, 68, 545, 567, 124, 546, - 68, 568, 68, 570, 68, 68, 547, 68, 569, 548, - 68, 555, 556, 68, 557, 574, 68, 558, 572, 68, - 68, 577, 559, 573, 575, 579, 68, 576, 560, 561, - 68, 578, 581, 68, 582, 580, 583, 68, 68, 68, - 584, 68, 68, 68, 585, 68, 68, 68, 591, 68, - 586, 587, 589, 590, 68, 593, 68, 68, 68, 68, - 68, 595, 592, 588, 68, 597, 68, 68, 68, 599, - - 68, 596, 68, 602, 598, 594, 68, 600, 68, 68, - 68, 68, 68, 68, 608, 68, 68, 607, 601, 68, - 611, 603, 604, 68, 68, 68, 68, 724, 605, 606, - 609, 613, 610, 612, 616, 614, 617, 615, 68, 68, - 68, 68, 618, 619, 68, 68, 623, 622, 624, 621, - 68, 68, 620, 68, 625, 628, 68, 68, 630, 68, - 68, 631, 133, 68, 68, 68, 68, 68, 626, 627, - 633, 68, 68, 68, 68, 643, 68, 629, 632, 647, - 68, 636, 68, 634, 68, 68, 133, 644, 650, 635, - 68, 646, 68, 637, 648, 638, 649, 652, 645, 639, - - 651, 640, 68, 68, 68, 68, 641, 653, 654, 68, - 68, 642, 659, 68, 131, 658, 655, 68, 665, 657, - 68, 660, 664, 68, 68, 656, 661, 68, 662, 68, - 668, 68, 669, 68, 68, 68, 667, 666, 68, 670, - 673, 68, 674, 675, 68, 68, 663, 671, 68, 68, - 679, 68, 676, 672, 677, 68, 68, 678, 68, 68, - 68, 68, 688, 68, 684, 682, 68, 68, 68, 68, - 680, 681, 687, 68, 68, 686, 68, 683, 692, 693, - 685, 694, 68, 68, 691, 689, 690, 68, 696, 697, - 68, 695, 698, 702, 68, 68, 699, 68, 68, 700, - - 68, 68, 701, 704, 705, 68, 68, 68, 68, 68, - 703, 707, 708, 68, 709, 712, 68, 68, 68, 711, - 68, 706, 68, 714, 68, 710, 713, 715, 68, 68, - 68, 68, 68, 726, 720, 721, 716, 68, 68, 717, - 723, 719, 718, 727, 725, 68, 729, 68, 68, 722, - 68, 68, 68, 733, 68, 68, 68, 68, 68, 68, - 728, 68, 68, 741, 732, 731, 742, 735, 68, 730, - 68, 68, 734, 738, 736, 743, 739, 68, 68, 68, - 68, 737, 740, 68, 746, 68, 68, 751, 68, 68, - 68, 744, 745, 68, 68, 747, 753, 68, 755, 756, - - 749, 68, 748, 68, 68, 750, 68, 752, 757, 759, - 68, 68, 68, 754, 68, 68, 762, 758, 68, 761, - 764, 68, 760, 68, 68, 766, 68, 767, 68, 68, - 68, 763, 68, 765, 68, 770, 68, 68, 768, 769, - 775, 771, 779, 68, 68, 772, 68, 68, 68, 129, - 774, 773, 776, 778, 781, 68, 777, 780, 784, 68, - 783, 68, 785, 68, 68, 787, 68, 790, 782, 68, - 791, 68, 68, 68, 788, 789, 792, 68, 786, 68, - 794, 68, 793, 68, 68, 68, 799, 797, 796, 800, - 795, 68, 68, 68, 68, 68, 68, 801, 68, 802, - - 809, 68, 798, 68, 807, 803, 68, 808, 68, 68, - 804, 68, 805, 68, 806, 811, 810, 813, 817, 68, - 68, 68, 814, 819, 68, 812, 821, 68, 68, 815, - 820, 823, 68, 68, 68, 818, 825, 68, 816, 826, - 827, 68, 68, 68, 68, 68, 68, 822, 829, 68, - 831, 68, 830, 824, 68, 832, 835, 834, 836, 68, - 837, 68, 828, 68, 833, 68, 838, 839, 840, 68, - 68, 68, 68, 843, 68, 68, 68, 846, 68, 68, - 68, 842, 68, 68, 68, 850, 68, 68, 841, 68, - 68, 844, 854, 68, 68, 856, 847, 864, 845, 848, - - 851, 849, 857, 852, 853, 68, 858, 68, 68, 68, - 68, 861, 855, 863, 859, 68, 860, 68, 68, 68, - 867, 68, 68, 68, 862, 68, 865, 869, 68, 872, - 68, 68, 68, 68, 68, 68, 866, 868, 68, 870, - 879, 68, 68, 871, 68, 875, 873, 876, 877, 874, - 68, 880, 68, 878, 68, 881, 882, 884, 68, 888, - 885, 883, 886, 887, 68, 889, 68, 890, 891, 68, - 68, 68, 68, 68, 68, 896, 68, 893, 68, 897, - 68, 898, 68, 68, 68, 68, 68, 894, 68, 892, - 68, 903, 68, 895, 904, 899, 68, 900, 68, 68, - - 68, 68, 68, 902, 909, 905, 914, 906, 68, 901, - 68, 907, 68, 912, 68, 908, 911, 68, 68, 910, - 917, 915, 913, 916, 918, 68, 68, 68, 68, 922, - 921, 919, 920, 68, 68, 68, 923, 926, 924, 68, - 925, 68, 68, 927, 68, 928, 68, 68, 68, 930, - 929, 68, 932, 68, 68, 937, 931, 68, 934, 936, - 68, 68, 938, 68, 68, 933, 68, 68, 941, 935, - 68, 68, 943, 68, 940, 68, 946, 68, 68, 939, - 68, 68, 950, 68, 952, 942, 951, 945, 944, 68, - 954, 947, 68, 956, 68, 68, 68, 948, 949, 68, - - 68, 959, 957, 953, 68, 68, 955, 965, 68, 68, - 68, 962, 68, 68, 963, 966, 960, 68, 967, 68, - 972, 68, 968, 958, 970, 961, 964, 971, 68, 68, - 68, 68, 68, 68, 977, 68, 976, 68, 969, 68, - 979, 980, 68, 68, 68, 68, 973, 68, 974, 981, - 975, 68, 68, 68, 988, 982, 978, 68, 68, 68, - 68, 985, 68, 983, 986, 984, 987, 992, 128, 68, - 68, 989, 68, 998, 68, 993, 994, 990, 68, 991, - 68, 995, 68, 999, 996, 68, 997, 1000, 68, 68, - 68, 1007, 1008, 68, 1001, 68, 68, 1002, 1004, 1006, - - 68, 1005, 68, 68, 1003, 68, 68, 68, 1015, 68, - 68, 1018, 126, 1010, 68, 1009, 68, 1012, 1020, 68, - 1011, 68, 68, 68, 1014, 1016, 1023, 1021, 1017, 68, - 1013, 68, 1019, 68, 68, 1024, 1025, 1027, 68, 1022, - 68, 1031, 1026, 68, 68, 68, 68, 1028, 68, 68, - 68, 68, 1035, 68, 1036, 1037, 1029, 68, 1038, 1030, - 1032, 1033, 68, 1042, 68, 1034, 1039, 68, 68, 68, - 68, 1046, 68, 68, 1040, 68, 68, 1041, 1051, 1049, - 1044, 1043, 1045, 68, 1047, 1050, 68, 1048, 1052, 68, - 1054, 68, 1053, 68, 68, 68, 68, 68, 68, 1056, - - 68, 68, 68, 1060, 1057, 1055, 1065, 68, 1058, 1061, - 1066, 68, 1059, 124, 68, 68, 68, 1064, 1070, 68, - 68, 1063, 1062, 1072, 68, 1073, 68, 68, 68, 1075, - 68, 1074, 1067, 1068, 68, 68, 1069, 1077, 1076, 1079, - 1071, 68, 68, 68, 68, 68, 1078, 1081, 68, 68, - 1082, 1083, 68, 68, 68, 1080, 68, 1084, 1085, 1086, - 68, 1088, 68, 1089, 1087, 1093, 68, 1091, 68, 1095, - 68, 68, 1090, 1098, 68, 1092, 68, 68, 1100, 1097, - 68, 68, 1096, 68, 1103, 68, 1094, 68, 1107, 1101, - 68, 1099, 1106, 68, 68, 68, 1110, 68, 68, 1111, - - 68, 1105, 1109, 1102, 68, 68, 68, 1104, 68, 1112, - 1108, 68, 1119, 68, 1117, 68, 1122, 68, 1113, 1114, - 1118, 1116, 68, 68, 1115, 1125, 1120, 1126, 68, 1127, - 68, 1121, 68, 1128, 68, 1129, 68, 1124, 68, 1132, - 68, 68, 68, 1123, 68, 1134, 68, 1137, 1131, 68, - 1133, 68, 68, 68, 1135, 1139, 1141, 68, 1130, 68, - 68, 1140, 1142, 68, 1143, 68, 68, 68, 1147, 68, - 68, 1136, 1144, 1138, 1145, 68, 1146, 68, 68, 1149, - 1148, 1151, 68, 68, 68, 68, 68, 68, 68, 1150, - 1156, 1158, 1153, 1157, 68, 1160, 68, 68, 1152, 68, - - 68, 1159, 1154, 68, 1155, 68, 1161, 1168, 1163, 1164, - 1165, 68, 68, 68, 68, 1162, 68, 1170, 1166, 1167, - 68, 1173, 1171, 1172, 68, 68, 68, 1175, 68, 68, - 1169, 68, 68, 68, 68, 68, 68, 1176, 68, 68, - 1185, 68, 68, 1178, 1179, 1174, 1180, 1184, 1181, 68, - 1177, 68, 1189, 68, 68, 1182, 1183, 1186, 1187, 1191, - 68, 68, 1192, 68, 68, 1188, 1193, 1190, 1194, 68, - 1197, 68, 68, 68, 68, 68, 1198, 1201, 68, 68, - 68, 68, 1195, 68, 68, 1205, 1202, 1200, 1206, 1196, - 1203, 1199, 1207, 1204, 68, 68, 68, 1210, 68, 1208, - - 1209, 68, 68, 68, 68, 68, 68, 1213, 1214, 1218, - 68, 68, 1220, 68, 1212, 1217, 1211, 68, 1215, 68, - 1219, 1222, 68, 68, 1221, 1225, 68, 1223, 68, 1216, - 68, 1226, 1224, 1228, 68, 68, 1229, 1227, 68, 68, - 1233, 68, 1230, 68, 1232, 68, 68, 68, 68, 68, - 1235, 1241, 68, 1238, 68, 68, 1231, 68, 68, 1242, - 68, 68, 1237, 1244, 68, 68, 68, 1239, 1234, 1236, - 1240, 68, 1243, 68, 1253, 68, 68, 68, 68, 68, - 1246, 1254, 68, 68, 1258, 1249, 1245, 1247, 1251, 1248, - 1255, 68, 1250, 1256, 1252, 1257, 1259, 68, 1260, 68, - - 1262, 68, 1263, 68, 1261, 1264, 68, 68, 1266, 68, - 1267, 68, 68, 68, 1270, 68, 68, 68, 1269, 1272, - 68, 68, 68, 1274, 68, 1275, 1265, 68, 1276, 1278, - 68, 1268, 68, 1280, 68, 1271, 1281, 68, 68, 1273, - 68, 1283, 68, 1277, 68, 68, 68, 1284, 68, 1286, - 1282, 1279, 68, 68, 1285, 68, 68, 1290, 68, 1288, - 68, 1295, 68, 68, 1292, 1293, 68, 1296, 1291, 1289, - 1287, 1298, 1294, 68, 1299, 68, 1300, 68, 1301, 68, - 1297, 68, 68, 68, 68, 1305, 1302, 68, 1306, 68, - 1303, 1304, 1308, 68, 1309, 68, 68, 1311, 68, 68, - - 1654, 1310, 68, 1313, 1307, 68, 1315, 68, 68, 68, - 1312, 1316, 1317, 1318, 68, 68, 68, 68, 1314, 68, - 1319, 1322, 1320, 68, 1324, 68, 1325, 68, 1323, 1326, - 1321, 68, 1328, 1329, 68, 68, 68, 1331, 68, 68, - 1332, 1327, 1330, 1333, 68, 68, 1335, 68, 1336, 68, - 1334, 1337, 68, 1338, 68, 68, 68, 68, 1340, 68, - 1341, 1342, 68, 68, 1343, 1344, 68, 68, 1347, 68, - 1339, 1345, 1346, 1348, 68, 1349, 68, 68, 1350, 68, - 68, 68, 68, 68, 1357, 68, 68, 1355, 68, 68, - 68, 1352, 1353, 1354, 68, 1351, 68, 1358, 68, 68, - - 68, 1367, 68, 1356, 1365, 1366, 68, 1361, 68, 1360, - 1363, 68, 1359, 68, 1362, 68, 1364, 1368, 68, 68, - 68, 68, 1376, 68, 1373, 68, 1369, 1377, 68, 1370, - 1371, 68, 1378, 1372, 68, 68, 68, 68, 1375, 1374, - 1380, 1379, 1385, 68, 68, 1386, 68, 68, 68, 1381, - 68, 68, 1383, 1382, 68, 68, 1384, 68, 1393, 1394, - 68, 1388, 1387, 68, 1397, 68, 1389, 68, 1390, 68, - 1391, 68, 1395, 68, 1392, 1399, 68, 1400, 68, 68, - 1401, 1396, 1403, 68, 68, 68, 1398, 68, 1404, 1405, - 1406, 1402, 68, 1407, 68, 68, 68, 1409, 1654, 1410, - - 1412, 68, 1408, 1413, 68, 1420, 1414, 1415, 68, 1417, - 1411, 68, 1416, 68, 68, 68, 68, 68, 68, 1418, - 68, 1419, 68, 68, 68, 1423, 1422, 1425, 68, 68, - 68, 68, 1421, 68, 1424, 68, 1430, 1428, 68, 1429, - 1431, 1426, 1427, 68, 1435, 68, 68, 1437, 68, 68, - 68, 68, 1432, 68, 68, 1436, 1439, 1438, 1433, 1440, - 1442, 68, 1434, 68, 1444, 68, 1441, 68, 1445, 1446, - 68, 1447, 68, 68, 1443, 1448, 68, 1451, 1452, 68, - 68, 68, 68, 68, 1453, 1449, 68, 1450, 68, 1454, - 68, 1457, 68, 68, 1461, 68, 68, 68, 1455, 1456, - - 68, 1465, 68, 1466, 1463, 68, 1458, 1460, 68, 68, - 1459, 1462, 68, 1468, 68, 68, 1464, 68, 68, 68, - 68, 1467, 1474, 1471, 1476, 68, 68, 68, 68, 1469, - 1477, 68, 68, 1482, 68, 1472, 1475, 1473, 1470, 1480, - 1478, 1479, 68, 1483, 68, 1481, 68, 68, 68, 68, - 68, 1485, 1490, 1484, 1488, 1487, 1486, 68, 1492, 68, - 68, 68, 1495, 68, 68, 68, 1489, 68, 1496, 68, - 68, 68, 68, 68, 1497, 1491, 1494, 1501, 1500, 1493, - 1503, 68, 68, 1498, 1505, 68, 68, 1506, 1499, 1507, - 68, 68, 1504, 1510, 68, 1511, 68, 1502, 68, 68, - - 68, 1515, 68, 68, 68, 68, 1508, 1519, 68, 1517, - 68, 1513, 68, 1509, 1654, 1516, 68, 1512, 1522, 68, - 1514, 1523, 68, 68, 1518, 1520, 1521, 68, 1525, 1524, - 1526, 1654, 1527, 1528, 68, 1529, 68, 1530, 68, 68, - 1532, 68, 68, 1533, 1531, 1534, 68, 68, 68, 1537, - 68, 68, 1535, 68, 68, 68, 1536, 68, 1538, 1539, - 68, 68, 68, 1547, 68, 68, 1545, 1548, 68, 1540, - 68, 1541, 68, 68, 1542, 1543, 1549, 1550, 68, 68, - 1553, 1544, 1546, 1551, 1552, 68, 1555, 68, 1554, 68, - 68, 68, 68, 68, 1562, 68, 1559, 1560, 1556, 1563, - - 68, 1564, 68, 68, 1557, 68, 1566, 68, 1567, 68, - 68, 1558, 1561, 68, 1569, 1565, 68, 68, 68, 68, - 68, 1568, 1573, 68, 68, 68, 68, 68, 68, 1570, - 1581, 68, 68, 1572, 1571, 68, 1575, 1582, 1577, 1574, - 1583, 1578, 1580, 1576, 68, 68, 68, 1587, 68, 1584, - 68, 1579, 68, 1591, 1592, 68, 68, 1585, 68, 68, - 1586, 1589, 1588, 68, 68, 68, 68, 68, 1594, 1590, - 1593, 68, 68, 68, 68, 1604, 68, 1601, 1596, 1598, - 1599, 1602, 1595, 68, 1597, 68, 68, 1654, 1605, 68, - 1600, 1606, 1603, 1609, 1607, 1610, 68, 68, 68, 68, - - 68, 68, 1614, 68, 1608, 68, 1611, 68, 1617, 68, - 68, 68, 68, 1621, 68, 1654, 1612, 68, 1616, 1613, - 1615, 68, 1622, 68, 1620, 68, 1624, 68, 1618, 1619, - 68, 1625, 1626, 1623, 68, 1629, 68, 68, 68, 68, - 1628, 1627, 1632, 68, 1630, 1631, 68, 68, 1633, 68, - 68, 1635, 1636, 68, 1639, 68, 68, 68, 1634, 68, - 1642, 1643, 68, 68, 1644, 1645, 68, 68, 1637, 1638, - 1646, 68, 68, 68, 1640, 1641, 68, 1654, 1648, 1647, - 1654, 1649, 1650, 1652, 68, 1654, 1651, 1653, 68, 40, + 72, 79, 72, 72, 134, 72, 89, 134, 96, 68, + 72, 73, 68, 90, 131, 131, 91, 80, 137, 68, + 97, 81, 68, 92, 82, 93, 83, 84, 98, 68, + 68, 101, 68, 139, 99, 102, 68, 117, 100, 118, + 68, 105, 140, 68, 109, 113, 134, 106, 110, 68, + 107, 103, 68, 68, 119, 114, 132, 108, 111, 115, + 116, 112, 68, 120, 68, 122, 144, 156, 121, 123, + + 128, 143, 128, 128, 72, 128, 72, 72, 133, 72, + 133, 133, 68, 133, 67, 136, 67, 67, 68, 67, + 68, 141, 68, 68, 67, 72, 68, 72, 72, 68, + 72, 148, 145, 149, 142, 72, 73, 68, 68, 68, + 146, 68, 68, 151, 68, 147, 152, 68, 155, 161, + 158, 150, 68, 159, 68, 153, 157, 154, 68, 68, + 162, 68, 165, 163, 68, 68, 166, 160, 169, 68, + 68, 68, 170, 68, 68, 168, 167, 172, 175, 68, + 68, 68, 171, 164, 173, 177, 68, 68, 68, 178, + 68, 185, 68, 174, 68, 68, 68, 176, 68, 187, + + 181, 179, 68, 182, 68, 68, 180, 186, 68, 183, + 184, 68, 189, 192, 68, 68, 258, 195, 190, 188, + 194, 124, 124, 68, 126, 191, 196, 126, 128, 134, + 128, 128, 197, 128, 193, 131, 131, 133, 200, 133, + 133, 72, 133, 72, 72, 68, 72, 68, 199, 68, + 198, 68, 136, 68, 68, 201, 205, 68, 68, 208, + 130, 68, 206, 207, 68, 209, 203, 68, 202, 68, + 216, 68, 68, 68, 204, 220, 217, 218, 221, 68, + 68, 68, 68, 68, 68, 68, 227, 210, 68, 232, + 68, 228, 211, 222, 68, 223, 224, 212, 68, 225, + + 226, 231, 213, 230, 68, 233, 234, 236, 214, 215, + 229, 68, 68, 68, 68, 239, 68, 235, 241, 238, + 68, 240, 237, 68, 242, 68, 68, 68, 68, 68, + 68, 68, 243, 244, 245, 68, 246, 68, 68, 248, + 249, 68, 256, 250, 68, 68, 252, 68, 247, 68, + 260, 68, 68, 68, 263, 68, 259, 251, 68, 129, + 253, 264, 254, 255, 262, 257, 68, 266, 134, 68, + 261, 267, 68, 68, 272, 68, 68, 270, 68, 68, + 269, 271, 274, 273, 265, 68, 68, 68, 268, 68, + 275, 68, 279, 277, 276, 68, 280, 281, 68, 282, + + 68, 68, 283, 68, 68, 68, 68, 284, 286, 289, + 287, 278, 68, 288, 68, 68, 291, 68, 285, 293, + 68, 68, 292, 68, 68, 68, 290, 68, 298, 68, + 68, 68, 303, 68, 300, 68, 68, 68, 297, 295, + 294, 68, 68, 68, 296, 302, 304, 299, 305, 301, + 308, 68, 306, 68, 68, 307, 312, 313, 314, 68, + 68, 68, 68, 309, 310, 311, 68, 320, 68, 315, + 68, 319, 68, 322, 68, 321, 318, 316, 68, 68, + 317, 326, 68, 68, 68, 68, 68, 336, 328, 323, + 324, 68, 68, 68, 329, 68, 330, 68, 331, 325, + + 68, 332, 327, 68, 333, 68, 334, 68, 337, 335, + 342, 68, 340, 68, 338, 339, 134, 68, 68, 341, + 68, 127, 68, 68, 68, 344, 343, 68, 352, 345, + 346, 353, 68, 356, 68, 68, 355, 354, 361, 347, + 357, 348, 349, 350, 358, 68, 351, 359, 363, 68, + 362, 366, 360, 68, 364, 68, 68, 68, 68, 365, + 369, 370, 368, 68, 68, 68, 68, 68, 68, 375, + 376, 367, 68, 68, 68, 68, 68, 388, 371, 68, + 372, 373, 374, 379, 381, 68, 68, 378, 384, 383, + 377, 382, 385, 68, 68, 68, 380, 68, 387, 386, + + 389, 68, 68, 391, 392, 68, 68, 68, 68, 68, + 68, 397, 396, 68, 390, 394, 68, 68, 398, 395, + 68, 400, 68, 401, 68, 68, 393, 68, 68, 68, + 68, 68, 403, 68, 404, 68, 68, 399, 402, 405, + 409, 410, 412, 411, 408, 68, 68, 68, 406, 407, + 68, 413, 68, 68, 68, 68, 416, 68, 418, 428, + 68, 417, 68, 430, 68, 68, 68, 414, 68, 429, + 419, 415, 68, 432, 420, 68, 421, 426, 427, 68, + 434, 422, 68, 423, 68, 431, 68, 68, 439, 68, + 68, 424, 68, 433, 440, 68, 436, 435, 445, 441, + + 134, 425, 437, 68, 444, 438, 68, 68, 68, 68, + 443, 442, 450, 68, 68, 68, 68, 449, 446, 453, + 68, 448, 68, 68, 125, 447, 451, 452, 68, 458, + 68, 455, 463, 459, 68, 454, 460, 68, 456, 461, + 68, 457, 462, 68, 464, 68, 465, 68, 466, 68, + 470, 467, 68, 68, 468, 68, 469, 68, 68, 68, + 474, 471, 68, 472, 68, 68, 68, 475, 68, 68, + 480, 477, 68, 68, 68, 68, 478, 483, 476, 473, + 479, 494, 68, 484, 481, 68, 482, 68, 485, 68, + 68, 486, 68, 68, 488, 68, 493, 490, 68, 68, + + 68, 68, 495, 489, 68, 68, 68, 492, 496, 491, + 68, 497, 553, 487, 499, 500, 498, 68, 68, 68, + 501, 503, 506, 502, 68, 504, 68, 68, 68, 68, + 510, 508, 505, 507, 511, 68, 68, 68, 512, 514, + 68, 68, 68, 68, 68, 68, 509, 68, 513, 519, + 68, 68, 524, 520, 68, 68, 526, 68, 515, 516, + 68, 517, 521, 518, 527, 68, 523, 68, 522, 68, + 68, 68, 529, 525, 68, 68, 528, 68, 68, 68, + 534, 533, 536, 537, 532, 530, 535, 68, 68, 531, + 68, 134, 68, 68, 68, 539, 542, 543, 68, 540, + + 68, 546, 544, 68, 68, 538, 541, 68, 549, 547, + 68, 550, 548, 68, 545, 68, 551, 68, 68, 68, + 68, 68, 68, 68, 68, 566, 565, 564, 552, 563, + 68, 68, 68, 554, 561, 562, 574, 68, 578, 68, + 577, 575, 555, 68, 68, 68, 580, 581, 556, 576, + 68, 579, 557, 68, 582, 558, 68, 68, 68, 583, + 68, 68, 559, 584, 68, 560, 68, 567, 568, 585, + 569, 68, 588, 570, 68, 589, 590, 586, 571, 587, + 68, 68, 593, 68, 572, 573, 592, 594, 595, 591, + 68, 68, 68, 68, 596, 68, 597, 68, 600, 68, + + 68, 603, 68, 598, 601, 599, 68, 602, 605, 68, + 68, 68, 68, 68, 604, 608, 68, 610, 68, 607, + 68, 68, 68, 612, 68, 609, 68, 615, 606, 68, + 68, 613, 68, 611, 68, 68, 68, 68, 621, 68, + 68, 620, 614, 626, 68, 616, 617, 68, 624, 68, + 619, 618, 629, 622, 625, 623, 68, 68, 630, 68, + 631, 628, 68, 68, 627, 68, 68, 634, 632, 68, + 636, 633, 637, 68, 68, 641, 638, 68, 68, 68, + 68, 643, 68, 68, 639, 68, 635, 640, 644, 134, + 68, 68, 68, 68, 645, 646, 68, 657, 642, 68, + + 68, 68, 647, 68, 649, 68, 661, 68, 682, 648, + 134, 658, 650, 68, 660, 68, 651, 662, 652, 663, + 68, 68, 653, 68, 654, 659, 666, 664, 68, 655, + 665, 68, 68, 668, 656, 673, 667, 68, 68, 68, + 68, 670, 68, 672, 679, 669, 671, 68, 674, 68, + 678, 68, 68, 675, 68, 676, 680, 683, 68, 684, + 68, 681, 687, 68, 688, 689, 68, 68, 685, 690, + 68, 68, 68, 677, 68, 68, 68, 686, 68, 693, + 68, 68, 68, 68, 692, 698, 691, 696, 68, 68, + 702, 694, 695, 68, 697, 68, 700, 701, 68, 68, + + 68, 699, 703, 706, 707, 708, 68, 704, 705, 68, + 710, 711, 68, 712, 68, 709, 68, 713, 68, 68, + 714, 68, 68, 715, 716, 68, 68, 68, 720, 718, + 68, 68, 717, 724, 68, 722, 723, 68, 727, 68, + 68, 68, 719, 726, 68, 68, 68, 721, 730, 728, + 725, 68, 68, 68, 68, 68, 68, 735, 68, 729, + 736, 738, 731, 68, 741, 732, 734, 739, 742, 68, + 68, 733, 737, 68, 68, 740, 744, 68, 68, 68, + 748, 68, 68, 68, 68, 743, 68, 68, 68, 68, + 68, 747, 746, 745, 782, 750, 68, 68, 756, 749, + + 757, 751, 753, 68, 754, 68, 68, 755, 752, 68, + 760, 758, 68, 68, 759, 68, 764, 68, 762, 68, + 767, 68, 68, 68, 68, 68, 761, 68, 771, 769, + 763, 68, 765, 68, 68, 68, 772, 68, 766, 774, + 768, 773, 68, 68, 770, 775, 777, 68, 778, 68, + 68, 776, 780, 68, 779, 68, 68, 68, 68, 783, + 786, 68, 68, 68, 68, 68, 68, 68, 781, 787, + 784, 785, 791, 68, 794, 797, 795, 788, 792, 68, + 790, 68, 789, 68, 793, 800, 68, 796, 799, 801, + 68, 68, 803, 68, 68, 806, 68, 807, 68, 798, + + 68, 68, 68, 805, 68, 802, 804, 808, 68, 809, + 68, 810, 813, 68, 68, 815, 816, 811, 812, 814, + 68, 68, 68, 68, 68, 823, 68, 817, 818, 68, + 824, 68, 819, 68, 68, 68, 68, 820, 827, 821, + 68, 822, 828, 68, 825, 68, 68, 829, 831, 826, + 832, 835, 68, 830, 837, 68, 68, 68, 68, 838, + 834, 836, 839, 833, 841, 68, 68, 843, 68, 68, + 845, 68, 68, 68, 844, 68, 68, 840, 847, 68, + 850, 849, 68, 848, 68, 132, 842, 68, 854, 68, + 852, 855, 846, 68, 853, 68, 68, 68, 857, 68, + + 851, 68, 856, 68, 858, 861, 68, 68, 859, 864, + 860, 68, 68, 68, 68, 68, 68, 68, 870, 68, + 68, 862, 68, 68, 68, 865, 130, 868, 874, 876, + 863, 866, 867, 871, 869, 877, 68, 68, 873, 878, + 68, 68, 68, 68, 872, 875, 879, 883, 68, 880, + 881, 68, 68, 68, 885, 884, 882, 68, 68, 68, + 68, 68, 887, 889, 68, 892, 68, 68, 68, 68, + 68, 68, 886, 68, 68, 888, 899, 890, 901, 68, + 891, 895, 893, 896, 897, 894, 900, 68, 68, 898, + 68, 68, 902, 68, 908, 909, 903, 905, 907, 68, + + 68, 68, 910, 904, 911, 68, 68, 68, 68, 68, + 916, 906, 913, 68, 917, 68, 918, 68, 68, 68, + 68, 68, 914, 68, 912, 924, 68, 923, 915, 68, + 68, 68, 919, 68, 68, 68, 68, 920, 952, 922, + 929, 68, 925, 68, 932, 921, 933, 68, 926, 68, + 927, 931, 928, 934, 68, 930, 68, 68, 937, 68, + 935, 68, 938, 936, 941, 68, 942, 68, 945, 68, + 68, 943, 68, 68, 68, 939, 68, 940, 964, 944, + 949, 947, 68, 948, 68, 68, 956, 946, 950, 68, + 951, 68, 68, 953, 68, 955, 68, 959, 68, 954, + + 68, 957, 68, 961, 68, 68, 68, 68, 68, 958, + 68, 68, 966, 68, 969, 68, 963, 68, 68, 68, + 960, 68, 968, 970, 976, 965, 962, 68, 967, 975, + 973, 971, 68, 977, 979, 972, 68, 974, 68, 68, + 981, 68, 68, 68, 68, 984, 68, 68, 982, 68, + 980, 129, 978, 68, 68, 990, 987, 68, 985, 988, + 68, 68, 991, 992, 68, 68, 993, 983, 995, 986, + 996, 989, 994, 68, 997, 68, 68, 68, 68, 1002, + 68, 68, 998, 1001, 68, 68, 1004, 1005, 68, 68, + 1006, 68, 68, 68, 68, 999, 68, 1000, 68, 1013, + + 68, 68, 68, 1003, 68, 1011, 68, 1007, 1010, 1012, + 68, 1008, 1009, 1019, 68, 1017, 68, 1018, 1014, 68, + 1015, 68, 1016, 1020, 1023, 68, 1021, 68, 68, 68, + 1024, 68, 1022, 1025, 68, 1026, 68, 1032, 1027, 68, + 1028, 68, 68, 1029, 68, 1031, 1030, 1033, 68, 68, + 68, 1034, 1035, 68, 1040, 68, 68, 68, 1037, 1036, + 68, 1042, 68, 1043, 68, 1048, 1045, 1050, 1039, 1046, + 68, 1041, 68, 68, 1038, 68, 1053, 1044, 1047, 1051, + 68, 68, 1049, 68, 68, 68, 1055, 68, 68, 1061, + 68, 68, 1056, 1054, 68, 1052, 1057, 1058, 68, 68, + + 68, 68, 68, 1059, 1065, 68, 1060, 1062, 1063, 68, + 1066, 68, 68, 68, 1067, 1073, 1068, 1071, 1064, 1072, + 68, 1069, 1070, 68, 68, 1075, 68, 1078, 68, 68, + 1074, 68, 68, 1082, 68, 68, 1076, 1081, 1083, 68, + 1079, 1084, 68, 1086, 68, 1077, 68, 1080, 1085, 68, + 68, 68, 68, 68, 1088, 68, 68, 68, 1087, 1089, + 1092, 1098, 1093, 1090, 1097, 68, 68, 1091, 68, 68, + 68, 68, 1096, 1102, 68, 1094, 1095, 1104, 68, 1105, + 68, 68, 1107, 68, 68, 1106, 1108, 68, 1100, 1099, + 1101, 1103, 1109, 1111, 68, 1113, 68, 68, 68, 68, + + 1114, 1115, 1110, 68, 68, 68, 68, 68, 68, 68, + 1125, 68, 68, 68, 1127, 1116, 1117, 1118, 68, 1112, + 68, 68, 1119, 1123, 1120, 1121, 68, 1122, 68, 1124, + 1129, 1130, 68, 1131, 68, 1132, 68, 1135, 1126, 68, + 1128, 68, 68, 1133, 1139, 68, 68, 1138, 68, 68, + 1142, 68, 1134, 68, 1144, 1141, 68, 1137, 1143, 68, + 68, 68, 68, 1147, 68, 1136, 1140, 68, 1150, 68, + 68, 1146, 68, 68, 1156, 68, 1145, 68, 1154, 1148, + 68, 68, 1155, 1152, 1151, 1153, 1159, 68, 1149, 1162, + 68, 1157, 1163, 68, 68, 1161, 1158, 1164, 1160, 1166, + + 68, 1165, 68, 1169, 68, 68, 68, 68, 68, 68, + 1171, 68, 1168, 1174, 68, 1176, 1167, 1170, 68, 1172, + 68, 68, 68, 1179, 1178, 68, 1177, 1180, 68, 1181, + 68, 68, 68, 1175, 1173, 68, 68, 1183, 1185, 68, + 1184, 1187, 68, 68, 68, 1182, 1190, 68, 1186, 68, + 68, 68, 68, 68, 1188, 1189, 1195, 68, 1192, 68, + 1197, 68, 1196, 127, 1191, 68, 68, 1198, 1193, 68, + 1194, 68, 1199, 1204, 68, 1202, 1205, 1201, 1203, 68, + 1207, 68, 68, 1200, 1210, 68, 68, 1209, 1211, 68, + 68, 68, 68, 1206, 68, 1214, 68, 1212, 1208, 125, + + 68, 1215, 68, 68, 68, 68, 68, 68, 68, 1224, + 68, 1213, 1217, 1223, 1218, 1219, 68, 1216, 68, 1220, + 1228, 68, 68, 68, 68, 1221, 1222, 1226, 1225, 1230, + 1227, 68, 68, 1231, 68, 68, 68, 1232, 1236, 1233, + 68, 1234, 68, 68, 68, 1237, 1240, 68, 1229, 68, + 1239, 1243, 68, 68, 68, 1235, 68, 1244, 68, 1241, + 1245, 1238, 68, 1247, 1249, 1246, 1248, 68, 68, 1242, + 68, 68, 68, 68, 68, 1252, 1250, 1253, 68, 68, + 1251, 68, 68, 68, 1254, 1257, 68, 1258, 1262, 68, + 1256, 68, 1261, 1255, 68, 1263, 68, 1259, 1264, 68, + + 1266, 68, 68, 1260, 1269, 68, 1267, 1268, 68, 68, + 1265, 1272, 68, 1274, 68, 68, 1270, 68, 1273, 68, + 1275, 68, 1271, 1279, 68, 68, 1278, 1276, 68, 68, + 68, 68, 68, 1281, 68, 1277, 1284, 68, 1287, 68, + 68, 68, 68, 68, 1288, 1283, 1290, 68, 1286, 1289, + 1280, 68, 1282, 68, 68, 1285, 68, 68, 1299, 68, + 68, 68, 1292, 1300, 68, 68, 1297, 68, 1291, 1315, + 1293, 68, 1295, 1383, 1301, 1294, 68, 1296, 1298, 1302, + 1303, 68, 1304, 1305, 68, 1306, 68, 1308, 68, 1307, + 1309, 68, 1310, 68, 68, 1312, 68, 1313, 68, 68, + + 1316, 68, 68, 1318, 68, 68, 68, 68, 68, 1322, + 1321, 68, 1320, 1311, 1324, 68, 1326, 68, 1314, 68, + 68, 1317, 68, 1319, 1323, 68, 1329, 1330, 68, 68, + 1325, 1332, 68, 68, 1334, 1328, 68, 68, 68, 68, + 68, 68, 1327, 1337, 1331, 1335, 68, 68, 68, 1336, + 68, 1341, 68, 1339, 68, 1333, 1343, 68, 1347, 1344, + 1346, 68, 1340, 1342, 1338, 68, 1345, 68, 1350, 1351, + 1349, 68, 1352, 68, 68, 68, 68, 1348, 68, 1357, + 1353, 68, 68, 68, 1355, 68, 1358, 68, 1354, 68, + 1356, 1360, 68, 1361, 68, 68, 1363, 1362, 68, 1364, + + 68, 1367, 1359, 1365, 1366, 68, 68, 68, 68, 1368, + 1369, 1370, 68, 1371, 68, 68, 68, 1377, 1372, 1374, + 1373, 1376, 68, 68, 68, 68, 1381, 68, 68, 1378, + 1380, 68, 68, 1384, 1375, 1382, 1385, 68, 68, 68, + 1379, 1387, 68, 1386, 1388, 68, 1389, 68, 1390, 68, + 1392, 68, 1394, 68, 1393, 1391, 1395, 68, 68, 1398, + 68, 68, 68, 68, 68, 1400, 68, 1399, 1403, 68, + 68, 1402, 68, 1397, 68, 1396, 1404, 68, 1401, 1405, + 68, 68, 1406, 68, 68, 68, 1408, 1413, 68, 1411, + 1407, 68, 68, 1409, 68, 1410, 68, 68, 68, 68, + + 1414, 68, 68, 68, 68, 1412, 68, 1422, 1423, 1417, + 1424, 68, 1419, 68, 1416, 1425, 68, 1420, 1415, 68, + 68, 1418, 68, 1421, 1426, 68, 68, 1433, 1428, 1430, + 68, 1427, 1434, 68, 68, 68, 68, 1436, 68, 1429, + 68, 68, 1431, 1432, 1435, 1442, 68, 1443, 68, 1437, + 68, 68, 68, 68, 1438, 68, 1439, 1440, 68, 1441, + 68, 1451, 68, 1450, 68, 1445, 1444, 68, 68, 68, + 1446, 68, 1454, 1447, 1448, 1455, 68, 68, 1449, 1452, + 1457, 68, 1456, 1459, 68, 1453, 1460, 68, 68, 1461, + 1458, 68, 68, 68, 68, 68, 68, 1464, 1465, 1462, + + 1463, 68, 68, 1467, 68, 1474, 1469, 1470, 1472, 68, + 68, 1468, 68, 1466, 1473, 68, 68, 1475, 68, 1471, + 1476, 68, 1477, 68, 1478, 1481, 68, 68, 68, 68, + 1479, 68, 1480, 1482, 68, 68, 1483, 68, 1486, 1484, + 68, 68, 68, 1485, 68, 1491, 68, 68, 68, 68, + 1489, 1490, 68, 1488, 68, 1487, 1492, 1496, 68, 1498, + 68, 68, 68, 1497, 68, 1493, 68, 1500, 1494, 1499, + 68, 1495, 68, 1501, 68, 1504, 1505, 68, 68, 1502, + 68, 1507, 1730, 68, 68, 1503, 1508, 1509, 68, 1510, + 68, 68, 1506, 1511, 68, 1514, 1512, 1517, 1513, 68, + + 68, 1515, 68, 1516, 1518, 68, 68, 68, 68, 68, + 68, 1521, 1525, 68, 68, 68, 68, 1529, 68, 68, + 1530, 68, 1519, 1520, 1524, 1522, 1527, 68, 1523, 68, + 68, 68, 1532, 1526, 1528, 68, 68, 1531, 68, 1538, + 1535, 68, 1540, 68, 68, 68, 68, 68, 1541, 1533, + 1730, 68, 68, 68, 1542, 1536, 1534, 68, 1537, 1539, + 1543, 1544, 1545, 1546, 68, 68, 1549, 68, 68, 1548, + 68, 1547, 68, 1551, 68, 68, 1550, 1553, 1557, 1552, + 1555, 68, 68, 68, 1559, 68, 68, 68, 1562, 68, + 1563, 68, 1556, 1554, 68, 68, 68, 68, 68, 68, + + 1564, 1560, 1561, 1568, 1567, 68, 1558, 1570, 68, 68, + 1565, 1572, 68, 68, 1566, 68, 1574, 68, 1571, 68, + 1573, 68, 1576, 1569, 68, 1575, 68, 1577, 1579, 68, + 68, 1578, 1580, 68, 1584, 68, 1582, 68, 1581, 68, + 68, 68, 1585, 1589, 1587, 68, 1583, 68, 68, 1592, + 68, 1593, 68, 68, 1598, 68, 1730, 1586, 1595, 1588, + 1594, 1596, 1590, 1591, 68, 1599, 68, 1600, 68, 1597, + 68, 1602, 68, 68, 1603, 1601, 1604, 68, 68, 1606, + 68, 68, 68, 1609, 68, 68, 1607, 1605, 68, 68, + 1608, 68, 68, 1610, 1611, 68, 68, 1612, 68, 68, + + 1620, 68, 68, 1618, 1621, 68, 1622, 68, 1614, 1613, + 1623, 68, 1615, 1616, 68, 1626, 68, 1617, 1624, 1619, + 68, 1625, 68, 1629, 68, 1630, 68, 68, 68, 68, + 68, 68, 68, 1637, 68, 1627, 1634, 1635, 1638, 68, + 1628, 1639, 68, 1632, 1640, 68, 68, 68, 1642, 1636, + 1633, 1643, 1631, 68, 68, 68, 68, 68, 1641, 1645, + 68, 68, 68, 68, 68, 1649, 68, 1644, 68, 68, + 68, 68, 1657, 68, 1646, 1647, 1648, 1651, 68, 1658, + 68, 1653, 1650, 1659, 1654, 1652, 1656, 68, 68, 68, + 1663, 68, 1660, 68, 1655, 68, 1667, 1668, 68, 68, + + 68, 68, 68, 1662, 1665, 1661, 68, 1664, 68, 68, + 1666, 68, 1669, 1670, 68, 68, 68, 1730, 1671, 68, + 1672, 1677, 1674, 68, 1675, 68, 1680, 1673, 1678, 68, + 68, 68, 68, 1676, 1679, 1681, 1682, 1683, 1684, 1685, + 1686, 68, 68, 68, 68, 1690, 68, 68, 1688, 1687, + 68, 68, 68, 68, 68, 68, 1693, 68, 1697, 68, + 1692, 68, 1689, 68, 1698, 1691, 1702, 1696, 68, 1700, + 1703, 1694, 1695, 68, 1699, 68, 1701, 1705, 68, 68, + 68, 68, 68, 68, 68, 68, 1706, 1707, 1709, 1711, + 1712, 68, 1704, 68, 68, 1715, 68, 68, 68, 1718, + + 1708, 1710, 1719, 68, 68, 1721, 68, 1722, 68, 68, + 1713, 1720, 1714, 68, 1724, 1716, 1717, 68, 68, 68, + 1723, 1730, 1725, 1728, 68, 1729, 68, 1730, 1730, 1730, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1726, 1727, 40, 40, 40, 40, 40, 40, 40, 45, 45, 45, 45, - 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 56, 56, 56, 56, 56, 56, 56, 61, 61, 61, - 61, 61, 61, 61, 71, 71, 1654, 71, 71, 71, - 71, 123, 123, 1654, 1654, 1654, 123, 123, 125, 125, - 1654, 1654, 125, 1654, 125, 127, 1654, 1654, 1654, 1654, - 1654, 127, 130, 130, 1654, 1654, 1654, 130, 130, 132, - 1654, 1654, 1654, 1654, 1654, 132, 134, 134, 1654, 134, - 134, 134, 134, 72, 72, 1654, 72, 72, 72, 72, - 13, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654 + 61, 61, 61, 61, 71, 71, 1730, 71, 71, 71, + 71, 124, 124, 1730, 1730, 1730, 124, 124, 126, 126, + 1730, 1730, 126, 1730, 126, 128, 1730, 1730, 1730, 1730, + + 1730, 128, 131, 131, 1730, 1730, 1730, 131, 131, 133, + 1730, 1730, 1730, 1730, 1730, 133, 135, 135, 1730, 135, + 135, 135, 135, 72, 72, 1730, 72, 72, 72, 72, + 13, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730 } ; -static yyconst flex_int16_t yy_chk[3321] = +static yyconst flex_int16_t yy_chk[3471] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1349,365 +1391,381 @@ static yyconst flex_int16_t yy_chk[3321] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 49, 5, 5, 49, 3, 5, 15, 4, 6, 6, 15, 5, 6, 9, 9, - 9, 151, 33, 6, 7, 7, 7, 7, 9, 7, + 9, 153, 33, 6, 7, 7, 7, 7, 9, 7, 10, 10, 10, 44, 44, 7, 8, 8, 8, 8, - 10, 8, 21, 33, 151, 21, 21, 8, 11, 11, - 11, 11, 11, 11, 1660, 20, 29, 20, 20, 11, + 10, 8, 21, 33, 153, 21, 21, 8, 11, 11, + 11, 11, 11, 11, 1736, 20, 29, 20, 20, 11, 20, 29, 24, 21, 25, 20, 24, 28, 11, 12, 12, 12, 12, 12, 12, 74, 22, 22, 74, 25, 12, 69, 28, 30, 22, 69, 24, 26, 26, 12, - 19, 22, 19, 19, 66, 19, 26, 110, 30, 27, + 19, 22, 19, 19, 66, 19, 26, 644, 30, 27, 19, 19, 23, 27, 60, 60, 27, 23, 66, 31, - 31, 23, 110, 27, 23, 27, 23, 23, 31, 75, - 32, 32, 34, 75, 31, 32, 76, 35, 31, 36, - 77, 34, 35, 77, 36, 37, 37, 34, 37, 101, - 34, 32, 35, 38, 36, 35, 76, 34, 36, 36, - 39, 39, 101, 37, 173, 39, 55, 38, 55, 55, - - 173, 55, 38, 63, 78, 63, 63, 65, 63, 65, - 65, 79, 65, 68, 63, 68, 68, 82, 68, 80, - 81, 83, 78, 68, 71, 79, 71, 71, 84, 71, - 85, 80, 86, 84, 71, 71, 87, 88, 81, 82, - 83, 89, 90, 91, 85, 89, 84, 90, 94, 97, - 92, 631, 86, 92, 87, 88, 92, 91, 93, 95, - 98, 104, 96, 93, 95, 96, 103, 94, 99, 96, - 92, 100, 99, 97, 98, 102, 105, 106, 100, 103, - 105, 104, 102, 107, 95, 108, 109, 111, 107, 112, - 114, 113, 107, 115, 115, 106, 113, 116, 118, 109, - - 117, 119, 114, 119, 120, 108, 111, 112, 121, 120, - 122, 124, 124, 132, 115, 116, 117, 140, 126, 118, - 121, 126, 131, 131, 119, 140, 139, 128, 122, 128, - 128, 133, 128, 133, 133, 134, 133, 134, 134, 136, - 134, 139, 136, 137, 138, 141, 134, 142, 137, 138, - 143, 149, 144, 145, 176, 143, 143, 144, 145, 146, - 141, 146, 148, 148, 150, 154, 153, 142, 152, 150, - 149, 153, 152, 155, 157, 156, 176, 160, 158, 154, - 130, 146, 147, 158, 159, 159, 147, 156, 155, 161, - 156, 147, 157, 162, 163, 163, 147, 160, 162, 167, - - 166, 164, 147, 147, 159, 161, 164, 174, 165, 166, - 168, 169, 164, 165, 170, 168, 169, 171, 172, 170, - 167, 178, 171, 175, 177, 172, 179, 174, 180, 175, - 181, 182, 177, 180, 183, 184, 178, 186, 185, 183, - 185, 188, 187, 191, 186, 189, 179, 187, 191, 182, - 182, 192, 181, 190, 190, 184, 192, 189, 194, 193, - 188, 193, 195, 196, 197, 199, 191, 198, 200, 197, - 194, 196, 198, 202, 201, 129, 203, 208, 193, 203, - 199, 195, 201, 204, 204, 205, 200, 209, 205, 206, - 206, 207, 207, 208, 210, 211, 212, 210, 202, 211, - - 214, 213, 209, 215, 215, 212, 213, 216, 217, 218, - 219, 220, 216, 217, 214, 222, 222, 221, 223, 224, - 225, 226, 227, 224, 230, 229, 231, 227, 219, 218, - 221, 228, 220, 226, 228, 231, 223, 229, 225, 232, - 233, 230, 234, 235, 230, 235, 235, 236, 236, 237, - 238, 239, 237, 233, 234, 240, 241, 241, 242, 244, - 232, 243, 243, 242, 240, 245, 239, 238, 246, 247, - 238, 248, 249, 246, 244, 249, 248, 249, 250, 251, - 255, 252, 253, 254, 256, 245, 265, 253, 254, 247, - 252, 257, 250, 258, 259, 251, 260, 259, 251, 263, - - 251, 255, 264, 262, 256, 265, 257, 258, 263, 266, - 260, 267, 269, 259, 261, 268, 261, 261, 262, 270, - 268, 271, 272, 264, 266, 273, 261, 272, 261, 261, - 261, 267, 269, 261, 270, 274, 271, 275, 276, 277, - 278, 278, 275, 278, 277, 273, 279, 280, 281, 274, - 283, 282, 283, 284, 276, 285, 286, 284, 287, 288, - 295, 295, 127, 280, 281, 282, 279, 287, 288, 289, - 286, 290, 291, 285, 289, 290, 297, 292, 293, 294, - 287, 291, 292, 294, 293, 296, 298, 298, 299, 297, - 296, 300, 301, 299, 302, 303, 304, 304, 305, 303, - - 306, 301, 310, 305, 307, 307, 302, 309, 309, 311, - 312, 315, 300, 313, 316, 317, 319, 311, 321, 312, - 322, 306, 318, 310, 319, 313, 323, 318, 320, 317, - 325, 315, 326, 320, 316, 324, 321, 326, 327, 324, - 328, 331, 322, 330, 334, 325, 332, 323, 336, 333, - 338, 332, 333, 342, 327, 339, 332, 331, 125, 328, - 329, 329, 340, 330, 334, 338, 329, 339, 329, 335, - 335, 337, 337, 336, 341, 342, 329, 340, 343, 344, - 345, 346, 348, 343, 351, 347, 329, 348, 344, 347, - 349, 350, 353, 341, 352, 352, 346, 351, 354, 345, - - 355, 356, 349, 355, 353, 357, 358, 359, 357, 350, - 354, 359, 359, 360, 361, 361, 356, 362, 362, 363, - 364, 364, 358, 367, 363, 358, 360, 365, 365, 366, - 368, 373, 369, 370, 366, 368, 369, 371, 370, 376, - 372, 371, 374, 375, 367, 372, 377, 374, 375, 377, - 379, 373, 380, 376, 377, 378, 378, 381, 377, 384, - 382, 383, 381, 384, 383, 385, 380, 386, 379, 382, - 385, 387, 388, 390, 389, 391, 387, 395, 390, 392, - 386, 391, 392, 396, 393, 384, 389, 393, 388, 394, - 398, 397, 406, 398, 394, 395, 397, 396, 399, 402, - - 400, 401, 408, 399, 400, 400, 401, 403, 402, 404, - 403, 406, 409, 404, 404, 405, 407, 405, 407, 410, - 408, 411, 412, 413, 414, 403, 412, 415, 416, 417, - 409, 418, 413, 420, 417, 419, 419, 420, 410, 414, - 421, 411, 422, 416, 423, 415, 424, 422, 425, 426, - 418, 421, 427, 429, 430, 428, 426, 427, 429, 430, - 423, 425, 428, 431, 432, 424, 433, 435, 434, 438, - 436, 432, 435, 436, 437, 433, 439, 439, 437, 441, - 443, 431, 434, 442, 441, 439, 444, 442, 445, 446, - 438, 447, 443, 450, 453, 457, 445, 456, 458, 463, - - 459, 457, 458, 462, 444, 459, 456, 446, 450, 461, - 464, 453, 470, 464, 461, 470, 447, 448, 465, 465, - 466, 462, 448, 468, 463, 473, 448, 466, 123, 448, - 467, 467, 469, 469, 472, 474, 448, 478, 468, 448, - 460, 460, 460, 471, 460, 473, 477, 460, 471, 475, - 476, 476, 460, 472, 474, 478, 67, 475, 460, 460, - 479, 477, 480, 480, 481, 479, 482, 483, 484, 481, - 483, 482, 485, 486, 484, 487, 489, 488, 490, 490, - 485, 486, 488, 489, 491, 492, 493, 496, 495, 498, - 492, 495, 491, 487, 497, 497, 499, 501, 502, 499, - - 503, 496, 504, 502, 498, 493, 505, 499, 507, 506, - 508, 511, 509, 510, 508, 514, 616, 507, 501, 512, - 511, 503, 504, 515, 519, 513, 522, 616, 505, 506, - 509, 513, 510, 512, 516, 514, 517, 515, 518, 516, - 520, 517, 518, 519, 521, 523, 523, 522, 524, 521, - 526, 525, 520, 524, 525, 528, 527, 529, 530, 530, - 528, 531, 531, 532, 534, 535, 533, 536, 526, 527, - 533, 538, 539, 540, 542, 538, 541, 529, 532, 542, - 543, 536, 544, 534, 545, 546, 61, 539, 545, 535, - 537, 541, 547, 537, 543, 537, 544, 547, 540, 537, - - 546, 537, 549, 548, 550, 551, 537, 547, 548, 552, - 555, 537, 553, 556, 56, 552, 549, 553, 556, 551, - 554, 554, 555, 557, 558, 550, 554, 560, 554, 559, - 559, 561, 560, 562, 563, 569, 558, 557, 565, 561, - 564, 564, 565, 567, 570, 571, 554, 562, 567, 568, - 571, 572, 568, 563, 569, 573, 574, 570, 575, 576, - 577, 578, 580, 579, 576, 574, 582, 580, 583, 584, - 572, 573, 579, 585, 586, 578, 587, 575, 585, 586, - 577, 587, 588, 596, 584, 582, 583, 589, 589, 590, - 594, 588, 592, 594, 590, 595, 592, 592, 593, 593, - - 598, 597, 593, 596, 597, 606, 599, 600, 601, 602, - 595, 599, 600, 603, 601, 604, 604, 605, 608, 603, - 609, 598, 610, 606, 607, 602, 605, 607, 611, 612, - 613, 614, 617, 618, 612, 613, 608, 615, 618, 609, - 615, 611, 610, 619, 617, 620, 621, 621, 619, 614, - 622, 623, 624, 625, 626, 628, 629, 625, 627, 632, - 620, 633, 634, 635, 624, 623, 636, 627, 635, 622, - 637, 636, 626, 632, 628, 637, 633, 638, 639, 640, - 641, 629, 634, 642, 640, 643, 644, 645, 645, 646, - 647, 638, 639, 648, 650, 641, 647, 649, 649, 650, - - 643, 651, 642, 652, 654, 644, 653, 646, 651, 653, - 655, 656, 657, 648, 659, 658, 656, 652, 661, 655, - 658, 660, 654, 662, 663, 660, 666, 661, 664, 665, - 667, 657, 668, 659, 669, 664, 671, 670, 662, 663, - 669, 665, 674, 675, 672, 666, 676, 674, 677, 51, - 668, 667, 670, 672, 676, 678, 671, 675, 679, 680, - 678, 682, 679, 679, 681, 681, 683, 684, 677, 685, - 685, 686, 684, 691, 682, 683, 686, 687, 680, 688, - 688, 689, 687, 690, 692, 701, 693, 691, 690, 694, - 689, 693, 695, 698, 694, 696, 697, 695, 702, 696, - - 701, 703, 692, 700, 698, 697, 704, 700, 706, 705, - 697, 707, 697, 708, 697, 703, 702, 705, 709, 709, - 710, 714, 706, 711, 711, 704, 714, 713, 715, 707, - 713, 716, 716, 717, 719, 710, 718, 718, 708, 719, - 720, 720, 721, 722, 723, 724, 726, 715, 722, 728, - 724, 727, 723, 717, 725, 725, 728, 727, 730, 734, - 731, 732, 721, 730, 726, 731, 732, 733, 734, 735, - 736, 738, 733, 737, 737, 739, 741, 740, 746, 742, - 745, 736, 740, 743, 744, 744, 747, 748, 735, 749, - 750, 738, 748, 758, 761, 750, 741, 758, 739, 742, - - 745, 743, 752, 746, 747, 753, 752, 752, 754, 755, - 756, 755, 749, 757, 753, 759, 754, 760, 757, 762, - 761, 764, 763, 765, 756, 766, 759, 763, 767, 766, - 768, 769, 770, 771, 772, 773, 760, 762, 776, 764, - 773, 780, 778, 765, 774, 769, 767, 770, 771, 768, - 775, 774, 777, 772, 779, 775, 776, 778, 781, 782, - 779, 777, 780, 781, 782, 783, 784, 784, 786, 786, - 783, 787, 788, 789, 790, 791, 793, 788, 794, 791, - 791, 792, 792, 795, 796, 797, 799, 789, 800, 787, - 803, 797, 801, 790, 798, 793, 802, 794, 804, 798, - - 811, 805, 808, 796, 803, 799, 808, 800, 809, 795, - 815, 801, 806, 806, 810, 802, 805, 807, 818, 804, - 811, 809, 807, 810, 812, 812, 813, 831, 814, 816, - 815, 813, 814, 820, 816, 836, 818, 822, 820, 821, - 821, 830, 822, 824, 824, 826, 826, 828, 829, 829, - 828, 832, 831, 833, 834, 836, 830, 838, 833, 835, - 835, 837, 837, 839, 840, 832, 841, 842, 840, 834, - 844, 847, 842, 845, 839, 846, 846, 848, 849, 838, - 850, 851, 850, 853, 852, 841, 851, 845, 844, 852, - 854, 847, 855, 856, 856, 854, 857, 848, 849, 859, - - 860, 860, 857, 853, 861, 862, 855, 864, 863, 866, - 865, 863, 864, 868, 863, 865, 861, 867, 866, 871, - 871, 869, 867, 859, 869, 862, 863, 870, 872, 873, - 874, 875, 870, 877, 876, 878, 875, 881, 868, 876, - 878, 879, 879, 882, 880, 883, 872, 884, 873, 880, - 874, 888, 885, 886, 887, 881, 877, 889, 890, 887, - 893, 884, 892, 882, 885, 883, 886, 892, 50, 894, - 896, 888, 895, 899, 899, 893, 894, 889, 902, 890, - 900, 895, 901, 900, 895, 904, 896, 901, 903, 905, - 906, 907, 908, 908, 902, 909, 907, 903, 905, 906, - - 910, 905, 911, 912, 904, 913, 914, 915, 915, 916, - 917, 919, 45, 910, 920, 909, 919, 912, 921, 923, - 911, 922, 925, 921, 914, 916, 924, 922, 917, 929, - 913, 924, 920, 926, 930, 925, 926, 929, 931, 923, - 932, 933, 926, 935, 934, 937, 933, 930, 938, 939, - 940, 943, 938, 941, 939, 940, 931, 942, 941, 932, - 934, 935, 944, 945, 945, 937, 942, 946, 947, 951, - 948, 949, 950, 952, 943, 954, 949, 944, 954, 952, - 947, 946, 948, 957, 950, 953, 953, 951, 955, 955, - 958, 958, 957, 959, 960, 961, 962, 963, 964, 960, - - 965, 966, 967, 964, 961, 959, 968, 968, 962, 965, - 969, 970, 963, 40, 971, 969, 972, 967, 973, 973, - 974, 966, 965, 975, 975, 976, 976, 977, 982, 978, - 984, 977, 970, 971, 978, 979, 972, 981, 979, 983, - 974, 989, 981, 990, 983, 988, 982, 985, 985, 986, - 986, 987, 991, 992, 993, 984, 987, 988, 988, 988, - 995, 989, 997, 990, 988, 994, 994, 992, 996, 996, - 999, 1002, 991, 1000, 1000, 993, 1001, 1004, 1002, 999, - 1003, 1006, 997, 1005, 1005, 1007, 995, 1009, 1010, 1003, - 1011, 1001, 1009, 1010, 1014, 1012, 1013, 1013, 1016, 1014, - - 1015, 1007, 1012, 1004, 1017, 1018, 1019, 1006, 1020, 1015, - 1011, 1021, 1022, 1022, 1020, 1023, 1024, 1024, 1016, 1017, - 1021, 1019, 1025, 1026, 1018, 1027, 1023, 1028, 1028, 1029, - 1027, 1023, 1031, 1029, 1029, 1030, 1032, 1026, 1034, 1033, - 1030, 1035, 1036, 1025, 1033, 1035, 1037, 1038, 1032, 1041, - 1034, 1039, 1038, 1043, 1036, 1040, 1043, 14, 1031, 1049, - 1040, 1041, 1044, 1044, 1045, 1045, 1046, 1053, 1049, 1047, - 1048, 1037, 1046, 1039, 1047, 1051, 1048, 1055, 1057, 1053, - 1051, 1056, 1056, 1058, 1059, 1060, 1061, 1064, 1062, 1055, - 1061, 1063, 1058, 1062, 1066, 1066, 1063, 1067, 1057, 1068, - - 1069, 1064, 1059, 1074, 1060, 1075, 1066, 1076, 1068, 1069, - 1071, 1071, 1076, 1077, 1082, 1067, 1078, 1078, 1074, 1075, - 1079, 1082, 1079, 1080, 1080, 1083, 1084, 1084, 1085, 1086, - 1077, 1087, 1088, 1090, 1089, 1091, 1092, 1085, 1095, 1096, - 1095, 1101, 1094, 1087, 1088, 1083, 1089, 1094, 1090, 1097, - 1086, 1099, 1100, 1100, 1102, 1091, 1092, 1096, 1097, 1102, - 1103, 1104, 1103, 1105, 1106, 1099, 1104, 1101, 1105, 1107, - 1108, 1109, 1111, 1112, 1114, 1108, 1109, 1113, 1113, 1117, - 1118, 1115, 1106, 1116, 1123, 1116, 1114, 1112, 1117, 1107, - 1115, 1111, 1118, 1115, 1120, 1121, 1124, 1123, 1125, 1120, - - 1121, 1127, 1129, 1130, 1131, 1136, 1132, 1127, 1129, 1133, - 1133, 1134, 1135, 1135, 1125, 1132, 1124, 1137, 1130, 1139, - 1134, 1137, 1138, 1141, 1136, 1140, 1140, 1138, 1144, 1131, - 1147, 1141, 1139, 1145, 1145, 1146, 1146, 1144, 1148, 1149, - 1150, 1150, 1147, 1152, 1149, 1153, 1154, 1155, 1156, 1157, - 1153, 1159, 1159, 1156, 1158, 1160, 1148, 1161, 1162, 1160, - 1163, 1164, 1155, 1162, 1166, 1167, 1168, 1157, 1152, 1154, - 1158, 1169, 1161, 1171, 1173, 1173, 1170, 1175, 1174, 1176, - 1164, 1174, 1177, 1178, 1178, 1168, 1163, 1166, 1170, 1167, - 1175, 1181, 1169, 1176, 1171, 1177, 1179, 1179, 1180, 1180, - - 1182, 1182, 1183, 1183, 1181, 1184, 1184, 1185, 1186, 1186, - 1187, 1187, 1188, 1190, 1191, 1191, 1192, 1195, 1190, 1193, - 1193, 1194, 1196, 1195, 1203, 1196, 1185, 1197, 1197, 1198, - 1198, 1188, 1199, 1200, 1200, 1192, 1202, 1202, 1205, 1194, - 1204, 1204, 1206, 1197, 1207, 1208, 1209, 1205, 1210, 1207, - 1203, 1199, 1211, 1212, 1206, 1213, 1214, 1211, 1215, 1209, - 1219, 1216, 1221, 1217, 1213, 1214, 1216, 1217, 1212, 1210, - 1208, 1221, 1215, 1222, 1222, 1226, 1223, 1224, 1224, 1227, - 1219, 1223, 1229, 1230, 1231, 1229, 1224, 1235, 1230, 1238, - 1226, 1227, 1232, 1232, 1234, 1234, 1236, 1236, 1237, 1239, - - 13, 1235, 1246, 1238, 1231, 1240, 1240, 1242, 1249, 1243, - 1237, 1242, 1243, 1244, 1244, 1245, 1247, 1248, 1239, 1250, - 1245, 1248, 1246, 1252, 1250, 1254, 1251, 1255, 1249, 1252, - 1247, 1251, 1255, 1256, 1257, 1258, 1276, 1258, 1256, 1261, - 1261, 1254, 1257, 1265, 1265, 1268, 1269, 1269, 1271, 1271, - 1268, 1273, 1274, 1274, 1275, 1277, 1273, 1284, 1276, 1282, - 1277, 1279, 1279, 1283, 1282, 1283, 1289, 1285, 1286, 1286, - 1275, 1284, 1285, 1287, 1287, 1288, 1288, 1290, 1289, 1291, - 1292, 1293, 1294, 1295, 1296, 1296, 1298, 1294, 1297, 1299, - 1301, 1291, 1292, 1293, 1300, 1290, 1302, 1297, 1303, 1304, - - 1305, 1306, 1306, 1295, 1304, 1305, 1310, 1300, 1312, 1299, - 1302, 1311, 1298, 1313, 1301, 1314, 1303, 1307, 1307, 1315, - 1316, 1317, 1317, 1320, 1314, 1322, 1310, 1319, 1319, 1311, - 1312, 1323, 1320, 1313, 1321, 1324, 1325, 1326, 1316, 1315, - 1322, 1321, 1327, 1327, 1329, 1328, 1330, 1331, 1332, 1323, - 1328, 1334, 1325, 1324, 1337, 1338, 1326, 1340, 1338, 1339, - 1339, 1330, 1329, 1341, 1343, 1343, 1331, 1344, 1332, 1351, - 1334, 1355, 1340, 1352, 1337, 1345, 1345, 1346, 1346, 1350, - 1350, 1341, 1352, 1353, 1354, 1356, 1344, 1358, 1353, 1354, - 1355, 1351, 1359, 1356, 1360, 1361, 1372, 1359, 0, 1360, - - 1362, 1362, 1358, 1363, 1363, 1372, 1364, 1365, 1365, 1369, - 1361, 1364, 1366, 1366, 1369, 1370, 1371, 1373, 1374, 1370, - 1375, 1371, 1376, 1379, 1378, 1375, 1374, 1378, 1381, 1380, - 1382, 1384, 1373, 1386, 1376, 1383, 1383, 1381, 1387, 1382, - 1384, 1379, 1380, 1388, 1389, 1389, 1390, 1391, 1391, 1392, - 1395, 1393, 1386, 1396, 1401, 1390, 1393, 1392, 1387, 1395, - 1398, 1398, 1388, 1402, 1402, 1403, 1396, 1407, 1403, 1404, - 1404, 1405, 1405, 1408, 1401, 1406, 1406, 1409, 1410, 1410, - 1411, 1417, 1409, 1414, 1411, 1407, 1418, 1408, 1419, 1414, - 1420, 1418, 1423, 1421, 1422, 1422, 1424, 1425, 1417, 1417, - - 1426, 1426, 1427, 1427, 1424, 1428, 1419, 1421, 1429, 1430, - 1420, 1423, 1431, 1429, 1432, 1433, 1425, 1434, 1438, 1436, - 1445, 1428, 1436, 1432, 1439, 1439, 1440, 1444, 1449, 1430, - 1440, 1441, 1443, 1449, 1455, 1433, 1438, 1434, 1431, 1444, - 1441, 1443, 1450, 1450, 1451, 1445, 1453, 1454, 1457, 1456, - 1459, 1453, 1458, 1451, 1456, 1455, 1454, 1458, 1460, 1460, - 1462, 1463, 1464, 1464, 1465, 1466, 1457, 1467, 1465, 1468, - 1469, 1471, 1470, 1473, 1466, 1459, 1463, 1470, 1469, 1462, - 1472, 1472, 1475, 1467, 1474, 1474, 1478, 1475, 1468, 1477, - 1477, 1479, 1473, 1480, 1480, 1481, 1481, 1471, 1482, 1483, - - 1484, 1485, 1485, 1486, 1487, 1488, 1478, 1489, 1490, 1487, - 1494, 1483, 1489, 1479, 0, 1486, 1497, 1482, 1491, 1491, - 1484, 1493, 1493, 1496, 1488, 1490, 1490, 1498, 1496, 1494, - 1497, 0, 1498, 1499, 1499, 1500, 1500, 1501, 1501, 1502, - 1504, 1504, 1506, 1506, 1502, 1508, 1508, 1509, 1512, 1513, - 1513, 1517, 1509, 1514, 1516, 1518, 1512, 1519, 1514, 1516, - 1520, 1521, 1524, 1525, 1525, 1536, 1521, 1526, 1526, 1517, - 1538, 1518, 1527, 1540, 1519, 1519, 1527, 1531, 1531, 1533, - 1536, 1520, 1524, 1533, 1535, 1535, 1539, 1539, 1538, 1541, - 1542, 1543, 1544, 1545, 1546, 1546, 1543, 1544, 1540, 1549, - - 1549, 1551, 1551, 1553, 1541, 1554, 1554, 1557, 1556, 1558, - 1559, 1542, 1545, 1556, 1558, 1553, 1560, 1561, 1565, 1566, - 1569, 1557, 1565, 1567, 1568, 1570, 1571, 1572, 1574, 1559, - 1573, 1573, 1577, 1561, 1560, 1575, 1567, 1574, 1569, 1566, - 1575, 1570, 1572, 1568, 1576, 1578, 1582, 1579, 1580, 1576, - 1583, 1571, 1579, 1584, 1585, 1587, 1586, 1577, 1584, 1585, - 1578, 1582, 1580, 1588, 1589, 1590, 1591, 1592, 1587, 1583, - 1586, 1593, 1594, 1596, 1597, 1597, 1595, 1594, 1589, 1591, - 1592, 1595, 1588, 1598, 1590, 1601, 1599, 0, 1598, 1600, - 1593, 1599, 1596, 1602, 1600, 1603, 1603, 1605, 1602, 1604, - - 1606, 1608, 1607, 1611, 1601, 1609, 1604, 1607, 1611, 1612, - 1613, 1614, 1615, 1615, 1617, 0, 1605, 1616, 1609, 1606, - 1608, 1622, 1616, 1626, 1614, 1618, 1618, 1620, 1612, 1613, - 1619, 1619, 1620, 1617, 1621, 1623, 1623, 1624, 1625, 1628, - 1622, 1621, 1626, 1627, 1624, 1625, 1630, 1631, 1627, 1632, - 1633, 1630, 1631, 1634, 1634, 1635, 1636, 1639, 1628, 1637, - 1637, 1638, 1638, 1648, 1639, 1640, 1640, 1649, 1632, 1633, - 1641, 1641, 1642, 1644, 1635, 1636, 1647, 0, 1644, 1642, - 0, 1647, 1648, 1650, 1650, 0, 1649, 1651, 1651, 1655, - 1655, 1655, 1655, 1655, 1655, 1655, 1656, 1656, 1656, 1656, - - 1656, 1656, 1656, 1657, 1657, 1657, 1657, 1657, 1657, 1657, - 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1659, 1659, 1659, - 1659, 1659, 1659, 1659, 1661, 1661, 0, 1661, 1661, 1661, - 1661, 1662, 1662, 0, 0, 0, 1662, 1662, 1663, 1663, - 0, 0, 1663, 0, 1663, 1664, 0, 0, 0, 0, - 0, 1664, 1665, 1665, 0, 0, 0, 1665, 1665, 1666, - 0, 0, 0, 0, 0, 1666, 1667, 1667, 0, 1667, - 1667, 1667, 1667, 1668, 1668, 0, 1668, 1668, 1668, 1668, - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654 + 31, 23, 76, 27, 23, 27, 23, 23, 31, 75, + 32, 32, 34, 75, 31, 32, 37, 37, 31, 37, + 36, 34, 76, 35, 35, 36, 133, 34, 35, 38, + 34, 32, 79, 78, 37, 36, 131, 34, 35, 36, + 36, 35, 90, 38, 39, 39, 79, 90, 38, 39, + + 55, 78, 55, 55, 63, 55, 63, 63, 65, 63, + 65, 65, 83, 65, 68, 63, 68, 68, 77, 68, + 80, 77, 81, 82, 68, 71, 86, 71, 71, 85, + 71, 83, 80, 84, 77, 71, 71, 87, 84, 88, + 81, 94, 91, 85, 89, 82, 86, 92, 89, 93, + 92, 84, 97, 92, 93, 87, 91, 88, 95, 96, + 94, 98, 96, 95, 99, 100, 96, 92, 99, 101, + 102, 103, 100, 104, 105, 98, 97, 102, 105, 106, + 107, 108, 101, 95, 103, 107, 109, 110, 111, 107, + 112, 114, 113, 104, 117, 115, 114, 106, 116, 116, + + 110, 108, 118, 111, 119, 122, 109, 115, 123, 112, + 113, 120, 117, 120, 188, 121, 188, 122, 118, 116, + 121, 125, 125, 140, 127, 119, 123, 127, 129, 137, + 129, 129, 137, 129, 120, 132, 132, 134, 140, 134, + 134, 135, 134, 135, 135, 138, 135, 141, 139, 142, + 138, 143, 135, 139, 144, 141, 145, 151, 146, 147, + 130, 145, 145, 146, 147, 148, 143, 148, 142, 150, + 150, 154, 152, 155, 144, 154, 151, 152, 155, 156, + 157, 160, 159, 162, 158, 163, 160, 148, 149, 164, + 161, 161, 149, 156, 164, 157, 158, 149, 169, 158, + + 159, 163, 149, 162, 165, 165, 166, 167, 149, 149, + 161, 166, 167, 168, 176, 170, 171, 166, 172, 169, + 170, 171, 168, 172, 173, 174, 178, 175, 181, 173, + 177, 179, 174, 175, 176, 180, 177, 182, 184, 179, + 180, 183, 186, 181, 185, 187, 183, 186, 178, 189, + 190, 191, 192, 193, 193, 190, 189, 182, 198, 128, + 184, 194, 185, 185, 192, 187, 194, 195, 197, 196, + 191, 196, 195, 199, 200, 203, 204, 198, 201, 200, + 197, 199, 202, 201, 194, 205, 206, 202, 196, 207, + 203, 212, 207, 205, 204, 208, 208, 209, 210, 210, + + 209, 211, 211, 213, 216, 214, 215, 212, 214, 217, + 215, 206, 218, 216, 217, 219, 219, 220, 213, 221, + 222, 223, 220, 224, 221, 225, 218, 226, 226, 227, + 228, 229, 231, 230, 228, 234, 233, 231, 225, 223, + 222, 235, 236, 232, 224, 230, 232, 227, 233, 229, + 235, 237, 234, 238, 239, 234, 239, 239, 240, 240, + 242, 243, 244, 236, 237, 238, 241, 245, 245, 241, + 246, 244, 247, 247, 248, 246, 243, 242, 249, 250, + 242, 251, 252, 253, 255, 256, 251, 258, 253, 248, + 249, 254, 258, 260, 254, 261, 254, 262, 255, 250, + + 257, 256, 252, 259, 256, 263, 256, 264, 259, 257, + 264, 265, 262, 267, 260, 261, 269, 270, 271, 263, + 272, 126, 268, 276, 274, 265, 264, 266, 267, 266, + 266, 268, 275, 271, 279, 277, 270, 269, 276, 266, + 272, 266, 266, 266, 273, 280, 266, 274, 278, 273, + 277, 281, 275, 278, 279, 282, 281, 283, 285, 280, + 284, 284, 283, 284, 286, 287, 290, 289, 288, 289, + 290, 282, 291, 292, 293, 294, 301, 301, 285, 297, + 286, 287, 288, 293, 294, 296, 295, 292, 297, 296, + 291, 295, 298, 299, 300, 302, 293, 298, 300, 299, + + 302, 303, 304, 304, 305, 306, 307, 308, 309, 305, + 310, 310, 309, 311, 303, 307, 312, 316, 311, 308, + 313, 313, 315, 315, 317, 318, 306, 319, 321, 322, + 323, 324, 317, 328, 318, 326, 325, 312, 316, 319, + 324, 325, 327, 326, 323, 329, 332, 327, 321, 322, + 330, 328, 331, 333, 334, 335, 331, 337, 333, 339, + 340, 332, 338, 340, 339, 341, 349, 329, 343, 339, + 334, 330, 342, 342, 335, 336, 336, 337, 338, 344, + 344, 336, 345, 336, 346, 341, 348, 347, 349, 350, + 351, 336, 352, 343, 350, 353, 346, 345, 355, 351, + + 354, 336, 347, 355, 354, 348, 356, 357, 358, 359, + 353, 352, 360, 360, 361, 362, 363, 359, 356, 363, + 364, 358, 366, 368, 124, 357, 361, 362, 365, 367, + 375, 365, 371, 367, 367, 364, 368, 371, 366, 369, + 369, 366, 370, 370, 372, 372, 373, 373, 374, 376, + 378, 375, 377, 374, 376, 378, 377, 379, 380, 381, + 382, 379, 383, 380, 384, 382, 387, 383, 385, 386, + 386, 385, 388, 67, 390, 399, 385, 389, 384, 381, + 385, 399, 389, 390, 387, 391, 388, 392, 391, 393, + 394, 392, 395, 396, 393, 397, 398, 395, 403, 400, + + 404, 398, 400, 394, 455, 401, 402, 397, 401, 396, + 405, 402, 455, 392, 404, 405, 403, 406, 407, 409, + 406, 408, 410, 407, 411, 408, 408, 410, 412, 415, + 413, 412, 409, 411, 413, 413, 414, 416, 414, 416, + 417, 418, 419, 420, 422, 421, 412, 423, 415, 421, + 424, 425, 426, 422, 427, 428, 428, 426, 417, 418, + 429, 419, 423, 420, 429, 430, 425, 431, 424, 432, + 433, 434, 431, 427, 435, 436, 430, 438, 439, 437, + 436, 435, 438, 439, 434, 432, 437, 440, 441, 433, + 442, 444, 443, 447, 445, 441, 444, 445, 446, 442, + + 448, 448, 446, 449, 453, 440, 443, 452, 451, 448, + 454, 452, 449, 451, 447, 456, 453, 457, 463, 460, + 466, 467, 468, 472, 473, 469, 468, 467, 454, 466, + 469, 471, 478, 456, 460, 463, 471, 474, 475, 475, + 474, 472, 457, 458, 476, 477, 477, 478, 458, 473, + 482, 476, 458, 479, 479, 458, 480, 483, 481, 480, + 484, 487, 458, 481, 485, 458, 470, 470, 470, 482, + 470, 488, 485, 470, 486, 486, 487, 483, 470, 484, + 497, 489, 490, 490, 470, 470, 489, 491, 492, 488, + 494, 493, 491, 492, 493, 495, 494, 496, 497, 498, + + 499, 500, 500, 495, 498, 496, 501, 499, 502, 503, + 505, 507, 506, 502, 501, 506, 508, 508, 509, 505, + 510, 512, 513, 510, 514, 507, 515, 513, 503, 516, + 517, 510, 518, 509, 519, 520, 521, 524, 519, 522, + 523, 518, 512, 524, 525, 514, 515, 526, 522, 530, + 517, 516, 527, 520, 523, 521, 529, 527, 528, 531, + 529, 526, 532, 528, 525, 533, 537, 532, 530, 534, + 534, 531, 535, 536, 538, 539, 536, 535, 540, 543, + 539, 541, 541, 545, 537, 546, 533, 538, 542, 542, + 547, 544, 548, 550, 543, 544, 551, 550, 540, 553, + + 552, 554, 545, 555, 547, 556, 554, 571, 571, 546, + 61, 551, 548, 549, 553, 558, 549, 555, 549, 556, + 562, 559, 549, 557, 549, 552, 559, 557, 560, 549, + 558, 561, 563, 560, 549, 565, 559, 564, 567, 568, + 565, 562, 569, 564, 568, 561, 563, 566, 566, 570, + 567, 573, 572, 566, 574, 566, 569, 572, 575, 573, + 577, 570, 576, 576, 577, 579, 580, 581, 574, 580, + 579, 582, 584, 566, 583, 587, 585, 575, 586, 583, + 588, 589, 590, 594, 582, 588, 581, 586, 591, 595, + 592, 584, 585, 596, 587, 592, 590, 591, 597, 598, + + 599, 589, 594, 597, 598, 599, 600, 595, 596, 601, + 601, 602, 607, 604, 608, 600, 602, 604, 604, 605, + 605, 606, 609, 605, 606, 610, 611, 614, 610, 608, + 612, 613, 607, 614, 615, 612, 613, 616, 617, 617, + 618, 619, 609, 616, 621, 620, 622, 611, 620, 618, + 615, 623, 625, 624, 627, 626, 629, 625, 628, 619, + 626, 628, 621, 630, 631, 622, 624, 629, 632, 631, + 633, 623, 627, 632, 635, 630, 634, 634, 636, 637, + 638, 639, 641, 642, 638, 633, 640, 647, 645, 646, + 674, 637, 636, 635, 674, 640, 652, 656, 648, 639, + + 649, 641, 645, 648, 646, 649, 650, 647, 642, 651, + 652, 650, 653, 654, 651, 655, 656, 657, 654, 658, + 659, 659, 660, 661, 662, 666, 653, 663, 663, 661, + 655, 664, 657, 668, 665, 671, 664, 669, 658, 666, + 660, 665, 667, 670, 662, 667, 669, 672, 670, 673, + 675, 668, 672, 678, 671, 676, 677, 679, 680, 675, + 678, 681, 682, 684, 685, 686, 683, 690, 673, 679, + 676, 677, 683, 689, 686, 690, 688, 680, 684, 691, + 682, 688, 681, 692, 685, 693, 694, 689, 692, 693, + 693, 695, 695, 696, 697, 698, 699, 699, 705, 691, + + 698, 706, 700, 697, 701, 694, 696, 700, 703, 701, + 702, 702, 705, 704, 712, 707, 708, 703, 704, 706, + 707, 708, 709, 711, 710, 712, 714, 709, 710, 715, + 714, 716, 711, 718, 719, 723, 721, 711, 717, 711, + 720, 711, 717, 717, 715, 722, 725, 718, 720, 716, + 721, 724, 724, 719, 726, 726, 728, 729, 730, 728, + 723, 725, 729, 722, 731, 731, 732, 733, 733, 734, + 735, 735, 736, 737, 734, 738, 739, 730, 737, 740, + 740, 739, 741, 738, 742, 56, 732, 743, 745, 750, + 742, 746, 736, 745, 743, 749, 746, 747, 748, 751, + + 741, 753, 747, 748, 749, 752, 752, 754, 750, 755, + 751, 756, 757, 761, 755, 758, 759, 760, 760, 762, + 763, 753, 765, 764, 766, 756, 51, 758, 764, 766, + 754, 756, 757, 761, 759, 768, 777, 769, 763, 768, + 768, 770, 772, 775, 762, 765, 769, 773, 771, 770, + 771, 774, 773, 776, 775, 774, 772, 778, 779, 780, + 781, 782, 777, 779, 783, 782, 784, 785, 786, 787, + 788, 789, 776, 791, 792, 778, 789, 780, 791, 790, + 781, 785, 783, 786, 787, 784, 790, 793, 794, 788, + 796, 795, 792, 797, 798, 799, 793, 795, 797, 798, + + 799, 800, 800, 794, 802, 802, 803, 804, 805, 806, + 807, 796, 804, 809, 807, 807, 808, 808, 810, 811, + 812, 813, 805, 815, 803, 814, 819, 813, 806, 816, + 814, 817, 809, 818, 820, 846, 821, 810, 846, 812, + 819, 823, 815, 822, 822, 811, 823, 825, 816, 824, + 817, 821, 818, 824, 826, 820, 827, 829, 827, 833, + 825, 831, 827, 826, 830, 830, 831, 832, 834, 836, + 849, 832, 850, 834, 858, 827, 838, 829, 858, 833, + 840, 838, 839, 839, 848, 840, 850, 836, 842, 842, + 844, 844, 847, 847, 852, 849, 851, 853, 853, 848, + + 854, 851, 855, 855, 856, 857, 859, 860, 863, 852, + 862, 866, 860, 864, 864, 867, 857, 869, 865, 871, + 854, 868, 863, 865, 871, 859, 856, 870, 862, 870, + 868, 866, 873, 872, 874, 867, 875, 869, 872, 874, + 876, 876, 877, 879, 880, 880, 881, 888, 877, 882, + 875, 50, 873, 883, 886, 884, 883, 885, 881, 883, + 884, 887, 885, 886, 892, 889, 887, 879, 889, 882, + 890, 883, 888, 891, 891, 890, 893, 894, 895, 896, + 897, 898, 892, 895, 896, 900, 898, 899, 899, 901, + 900, 902, 903, 905, 904, 893, 906, 894, 908, 907, + + 909, 910, 913, 897, 907, 905, 914, 901, 904, 906, + 912, 902, 903, 914, 915, 912, 916, 913, 908, 922, + 909, 924, 910, 915, 919, 919, 915, 920, 921, 923, + 920, 929, 916, 921, 925, 922, 926, 927, 923, 930, + 924, 931, 927, 925, 932, 926, 925, 928, 928, 933, + 934, 929, 930, 935, 935, 936, 937, 939, 932, 931, + 940, 937, 938, 938, 943, 942, 939, 944, 934, 939, + 942, 936, 944, 945, 933, 946, 947, 938, 940, 945, + 948, 947, 943, 949, 953, 954, 949, 955, 952, 956, + 958, 957, 949, 948, 956, 946, 952, 953, 960, 966, + + 961, 969, 967, 954, 961, 962, 955, 957, 958, 963, + 962, 964, 965, 971, 963, 969, 964, 967, 960, 968, + 968, 965, 966, 970, 972, 971, 973, 974, 975, 976, + 970, 977, 974, 978, 978, 979, 972, 977, 979, 982, + 975, 980, 980, 983, 983, 973, 984, 976, 982, 985, + 986, 987, 988, 990, 985, 989, 991, 992, 984, 986, + 989, 994, 990, 987, 993, 993, 994, 988, 995, 996, + 997, 999, 992, 998, 998, 990, 991, 1000, 1000, 1001, + 1001, 1002, 1003, 1004, 1007, 1002, 1004, 1003, 996, 995, + 997, 999, 1006, 1008, 1009, 1010, 1010, 1006, 1008, 1011, + + 1011, 1012, 1007, 1013, 1014, 1015, 1012, 1016, 1018, 1017, + 1019, 1019, 1020, 1021, 1021, 1013, 1013, 1013, 1026, 1009, + 1022, 1024, 1013, 1017, 1014, 1015, 1029, 1016, 1027, 1018, + 1024, 1025, 1025, 1026, 1028, 1027, 1030, 1030, 1020, 1031, + 1022, 1032, 1034, 1028, 1035, 1040, 1036, 1034, 1037, 1035, + 1038, 1038, 1029, 1039, 1040, 1037, 1041, 1032, 1039, 1042, + 1043, 1044, 1045, 1043, 1048, 1031, 1036, 1046, 1046, 1047, + 1049, 1042, 1050, 1051, 1052, 1052, 1041, 1055, 1050, 1044, + 1053, 1056, 1051, 1048, 1047, 1049, 1054, 1054, 1045, 1057, + 1061, 1053, 1058, 1058, 1057, 1056, 1053, 1059, 1055, 1060, + + 1062, 1059, 1059, 1063, 1060, 1064, 1065, 1066, 1063, 1067, + 1065, 1069, 1062, 1068, 1071, 1070, 1061, 1064, 1068, 1066, + 1070, 1073, 1074, 1074, 1073, 1077, 1071, 1075, 1075, 1076, + 1076, 1078, 1080, 1069, 1067, 1079, 1083, 1078, 1080, 1081, + 1079, 1083, 1085, 1087, 1089, 1077, 1088, 1088, 1081, 1090, + 1091, 1092, 1093, 1096, 1085, 1087, 1093, 1094, 1090, 1099, + 1095, 1106, 1094, 45, 1089, 1095, 1100, 1096, 1091, 1101, + 1092, 1098, 1098, 1103, 1103, 1100, 1106, 1099, 1101, 1107, + 1108, 1109, 1111, 1098, 1111, 1108, 1110, 1110, 1112, 1112, + 1114, 1115, 1117, 1107, 1116, 1116, 1118, 1114, 1109, 40, + + 1119, 1117, 1120, 1121, 1122, 1123, 1124, 1127, 1126, 1127, + 1128, 1115, 1119, 1126, 1120, 1121, 1131, 1118, 1129, 1122, + 1132, 1132, 1133, 1138, 1134, 1123, 1124, 1129, 1128, 1134, + 1131, 1135, 1136, 1135, 1137, 1139, 1144, 1136, 1140, 1137, + 1141, 1138, 1143, 1140, 1146, 1141, 1145, 1145, 1133, 1147, + 1144, 1148, 1149, 1151, 1152, 1139, 1148, 1149, 1150, 1146, + 1150, 1143, 1153, 1152, 1153, 1151, 1152, 1154, 1155, 1147, + 1157, 1160, 1158, 1161, 1162, 1157, 1154, 1158, 1168, 1164, + 1155, 1166, 1167, 1169, 1160, 1164, 1171, 1166, 1170, 1170, + 1162, 1173, 1169, 1161, 1176, 1171, 1174, 1167, 1172, 1172, + + 1174, 1175, 1179, 1168, 1177, 1177, 1175, 1176, 1178, 1183, + 1173, 1182, 1182, 1184, 1184, 1186, 1178, 1187, 1183, 1185, + 1185, 1188, 1179, 1189, 1189, 1191, 1188, 1186, 1192, 1193, + 1194, 1195, 1197, 1192, 1200, 1187, 1195, 1196, 1198, 1198, + 1199, 1201, 1202, 1203, 1199, 1194, 1201, 1205, 1197, 1200, + 1191, 1206, 1193, 1207, 1209, 1196, 1208, 1210, 1212, 1212, + 1213, 1214, 1203, 1213, 1229, 1215, 1209, 1216, 1202, 1229, + 1205, 1304, 1207, 1304, 1214, 1206, 1220, 1208, 1210, 1215, + 1216, 1217, 1217, 1218, 1218, 1219, 1219, 1221, 1221, 1220, + 1222, 1222, 1223, 1223, 1224, 1225, 1225, 1226, 1226, 1227, + + 1230, 1230, 1231, 1232, 1232, 1233, 1234, 1235, 1236, 1236, + 1235, 1238, 1234, 1224, 1237, 1237, 1239, 1239, 1227, 1241, + 1242, 1231, 1243, 1233, 1236, 1245, 1243, 1244, 1244, 1247, + 1238, 1246, 1246, 1248, 1248, 1242, 1249, 1250, 1251, 1252, + 1253, 1254, 1241, 1251, 1245, 1249, 1255, 1257, 1256, 1250, + 1258, 1255, 1259, 1253, 1261, 1247, 1257, 1263, 1261, 1258, + 1260, 1265, 1254, 1256, 1252, 1260, 1259, 1266, 1266, 1267, + 1265, 1268, 1268, 1270, 1267, 1271, 1275, 1263, 1273, 1275, + 1268, 1276, 1277, 1281, 1271, 1285, 1276, 1283, 1270, 1284, + 1273, 1278, 1278, 1280, 1280, 1282, 1282, 1281, 1292, 1283, + + 1286, 1286, 1277, 1284, 1285, 1288, 1293, 1289, 1291, 1288, + 1289, 1290, 1290, 1291, 1295, 1294, 1296, 1297, 1292, 1294, + 1293, 1296, 1297, 1298, 1300, 1301, 1302, 1303, 1322, 1298, + 1301, 1302, 1307, 1307, 1295, 1303, 1311, 1311, 1314, 1321, + 1300, 1315, 1315, 1314, 1317, 1317, 1319, 1320, 1320, 1323, + 1322, 1319, 1325, 1325, 1323, 1321, 1327, 1328, 1329, 1331, + 1331, 1327, 1333, 1334, 1335, 1334, 1336, 1333, 1337, 1337, + 1340, 1336, 1341, 1329, 1342, 1328, 1338, 1338, 1335, 1339, + 1339, 1343, 1340, 1344, 1345, 1346, 1342, 1347, 1347, 1345, + 1341, 1348, 1349, 1343, 1350, 1344, 1351, 1352, 1353, 1354, + + 1348, 1355, 1356, 1357, 1362, 1346, 1364, 1356, 1357, 1351, + 1358, 1358, 1353, 1363, 1350, 1359, 1359, 1354, 1349, 1365, + 1366, 1352, 1367, 1355, 1362, 1368, 1369, 1369, 1364, 1366, + 1373, 1363, 1371, 1371, 1374, 1372, 1375, 1373, 1376, 1365, + 1378, 1377, 1367, 1368, 1372, 1379, 1379, 1380, 1381, 1374, + 1382, 1383, 1380, 1384, 1375, 1386, 1376, 1377, 1389, 1378, + 1390, 1391, 1391, 1390, 1392, 1382, 1381, 1393, 1395, 1397, + 1383, 1400, 1395, 1384, 1386, 1396, 1396, 1407, 1389, 1392, + 1399, 1399, 1397, 1401, 1401, 1393, 1402, 1402, 1406, 1406, + 1400, 1408, 1409, 1410, 1411, 1412, 1414, 1409, 1410, 1407, + + 1408, 1415, 1416, 1412, 1417, 1420, 1415, 1416, 1418, 1418, + 1420, 1414, 1421, 1411, 1419, 1419, 1429, 1421, 1430, 1417, + 1422, 1422, 1423, 1423, 1426, 1429, 1427, 1428, 1431, 1426, + 1427, 1433, 1428, 1430, 1432, 1435, 1431, 1436, 1435, 1432, + 1437, 1438, 1439, 1433, 1440, 1440, 1443, 1441, 1444, 14, + 1438, 1439, 1445, 1437, 1447, 1436, 1441, 1446, 1446, 1448, + 1448, 1449, 1450, 1447, 1452, 1443, 1453, 1450, 1444, 1449, + 1454, 1445, 1461, 1452, 1456, 1456, 1458, 1458, 1467, 1453, + 1462, 1462, 13, 1463, 1468, 1454, 1463, 1464, 1464, 1465, + 1465, 1474, 1461, 1466, 1466, 1469, 1467, 1474, 1468, 1471, + + 1469, 1470, 1470, 1471, 1475, 1478, 1479, 1480, 1481, 1475, + 1482, 1479, 1483, 1483, 1484, 1486, 1487, 1487, 1485, 1488, + 1488, 1489, 1478, 1478, 1482, 1480, 1485, 1490, 1481, 1491, + 1492, 1493, 1490, 1484, 1486, 1494, 1497, 1489, 1495, 1497, + 1493, 1499, 1500, 1500, 1501, 1502, 1508, 1503, 1501, 1491, + 0, 1507, 1504, 1506, 1502, 1494, 1492, 1518, 1495, 1499, + 1503, 1504, 1506, 1507, 1512, 1513, 1513, 1514, 1516, 1512, + 1517, 1508, 1519, 1516, 1521, 1520, 1514, 1518, 1522, 1517, + 1520, 1523, 1526, 1522, 1524, 1524, 1529, 1527, 1528, 1528, + 1529, 1530, 1521, 1519, 1531, 1532, 1533, 1535, 1534, 1537, + + 1530, 1526, 1527, 1534, 1533, 1542, 1523, 1536, 1536, 1545, + 1531, 1538, 1538, 1544, 1532, 1539, 1541, 1541, 1537, 1548, + 1539, 1543, 1543, 1535, 1549, 1542, 1550, 1544, 1546, 1546, + 1552, 1545, 1547, 1547, 1551, 1551, 1549, 1553, 1548, 1554, + 1555, 1561, 1552, 1556, 1554, 1557, 1550, 1564, 1556, 1558, + 1558, 1560, 1560, 1563, 1566, 1566, 0, 1553, 1563, 1555, + 1561, 1564, 1557, 1557, 1565, 1567, 1567, 1568, 1568, 1565, + 1569, 1571, 1571, 1573, 1573, 1569, 1575, 1575, 1576, 1577, + 1577, 1578, 1581, 1582, 1582, 1586, 1578, 1576, 1583, 1585, + 1581, 1587, 1588, 1583, 1585, 1589, 1590, 1586, 1591, 1594, + + 1595, 1595, 1597, 1591, 1596, 1596, 1597, 1605, 1588, 1587, + 1601, 1601, 1589, 1589, 1603, 1607, 1607, 1590, 1603, 1594, + 1608, 1605, 1610, 1611, 1611, 1612, 1612, 1613, 1614, 1615, + 1618, 1616, 1617, 1619, 1619, 1608, 1616, 1617, 1622, 1622, + 1610, 1624, 1624, 1614, 1625, 1625, 1627, 1628, 1628, 1618, + 1615, 1631, 1613, 1632, 1633, 1634, 1631, 1635, 1627, 1633, + 1636, 1641, 1642, 1645, 1643, 1641, 1644, 1632, 1646, 1647, + 1650, 1648, 1649, 1649, 1634, 1635, 1636, 1643, 1651, 1650, + 1653, 1645, 1642, 1651, 1646, 1644, 1648, 1652, 1654, 1658, + 1655, 1659, 1652, 1656, 1647, 1655, 1660, 1661, 1662, 1664, + + 1663, 1660, 1661, 1654, 1658, 1653, 1665, 1656, 1666, 1667, + 1659, 1668, 1662, 1663, 1669, 1672, 1670, 0, 1664, 1677, + 1665, 1670, 1667, 1671, 1668, 1673, 1673, 1666, 1671, 1681, + 1674, 1675, 1676, 1669, 1672, 1674, 1675, 1676, 1677, 1678, + 1679, 1679, 1680, 1682, 1678, 1683, 1684, 1685, 1681, 1680, + 1683, 1687, 1688, 1689, 1690, 1693, 1687, 1691, 1691, 1692, + 1685, 1696, 1682, 1697, 1692, 1684, 1696, 1690, 1694, 1694, + 1697, 1688, 1689, 1698, 1693, 1695, 1695, 1699, 1699, 1700, + 1701, 1702, 1704, 1703, 1706, 1707, 1700, 1701, 1703, 1706, + 1707, 1708, 1698, 1709, 1710, 1710, 1711, 1712, 1713, 1713, + + 1702, 1704, 1714, 1714, 1715, 1716, 1716, 1717, 1717, 1720, + 1708, 1715, 1709, 1718, 1720, 1711, 1712, 1723, 1724, 1725, + 1718, 0, 1723, 1726, 1726, 1727, 1727, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1724, 1725, 1731, + 1731, 1731, 1731, 1731, 1731, 1731, 1732, 1732, 1732, 1732, + 1732, 1732, 1732, 1733, 1733, 1733, 1733, 1733, 1733, 1733, + 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1735, 1735, 1735, + 1735, 1735, 1735, 1735, 1737, 1737, 0, 1737, 1737, 1737, + 1737, 1738, 1738, 0, 0, 0, 1738, 1738, 1739, 1739, + 0, 0, 1739, 0, 1739, 1740, 0, 0, 0, 0, + + 0, 1740, 1741, 1741, 0, 0, 0, 1741, 1741, 1742, + 0, 0, 0, 0, 0, 1742, 1743, 1743, 0, 1743, + 1743, 1743, 1743, 1744, 1744, 0, 1744, 1744, 1744, 1744, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730 } ; static yy_state_type yy_last_accepting_state; @@ -1908,7 +1966,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 1910 "<stdout>" +#line 1968 "<stdout>" #define INITIAL 0 #define quotedstring 1 @@ -2095,7 +2153,7 @@ YY_DECL #line 197 "./util/configlexer.lex" -#line 2097 "<stdout>" +#line 2155 "<stdout>" if ( !(yy_init) ) { @@ -2154,13 +2212,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 >= 1655 ) + if ( yy_current_state >= 1731 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 3281 ); + while ( yy_base[yy_current_state] != 3431 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -2400,560 +2458,600 @@ YY_RULE_SETUP case 43: YY_RULE_SETUP #line 243 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 44: YY_RULE_SETUP #line 244 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 45: YY_RULE_SETUP #line 245 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 46: YY_RULE_SETUP #line 246 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 47: YY_RULE_SETUP #line 247 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 48: YY_RULE_SETUP #line 248 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 49: YY_RULE_SETUP #line 249 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 50: YY_RULE_SETUP #line 250 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 51: YY_RULE_SETUP #line 251 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 52: YY_RULE_SETUP #line 252 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 53: YY_RULE_SETUP #line 253 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 54: YY_RULE_SETUP #line 254 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 55: YY_RULE_SETUP #line 255 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 56: YY_RULE_SETUP #line 256 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 57: YY_RULE_SETUP #line 257 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 58: YY_RULE_SETUP #line 258 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 59: YY_RULE_SETUP #line 259 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 60: YY_RULE_SETUP #line 260 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 61: YY_RULE_SETUP #line 261 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 62: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 63: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 64: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 65: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 66: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 67: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 68: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 69: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 70: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 71: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 72: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 73: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 74: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 75: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 76: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 77: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 78: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 79: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 80: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 81: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 82: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 83: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 84: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 85: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 86: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 87: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 88: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 89: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 90: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 91: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 92: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 93: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 94: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 95: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 96: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 97: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 98: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 99: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 100: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 101: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 102: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 103: YY_RULE_SETUP -#line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 303 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 104: YY_RULE_SETUP -#line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 304 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 105: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 106: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 107: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 108: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 109: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 110: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 111: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 112: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 113: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 114: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 115: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 116: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 117: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 118: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 119: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 120: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 121: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 122: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 123: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 124: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 125: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 126: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 127: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 128: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 129: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 130: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 131: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 132: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 133: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 134: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 135: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 136: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 137: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 138: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 139: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 140: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 141: YY_RULE_SETUP +#line 342 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } + YY_BREAK +case 142: +YY_RULE_SETUP #line 343 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK -case 142: +case 143: YY_RULE_SETUP #line 345 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK -case 143: +case 144: YY_RULE_SETUP #line 347 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK -case 144: +case 145: YY_RULE_SETUP #line 349 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK -case 145: +case 146: YY_RULE_SETUP #line 351 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK -case 146: -/* rule 146 can match eol */ +case 147: YY_RULE_SETUP #line 353 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YY_BREAK +case 148: +YY_RULE_SETUP +#line 355 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT) } + YY_BREAK +case 149: +YY_RULE_SETUP +#line 356 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT_SLABS) } + YY_BREAK +case 150: +YY_RULE_SETUP +#line 357 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT_SIZE) } + YY_BREAK +case 151: +YY_RULE_SETUP +#line 358 "./util/configlexer.lex" +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } + YY_BREAK +case 152: +YY_RULE_SETUP +#line 359 "./util/configlexer.lex" +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } + YY_BREAK +case 153: +YY_RULE_SETUP +#line 360 "./util/configlexer.lex" +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } + YY_BREAK +case 154: +/* rule 154 can match eol */ +YY_RULE_SETUP +#line 361 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 147: +case 155: YY_RULE_SETUP -#line 356 "./util/configlexer.lex" +#line 364 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 357 "./util/configlexer.lex" +#line 365 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 148: +case 156: YY_RULE_SETUP -#line 362 "./util/configlexer.lex" +#line 370 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 149: -/* rule 149 can match eol */ +case 157: +/* rule 157 can match eol */ YY_RULE_SETUP -#line 363 "./util/configlexer.lex" +#line 371 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 150: +case 158: YY_RULE_SETUP -#line 365 "./util/configlexer.lex" +#line 373 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -2966,34 +3064,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 151: +case 159: YY_RULE_SETUP -#line 377 "./util/configlexer.lex" +#line 385 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 378 "./util/configlexer.lex" +#line 386 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 152: +case 160: YY_RULE_SETUP -#line 383 "./util/configlexer.lex" +#line 391 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 153: -/* rule 153 can match eol */ +case 161: +/* rule 161 can match eol */ YY_RULE_SETUP -#line 384 "./util/configlexer.lex" +#line 392 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 154: +case 162: YY_RULE_SETUP -#line 386 "./util/configlexer.lex" +#line 394 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -3006,38 +3104,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 155: +case 163: YY_RULE_SETUP -#line 398 "./util/configlexer.lex" +#line 406 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 400 "./util/configlexer.lex" +#line 408 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 156: +case 164: YY_RULE_SETUP -#line 404 "./util/configlexer.lex" +#line 412 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 157: -/* rule 157 can match eol */ +case 165: +/* rule 165 can match eol */ YY_RULE_SETUP -#line 405 "./util/configlexer.lex" +#line 413 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 158: +case 166: YY_RULE_SETUP -#line 406 "./util/configlexer.lex" +#line 414 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 159: +case 167: YY_RULE_SETUP -#line 407 "./util/configlexer.lex" +#line 415 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -3045,27 +3143,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 412 "./util/configlexer.lex" +#line 420 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 160: +case 168: YY_RULE_SETUP -#line 416 "./util/configlexer.lex" +#line 424 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 161: -/* rule 161 can match eol */ +case 169: +/* rule 169 can match eol */ YY_RULE_SETUP -#line 417 "./util/configlexer.lex" +#line 425 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 162: +case 170: YY_RULE_SETUP -#line 419 "./util/configlexer.lex" +#line 427 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -3075,7 +3173,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 425 "./util/configlexer.lex" +#line 433 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -3087,33 +3185,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 163: +case 171: YY_RULE_SETUP -#line 436 "./util/configlexer.lex" +#line 444 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 164: +case 172: YY_RULE_SETUP -#line 440 "./util/configlexer.lex" +#line 448 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 165: +case 173: YY_RULE_SETUP -#line 444 "./util/configlexer.lex" +#line 452 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 166: +case 174: YY_RULE_SETUP -#line 448 "./util/configlexer.lex" +#line 456 "./util/configlexer.lex" ECHO; YY_BREAK -#line 3115 "<stdout>" +#line 3213 "<stdout>" case YY_END_OF_BUFFER: { @@ -3403,7 +3501,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 >= 1655 ) + if ( yy_current_state >= 1731 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3431,11 +3529,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 >= 1655 ) + if ( yy_current_state >= 1731 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1654); + yy_is_jam = (yy_current_state == 1730); return yy_is_jam ? 0 : yy_current_state; } @@ -4068,7 +4166,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 448 "./util/configlexer.lex" +#line 456 "./util/configlexer.lex" diff --git a/external/unbound/util/configlexer.lex b/external/unbound/util/configlexer.lex index 5b1389dfb..5622f2170 100644 --- a/external/unbound/util/configlexer.lex +++ b/external/unbound/util/configlexer.lex @@ -240,6 +240,7 @@ msg-cache-slabs{COLON} { YDVAR(1, VAR_MSG_CACHE_SLABS) } rrset-cache-size{COLON} { YDVAR(1, VAR_RRSET_CACHE_SIZE) } rrset-cache-slabs{COLON} { YDVAR(1, VAR_RRSET_CACHE_SLABS) } cache-max-ttl{COLON} { YDVAR(1, VAR_CACHE_MAX_TTL) } +cache-max-negative-ttl{COLON} { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } cache-min-ttl{COLON} { YDVAR(1, VAR_CACHE_MIN_TTL) } infra-host-ttl{COLON} { YDVAR(1, VAR_INFRA_HOST_TTL) } infra-lame-ttl{COLON} { YDVAR(1, VAR_INFRA_LAME_TTL) } @@ -259,6 +260,7 @@ harden-below-nxdomain{COLON} { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } harden-referral-path{COLON} { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } harden-algo-downgrade{COLON} { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } use-caps-for-id{COLON} { YDVAR(1, VAR_USE_CAPS_FOR_ID) } +caps-whitelist{COLON} { YDVAR(1, VAR_CAPS_WHITELIST) } unwanted-reply-threshold{COLON} { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } private-address{COLON} { YDVAR(1, VAR_PRIVATE_ADDRESS) } private-domain{COLON} { YDVAR(1, VAR_PRIVATE_DOMAIN) } @@ -350,6 +352,12 @@ dnstap-log-forwarder-query-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } dnstap-log-forwarder-response-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } +ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) } +ratelimit-slabs{COLON} { YDVAR(1, VAR_RATELIMIT_SLABS) } +ratelimit-size{COLON} { YDVAR(1, VAR_RATELIMIT_SIZE) } +ratelimit-for-domain{COLON} { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +ratelimit-below-domain{COLON} { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) } <INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/external/unbound/util/configparser.c b/external/unbound/util/configparser.c index 745a9ba79..f7ebd5d51 100644 --- a/external/unbound/util/configparser.c +++ b/external/unbound/util/configparser.c @@ -276,7 +276,15 @@ extern int yydebug; VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 404, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 405, VAR_HARDEN_ALGO_DOWNGRADE = 406, - VAR_IP_TRANSPARENT = 407 + VAR_IP_TRANSPARENT = 407, + VAR_RATELIMIT = 408, + VAR_RATELIMIT_SLABS = 409, + VAR_RATELIMIT_SIZE = 410, + VAR_RATELIMIT_FOR_DOMAIN = 411, + VAR_RATELIMIT_BELOW_DOMAIN = 412, + VAR_RATELIMIT_FACTOR = 413, + VAR_CAPS_WHITELIST = 414, + VAR_CACHE_MAX_NEGATIVE_TTL = 415 }; #endif /* Tokens. */ @@ -430,6 +438,14 @@ extern int yydebug; #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 405 #define VAR_HARDEN_ALGO_DOWNGRADE 406 #define VAR_IP_TRANSPARENT 407 +#define VAR_RATELIMIT 408 +#define VAR_RATELIMIT_SLABS 409 +#define VAR_RATELIMIT_SIZE 410 +#define VAR_RATELIMIT_FOR_DOMAIN 411 +#define VAR_RATELIMIT_BELOW_DOMAIN 412 +#define VAR_RATELIMIT_FACTOR 413 +#define VAR_CAPS_WHITELIST 414 +#define VAR_CACHE_MAX_NEGATIVE_TTL 415 @@ -443,7 +459,7 @@ typedef union YYSTYPE /* Line 387 of yacc.c */ -#line 447 "util/configparser.c" +#line 463 "util/configparser.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -471,7 +487,7 @@ int yyparse (); /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ -#line 475 "util/configparser.c" +#line 491 "util/configparser.c" #ifdef short # undef short @@ -691,20 +707,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 283 +#define YYLAST 301 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 153 +#define YYNTOKENS 161 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 158 +#define YYNNTS 166 /* YYNRULES -- Number of rules. */ -#define YYNRULES 301 +#define YYNRULES 317 /* YYNRULES -- Number of states. */ -#define YYNSTATES 441 +#define YYNSTATES 467 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 407 +#define YYMAXUTOK 415 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -752,7 +768,8 @@ static const yytype_uint8 yytranslate[] = 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152 + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160 }; #if YYDEBUG @@ -772,141 +789,147 @@ static const yytype_uint16 yyprhs[] = 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, - 245, 247, 250, 251, 253, 255, 257, 259, 261, 263, - 266, 267, 269, 271, 273, 275, 278, 281, 284, 287, - 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, - 320, 323, 326, 329, 332, 335, 338, 341, 344, 347, - 350, 353, 356, 359, 362, 365, 368, 371, 374, 377, - 380, 383, 386, 389, 392, 395, 398, 401, 404, 407, - 410, 413, 416, 419, 422, 425, 428, 431, 434, 437, - 440, 443, 446, 449, 452, 455, 458, 461, 464, 467, - 470, 473, 476, 479, 482, 485, 488, 491, 494, 497, - 500, 503, 506, 509, 512, 515, 519, 522, 525, 528, - 531, 534, 537, 540, 543, 546, 549, 552, 555, 558, - 561, 564, 567, 570, 573, 577, 580, 583, 586, 589, - 592, 595, 598, 601, 604, 607, 610, 613, 616, 619, - 622, 625, 627, 630, 631, 633, 635, 637, 639, 641, - 643, 645, 647, 650, 653, 656, 659, 662, 665, 668, - 671, 673, 676, 677, 679, 681, 683, 685, 687, 689, - 691, 693, 695, 697, 699, 701, 704, 707, 710, 713, - 716, 719, 722, 725, 728, 731, 734, 737, 739, 742, - 743, 745 + 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, + 266, 267, 269, 271, 273, 275, 277, 279, 282, 283, + 285, 287, 289, 291, 294, 297, 300, 303, 306, 309, + 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, + 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, + 372, 375, 378, 381, 384, 387, 390, 393, 396, 399, + 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, + 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, + 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, + 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, + 522, 525, 528, 531, 534, 538, 541, 544, 547, 550, + 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, + 583, 586, 589, 592, 595, 599, 602, 605, 608, 611, + 614, 617, 620, 623, 626, 629, 633, 637, 640, 643, + 646, 649, 652, 655, 658, 661, 664, 667, 669, 672, + 673, 675, 677, 679, 681, 683, 685, 687, 689, 692, + 695, 698, 701, 704, 707, 710, 713, 715, 718, 719, + 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, + 741, 743, 746, 749, 752, 755, 758, 761, 764, 767, + 770, 773, 776, 779, 781, 784, 785, 787 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 154, 0, -1, -1, 154, 155, -1, 156, 157, -1, - 159, 160, -1, 162, 163, -1, 307, 308, -1, 281, - 282, -1, 292, 293, -1, 11, -1, 157, 158, -1, - -1, 165, -1, 166, -1, 170, -1, 173, -1, 179, - -1, 180, -1, 181, -1, 182, -1, 171, -1, 192, - -1, 193, -1, 194, -1, 195, -1, 196, -1, 215, - -1, 216, -1, 217, -1, 221, -1, 222, -1, 176, - -1, 223, -1, 224, -1, 227, -1, 225, -1, 226, - -1, 229, -1, 230, -1, 231, -1, 243, -1, 205, - -1, 206, -1, 207, -1, 208, -1, 232, -1, 246, - -1, 201, -1, 203, -1, 247, -1, 252, -1, 253, - -1, 254, -1, 177, -1, 214, -1, 261, -1, 262, - -1, 202, -1, 257, -1, 189, -1, 172, -1, 197, - -1, 244, -1, 250, -1, 233, -1, 245, -1, 264, - -1, 265, -1, 178, -1, 167, -1, 188, -1, 237, - -1, 168, -1, 174, -1, 175, -1, 198, -1, 199, - -1, 263, -1, 235, -1, 238, -1, 239, -1, 169, - -1, 266, -1, 218, -1, 242, -1, 190, -1, 204, - -1, 248, -1, 249, -1, 251, -1, 256, -1, 200, - -1, 258, -1, 259, -1, 260, -1, 209, -1, 213, - -1, 240, -1, 241, -1, 210, -1, 234, -1, 255, - -1, 191, -1, 183, -1, 184, -1, 185, -1, 186, - -1, 187, -1, 267, -1, 268, -1, 269, -1, 211, - -1, 219, -1, 220, -1, 270, -1, 271, -1, 228, - -1, 236, -1, 212, -1, 38, -1, 160, 161, -1, - -1, 272, -1, 273, -1, 274, -1, 276, -1, 275, - -1, 44, -1, 163, 164, -1, -1, 277, -1, 278, - -1, 279, -1, 280, -1, 13, 10, -1, 12, 10, - -1, 76, 10, -1, 79, 10, -1, 97, 10, -1, - 14, 10, -1, 16, 10, -1, 67, 10, -1, 15, - 10, -1, 80, 10, -1, 81, 10, -1, 31, 10, - -1, 60, 10, -1, 75, 10, -1, 17, 10, -1, - 18, 10, -1, 19, 10, -1, 20, 10, -1, 123, - 10, -1, 124, 10, -1, 125, 10, -1, 126, 10, - -1, 127, 10, -1, 77, 10, -1, 66, 10, -1, - 102, 10, -1, 122, 10, -1, 21, 10, -1, 22, - 10, -1, 23, 10, -1, 24, 10, -1, 25, 10, - -1, 68, 10, -1, 82, 10, -1, 83, 10, -1, - 110, 10, -1, 54, 10, -1, 64, 10, -1, 55, - 10, -1, 103, 10, -1, 48, 10, -1, 49, 10, - -1, 50, 10, -1, 51, 10, -1, 114, 10, -1, - 118, 10, -1, 119, 10, -1, 152, 10, -1, 115, - 10, -1, 61, 10, -1, 26, 10, -1, 27, 10, - -1, 28, 10, -1, 99, 10, -1, 133, 10, -1, - 134, 10, -1, 29, 10, -1, 30, 10, -1, 32, - 10, -1, 33, 10, -1, 35, 10, -1, 36, 10, - -1, 34, 10, -1, 135, 10, -1, 41, 10, -1, - 42, 10, -1, 43, 10, -1, 52, 10, -1, 71, - 10, -1, 120, 10, -1, 85, 10, -1, 151, 10, - -1, 78, 10, -1, 86, 10, -1, 87, 10, -1, - 116, 10, -1, 117, 10, -1, 101, 10, -1, 47, - 10, -1, 69, 10, -1, 72, 10, 10, -1, 53, - 10, -1, 56, 10, -1, 106, 10, -1, 107, 10, - -1, 70, 10, -1, 108, 10, -1, 57, 10, -1, - 58, 10, -1, 59, 10, -1, 121, 10, -1, 109, - 10, -1, 65, 10, -1, 112, 10, -1, 113, 10, - -1, 111, 10, -1, 62, 10, -1, 63, 10, -1, - 84, 10, -1, 73, 10, 10, -1, 74, 10, -1, - 98, 10, -1, 130, 10, -1, 131, 10, -1, 132, - 10, -1, 136, 10, -1, 137, 10, -1, 37, 10, - -1, 39, 10, -1, 40, 10, -1, 129, 10, -1, - 100, 10, -1, 37, 10, -1, 45, 10, -1, 46, - 10, -1, 128, 10, -1, 88, -1, 282, 283, -1, - -1, 284, -1, 286, -1, 285, -1, 288, -1, 289, - -1, 290, -1, 291, -1, 287, -1, 89, 10, -1, - 91, 10, -1, 90, 10, -1, 96, 10, -1, 92, - 10, -1, 93, 10, -1, 94, 10, -1, 95, 10, - -1, 138, -1, 293, 294, -1, -1, 295, -1, 296, - -1, 297, -1, 298, -1, 299, -1, 300, -1, 301, - -1, 302, -1, 303, -1, 304, -1, 305, -1, 306, - -1, 139, 10, -1, 140, 10, -1, 141, 10, -1, - 142, 10, -1, 143, 10, -1, 144, 10, -1, 145, - 10, -1, 146, 10, -1, 147, 10, -1, 148, 10, - -1, 149, 10, -1, 150, 10, -1, 104, -1, 308, - 309, -1, -1, 310, -1, 105, 10, -1 + 162, 0, -1, -1, 162, 163, -1, 164, 165, -1, + 167, 168, -1, 170, 171, -1, 323, 324, -1, 297, + 298, -1, 308, 309, -1, 11, -1, 165, 166, -1, + -1, 173, -1, 174, -1, 178, -1, 181, -1, 187, + -1, 188, -1, 189, -1, 190, -1, 179, -1, 200, + -1, 201, -1, 202, -1, 203, -1, 204, -1, 223, + -1, 224, -1, 225, -1, 229, -1, 230, -1, 184, + -1, 231, -1, 232, -1, 235, -1, 233, -1, 234, + -1, 237, -1, 238, -1, 239, -1, 252, -1, 213, + -1, 214, -1, 215, -1, 216, -1, 240, -1, 255, + -1, 209, -1, 211, -1, 256, -1, 262, -1, 263, + -1, 264, -1, 185, -1, 222, -1, 271, -1, 272, + -1, 210, -1, 267, -1, 197, -1, 180, -1, 205, + -1, 253, -1, 259, -1, 241, -1, 254, -1, 274, + -1, 275, -1, 186, -1, 175, -1, 196, -1, 245, + -1, 176, -1, 182, -1, 183, -1, 206, -1, 207, + -1, 273, -1, 243, -1, 247, -1, 248, -1, 177, + -1, 276, -1, 226, -1, 251, -1, 198, -1, 212, + -1, 257, -1, 258, -1, 261, -1, 266, -1, 208, + -1, 268, -1, 269, -1, 270, -1, 217, -1, 221, + -1, 249, -1, 250, -1, 218, -1, 242, -1, 265, + -1, 199, -1, 191, -1, 192, -1, 193, -1, 194, + -1, 195, -1, 277, -1, 278, -1, 279, -1, 219, + -1, 227, -1, 228, -1, 280, -1, 281, -1, 236, + -1, 244, -1, 220, -1, 282, -1, 284, -1, 283, + -1, 285, -1, 286, -1, 287, -1, 246, -1, 260, + -1, 38, -1, 168, 169, -1, -1, 288, -1, 289, + -1, 290, -1, 292, -1, 291, -1, 44, -1, 171, + 172, -1, -1, 293, -1, 294, -1, 295, -1, 296, + -1, 13, 10, -1, 12, 10, -1, 76, 10, -1, + 79, 10, -1, 97, 10, -1, 14, 10, -1, 16, + 10, -1, 67, 10, -1, 15, 10, -1, 80, 10, + -1, 81, 10, -1, 31, 10, -1, 60, 10, -1, + 75, 10, -1, 17, 10, -1, 18, 10, -1, 19, + 10, -1, 20, 10, -1, 123, 10, -1, 124, 10, + -1, 125, 10, -1, 126, 10, -1, 127, 10, -1, + 77, 10, -1, 66, 10, -1, 102, 10, -1, 122, + 10, -1, 21, 10, -1, 22, 10, -1, 23, 10, + -1, 24, 10, -1, 25, 10, -1, 68, 10, -1, + 82, 10, -1, 83, 10, -1, 110, 10, -1, 54, + 10, -1, 64, 10, -1, 55, 10, -1, 103, 10, + -1, 48, 10, -1, 49, 10, -1, 50, 10, -1, + 51, 10, -1, 114, 10, -1, 118, 10, -1, 119, + 10, -1, 152, 10, -1, 115, 10, -1, 61, 10, + -1, 26, 10, -1, 27, 10, -1, 28, 10, -1, + 99, 10, -1, 133, 10, -1, 134, 10, -1, 29, + 10, -1, 30, 10, -1, 32, 10, -1, 33, 10, + -1, 35, 10, -1, 36, 10, -1, 34, 10, -1, + 135, 10, -1, 41, 10, -1, 42, 10, -1, 43, + 10, -1, 52, 10, -1, 71, 10, -1, 120, 10, + -1, 85, 10, -1, 151, 10, -1, 78, 10, -1, + 159, 10, -1, 86, 10, -1, 87, 10, -1, 116, + 10, -1, 117, 10, -1, 101, 10, -1, 47, 10, + -1, 69, 10, -1, 72, 10, 10, -1, 53, 10, + -1, 56, 10, -1, 106, 10, -1, 107, 10, -1, + 70, 10, -1, 160, 10, -1, 108, 10, -1, 57, + 10, -1, 58, 10, -1, 59, 10, -1, 121, 10, + -1, 109, 10, -1, 65, 10, -1, 112, 10, -1, + 113, 10, -1, 111, 10, -1, 62, 10, -1, 63, + 10, -1, 84, 10, -1, 73, 10, 10, -1, 74, + 10, -1, 98, 10, -1, 130, 10, -1, 131, 10, + -1, 132, 10, -1, 136, 10, -1, 137, 10, -1, + 153, 10, -1, 155, 10, -1, 154, 10, -1, 156, + 10, 10, -1, 157, 10, 10, -1, 158, 10, -1, + 37, 10, -1, 39, 10, -1, 40, 10, -1, 129, + 10, -1, 100, 10, -1, 37, 10, -1, 45, 10, + -1, 46, 10, -1, 128, 10, -1, 88, -1, 298, + 299, -1, -1, 300, -1, 302, -1, 301, -1, 304, + -1, 305, -1, 306, -1, 307, -1, 303, -1, 89, + 10, -1, 91, 10, -1, 90, 10, -1, 96, 10, + -1, 92, 10, -1, 93, 10, -1, 94, 10, -1, + 95, 10, -1, 138, -1, 309, 310, -1, -1, 311, + -1, 312, -1, 313, -1, 314, -1, 315, -1, 316, + -1, 317, -1, 318, -1, 319, -1, 320, -1, 321, + -1, 322, -1, 139, 10, -1, 140, 10, -1, 141, + 10, -1, 142, 10, -1, 143, 10, -1, 144, 10, + -1, 145, 10, -1, 146, 10, -1, 147, 10, -1, + 148, 10, -1, 149, 10, -1, 150, 10, -1, 104, + -1, 324, 325, -1, -1, 326, -1, 105, 10, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 124, 124, 124, 125, 125, 126, 126, 127, 127, - 131, 136, 137, 138, 138, 138, 139, 139, 140, 140, - 140, 141, 141, 141, 142, 142, 142, 143, 143, 144, - 144, 145, 145, 146, 146, 147, 147, 148, 148, 149, - 149, 150, 150, 151, 151, 151, 152, 152, 152, 153, - 153, 153, 154, 154, 155, 155, 156, 156, 157, 157, - 158, 158, 158, 159, 159, 160, 160, 161, 161, 161, - 162, 162, 163, 163, 164, 164, 165, 165, 165, 166, - 166, 167, 167, 168, 168, 169, 169, 170, 170, 171, - 171, 171, 172, 172, 173, 173, 173, 174, 174, 174, - 175, 175, 175, 176, 176, 176, 177, 177, 177, 178, - 178, 178, 179, 179, 179, 180, 180, 181, 181, 182, - 184, 196, 197, 198, 198, 198, 198, 198, 200, 212, - 213, 214, 214, 214, 214, 216, 225, 234, 245, 254, - 263, 272, 285, 300, 309, 318, 327, 336, 345, 354, - 363, 372, 381, 390, 399, 408, 415, 422, 431, 440, - 454, 463, 472, 479, 486, 493, 501, 508, 515, 522, - 529, 537, 545, 553, 560, 567, 576, 585, 592, 599, - 607, 615, 625, 635, 648, 659, 667, 680, 689, 698, - 707, 717, 725, 738, 747, 755, 764, 772, 785, 794, - 801, 811, 821, 831, 841, 851, 861, 871, 881, 888, - 895, 904, 913, 922, 929, 939, 956, 963, 981, 994, - 1007, 1016, 1025, 1034, 1044, 1054, 1063, 1072, 1079, 1088, - 1097, 1106, 1114, 1127, 1135, 1158, 1165, 1180, 1190, 1200, - 1207, 1214, 1223, 1233, 1240, 1247, 1256, 1266, 1276, 1283, - 1290, 1299, 1304, 1305, 1306, 1306, 1306, 1307, 1307, 1307, - 1308, 1308, 1310, 1320, 1329, 1336, 1346, 1353, 1360, 1367, - 1374, 1379, 1380, 1381, 1381, 1382, 1382, 1383, 1383, 1384, - 1385, 1386, 1387, 1388, 1389, 1391, 1399, 1406, 1414, 1422, - 1429, 1436, 1445, 1454, 1463, 1472, 1481, 1490, 1495, 1496, - 1497, 1499 + 0, 127, 127, 127, 128, 128, 129, 129, 130, 130, + 134, 139, 140, 141, 141, 141, 142, 142, 143, 143, + 143, 144, 144, 144, 145, 145, 145, 146, 146, 147, + 147, 148, 148, 149, 149, 150, 150, 151, 151, 152, + 152, 153, 153, 154, 154, 154, 155, 155, 155, 156, + 156, 156, 157, 157, 158, 158, 159, 159, 160, 160, + 161, 161, 161, 162, 162, 163, 163, 164, 164, 164, + 165, 165, 166, 166, 167, 167, 168, 168, 168, 169, + 169, 170, 170, 171, 171, 172, 172, 173, 173, 174, + 174, 174, 175, 175, 176, 176, 176, 177, 177, 177, + 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, + 181, 181, 182, 182, 182, 183, 183, 184, 184, 185, + 185, 185, 186, 186, 187, 187, 188, 188, 190, 202, + 203, 204, 204, 204, 204, 204, 206, 218, 219, 220, + 220, 220, 220, 222, 231, 240, 251, 260, 269, 278, + 291, 306, 315, 324, 333, 342, 351, 360, 369, 378, + 387, 396, 405, 414, 421, 428, 437, 446, 460, 469, + 478, 485, 492, 499, 507, 514, 521, 528, 535, 543, + 551, 559, 566, 573, 582, 591, 598, 605, 613, 621, + 631, 641, 654, 665, 673, 686, 695, 704, 713, 723, + 731, 744, 753, 761, 770, 778, 791, 800, 807, 817, + 827, 837, 847, 857, 867, 877, 887, 894, 901, 908, + 917, 926, 935, 942, 952, 969, 976, 994, 1007, 1020, + 1029, 1038, 1047, 1056, 1066, 1076, 1085, 1094, 1101, 1110, + 1119, 1128, 1136, 1149, 1157, 1181, 1188, 1203, 1213, 1223, + 1230, 1237, 1246, 1255, 1263, 1276, 1289, 1302, 1311, 1321, + 1328, 1335, 1344, 1354, 1364, 1371, 1378, 1387, 1392, 1393, + 1394, 1394, 1394, 1395, 1395, 1395, 1396, 1396, 1398, 1408, + 1417, 1424, 1434, 1441, 1448, 1455, 1462, 1467, 1468, 1469, + 1469, 1470, 1470, 1471, 1471, 1472, 1473, 1474, 1475, 1476, + 1477, 1479, 1487, 1494, 1502, 1510, 1517, 1524, 1533, 1542, + 1551, 1560, 1569, 1578, 1583, 1584, 1585, 1587 }; #endif @@ -968,7 +991,10 @@ static const char *const yytname[] = "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", - "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "$accept", + "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "VAR_RATELIMIT", + "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN", + "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_RATELIMIT_FACTOR", + "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL", "$accept", "toplevelvars", "toplevelvar", "serverstart", "contents_server", "content_server", "stubstart", "contents_stub", "content_stub", "forwardstart", "contents_forward", "content_forward", @@ -1002,12 +1028,13 @@ static const char *const yytname[] = "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_private_address", "server_private_domain", "server_prefetch", - "server_prefetch_key", "server_unwanted_reply_threshold", - "server_do_not_query_address", "server_do_not_query_localhost", - "server_access_control", "server_module_conf", - "server_val_override_date", "server_val_sig_skew_min", - "server_val_sig_skew_max", "server_cache_max_ttl", + "server_caps_whitelist", "server_private_address", + "server_private_domain", "server_prefetch", "server_prefetch_key", + "server_unwanted_reply_threshold", "server_do_not_query_address", + "server_do_not_query_localhost", "server_access_control", + "server_module_conf", "server_val_override_date", + "server_val_sig_skew_min", "server_val_sig_skew_max", + "server_cache_max_ttl", "server_cache_max_negative_ttl", "server_cache_min_ttl", "server_bogus_ttl", "server_val_clean_additional", "server_val_permissive_mode", "server_ignore_cd_flag", "server_val_log_level", @@ -1016,15 +1043,17 @@ static const char *const yytname[] = "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", "stub_name", "stub_host", "stub_addr", - "stub_first", "stub_prime", "forward_name", "forward_host", - "forward_addr", "forward_first", "rcstart", "contents_rc", "content_rc", - "rc_control_enable", "rc_control_port", "rc_control_interface", - "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", - "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", - "content_dt", "dt_dnstap_enable", "dt_dnstap_socket_path", - "dt_dnstap_send_identity", "dt_dnstap_send_version", - "dt_dnstap_identity", "dt_dnstap_version", + "server_dns64_synthall", "server_ratelimit", "server_ratelimit_size", + "server_ratelimit_slabs", "server_ratelimit_for_domain", + "server_ratelimit_below_domain", "server_ratelimit_factor", "stub_name", + "stub_host", "stub_addr", "stub_first", "stub_prime", "forward_name", + "forward_host", "forward_addr", "forward_first", "rcstart", + "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", + "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", + "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", + "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", + "dt_dnstap_socket_path", "dt_dnstap_send_identity", + "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version", "dt_dnstap_log_resolver_query_messages", "dt_dnstap_log_resolver_response_messages", "dt_dnstap_log_client_query_messages", @@ -1055,28 +1084,29 @@ static const yytype_uint16 yytoknum[] = 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 + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 153, 154, 154, 155, 155, 155, 155, 155, 155, - 156, 157, 157, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, - 159, 160, 160, 161, 161, 161, 161, 161, 162, 163, - 163, 164, 164, 164, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 0, 161, 162, 162, 163, 163, 163, 163, 163, 163, + 164, 165, 165, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 167, 168, + 168, 169, 169, 169, 169, 169, 170, 171, 171, 172, + 172, 172, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, @@ -1087,12 +1117,13 @@ static const yytype_uint16 yyr1[] = 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, 282, 283, 283, 283, 283, 283, 283, - 283, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 293, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 308, - 309, 310 + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 298, + 299, 299, 299, 299, 299, 299, 299, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 309, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 324, 325, 326 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1110,8 +1141,9 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, - 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 2, 0, 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, @@ -1119,16 +1151,16 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, - 1, 2 + 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 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. @@ -1136,8 +1168,8 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 10, 120, 128, 251, 297, 270, 3, - 12, 122, 130, 253, 272, 299, 4, 5, 6, 8, + 2, 0, 1, 10, 128, 136, 267, 313, 286, 3, + 12, 130, 138, 269, 288, 315, 4, 5, 6, 8, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1148,60 +1180,63 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 13, 14, 70, 73, 82, 15, 21, 61, 16, 74, - 75, 32, 54, 69, 17, 18, 19, 20, 104, 105, - 106, 107, 108, 71, 60, 86, 103, 22, 23, 24, - 25, 26, 62, 76, 77, 92, 48, 58, 49, 87, - 42, 43, 44, 45, 96, 100, 112, 119, 97, 55, - 27, 28, 29, 84, 113, 114, 30, 31, 33, 34, - 36, 37, 35, 117, 38, 39, 40, 46, 65, 101, - 79, 118, 72, 80, 81, 98, 99, 85, 41, 63, - 66, 47, 50, 88, 89, 64, 90, 51, 52, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 13, 14, + 70, 73, 82, 15, 21, 61, 16, 74, 75, 32, + 54, 69, 17, 18, 19, 20, 104, 105, 106, 107, + 108, 71, 60, 86, 103, 22, 23, 24, 25, 26, + 62, 76, 77, 92, 48, 58, 49, 87, 42, 43, + 44, 45, 96, 100, 112, 119, 97, 55, 27, 28, + 29, 84, 113, 114, 30, 31, 33, 34, 36, 37, + 35, 117, 38, 39, 40, 46, 65, 101, 79, 118, + 72, 126, 80, 81, 98, 99, 85, 41, 63, 66, + 47, 50, 88, 89, 64, 127, 90, 51, 52, 53, 102, 91, 59, 93, 94, 95, 56, 57, 78, 67, - 68, 83, 109, 110, 111, 115, 116, 0, 0, 0, - 0, 0, 121, 123, 124, 125, 127, 126, 0, 0, - 0, 0, 129, 131, 132, 133, 134, 0, 0, 0, - 0, 0, 0, 0, 0, 252, 254, 256, 255, 261, - 257, 258, 259, 260, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 271, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 0, - 298, 300, 136, 135, 140, 143, 141, 149, 150, 151, - 152, 162, 163, 164, 165, 166, 185, 186, 187, 191, - 192, 146, 193, 194, 197, 195, 196, 199, 200, 201, - 213, 175, 176, 177, 178, 202, 216, 171, 173, 217, - 222, 223, 224, 147, 184, 231, 232, 172, 227, 159, - 142, 167, 214, 220, 203, 0, 0, 235, 148, 137, - 158, 207, 138, 144, 145, 168, 169, 233, 205, 208, - 209, 139, 236, 188, 212, 160, 174, 218, 219, 221, - 226, 170, 230, 228, 229, 179, 183, 210, 211, 180, - 181, 204, 225, 161, 153, 154, 155, 156, 157, 237, - 238, 239, 189, 190, 198, 240, 241, 206, 182, 242, - 243, 244, 246, 245, 247, 248, 249, 250, 262, 264, - 263, 266, 267, 268, 269, 265, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 301, 215, - 234 + 68, 83, 109, 110, 111, 115, 116, 120, 122, 121, + 123, 124, 125, 0, 0, 0, 0, 0, 129, 131, + 132, 133, 135, 134, 0, 0, 0, 0, 137, 139, + 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, + 0, 268, 270, 272, 271, 277, 273, 274, 275, 276, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 287, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 0, 314, 316, 144, 143, + 148, 151, 149, 157, 158, 159, 160, 170, 171, 172, + 173, 174, 193, 194, 195, 199, 200, 154, 201, 202, + 205, 203, 204, 207, 208, 209, 222, 183, 184, 185, + 186, 210, 225, 179, 181, 226, 232, 233, 234, 155, + 192, 241, 242, 180, 237, 167, 150, 175, 223, 229, + 211, 0, 0, 245, 156, 145, 166, 215, 146, 152, + 153, 176, 177, 243, 213, 217, 218, 147, 246, 196, + 221, 168, 182, 227, 228, 231, 236, 178, 240, 238, + 239, 187, 191, 219, 220, 188, 189, 212, 235, 169, + 161, 162, 163, 164, 165, 247, 248, 249, 197, 198, + 206, 250, 251, 214, 190, 252, 254, 253, 0, 0, + 257, 216, 230, 258, 259, 260, 262, 261, 263, 264, + 265, 266, 278, 280, 279, 282, 283, 284, 285, 281, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 317, 224, 244, 255, 256 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 9, 10, 16, 129, 11, 17, 242, 12, - 18, 252, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 243, - 244, 245, 246, 247, 253, 254, 255, 256, 13, 19, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 14, - 20, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 15, 21, 300, 301 + -1, 1, 9, 10, 16, 137, 11, 17, 258, 12, + 18, 268, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 259, 260, 261, + 262, 263, 269, 270, 271, 272, 13, 19, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 14, 20, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 15, 21, 316, 317 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -1210,18 +1245,19 @@ static const yytype_int16 yydefgoto[] = static const yytype_int16 yypact[] = { -81, 116, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -12, 41, 47, 39, - 3, -80, 16, 17, 18, 22, 23, 24, 66, 67, - 69, 72, 73, 78, 107, 126, 127, 128, 145, 146, - 147, 148, 149, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 161, 162, 163, 164, 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, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, -81, + -81, -81, -81, -81, -81, -81, -12, 89, 47, -13, + 22, -80, 16, 17, 18, 23, 24, 78, 107, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 139, 140, + 141, 142, 143, 145, 146, 147, 148, 149, 163, 164, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, @@ -1232,28 +1268,29 @@ static const yytype_int16 yypact[] = -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, 241, 242, 243, - 245, 246, -81, -81, -81, -81, -81, -81, 247, 248, - 249, 250, -81, -81, -81, -81, -81, 251, 252, 253, - 254, 255, 256, 257, 258, -81, -81, -81, -81, -81, - -81, -81, -81, -81, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81, -81, 271, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, 258, 259, 260, 261, 262, -81, -81, + -81, -81, -81, -81, 263, 264, 265, 266, -81, -81, + -81, -81, -81, 267, 268, 269, 270, 271, 272, 273, + 274, -81, -81, -81, -81, -81, -81, -81, -81, -81, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, 287, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, 272, 273, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, 288, 289, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, 290, 291, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81 + -81, -81, -81, -81, -81, -81, -81 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1274,7 +1311,8 @@ static const yytype_int8 yypgoto[] = -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, - -81, -81, -81, -81, -81, -81, -81, -81 + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -1285,33 +1323,35 @@ static const yytype_uint16 yytable[] = { 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 299, 302, 303, 304, 47, - 48, 49, 305, 306, 307, 50, 51, 52, 53, 54, + 42, 43, 44, 45, 46, 315, 318, 319, 320, 47, + 48, 49, 0, 321, 322, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 308, 309, 237, 310, - 238, 239, 311, 312, 248, 91, 92, 93, 313, 94, - 95, 96, 249, 250, 97, 98, 99, 100, 101, 102, + 85, 86, 87, 88, 89, 90, 273, 274, 275, 276, + 277, 278, 279, 280, 264, 91, 92, 93, 323, 94, + 95, 96, 265, 266, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 2, 314, 119, 120, - 121, 122, 123, 124, 125, 126, 0, 3, 257, 258, - 259, 260, 261, 262, 263, 264, 315, 316, 317, 127, - 128, 240, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 4, 318, 319, 320, 321, 322, - 5, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 241, 332, 333, 334, 335, 251, 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, 6, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 7, 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, 8, 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 + 113, 114, 115, 116, 117, 118, 2, 324, 119, 120, + 121, 122, 123, 124, 125, 126, 253, 3, 254, 255, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 334, + 335, 336, 337, 338, 4, 339, 340, 341, 342, 343, + 5, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 344, 345, 267, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 256, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 6, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 257, 386, + 7, 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, 8, 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 }; #define yypact_value_is_default(Yystate) \ @@ -1325,41 +1365,43 @@ static const yytype_int16 yycheck[] = 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, 105, 10, 10, 10, 41, - 42, 43, 10, 10, 10, 47, 48, 49, 50, 51, + 42, 43, -1, 10, 10, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 10, 10, 37, 10, - 39, 40, 10, 10, 37, 97, 98, 99, 10, 101, + 82, 83, 84, 85, 86, 87, 89, 90, 91, 92, + 93, 94, 95, 96, 37, 97, 98, 99, 10, 101, 102, 103, 45, 46, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0, 10, 130, 131, - 132, 133, 134, 135, 136, 137, -1, 11, 89, 90, - 91, 92, 93, 94, 95, 96, 10, 10, 10, 151, - 152, 100, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 38, 10, 10, 10, 10, 10, - 44, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 129, 10, 10, 10, 10, 128, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 132, 133, 134, 135, 136, 137, 37, 11, 39, 40, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 10, + 10, 10, 10, 10, 38, 10, 10, 10, 10, 10, + 44, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 10, 10, 128, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 100, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 88, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 129, 10, 104, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 138, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 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, 154, 0, 11, 38, 44, 88, 104, 138, 155, - 156, 159, 162, 281, 292, 307, 157, 160, 163, 282, - 293, 308, 12, 13, 14, 15, 16, 17, 18, 19, + 0, 162, 0, 11, 38, 44, 88, 104, 138, 163, + 164, 167, 170, 297, 308, 323, 165, 168, 171, 298, + 309, 324, 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, 41, 42, 43, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, @@ -1369,8 +1411,8 @@ static const yytype_uint16 yystos[] = 87, 97, 98, 99, 101, 102, 103, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 130, - 131, 132, 133, 134, 135, 136, 137, 151, 152, 158, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 131, 132, 133, 134, 135, 136, 137, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 166, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, @@ -1380,14 +1422,15 @@ static const yytype_uint16 yystos[] = 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, 37, 39, 40, - 100, 129, 161, 272, 273, 274, 275, 276, 37, 45, - 46, 128, 164, 277, 278, 279, 280, 89, 90, 91, - 92, 93, 94, 95, 96, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 105, - 309, 310, 10, 10, 10, 10, 10, 10, 10, 10, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 37, 39, 40, 100, 129, 169, 288, + 289, 290, 291, 292, 37, 45, 46, 128, 172, 293, + 294, 295, 296, 89, 90, 91, 92, 93, 94, 95, + 96, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 105, 325, 326, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1401,7 +1444,8 @@ 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 }; #define yyerrok (yyerrstatus = 0) @@ -2203,15 +2247,15 @@ yyreduce: { case 10: /* Line 1792 of yacc.c */ -#line 132 "./util/configparser.y" +#line 135 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } break; - case 120: + case 128: /* Line 1792 of yacc.c */ -#line 185 "./util/configparser.y" +#line 191 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2224,9 +2268,9 @@ yyreduce: } break; - case 128: + case 136: /* Line 1792 of yacc.c */ -#line 201 "./util/configparser.y" +#line 207 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2239,9 +2283,9 @@ yyreduce: } break; - case 135: + case 143: /* Line 1792 of yacc.c */ -#line 217 "./util/configparser.y" +#line 223 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2251,9 +2295,9 @@ yyreduce: } break; - case 136: + case 144: /* Line 1792 of yacc.c */ -#line 226 "./util/configparser.y" +#line 232 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2263,9 +2307,9 @@ yyreduce: } break; - case 137: + case 145: /* Line 1792 of yacc.c */ -#line 235 "./util/configparser.y" +#line 241 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) @@ -2277,9 +2321,9 @@ yyreduce: } break; - case 138: + case 146: /* Line 1792 of yacc.c */ -#line 246 "./util/configparser.y" +#line 252 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2289,9 +2333,9 @@ yyreduce: } break; - case 139: + case 147: /* Line 1792 of yacc.c */ -#line 255 "./util/configparser.y" +#line 261 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2301,9 +2345,9 @@ yyreduce: } break; - case 140: + case 148: /* Line 1792 of yacc.c */ -#line 264 "./util/configparser.y" +#line 270 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2313,9 +2357,9 @@ yyreduce: } break; - case 141: + case 149: /* Line 1792 of yacc.c */ -#line 273 "./util/configparser.y" +#line 279 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2329,9 +2373,9 @@ yyreduce: } break; - case 142: + case 150: /* Line 1792 of yacc.c */ -#line 286 "./util/configparser.y" +#line 292 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2347,9 +2391,9 @@ yyreduce: } break; - case 143: + case 151: /* Line 1792 of yacc.c */ -#line 301 "./util/configparser.y" +#line 307 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2359,9 +2403,9 @@ yyreduce: } break; - case 144: + case 152: /* Line 1792 of yacc.c */ -#line 310 "./util/configparser.y" +#line 316 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, @@ -2371,9 +2415,9 @@ yyreduce: } break; - case 145: + case 153: /* Line 1792 of yacc.c */ -#line 319 "./util/configparser.y" +#line 325 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, @@ -2383,9 +2427,9 @@ yyreduce: } break; - case 146: + case 154: /* Line 1792 of yacc.c */ -#line 328 "./util/configparser.y" +#line 334 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2395,9 +2439,9 @@ yyreduce: } break; - case 147: + case 155: /* Line 1792 of yacc.c */ -#line 337 "./util/configparser.y" +#line 343 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2407,9 +2451,9 @@ yyreduce: } break; - case 148: + case 156: /* Line 1792 of yacc.c */ -#line 346 "./util/configparser.y" +#line 352 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2419,9 +2463,9 @@ yyreduce: } break; - case 149: + case 157: /* Line 1792 of yacc.c */ -#line 355 "./util/configparser.y" +#line 361 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2431,9 +2475,9 @@ yyreduce: } break; - case 150: + case 158: /* Line 1792 of yacc.c */ -#line 364 "./util/configparser.y" +#line 370 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2443,9 +2487,9 @@ yyreduce: } break; - case 151: + case 159: /* Line 1792 of yacc.c */ -#line 373 "./util/configparser.y" +#line 379 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2455,9 +2499,9 @@ yyreduce: } break; - case 152: + case 160: /* Line 1792 of yacc.c */ -#line 382 "./util/configparser.y" +#line 388 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2467,9 +2511,9 @@ yyreduce: } break; - case 153: + case 161: /* Line 1792 of yacc.c */ -#line 391 "./util/configparser.y" +#line 397 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2479,9 +2523,9 @@ yyreduce: } break; - case 154: + case 162: /* Line 1792 of yacc.c */ -#line 400 "./util/configparser.y" +#line 406 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2491,9 +2535,9 @@ yyreduce: } break; - case 155: + case 163: /* Line 1792 of yacc.c */ -#line 409 "./util/configparser.y" +#line 415 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->ssl_service_key); @@ -2501,9 +2545,9 @@ yyreduce: } break; - case 156: + case 164: /* Line 1792 of yacc.c */ -#line 416 "./util/configparser.y" +#line 422 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->ssl_service_pem); @@ -2511,9 +2555,9 @@ yyreduce: } break; - case 157: + case 165: /* Line 1792 of yacc.c */ -#line 423 "./util/configparser.y" +#line 429 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2523,9 +2567,9 @@ yyreduce: } break; - case 158: + case 166: /* Line 1792 of yacc.c */ -#line 432 "./util/configparser.y" +#line 438 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2535,9 +2579,9 @@ yyreduce: } break; - case 159: + case 167: /* Line 1792 of yacc.c */ -#line 441 "./util/configparser.y" +#line 447 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2552,9 +2596,9 @@ yyreduce: } break; - case 160: + case 168: /* Line 1792 of yacc.c */ -#line 455 "./util/configparser.y" +#line 461 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2564,9 +2608,9 @@ yyreduce: } break; - case 161: + case 169: /* Line 1792 of yacc.c */ -#line 464 "./util/configparser.y" +#line 470 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2576,9 +2620,9 @@ yyreduce: } break; - case 162: + case 170: /* Line 1792 of yacc.c */ -#line 473 "./util/configparser.y" +#line 479 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->chrootdir); @@ -2586,9 +2630,9 @@ yyreduce: } break; - case 163: + case 171: /* Line 1792 of yacc.c */ -#line 480 "./util/configparser.y" +#line 486 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->username); @@ -2596,9 +2640,9 @@ yyreduce: } break; - case 164: + case 172: /* Line 1792 of yacc.c */ -#line 487 "./util/configparser.y" +#line 493 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->directory); @@ -2606,9 +2650,9 @@ yyreduce: } break; - case 165: + case 173: /* Line 1792 of yacc.c */ -#line 494 "./util/configparser.y" +#line 500 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->logfile); @@ -2617,9 +2661,9 @@ yyreduce: } break; - case 166: + case 174: /* Line 1792 of yacc.c */ -#line 502 "./util/configparser.y" +#line 508 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->pidfile); @@ -2627,9 +2671,9 @@ yyreduce: } break; - case 167: + case 175: /* Line 1792 of yacc.c */ -#line 509 "./util/configparser.y" +#line 515 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str))) @@ -2637,9 +2681,9 @@ yyreduce: } break; - case 168: + case 176: /* Line 1792 of yacc.c */ -#line 516 "./util/configparser.y" +#line 522 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dlv_anchor_file); @@ -2647,9 +2691,9 @@ yyreduce: } break; - case 169: + case 177: /* Line 1792 of yacc.c */ -#line 523 "./util/configparser.y" +#line 529 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str))) @@ -2657,9 +2701,9 @@ yyreduce: } break; - case 170: + case 178: /* Line 1792 of yacc.c */ -#line 530 "./util/configparser.y" +#line 536 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2668,9 +2712,9 @@ yyreduce: } break; - case 171: + case 179: /* Line 1792 of yacc.c */ -#line 538 "./util/configparser.y" +#line 544 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2679,9 +2723,9 @@ yyreduce: } break; - case 172: + case 180: /* Line 1792 of yacc.c */ -#line 546 "./util/configparser.y" +#line 552 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -2690,9 +2734,9 @@ yyreduce: } break; - case 173: + case 181: /* Line 1792 of yacc.c */ -#line 554 "./util/configparser.y" +#line 560 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str))) @@ -2700,9 +2744,9 @@ yyreduce: } break; - case 174: + case 182: /* Line 1792 of yacc.c */ -#line 561 "./util/configparser.y" +#line 567 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str))) @@ -2710,9 +2754,9 @@ yyreduce: } break; - case 175: + case 183: /* Line 1792 of yacc.c */ -#line 568 "./util/configparser.y" +#line 574 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2722,9 +2766,9 @@ yyreduce: } break; - case 176: + case 184: /* Line 1792 of yacc.c */ -#line 577 "./util/configparser.y" +#line 583 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2734,9 +2778,9 @@ yyreduce: } break; - case 177: + case 185: /* Line 1792 of yacc.c */ -#line 586 "./util/configparser.y" +#line 592 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->identity); @@ -2744,9 +2788,9 @@ yyreduce: } break; - case 178: + case 186: /* Line 1792 of yacc.c */ -#line 593 "./util/configparser.y" +#line 599 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->version); @@ -2754,9 +2798,9 @@ yyreduce: } break; - case 179: + case 187: /* Line 1792 of yacc.c */ -#line 600 "./util/configparser.y" +#line 606 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf)) @@ -2765,9 +2809,9 @@ yyreduce: } break; - case 180: + case 188: /* Line 1792 of yacc.c */ -#line 608 "./util/configparser.y" +#line 614 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf)) @@ -2776,9 +2820,9 @@ yyreduce: } break; - case 181: + case 189: /* Line 1792 of yacc.c */ -#line 616 "./util/configparser.y" +#line 622 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2789,9 +2833,9 @@ yyreduce: } break; - case 182: + case 190: /* Line 1792 of yacc.c */ -#line 626 "./util/configparser.y" +#line 632 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2802,9 +2846,9 @@ yyreduce: } break; - case 183: + case 191: /* Line 1792 of yacc.c */ -#line 636 "./util/configparser.y" +#line 642 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2818,9 +2862,9 @@ yyreduce: } break; - case 184: + case 192: /* Line 1792 of yacc.c */ -#line 649 "./util/configparser.y" +#line 655 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2832,9 +2876,9 @@ yyreduce: } break; - case 185: + case 193: /* Line 1792 of yacc.c */ -#line 660 "./util/configparser.y" +#line 666 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size)) @@ -2843,9 +2887,9 @@ yyreduce: } break; - case 186: + case 194: /* Line 1792 of yacc.c */ -#line 668 "./util/configparser.y" +#line 674 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2859,9 +2903,9 @@ yyreduce: } break; - case 187: + case 195: /* Line 1792 of yacc.c */ -#line 681 "./util/configparser.y" +#line 687 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2871,9 +2915,9 @@ yyreduce: } break; - case 188: + case 196: /* Line 1792 of yacc.c */ -#line 690 "./util/configparser.y" +#line 696 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2883,9 +2927,9 @@ yyreduce: } break; - case 189: + case 197: /* Line 1792 of yacc.c */ -#line 699 "./util/configparser.y" +#line 705 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2895,9 +2939,9 @@ yyreduce: } break; - case 190: + case 198: /* Line 1792 of yacc.c */ -#line 708 "./util/configparser.y" +#line 714 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -2908,9 +2952,9 @@ yyreduce: } break; - case 191: + case 199: /* Line 1792 of yacc.c */ -#line 718 "./util/configparser.y" +#line 724 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size)) @@ -2919,9 +2963,9 @@ yyreduce: } break; - case 192: + case 200: /* Line 1792 of yacc.c */ -#line 726 "./util/configparser.y" +#line 732 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2935,9 +2979,9 @@ yyreduce: } break; - case 193: + case 201: /* Line 1792 of yacc.c */ -#line 739 "./util/configparser.y" +#line 745 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -2947,9 +2991,9 @@ yyreduce: } break; - case 194: + case 202: /* Line 1792 of yacc.c */ -#line 748 "./util/configparser.y" +#line 754 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " @@ -2958,9 +3002,9 @@ yyreduce: } break; - case 195: + case 203: /* Line 1792 of yacc.c */ -#line 756 "./util/configparser.y" +#line 762 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2970,9 +3014,9 @@ yyreduce: } break; - case 196: + case 204: /* Line 1792 of yacc.c */ -#line 765 "./util/configparser.y" +#line 771 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " @@ -2981,9 +3025,9 @@ yyreduce: } break; - case 197: + case 205: /* Line 1792 of yacc.c */ -#line 773 "./util/configparser.y" +#line 779 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -2997,9 +3041,9 @@ yyreduce: } break; - case 198: + case 206: /* Line 1792 of yacc.c */ -#line 786 "./util/configparser.y" +#line 792 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3009,9 +3053,9 @@ yyreduce: } break; - case 199: + case 207: /* Line 1792 of yacc.c */ -#line 795 "./util/configparser.y" +#line 801 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->target_fetch_policy); @@ -3019,9 +3063,9 @@ yyreduce: } break; - case 200: + case 208: /* Line 1792 of yacc.c */ -#line 802 "./util/configparser.y" +#line 808 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3032,9 +3076,9 @@ yyreduce: } break; - case 201: + case 209: /* Line 1792 of yacc.c */ -#line 812 "./util/configparser.y" +#line 818 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3045,9 +3089,9 @@ yyreduce: } break; - case 202: + case 210: /* Line 1792 of yacc.c */ -#line 822 "./util/configparser.y" +#line 828 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3058,9 +3102,9 @@ yyreduce: } break; - case 203: + case 211: /* Line 1792 of yacc.c */ -#line 832 "./util/configparser.y" +#line 838 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3071,9 +3115,9 @@ yyreduce: } break; - case 204: + case 212: /* Line 1792 of yacc.c */ -#line 842 "./util/configparser.y" +#line 848 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3084,9 +3128,9 @@ yyreduce: } break; - case 205: + case 213: /* Line 1792 of yacc.c */ -#line 852 "./util/configparser.y" +#line 858 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3097,9 +3141,9 @@ yyreduce: } break; - case 206: + case 214: /* Line 1792 of yacc.c */ -#line 862 "./util/configparser.y" +#line 868 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3110,9 +3154,9 @@ yyreduce: } break; - case 207: + case 215: /* Line 1792 of yacc.c */ -#line 872 "./util/configparser.y" +#line 878 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3123,9 +3167,19 @@ yyreduce: } break; - case 208: + case 216: +/* Line 1792 of yacc.c */ +#line 888 "./util/configparser.y" + { + OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[(2) - (2)].str))) + yyerror("out of memory"); + } + break; + + case 217: /* Line 1792 of yacc.c */ -#line 882 "./util/configparser.y" +#line 895 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str))) @@ -3133,9 +3187,9 @@ yyreduce: } break; - case 209: + case 218: /* Line 1792 of yacc.c */ -#line 889 "./util/configparser.y" +#line 902 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str))) @@ -3143,9 +3197,9 @@ yyreduce: } break; - case 210: + case 219: /* Line 1792 of yacc.c */ -#line 896 "./util/configparser.y" +#line 909 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3155,9 +3209,9 @@ yyreduce: } break; - case 211: + case 220: /* Line 1792 of yacc.c */ -#line 905 "./util/configparser.y" +#line 918 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3167,9 +3221,9 @@ yyreduce: } break; - case 212: + case 221: /* Line 1792 of yacc.c */ -#line 914 "./util/configparser.y" +#line 927 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3179,9 +3233,9 @@ yyreduce: } break; - case 213: + case 222: /* Line 1792 of yacc.c */ -#line 923 "./util/configparser.y" +#line 936 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str))) @@ -3189,9 +3243,9 @@ yyreduce: } break; - case 214: + case 223: /* Line 1792 of yacc.c */ -#line 930 "./util/configparser.y" +#line 943 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3202,9 +3256,9 @@ yyreduce: } break; - case 215: + case 224: /* Line 1792 of yacc.c */ -#line 940 "./util/configparser.y" +#line 953 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && @@ -3222,9 +3276,9 @@ yyreduce: } break; - case 216: + case 225: /* Line 1792 of yacc.c */ -#line 957 "./util/configparser.y" +#line 970 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->module_conf); @@ -3232,9 +3286,9 @@ yyreduce: } break; - case 217: + case 226: /* Line 1792 of yacc.c */ -#line 964 "./util/configparser.y" +#line 977 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str))); if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -3253,9 +3307,9 @@ yyreduce: } break; - case 218: + case 227: /* Line 1792 of yacc.c */ -#line 982 "./util/configparser.y" +#line 995 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str))); if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -3269,9 +3323,9 @@ yyreduce: } break; - case 219: + case 228: /* Line 1792 of yacc.c */ -#line 995 "./util/configparser.y" +#line 1008 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str))); if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -3285,9 +3339,9 @@ yyreduce: } break; - case 220: + case 229: /* Line 1792 of yacc.c */ -#line 1008 "./util/configparser.y" +#line 1021 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3297,9 +3351,21 @@ yyreduce: } break; - case 221: + case 230: /* Line 1792 of yacc.c */ -#line 1017 "./util/configparser.y" +#line 1030 "./util/configparser.y" + { + OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 231: +/* Line 1792 of yacc.c */ +#line 1039 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3309,9 +3375,9 @@ yyreduce: } break; - case 222: + case 232: /* Line 1792 of yacc.c */ -#line 1026 "./util/configparser.y" +#line 1048 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3321,9 +3387,9 @@ yyreduce: } break; - case 223: + case 233: /* Line 1792 of yacc.c */ -#line 1035 "./util/configparser.y" +#line 1057 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3334,9 +3400,9 @@ yyreduce: } break; - case 224: + case 234: /* Line 1792 of yacc.c */ -#line 1045 "./util/configparser.y" +#line 1067 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3347,9 +3413,9 @@ yyreduce: } break; - case 225: + case 235: /* Line 1792 of yacc.c */ -#line 1055 "./util/configparser.y" +#line 1077 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3359,9 +3425,9 @@ yyreduce: } break; - case 226: + case 236: /* Line 1792 of yacc.c */ -#line 1064 "./util/configparser.y" +#line 1086 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3371,9 +3437,9 @@ yyreduce: } break; - case 227: + case 237: /* Line 1792 of yacc.c */ -#line 1073 "./util/configparser.y" +#line 1095 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); @@ -3381,9 +3447,9 @@ yyreduce: } break; - case 228: + case 238: /* Line 1792 of yacc.c */ -#line 1080 "./util/configparser.y" +#line 1102 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3393,9 +3459,9 @@ yyreduce: } break; - case 229: + case 239: /* Line 1792 of yacc.c */ -#line 1089 "./util/configparser.y" +#line 1111 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3405,9 +3471,9 @@ yyreduce: } break; - case 230: + case 240: /* Line 1792 of yacc.c */ -#line 1098 "./util/configparser.y" +#line 1120 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3417,9 +3483,9 @@ yyreduce: } break; - case 231: + case 241: /* Line 1792 of yacc.c */ -#line 1107 "./util/configparser.y" +#line 1129 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size)) @@ -3428,9 +3494,9 @@ yyreduce: } break; - case 232: + case 242: /* Line 1792 of yacc.c */ -#line 1115 "./util/configparser.y" +#line 1137 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -3444,9 +3510,9 @@ yyreduce: } break; - case 233: + case 243: /* Line 1792 of yacc.c */ -#line 1128 "./util/configparser.y" +#line 1150 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size)) @@ -3455,19 +3521,20 @@ yyreduce: } break; - case 234: + case 244: /* Line 1792 of yacc.c */ -#line 1136 "./util/configparser.y" +#line 1158 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && strcmp((yyvsp[(3) - (3)].str), "redirect")!=0 && strcmp((yyvsp[(3) - (3)].str), "transparent")!=0 && strcmp((yyvsp[(3) - (3)].str), "nodefault")!=0 && strcmp((yyvsp[(3) - (3)].str), "typetransparent")!=0 && - strcmp((yyvsp[(3) - (3)].str), "inform")!=0) + strcmp((yyvsp[(3) - (3)].str), "inform")!=0 && strcmp((yyvsp[(3) - (3)].str), "inform_deny")!=0) yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " - "typetransparent, inform or nodefault"); + "typetransparent, inform, inform_deny " + "or nodefault"); else if(strcmp((yyvsp[(3) - (3)].str), "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_nodefault, (yyvsp[(2) - (3)].str))) @@ -3481,9 +3548,9 @@ yyreduce: } break; - case 235: + case 245: /* Line 1792 of yacc.c */ -#line 1159 "./util/configparser.y" +#line 1182 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str))) @@ -3491,9 +3558,9 @@ yyreduce: } break; - case 236: + case 246: /* Line 1792 of yacc.c */ -#line 1166 "./util/configparser.y" +#line 1189 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3509,9 +3576,9 @@ yyreduce: } break; - case 237: + case 247: /* Line 1792 of yacc.c */ -#line 1181 "./util/configparser.y" +#line 1204 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3522,9 +3589,9 @@ yyreduce: } break; - case 238: + case 248: /* Line 1792 of yacc.c */ -#line 1191 "./util/configparser.y" +#line 1214 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3535,9 +3602,9 @@ yyreduce: } break; - case 239: + case 249: /* Line 1792 of yacc.c */ -#line 1201 "./util/configparser.y" +#line 1224 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[(2) - (2)].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[(2) - (2)].str)); @@ -3545,9 +3612,9 @@ yyreduce: } break; - case 240: + case 250: /* Line 1792 of yacc.c */ -#line 1208 "./util/configparser.y" +#line 1231 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dns64_prefix); @@ -3555,9 +3622,9 @@ yyreduce: } break; - case 241: + case 251: /* Line 1792 of yacc.c */ -#line 1215 "./util/configparser.y" +#line 1238 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3567,9 +3634,92 @@ yyreduce: } break; - case 242: + case 252: /* Line 1792 of yacc.c */ -#line 1224 "./util/configparser.y" +#line 1247 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ratelimit = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 253: +/* Line 1792 of yacc.c */ +#line 1256 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str))); + if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ratelimit_size)) + yyerror("memory size expected"); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 254: +/* Line 1792 of yacc.c */ +#line 1264 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[(2) - (2)].str)); + if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[(2) - (2)].str)); + } + break; + + case 255: +/* Line 1792 of yacc.c */ +#line 1277 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { + yyerror("number expected"); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + ratelimit_for_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding " + "ratelimit-for-domain"); + } + } + break; + + case 256: +/* Line 1792 of yacc.c */ +#line 1290 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); + if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { + yyerror("number expected"); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + ratelimit_below_domain, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))) + fatal_exit("out of memory adding " + "ratelimit-below-domain"); + } + } + break; + + case 257: +/* Line 1792 of yacc.c */ +#line 1303 "./util/configparser.y" + { + OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 258: +/* Line 1792 of yacc.c */ +#line 1312 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->stubs->name) @@ -3580,9 +3730,9 @@ yyreduce: } break; - case 243: + case 259: /* Line 1792 of yacc.c */ -#line 1234 "./util/configparser.y" +#line 1322 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str))) @@ -3590,9 +3740,9 @@ yyreduce: } break; - case 244: + case 260: /* Line 1792 of yacc.c */ -#line 1241 "./util/configparser.y" +#line 1329 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str))) @@ -3600,9 +3750,9 @@ yyreduce: } break; - case 245: + case 261: /* Line 1792 of yacc.c */ -#line 1248 "./util/configparser.y" +#line 1336 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3612,9 +3762,9 @@ yyreduce: } break; - case 246: + case 262: /* Line 1792 of yacc.c */ -#line 1257 "./util/configparser.y" +#line 1345 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3625,9 +3775,9 @@ yyreduce: } break; - case 247: + case 263: /* Line 1792 of yacc.c */ -#line 1267 "./util/configparser.y" +#line 1355 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->forwards->name) @@ -3638,9 +3788,9 @@ yyreduce: } break; - case 248: + case 264: /* Line 1792 of yacc.c */ -#line 1277 "./util/configparser.y" +#line 1365 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str))) @@ -3648,9 +3798,9 @@ yyreduce: } break; - case 249: + case 265: /* Line 1792 of yacc.c */ -#line 1284 "./util/configparser.y" +#line 1372 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str))) @@ -3658,9 +3808,9 @@ yyreduce: } break; - case 250: + case 266: /* Line 1792 of yacc.c */ -#line 1291 "./util/configparser.y" +#line 1379 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3670,17 +3820,17 @@ yyreduce: } break; - case 251: + case 267: /* Line 1792 of yacc.c */ -#line 1300 "./util/configparser.y" +#line 1388 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } break; - case 262: + case 278: /* Line 1792 of yacc.c */ -#line 1311 "./util/configparser.y" +#line 1399 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3691,9 +3841,9 @@ yyreduce: } break; - case 263: + case 279: /* Line 1792 of yacc.c */ -#line 1321 "./util/configparser.y" +#line 1409 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -3703,9 +3853,9 @@ yyreduce: } break; - case 264: + case 280: /* Line 1792 of yacc.c */ -#line 1330 "./util/configparser.y" +#line 1418 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str))) @@ -3713,9 +3863,9 @@ yyreduce: } break; - case 265: + case 281: /* Line 1792 of yacc.c */ -#line 1337 "./util/configparser.y" +#line 1425 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3726,9 +3876,9 @@ yyreduce: } break; - case 266: + case 282: /* Line 1792 of yacc.c */ -#line 1347 "./util/configparser.y" +#line 1435 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->server_key_file); @@ -3736,9 +3886,9 @@ yyreduce: } break; - case 267: + case 283: /* Line 1792 of yacc.c */ -#line 1354 "./util/configparser.y" +#line 1442 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->server_cert_file); @@ -3746,9 +3896,9 @@ yyreduce: } break; - case 268: + case 284: /* Line 1792 of yacc.c */ -#line 1361 "./util/configparser.y" +#line 1449 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->control_key_file); @@ -3756,9 +3906,9 @@ yyreduce: } break; - case 269: + case 285: /* Line 1792 of yacc.c */ -#line 1368 "./util/configparser.y" +#line 1456 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->control_cert_file); @@ -3766,17 +3916,17 @@ yyreduce: } break; - case 270: + case 286: /* Line 1792 of yacc.c */ -#line 1375 "./util/configparser.y" +#line 1463 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } break; - case 285: + case 301: /* Line 1792 of yacc.c */ -#line 1392 "./util/configparser.y" +#line 1480 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3785,9 +3935,9 @@ yyreduce: } break; - case 286: + case 302: /* Line 1792 of yacc.c */ -#line 1400 "./util/configparser.y" +#line 1488 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_socket_path); @@ -3795,9 +3945,9 @@ yyreduce: } break; - case 287: + case 303: /* Line 1792 of yacc.c */ -#line 1407 "./util/configparser.y" +#line 1495 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3806,9 +3956,9 @@ yyreduce: } break; - case 288: + case 304: /* Line 1792 of yacc.c */ -#line 1415 "./util/configparser.y" +#line 1503 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3817,9 +3967,9 @@ yyreduce: } break; - case 289: + case 305: /* Line 1792 of yacc.c */ -#line 1423 "./util/configparser.y" +#line 1511 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_identity); @@ -3827,9 +3977,9 @@ yyreduce: } break; - case 290: + case 306: /* Line 1792 of yacc.c */ -#line 1430 "./util/configparser.y" +#line 1518 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_version); @@ -3837,9 +3987,9 @@ yyreduce: } break; - case 291: + case 307: /* Line 1792 of yacc.c */ -#line 1437 "./util/configparser.y" +#line 1525 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3849,9 +3999,9 @@ yyreduce: } break; - case 292: + case 308: /* Line 1792 of yacc.c */ -#line 1446 "./util/configparser.y" +#line 1534 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3861,9 +4011,9 @@ yyreduce: } break; - case 293: + case 309: /* Line 1792 of yacc.c */ -#line 1455 "./util/configparser.y" +#line 1543 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3873,9 +4023,9 @@ yyreduce: } break; - case 294: + case 310: /* Line 1792 of yacc.c */ -#line 1464 "./util/configparser.y" +#line 1552 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3885,9 +4035,9 @@ yyreduce: } break; - case 295: + case 311: /* Line 1792 of yacc.c */ -#line 1473 "./util/configparser.y" +#line 1561 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3897,9 +4047,9 @@ yyreduce: } break; - case 296: + case 312: /* Line 1792 of yacc.c */ -#line 1482 "./util/configparser.y" +#line 1570 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3909,17 +4059,17 @@ yyreduce: } break; - case 297: + case 313: /* Line 1792 of yacc.c */ -#line 1491 "./util/configparser.y" +#line 1579 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } break; - case 301: + case 317: /* Line 1792 of yacc.c */ -#line 1500 "./util/configparser.y" +#line 1588 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->python_script); @@ -3929,7 +4079,7 @@ yyreduce: /* Line 1792 of yacc.c */ -#line 3933 "util/configparser.c" +#line 4083 "util/configparser.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4161,7 +4311,7 @@ yyreturn: /* Line 2055 of yacc.c */ -#line 1505 "./util/configparser.y" +#line 1593 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/external/unbound/util/configparser.h b/external/unbound/util/configparser.h index a8ab6ee59..52ec99221 100644 --- a/external/unbound/util/configparser.h +++ b/external/unbound/util/configparser.h @@ -195,7 +195,15 @@ extern int yydebug; VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 404, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 405, VAR_HARDEN_ALGO_DOWNGRADE = 406, - VAR_IP_TRANSPARENT = 407 + VAR_IP_TRANSPARENT = 407, + VAR_RATELIMIT = 408, + VAR_RATELIMIT_SLABS = 409, + VAR_RATELIMIT_SIZE = 410, + VAR_RATELIMIT_FOR_DOMAIN = 411, + VAR_RATELIMIT_BELOW_DOMAIN = 412, + VAR_RATELIMIT_FACTOR = 413, + VAR_CAPS_WHITELIST = 414, + VAR_CACHE_MAX_NEGATIVE_TTL = 415 }; #endif /* Tokens. */ @@ -349,6 +357,14 @@ extern int yydebug; #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 405 #define VAR_HARDEN_ALGO_DOWNGRADE 406 #define VAR_IP_TRANSPARENT 407 +#define VAR_RATELIMIT 408 +#define VAR_RATELIMIT_SLABS 409 +#define VAR_RATELIMIT_SIZE 410 +#define VAR_RATELIMIT_FOR_DOMAIN 411 +#define VAR_RATELIMIT_BELOW_DOMAIN 412 +#define VAR_RATELIMIT_FACTOR 413 +#define VAR_CAPS_WHITELIST 414 +#define VAR_CACHE_MAX_NEGATIVE_TTL 415 @@ -362,7 +378,7 @@ typedef union YYSTYPE /* Line 2058 of yacc.c */ -#line 366 "util/configparser.h" +#line 382 "util/configparser.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/external/unbound/util/configparser.y b/external/unbound/util/configparser.y index fb94be9d4..ad7f3d292 100644 --- a/external/unbound/util/configparser.y +++ b/external/unbound/util/configparser.y @@ -119,6 +119,9 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT +%token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE +%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN VAR_RATELIMIT_FACTOR +%token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -179,7 +182,10 @@ content_server: server_num_threads | server_verbosity | server_port | server_so_reuseport | server_delay_close | server_unblock_lan_zones | server_dns64_prefix | server_dns64_synthall | server_infra_cache_min_rtt | server_harden_algo_downgrade | - server_ip_transparent + server_ip_transparent | server_ratelimit | server_ratelimit_slabs | + server_ratelimit_size | server_ratelimit_for_domain | + server_ratelimit_below_domain | server_ratelimit_factor | + server_caps_whitelist | server_cache_max_negative_ttl ; stubstart: VAR_STUB_ZONE { @@ -878,6 +884,13 @@ server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG free($2); } ; +server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG + { + OUTYY(("P(server_caps_whitelist:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, $2)) + yyerror("out of memory"); + } + ; server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG { OUTYY(("P(server_private_address:%s)\n", $2)); @@ -1013,6 +1026,15 @@ server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG free($2); } ; +server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG + { + OUTYY(("P(server_cache_max_negative_ttl:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->max_negative_ttl = atoi($2); + free($2); + } + ; server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG { OUTYY(("P(server_cache_min_ttl:%s)\n", $2)); @@ -1139,10 +1161,11 @@ server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 && strcmp($3, "typetransparent")!=0 && - strcmp($3, "inform")!=0) + strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " - "typetransparent, inform or nodefault"); + "typetransparent, inform, inform_deny " + "or nodefault"); else if(strcmp($3, "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_nodefault, $2)) @@ -1220,6 +1243,71 @@ server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG free($2); } ; +server_ratelimit: VAR_RATELIMIT STRING_ARG + { + OUTYY(("P(server_ratelimit:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ratelimit = atoi($2); + free($2); + } + ; +server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG + { + OUTYY(("P(server_ratelimit_size:%s)\n", $2)); + if(!cfg_parse_memsize($2, &cfg_parser->cfg->ratelimit_size)) + yyerror("memory size expected"); + free($2); + } + ; +server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG + { + OUTYY(("P(server_ratelimit_slabs:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->ratelimit_slabs = atoi($2); + if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) + yyerror("must be a power of 2"); + } + free($2); + } + ; +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"); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + ratelimit_for_domain, $2, $3)) + fatal_exit("out of memory adding " + "ratelimit-for-domain"); + } + } + ; +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"); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + ratelimit_below_domain, $2, $3)) + fatal_exit("out of memory adding " + "ratelimit-below-domain"); + } + } + ; +server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG + { + OUTYY(("P(server_ratelimit_factor:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->ratelimit_factor = atoi($2); + free($2); + } + ; stub_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); diff --git a/external/unbound/util/data/msgparse.h b/external/unbound/util/data/msgparse.h index 1a5ced356..44497c8ca 100644 --- a/external/unbound/util/data/msgparse.h +++ b/external/unbound/util/data/msgparse.h @@ -76,6 +76,8 @@ struct regional; extern time_t MAX_TTL; /** Minimum TTL that is allowed. */ extern time_t MIN_TTL; +/** Maximum Negative TTL that is allowed */ +extern time_t MAX_NEG_TTL; /** Negative cache time (for entries without any RRs.) */ #define NORR_TTL 5 /* seconds */ diff --git a/external/unbound/util/data/msgreply.c b/external/unbound/util/data/msgreply.c index dc27be905..b1d3df639 100644 --- a/external/unbound/util/data/msgreply.c +++ b/external/unbound/util/data/msgreply.c @@ -57,6 +57,8 @@ time_t MAX_TTL = 3600 * 24 * 10; /* ten days */ /** MIN TTL default for messages and rrsets */ time_t MIN_TTL = 0; +/** MAX Negative TTL, for SOA records in authority section */ +time_t MAX_NEG_TTL = 3600; /* one hour */ /** allocate qinfo, return 0 on error */ static int @@ -153,10 +155,23 @@ repinfo_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc, return 1; } +/** find the minimumttl in the rdata of SOA record */ +static time_t +soa_find_minttl(struct rr_parse* rr) +{ + uint16_t rlen = sldns_read_uint16(rr->ttl_data+4); + if(rlen < 20) + return 0; /* rdata too small for SOA (dname, dname, 5*32bit) */ + /* minimum TTL is the last 32bit value in the rdata of the record */ + /* at position ttl_data + 4(ttl) + 2(rdatalen) + rdatalen - 4(timeval)*/ + return (time_t)sldns_read_uint32(rr->ttl_data+6+rlen-4); +} + /** do the rdata copy */ static int rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to, - struct rr_parse* rr, time_t* rr_ttl, uint16_t type) + struct rr_parse* rr, time_t* rr_ttl, uint16_t type, + sldns_pkt_section section) { uint16_t pkt_len; const sldns_rr_descriptor* desc; @@ -165,6 +180,14 @@ rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to, /* RFC 2181 Section 8. if msb of ttl is set treat as if zero. */ if(*rr_ttl & 0x80000000U) *rr_ttl = 0; + if(type == LDNS_RR_TYPE_SOA && section == LDNS_SECTION_AUTHORITY) { + /* negative response. see if TTL of SOA record larger than the + * minimum-ttl in the rdata of the SOA record */ + if(*rr_ttl > soa_find_minttl(rr)) + *rr_ttl = soa_find_minttl(rr); + if(*rr_ttl > MAX_NEG_TTL) + *rr_ttl = MAX_NEG_TTL; + } if(*rr_ttl < MIN_TTL) *rr_ttl = MIN_TTL; if(*rr_ttl < data->ttl) @@ -254,7 +277,7 @@ parse_rr_copy(sldns_buffer* pkt, struct rrset_parse* pset, data->rr_data[i] = nextrdata; nextrdata += rr->size; if(!rdata_copy(pkt, data, data->rr_data[i], rr, - &data->rr_ttl[i], pset->type)) + &data->rr_ttl[i], pset->type, pset->section)) return 0; rr = rr->next; } @@ -265,7 +288,7 @@ parse_rr_copy(sldns_buffer* pkt, struct rrset_parse* pset, data->rr_data[i] = nextrdata; nextrdata += rr->size; if(!rdata_copy(pkt, data, data->rr_data[i], rr, - &data->rr_ttl[i], LDNS_RR_TYPE_RRSIG)) + &data->rr_ttl[i], LDNS_RR_TYPE_RRSIG, pset->section)) return 0; rr = rr->next; } diff --git a/external/unbound/util/fptr_wlist.c b/external/unbound/util/fptr_wlist.c index 5a77432c7..1397e9c13 100644 --- a/external/unbound/util/fptr_wlist.c +++ b/external/unbound/util/fptr_wlist.c @@ -210,6 +210,7 @@ fptr_whitelist_hash_sizefunc(lruhash_sizefunc_t fptr) else if(fptr == &ub_rrset_sizefunc) return 1; else if(fptr == &infra_sizefunc) return 1; else if(fptr == &key_entry_sizefunc) return 1; + else if(fptr == &rate_sizefunc) return 1; else if(fptr == &test_slabhash_sizefunc) return 1; return 0; } @@ -221,6 +222,7 @@ fptr_whitelist_hash_compfunc(lruhash_compfunc_t fptr) else if(fptr == &ub_rrset_compare) return 1; else if(fptr == &infra_compfunc) return 1; else if(fptr == &key_entry_compfunc) return 1; + else if(fptr == &rate_compfunc) return 1; else if(fptr == &test_slabhash_compfunc) return 1; return 0; } @@ -232,6 +234,7 @@ fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_t fptr) else if(fptr == &ub_rrset_key_delete) return 1; else if(fptr == &infra_delkeyfunc) return 1; else if(fptr == &key_entry_delkeyfunc) return 1; + else if(fptr == &rate_delkeyfunc) return 1; else if(fptr == &test_slabhash_delkey) return 1; return 0; } @@ -243,6 +246,7 @@ fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_t fptr) else if(fptr == &rrset_data_delete) return 1; else if(fptr == &infra_deldatafunc) return 1; else if(fptr == &key_entry_deldatafunc) return 1; + else if(fptr == &rate_deldatafunc) return 1; else if(fptr == &test_slabhash_deldata) return 1; return 0; } diff --git a/external/unbound/util/iana_ports.inc b/external/unbound/util/iana_ports.inc index 9cedc80ea..03ad2baaf 100644 --- a/external/unbound/util/iana_ports.inc +++ b/external/unbound/util/iana_ports.inc @@ -3791,7 +3791,6 @@ 4321, 4322, 4323, -4324, 4325, 4326, 4327, @@ -4015,6 +4014,7 @@ 4952, 4969, 4970, +4980, 4986, 4987, 4988, @@ -4434,6 +4434,7 @@ 6389, 6390, 6417, +6419, 6420, 6421, 6443, diff --git a/external/unbound/util/netevent.c b/external/unbound/util/netevent.c index 9f1e86952..3bb894888 100644 --- a/external/unbound/util/netevent.c +++ b/external/unbound/util/netevent.c @@ -498,12 +498,16 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, cmsg = CMSG_FIRSTHDR(&msg); if(r->srctype == 4) { #ifdef IP_PKTINFO + void* cmsg_data; msg.msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo)); log_assert(msg.msg_controllen <= sizeof(control)); cmsg->cmsg_level = IPPROTO_IP; cmsg->cmsg_type = IP_PKTINFO; memmove(CMSG_DATA(cmsg), &r->pktinfo.v4info, sizeof(struct in_pktinfo)); + /* unset the ifindex to not bypass the routing tables */ + cmsg_data = CMSG_DATA(cmsg); + ((struct in_pktinfo *) cmsg_data)->ipi_ifindex = 0; cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo)); #elif defined(IP_SENDSRCADDR) msg.msg_controllen = CMSG_SPACE(sizeof(struct in_addr)); @@ -518,12 +522,16 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, msg.msg_control = NULL; #endif /* IP_PKTINFO or IP_SENDSRCADDR */ } else if(r->srctype == 6) { + void* cmsg_data; msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo)); log_assert(msg.msg_controllen <= sizeof(control)); cmsg->cmsg_level = IPPROTO_IPV6; cmsg->cmsg_type = IPV6_PKTINFO; memmove(CMSG_DATA(cmsg), &r->pktinfo.v6info, sizeof(struct in6_pktinfo)); + /* unset the ifindex to not bypass the routing tables */ + cmsg_data = CMSG_DATA(cmsg); + ((struct in6_pktinfo *) cmsg_data)->ipi6_ifindex = 0; cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo)); } else { /* try to pass all 0 to use default route */ diff --git a/external/unbound/validator/autotrust.c b/external/unbound/validator/autotrust.c index bb5723468..d90eec9eb 100644 --- a/external/unbound/validator/autotrust.c +++ b/external/unbound/validator/autotrust.c @@ -1184,7 +1184,7 @@ void autr_write_file(struct module_env* env, struct trust_anchor* tp) verbose(VERB_ALGO, "autotrust: write to disk: %s", tempf); out = fopen(tempf, "w"); if(!out) { - log_err("could not open autotrust file for writing, %s: %s", + fatal_exit("could not open autotrust file for writing, %s: %s", tempf, strerror(errno)); return; } @@ -1192,11 +1192,11 @@ void autr_write_file(struct module_env* env, struct trust_anchor* tp) /* failed to write contents (completely) */ fclose(out); unlink(tempf); - log_err("could not completely write: %s", fname); + fatal_exit("could not completely write: %s", fname); return; } if(fclose(out) != 0) { - log_err("could not complete write: %s: %s", + fatal_exit("could not complete write: %s: %s", fname, strerror(errno)); unlink(tempf); return; @@ -1207,7 +1207,7 @@ void autr_write_file(struct module_env* env, struct trust_anchor* tp) (void)unlink(fname); /* windows does not replace file with rename() */ #endif if(rename(tempf, fname) < 0) { - log_err("rename(%s to %s): %s", tempf, fname, strerror(errno)); + fatal_exit("rename(%s to %s): %s", tempf, fname, strerror(errno)); } } diff --git a/external/unbound/validator/validator.c b/external/unbound/validator/validator.c index a02525fee..74068659f 100644 --- a/external/unbound/validator/validator.c +++ b/external/unbound/validator/validator.c @@ -519,8 +519,8 @@ validate_msg_signatures(struct module_qstate* qstate, struct module_env* env, "has failed AUTHORITY rrset:", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); errinf(qstate, reason); - errinf_rrset(qstate, s); errinf_origin(qstate, qstate->reply_origin); + errinf_rrset(qstate, s); chase_reply->security = sec_status_bogus; return 0; } @@ -1815,6 +1815,8 @@ processValidate(struct module_qstate* qstate, struct val_qstate* vq, /** * Init DLV check. + * DLV is going to be decommissioned, but the code is still here for some time. + * * Called when a query is determined by other trust anchors to be insecure * (or indeterminate). Then we look if there is a key in the DLV. * Performs aggressive negative cache check to see if there is no key. diff --git a/external/unbound/winrc/setup.nsi b/external/unbound/winrc/setup.nsi index cd9fc76df..bf47165f3 100644 --- a/external/unbound/winrc/setup.nsi +++ b/external/unbound/winrc/setup.nsi @@ -75,25 +75,6 @@ section "Root anchor - DNSSEC" SectionRootKey AddSize 2 sectionEnd -# the /o means it is not selected by default. -section /o "DLV - dlv.isc.org" SectionDLV - # add estimated size for key (Kb) - AddSize 2 - SetOutPath $INSTDIR - - # libgcc exception lib used by NSISdl plugin (in crosscompile). - File /nonfatal "/oname=$PLUGINSDIR\libgcc_s_sjlj-1.dll" "/usr/i686-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll" - - NSISdl::download "http://ftp.isc.org/www/dlv/dlv.isc.org.key" "$INSTDIR\dlv.isc.org.key" - Pop $R0 # result from Inetc::get - ${If} $R0 != "success" - MessageBox MB_OK|MB_ICONEXCLAMATION "Download error (ftp.isc.org: $R0), click OK to abort installation" /SD IDOK - SetOutPath "C:\" - RMDir "$INSTDIR" # doesnt work directory in use by us ... - Abort - ${EndIf} -sectionEnd - section "-hidden.postinstall" # copy files setOutPath $INSTDIR @@ -128,25 +109,10 @@ section "-hidden.postinstall" WriteRegStr HKLM "Software\Unbound" "RootAnchor" "" ${EndIf} - # Store DLV choice - SectionGetFlags ${SectionDLV} $R0 - IntOp $R0 $R0 & ${SF_SELECTED} - ${If} $R0 == ${SF_SELECTED} - ClearErrors - FileOpen $R1 "$INSTDIR\service.conf" a - IfErrors done_dlv - FileSeek $R1 0 END - FileWrite $R1 "$\nserver: dlv-anchor-file: $\"$INSTDIR\dlv.isc.org.key$\"$\n" - FileClose $R1 - done_dlv: - WriteRegStr HKLM "Software\Unbound" "CronAction" "$\"$INSTDIR\anchor-update.exe$\" dlv.isc.org $\"$INSTDIR\dlv.isc.org.key$\"" - ${Else} - WriteRegStr HKLM "Software\Unbound" "CronAction" "" - ${EndIf} - # store installation folder WriteRegStr HKLM "Software\Unbound" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Unbound" "ConfigFile" "$INSTDIR\service.conf" + WriteRegStr HKLM "Software\Unbound" "CronAction" "" WriteRegDWORD HKLM "Software\Unbound" "CronTime" 86400 # uninstaller @@ -177,12 +143,10 @@ sectionEnd # set section descriptions LangString DESC_unbound ${LANG_ENGLISH} "The base unbound DNS(SEC) validating caching resolver. $\r$\n$\r$\nStarted at boot from the Services control panel, logs to the Application Log, and the config file is its Program Files folder." LangString DESC_rootkey ${LANG_ENGLISH} "Set up to use the DNSSEC root trust anchor. It is automatically updated. $\r$\n$\r$\nThis provides the main key that is used for security verification." -LangString DESC_dlv ${LANG_ENGLISH} "Set up to use DLV with dlv.isc.org. Downloads the key during install. $\r$\n$\r$\nIt fetches additional public keys that are used for security verification by querying the isc.org server with names encountered." !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SectionUnbound} $(DESC_unbound) !insertmacro MUI_DESCRIPTION_TEXT ${SectionRootKey} $(DESC_rootkey) - !insertmacro MUI_DESCRIPTION_TEXT ${SectionDLV} $(DESC_dlv) !insertmacro MUI_FUNCTION_DESCRIPTION_END # setup macros for uninstall functions. @@ -214,7 +178,6 @@ section "un.Unbound" Delete "$INSTDIR\unbound-website.url" Delete "$INSTDIR\service.conf" Delete "$INSTDIR\example.conf" - Delete "$INSTDIR\dlv.isc.org.key" Delete "$INSTDIR\root.key" RMDir "$INSTDIR" |