diff --git a/Makefile.in b/Makefile.in index 51a13836b..bac212df2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -25,6 +25,7 @@ DNSTAP_SRC=@DNSTAP_SRC@ DNSTAP_OBJ=@DNSTAP_OBJ@ DNSCRYPT_SRC=@DNSCRYPT_SRC@ DNSCRYPT_OBJ=@DNSCRYPT_OBJ@ +WITH_DYNLIBMODULE=@WITH_DYNLIBMODULE@ WITH_PYTHONMODULE=@WITH_PYTHONMODULE@ WITH_PYUNBOUND=@WITH_PYUNBOUND@ PY_MAJOR_VERSION=@PY_MAJOR_VERSION@ @@ -87,6 +88,12 @@ LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=i INSTALL=$(SHELL) $(srcdir)/install-sh +DYNLIBMOD_SRC=dynlibmod/dynlibmod.c +DYNLIBMOD_OBJ=@DYNLIBMOD_OBJ@ +DYNLIBMOD_HEADER=@DYNLIBMOD_HEADER@ +DYNLIBMOD_EXTRALIBS=@DYNLIBMOD_EXTRALIBS@ + + #pythonmod.c is not here, it is mentioned by itself in its own rules, #makedepend fails on missing interface.h otherwise. PYTHONMOD_SRC=pythonmod/pythonmod_utils.c @@ -140,7 +147,7 @@ autotrust.lo val_anchor.lo rpz.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ -$(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo +$(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo @@ -333,13 +340,13 @@ libunbound.la: $(LIBUNBOUND_OBJ_LINK) $(LINK_LIB) $(UBSYMS) -o $@ $(LIBUNBOUND_OBJ_LINK) -rpath $(libdir) $(SSLLIB) $(LIBS) unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-control$(EXEEXT): $(CONTROL_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) @@ -357,34 +364,34 @@ anchor-update$(EXEEXT): $(ANCHORUPD_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ANCHORUPD_OBJ_LINK) -L. -L.libs -lunbound $(LIBS) unittest$(EXEEXT): $(UNITTEST_OBJ_LINK) - $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) testbound$(EXEEXT): $(TESTBOUND_OBJ_LINK) - $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) lock-verify$(EXEEXT): $(LOCKVERIFY_OBJ_LINK) - $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) petal$(EXEEXT): $(PETAL_OBJ_LINK) $(LINK) -o $@ $(PETAL_OBJ_LINK) $(SSLLIB) $(LIBS) pktview$(EXEEXT): $(PKTVIEW_OBJ_LINK) - $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) memstats$(EXEEXT): $(MEMSTATS_OBJ_LINK) - $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK) - $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) perf$(EXEEXT): $(PERF_OBJ_LINK) - $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) delayer$(EXEEXT): $(DELAYER_OBJ_LINK) - $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) signit$(EXEEXT): testcode/signit.c $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ -o $@ testcode/signit.c $(LDFLAGS) -lldns $(SSLLIB) $(LIBS) @@ -407,7 +414,7 @@ dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK) - $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h @@ -466,6 +473,7 @@ clean: rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h rm -f $(ALL_SRC:.c=.lint) rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py + rm -f libunbound.a rm -rf autom4te.cache .libs build doc/html doc/xml distclean: clean @@ -640,6 +648,7 @@ depend: -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \ -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \ -e 's?$$(srcdir)/ipsecmod/ipsecmod.h $$(srcdir)/ipsecmod/ipsecmod-whitelist.h?$$(IPSECMOD_HEADER)?g' \ + -e 's?$$(srcdir)/dynlibmod/dynlibmod.h?$$(DYNLIBMOD_HEADER)?g' \ -e 's!\(.*\)\.o[ :]*!\1.lo \1.o: !g' \ > $(DEPEND_TMP) cp $(DEPEND_TARGET) $(DEPEND_TMP2) @@ -807,12 +816,13 @@ modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/service $(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)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \ + $(srcdir)/validator/val_utils.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ + $(srcdir)/ipset/ipset.h $(srcdir)/dynlibmod/dynlibmod.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ @@ -897,21 +907,23 @@ authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/service $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/outside_network.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)/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)/libunbound/libworker.h \ - $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.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)/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)/libunbound/libworker.h $(srcdir)/libunbound/context.h \ + $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \ + $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \ + $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h \ + $(srcdir)/dynlibmod/dynlibmod.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 \ @@ -1119,7 +1131,32 @@ respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localz $(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 \ + $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ + $(srcdir)/util/locks.h $(srcdir)/dnstap/dnstap.h \ + dnstap/dnstap.pb-c.h +dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ + +dynlibmod.lo dynlibmod.o: $(srcdir)/dynlibmod/dynlibmod.c config.h $(srcdir)/dynlibmod/dynlibmod.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/rbtree.h\ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h +dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ + $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/storage/lookup3.h ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h +ipset.lo ipset.o: $(srcdir)/ipset/ipset.c config.h $(srcdir)/ipset/ipset.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/regional.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ diff --git a/config.h.in b/config.h.in index bd9b38bc0..aa3e6665b 100644 --- a/config.h.in +++ b/config.h.in @@ -866,6 +866,9 @@ /* the version of the windows API enabled */ #undef WINVER +/* Define if you want dynlib module. */ +#undef WITH_DYNLIBMODULE + /* Define if you want Python module. */ #undef WITH_PYTHONMODULE diff --git a/configure b/configure index fb1ce374e..6c3e695fa 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.10.1. +# Generated by GNU Autoconf 2.69 for unbound 1.10.2. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.10.1' -PACKAGE_STRING='unbound 1.10.1' +PACKAGE_VERSION='1.10.2' +PACKAGE_STRING='unbound 1.10.2' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -700,6 +700,10 @@ PYTHON_LDFLAGS PYTHON_CPPFLAGS PYTHON PYTHON_VERSION +DYNLIBMOD_EXTRALIBS +DYNLIBMOD_HEADER +DYNLIBMOD_OBJ +WITH_DYNLIBMODULE PTHREAD_CFLAGS_ONLY PTHREAD_CFLAGS PTHREAD_LIBS @@ -856,6 +860,7 @@ enable_alloc_nonregional with_pthreads with_solaris_threads with_syslog_facility +with_dynlibmodule with_pyunbound with_pythonmodule enable_swig_version_check @@ -1453,7 +1458,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.10.1 to adapt to many kinds of systems. +\`configure' configures unbound 1.10.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1518,7 +1523,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.10.1:";; + short | recursive ) echo "Configuration of unbound 1.10.2:";; esac cat <<\_ACEOF @@ -1618,6 +1623,8 @@ Optional Packages: --with-solaris-threads use solaris native thread library. --with-syslog-facility=LOCAL0 - LOCAL7 set SYSLOG_FACILITY, default DAEMON + --with-dynlibmodule build dynamic library module, or + --without-dynlibmodule to disable it. (default=no) --with-pyunbound build PyUnbound, or --without-pyunbound to skip it. (default=no) --with-pythonmodule build Python module, or --without-pythonmodule to @@ -1743,7 +1750,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.10.1 +unbound configure 1.10.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2452,7 +2459,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.10.1, which was +It was created by unbound $as_me 1.10.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2804,11 +2811,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=10 -UNBOUND_VERSION_MICRO=1 +UNBOUND_VERSION_MICRO=2 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=8 +LIBUNBOUND_REVISION=9 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2884,6 +2891,7 @@ LIBUNBOUND_AGE=1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 +# 1.10.2 had 9:9:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -17188,6 +17196,34 @@ cat >>confdefs.h <<_ACEOF _ACEOF +# Check for dynamic library module + +# Check whether --with-dynlibmodule was given. +if test "${with_dynlibmodule+set}" = set; then : + withval=$with_dynlibmodule; +else + withval="no" +fi + + +if test x_$withval != x_no; then + +$as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h + + WITH_DYNLIBMODULE=yes + + DYNLIBMOD_OBJ="dynlibmod.lo" + + DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' + + if test $on_mingw = "no"; then + DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + else + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + fi + +fi + # Check for PyUnbound # Check whether --with-pyunbound was given. @@ -21583,7 +21619,7 @@ _ACEOF -version=1.10.1 +version=1.10.2 date=`date +'%b %e, %Y'` @@ -22102,7 +22138,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.10.1, which was +This file was extended by unbound $as_me 1.10.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22168,7 +22204,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.10.1 +unbound config.status 1.10.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index f96a24ef2..d1f7998e2 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[10]) -m4_define([VERSION_MICRO],[1]) +m4_define([VERSION_MICRO],[2]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=8 +LIBUNBOUND_REVISION=9 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -94,6 +94,7 @@ LIBUNBOUND_AGE=1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 +# 1.10.2 had 9:9:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -627,6 +628,28 @@ case "${UNBOUND_SYSLOG_FACILITY}" in esac AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON]) +# Check for dynamic library module +AC_ARG_WITH(dynlibmodule, + AC_HELP_STRING([--with-dynlibmodule], + [build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]), + [], [ withval="no" ]) + +if test x_$withval != x_no; then + AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.]) + WITH_DYNLIBMODULE=yes + AC_SUBST(WITH_DYNLIBMODULE) + DYNLIBMOD_OBJ="dynlibmod.lo" + AC_SUBST(DYNLIBMOD_OBJ) + DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' + AC_SUBST(DYNLIBMOD_HEADER) + if test $on_mingw = "no"; then + DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + else + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + fi + AC_SUBST(DYNLIBMOD_EXTRALIBS) +fi + # Check for PyUnbound AC_ARG_WITH(pyunbound, AC_HELP_STRING([--with-pyunbound], diff --git a/contrib/aaaa-filter-iterator.patch b/contrib/aaaa-filter-iterator.patch index b5c526822..9881bde89 100644 --- a/contrib/aaaa-filter-iterator.patch +++ b/contrib/aaaa-filter-iterator.patch @@ -13,9 +13,9 @@ Index: trunk/doc/unbound.conf.5.in +This also causes an additional A query to be sent for each AAAA query. +This breaks DNSSEC! +.TP - .B private\-address: \fI - Give IPv4 of IPv6 addresses or classless subnets. These are addresses - on your private network, and are not allowed to be returned for + .B aggressive\-nsec: \fI + Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN + and other denials, using information from previous NXDOMAINs answers. Index: trunk/iterator/iter_scrub.c =================================================================== --- trunk/iterator/iter_scrub.c (revision 4357) @@ -125,7 +125,7 @@ Index: trunk/iterator/iterator.c + * ASN: This event state was added as an intermediary step between + * QUERYTARGETS_STATE and the next step, in order to cast a subquery for the + * purpose of caching A records for the queried name. -+ * ++ * + * @param qstate: query state. + * @param iq: iterator query state. + * @param ie: iterator shared global environment. @@ -147,9 +147,9 @@ Index: trunk/iterator/iterator.c + + /* re-throw same query, but with a different type */ + if(!generate_sub_request(iq->qchase.qname, -+ iq->qchase.qname_len, LDNS_RR_TYPE_A, ++ iq->qchase.qname_len, LDNS_RR_TYPE_A, + iq->qchase.qclass, qstate, id, iq, -+ INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { ++ INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { + log_nametypeclass(VERB_ALGO, "ASN-AAAA-filter: failed " + "preloading of A record for", + iq->qchase.qname, LDNS_RR_TYPE_A, @@ -188,7 +188,7 @@ Index: trunk/iterator/iterator.c return 0; } -+/** ++/** + * ASN: Do final processing on responses to A queries originated from AAAA + * queries. Events reach this state after the iterative resolution algorithm + * terminates. diff --git a/contrib/libunbound.pc.in b/contrib/libunbound.pc.in index 1442ed523..453bf7d4f 100644 --- a/contrib/libunbound.pc.in +++ b/contrib/libunbound.pc.in @@ -7,8 +7,7 @@ Name: unbound Description: Library with validating, recursive, and caching DNS resolver URL: http://www.unbound.net Version: @PACKAGE_VERSION@ -Requires: @PC_CRYPTO_DEPENDENCY@ @PC_LIBEVENT_DEPENDENCY@ -Requires.private: @PC_PY_DEPENDENCY@ @PC_LIBBSD_DEPENDENCY@ +Requires.private: @PC_PY_DEPENDENCY@ @PC_LIBBSD_DEPENDENCY@ @PC_CRYPTO_DEPENDENCY@ @PC_LIBEVENT_DEPENDENCY@ Libs: -L${libdir} -lunbound Libs.private: @SSLLIB@ @LIBS@ Cflags: -I${includedir} diff --git a/daemon/remote.c b/daemon/remote.c index b399735c9..aa263d074 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -804,6 +804,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, size_t dnscrypt_shared_secret = 0; size_t dnscrypt_nonce = 0; #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + size_t dynlib = 0; +#endif /* WITH_DYNLIBMODULE */ msg = slabhash_get_mem(daemon->env->msg_cache); rrset = slabhash_get_mem(&daemon->env->rrset_cache->table); val = mod_get_mem(&worker->env, "validator"); @@ -822,6 +825,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, dnscrypt_nonce = slabhash_get_mem(daemon->dnscenv->nonces_cache); } #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + dynlib = mod_get_mem(&worker->env, "dynlib"); +#endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset)) return 0; @@ -849,6 +855,10 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, dnscrypt_nonce)) return 0; #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + if(!print_longnum(ssl, "mem.mod.dynlibmod"SQ, dynlib)) + return 0; +#endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.streamwait"SQ, (size_t)s->svr.mem_stream_wait)) return 0; diff --git a/doc/Changelog b/doc/Changelog index 1154f0eb5..00d2ecfcf 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,57 @@ +17 June 2020: Wouter + - Fix default explanation in man page for qname-minimisation-strict. + - Fix display of event loop method with libev. + +8 June 2020: Wouter + - Mention tls name possible when tls is enabled for stub-addr in the + man page. + +27 May 2020: George + - Merge PR #241 by Robert Edmonds: contrib/libunbound.pc.in: Do not use + "Requires:". + +25 May 2020: George + - Update contrib/aaaa-filter-iterator.patch for the recent + generate_sub_request() change and to apply cleanly. + +21 May 2020: George + - Fix for integer overflow when printing RDF_TYPE_TIME. + +19 May 2020: Wouter + - CVE-2020-12662 Unbound can be tricked into amplifying an incoming + query into a large number of queries directed to a target. + - CVE-2020-12663 Malformed answers from upstream name servers can be + used to make Unbound unresponsive. + - Release 1.10.1 is 1.10.0 with fixes, code repository continues, + including those fixes, towards the next release. Configure has + version 1.10.2 version number in it. + - For PR #93: windows compile warnings removal + - windows compile warnings removal for ip dscp option code. + - For PR #93: unit test for dynlib module. + +18 May 2020: Wouter + - For PR #93: dynlibmod can handle reloads and deinit and inits again, + with dlclose and dlopen of the library again. Also for multiple + modules. Fix memory leak by not closing dlopened content. Fix + to allow one dynlibmod instance by unbound-checkconf. + - For PR #93: checkconf allows multiple dynlib in module-config, for + a couple cases. + - For PR #93: checkconf allows python dynlib in module-config, for + a couple cases. + - For PR #93: man page spelling reference fix. + - For PR #93: fix link of other executables for dynlibmod dependency. + +15 May 2020: Wouter + - Merge PR #93: Add dynamic library support. + - Fixed conflicts for PR #93 and make configure, yacc, lex. + - For PR #93: Fix warnings for dynlibmodule. + +15 May 2020: Ralph + - Cache ECS answers with longest scope of CNAME chain. + +22 April 2020: George + - Explicitly use 'rrset-roundrobin: no' for test cases. + 21 April 2020: Wouter - Merge #225 from akhait: KSK-2010 has been revoked. It removes the KSK-2010 from the default list in unbound-anchor, now that the diff --git a/doc/example.conf.in b/doc/example.conf.in index 2e1db9181..4c9039c49 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -862,6 +862,17 @@ python: # Script file to load # python-script: "@UNBOUND_SHARE_DIR@/ubmodule-tst.py" +# Dynamic library config section. To enable: +# o use --with-dynlibmodule to configure before compiling. +# o list dynlib in the module-config string (above) to enable. +# It can be placed anywhere, the dynlib module is only a very thin wrapper +# to load modules dynamically. +# o and give a dynlib-file to run. If more than one dynlib entry is listed in +# the module-config then you need one dynlib-file per instance. +dynlib: + # Script file to load + # dynlib-file: "@UNBOUND_SHARE_DIR@/dynlib.so" + # Remote control config section. remote-control: # Enable remote control with unbound-control(8) here. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index e178238e4..f4363aa0c 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -870,7 +870,7 @@ NXDOMAIN from a DNSSEC signed zone. Default is yes. QNAME minimisation in strict mode. Do not fall-back to sending full QNAME to potentially broken nameservers. A lot of domains will not be resolvable when this option in enabled. Only use if you know what you are doing. -This option only has effect when qname-minimisation is enabled. Default is off. +This option only has effect when qname-minimisation is enabled. Default is no. .TP .B aggressive\-nsec: \fI Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN @@ -969,7 +969,9 @@ EDNS client subnet support the default is "subnetcache validator iterator". Most modules that need to be listed here have to be listed at the beginning of the line. The cachedb module has to be listed just before the iterator. The python module can be listed in different places, it then processes the -output of the module it is just before. +output of the module it is just before. The dynlib module can be listed pretty +much anywhere, it is only a very thin wrapper that allows dynamic libraries to +run in its place. .TP .B trust\-anchor\-file: \fI File with trusted keys for validation. Both DS and DNSKEY entries can appear @@ -1618,6 +1620,9 @@ Name of stub zone nameserver. Is itself resolved before it is used. .B stub\-addr: \fI IP address of stub zone nameserver. Can be IP 4 or IP 6. To use a nondefault port for DNS communication append '@' with the port number. +If tls is enabled, then you can append a '#' and a name, then it'll check +the tls authentication certificates with that name. If you combine +the '@' and '#', the '@' comes first. .TP .B stub\-prime: \fI This option is by default no. If enabled it performs NS set priming, @@ -1836,6 +1841,24 @@ directory. .B python\-script: \fI\fR The script file to load. Repeat this option for every python module instance added to the \fBmodule\-config:\fR option. +.SS "Dynamic Library Module Options" +.LP +The +.B dynlib: +clause gives the settings for the \fIdynlib\fR module. This module is only +a very small wrapper that allows dynamic modules to be loaded on runtime +instead of being compiled into the application. To enable the dynlib module it +has to be compiled into the daemon, and the word "dynlib" has to be put in the +\fBmodule\-config:\fR option. Multiple instances of dynamic libraries are +supported by adding the word "dynlib" more than once. +.LP +The \fBdynlib\-file:\fR path should be specified as an absolute path relative +to the new path set by \fBchroot:\fR option, or as a relative path to the +working directory. +.TP +.B dynlib\-file: \fI\fR +The dynamic library file to load. Repeat this option for every dynlib module +instance added to the \fBmodule\-config:\fR option. .SS "DNS64 Module Options" .LP The dns64 module must be configured in the \fBmodule\-config:\fR "dns64 diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c new file mode 100644 index 000000000..09b6cd40f --- /dev/null +++ b/dynlibmod/dynlibmod.c @@ -0,0 +1,295 @@ +#include "config.h" +#include "util/module.h" +#include "util/config_file.h" +#include "dynlibmod/dynlibmod.h" + +#if HAVE_WINDOWS_H +#include +#define __DYNMOD HMODULE +#define __DYNSYM FARPROC +#define __LOADSYM GetProcAddress +void log_dlerror() { + DWORD dwLastError = GetLastError(); + LPSTR MessageBuffer; + DWORD dwBufferLength; + DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM ; + if((dwBufferLength = FormatMessageA( + dwFormatFlags, + NULL, // module to get message from (NULL == system) + dwLastError, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language + (LPSTR) &MessageBuffer, + 0, + NULL + ))) + { + log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); + LocalFree(MessageBuffer); + } + +} + +HMODULE open_library(const char* fname) { + return LoadLibrary(fname); +} + +void close_library(const char* fname, __DYNMOD handle) { + (void)fname; + (void)handle; +} +#else +#include +#define __DYNMOD void* +#define __DYNSYM void* +#define __LOADSYM dlsym +void log_dlerror() { + log_err("dynlibmod: %s", dlerror()); +} + +void* open_library(const char* fname) { + return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); +} + +void close_library(const char* fname, __DYNMOD handle) { + if(!handle) return; + if(dlclose(handle) != 0) { + log_err("dlclose %s: %s", fname, strerror(errno)); + } +} +#endif + +/** module counter for multiple dynlib modules */ +static int dynlib_mod_count = 0; + +/** dynlib module init */ +int dynlibmod_init(struct module_env* env, int id) { + int dynlib_mod_idx = dynlib_mod_count++; + struct config_strlist* cfg_item = env->cfg->dynlib_file; + struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); + __DYNMOD dynamic_library; + if (!de) + { + log_err("dynlibmod[%d]: malloc failure", dynlib_mod_idx); + return 0; + } + + env->modinfo[id] = (void*) de; + + de->fname = NULL; + for(int i = dynlib_mod_idx; + i != 0 && cfg_item != NULL; + i--, cfg_item = cfg_item->next) {} + + if (cfg_item == NULL || cfg_item->str == NULL || cfg_item->str[0] == 0) { + log_err("dynlibmod[%d]: no dynamic library given.", dynlib_mod_idx); + return 0; + } else { + de->fname = cfg_item->str; + } + verbose(VERB_ALGO, "dynlibmod[%d]: Trying to load library %s", dynlib_mod_idx, de->fname); + dynamic_library = open_library(de->fname); + de->dynamic_library = (void*)dynamic_library; + if (dynamic_library == NULL) { + log_dlerror(); + log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname); + return 0; + } else { + __DYNSYM initializer; + __DYNSYM deinitializer; + __DYNSYM operate; + __DYNSYM inform; + __DYNSYM clear; + __DYNSYM get_mem; + initializer = __LOADSYM(dynamic_library,"init"); + if (initializer == NULL) { + log_dlerror(); + log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); + return 0; + } else { + de->func_init = (func_init_t)(void*)initializer; + } + deinitializer = __LOADSYM(dynamic_library,"deinit"); + if (deinitializer == NULL) { + log_dlerror(); + log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); + return 0; + } else { + de->func_deinit = (func_deinit_t)(void*)deinitializer; + } + operate = __LOADSYM(dynamic_library,"operate"); + if (operate == NULL) { + log_dlerror(); + log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); + return 0; + } else { + de->func_operate = (func_operate_t)(void*)operate; + } + inform = __LOADSYM(dynamic_library,"inform_super"); + if (inform == NULL) { + log_dlerror(); + log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); + return 0; + } else { + de->func_inform = (func_inform_t)(void*)inform; + } + clear = __LOADSYM(dynamic_library,"clear"); + if (clear == NULL) { + log_dlerror(); + log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); + return 0; + } else { + de->func_clear = (func_clear_t)(void*)clear; + } + get_mem = __LOADSYM(dynamic_library,"get_mem"); + if (get_mem == NULL) { + log_dlerror(); + log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); + return 0; + } else { + de->func_get_mem = (func_get_mem_t)(void*)get_mem; + } + } + de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped; + de->inplace_cb_register_wrapped = &inplace_cb_register_wrapped; + return de->func_init(env, id); +} + +/** dynlib module deinit */ +void dynlibmod_deinit(struct module_env* env, int id) { + struct dynlibmod_env* de = env->modinfo[id]; + if(de == NULL) + return; + de->func_deinit(env, id); + close_library(de->fname, (__DYNMOD)de->dynamic_library); + dynlib_mod_count--; + de->fname = NULL; + free(de); +} + +/** dynlib module operate on a query */ +void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* outbound) { + struct dynlibmod_env* de = qstate->env->modinfo[id]; + + de->func_operate(qstate, event, id, outbound); +} + +/** dynlib module */ +void dynlibmod_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super) { + struct dynlibmod_env* de = qstate->env->modinfo[id]; + + de->func_inform(qstate, id, super); +} + +/** dynlib module cleanup query state */ +void dynlibmod_clear(struct module_qstate* qstate, int id) { + struct dynlibmod_env* de = qstate->env->modinfo[id]; + + de->func_clear(qstate, id); +} + +/** dynlib module alloc size routine */ +size_t dynlibmod_get_mem(struct module_env* env, int id) { + struct dynlibmod_env* de = (struct dynlibmod_env*)env->modinfo[id]; + size_t size; + verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de); + if(!de) + return 0; + + size = de->func_get_mem(env, id); + return size + sizeof(*de); +} + +int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback) { + struct cb_pair* cb_pair = (struct cb_pair*) callback; + return ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, + struct module_qstate* qstate, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, + int id, void* callback) { + struct cb_pair* cb_pair = (struct cb_pair*) callback; + return ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, + int id, void* cb_args) { + struct cb_pair* cb_pair = (struct cb_pair*) cb_args; + return ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_query_response(struct module_qstate* qstate, + struct dns_msg* response, int id, void* cb_args) { + struct cb_pair* cb_pair = (struct cb_pair*) cb_args; + return ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg); +} + +int +inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg, + struct module_env* env, int id) { + struct cb_pair* cb_pair = malloc(sizeof(struct cb_pair)); + cb_pair->cb = cb; + cb_pair->cb_arg = cbarg; + if(type >= inplace_cb_reply && type <= inplace_cb_reply_servfail) { + return inplace_cb_register(&dynlib_inplace_cb_reply_generic, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_query) { + return inplace_cb_register(&dynlib_inplace_cb_query_generic, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_query_response) { + return inplace_cb_register(&dynlib_inplace_cb_query_response, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_edns_back_parsed) { + return inplace_cb_register(&dynlib_inplace_cb_edns_back_parsed, type, (void*) cb_pair, env, id); + } else { + return 0; + } +} + +void +inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type, + int id) { + struct inplace_cb* temp = env->inplace_cb_lists[type]; + struct inplace_cb* prev = NULL; + + while(temp) { + if(temp->id == id) { + if(!prev) { + env->inplace_cb_lists[type] = temp->next; + free(temp->cb_arg); + free(temp); + temp = env->inplace_cb_lists[type]; + } + else { + prev->next = temp->next; + free(temp->cb_arg); + free(temp); + temp = prev->next; + } + } + else { + prev = temp; + temp = temp->next; + } + } +} + + +/** + * The module function block + */ +static struct module_func_block dynlibmod_block = { + "dynlib", + &dynlibmod_init, &dynlibmod_deinit, &dynlibmod_operate, &dynlibmod_inform_super, + &dynlibmod_clear, &dynlibmod_get_mem +}; + +struct module_func_block* dynlibmod_get_funcblock(void) +{ + return &dynlibmod_block; +} diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h new file mode 100644 index 000000000..c34cf0e88 --- /dev/null +++ b/dynlibmod/dynlibmod.h @@ -0,0 +1,139 @@ +/* + * dynlibmod.h: module header file + * + * Copyright (c) 2019, Peter Munch-Ellingsen (peterme AT peterme.net) + * + * This software is open source. + * + * 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 REGENTS 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. + */ +/** + * \file + * Dynamic loading module for unbound. Loads dynamic library. + */ +#ifndef DYNLIBMOD_H +#define DYNLIBMOD_H +#include "util/module.h" +#include "services/outbound_list.h" + +/** + * Get the module function block. + * @return: function block with function pointers to module methods. + */ +struct module_func_block* dynlibmod_get_funcblock(void); + +/** dynlib module init */ +int dynlibmod_init(struct module_env* env, int id); + +/** dynlib module deinit */ +void dynlibmod_deinit(struct module_env* env, int id); + +/** dynlib module operate on a query */ +void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* outbound); + +/** dynlib module */ +void dynlibmod_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super); + +/** dynlib module cleanup query state */ +void dynlibmod_clear(struct module_qstate* qstate, int id); + +/** dynlib module alloc size routine */ +size_t dynlibmod_get_mem(struct module_env* env, int id); + +int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback); + +int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, + struct module_qstate* qstate, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, + int id, void* callback); + +int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, + int id, void* cb_args); + +int dynlib_inplace_cb_query_response(struct module_qstate* qstate, + struct dns_msg* response, int id, void* cb_args); + +int +inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg, + struct module_env* env, int id); + +void +inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type, + int id); + +struct cb_pair { + void *cb; + void *cb_arg; +}; + +/** + * Global state for the module. + */ + +typedef int (*func_init_t)(struct module_env*, int); +typedef void (*func_deinit_t)(struct module_env*, int); +typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); +typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); +typedef void (*func_clear_t)(struct module_qstate*, int); +typedef size_t (*func_get_mem_t)(struct module_env*, int); +typedef void (*inplace_cb_delete_wrapped_t)(struct module_env*, enum inplace_cb_list_type, int); +typedef int (*inplace_cb_register_wrapped_t)(void*, enum inplace_cb_list_type, void*, struct module_env*, int); + + +struct dynlibmod_env { + /** Dynamic library filename. */ + const char* fname; + /** dynamic library handle */ + void* dynamic_library; + /** Module init function */ + func_init_t func_init; + /** Module deinit function */ + func_deinit_t func_deinit; + /** Module operate function */ + func_operate_t func_operate; + /** Module super_inform function */ + func_inform_t func_inform; + /** Module clear function */ + func_clear_t func_clear; + /** Module get_mem function */ + func_get_mem_t func_get_mem; + /** Wrapped inplace callback functions to circumvent callback whitelisting */ + inplace_cb_delete_wrapped_t inplace_cb_delete_wrapped; + inplace_cb_register_wrapped_t inplace_cb_register_wrapped; + /** Pointer to any data the dynamic library might want to keep */ + void *dyn_env; +}; + + +#endif /* DYNLIBMOD_H */ diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c new file mode 100644 index 000000000..2ec50223e --- /dev/null +++ b/dynlibmod/examples/helloworld.c @@ -0,0 +1,128 @@ +/* + * This is an example to show how dynamic libraries can be made to work with + * unbound. To build a .so file simply run: + * gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c + * And to build for windows, first make unbound with the --with-dynlibmod + * switch, then use this command: + * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic + * -o helloworld.dll helloworld.c -L../.. -l:libunbound.a + * to cross-compile a 64-bit Windows DLL. + */ + +#include "../../config.h" +#include "../../util/module.h" +#include "../../sldns/parseutil.h" +#include "../dynlibmod.h" + +/* Declare the EXPORT macro that expands to exporting the symbol for DLLs when + * compiling for Windows. All procedures marked with EXPORT in this example are + * called directly by the dynlib module and must be present for the module to + * load correctly. */ +#ifdef HAVE_WINDOWS_H +#define EXPORT __declspec(dllexport) +#else +#define EXPORT +#endif + +/* Forward declare a callback, implemented at the bottom of this file */ +int reply_callback(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback); + +/* Init is called when the module is first loaded. It should be used to set up + * the environment for this module and do any other initialisation required. */ +EXPORT int init(struct module_env* env, int id) { + log_info("dynlib: hello world from init"); + struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; + de->inplace_cb_register_wrapped(&reply_callback, + inplace_cb_reply, + NULL, env, id); + struct dynlibmod_env* local_env = env->modinfo[id]; + local_env->dyn_env = NULL; + return 1; +} + +/* Deinit is run as the program is shutting down. It should be used to clean up + * the environment and any left over data. */ +EXPORT void deinit(struct module_env* env, int id) { + log_info("dynlib: hello world from deinit"); + struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; + de->inplace_cb_delete_wrapped(env, inplace_cb_reply, id); + if (de->dyn_env != NULL) free(de->dyn_env); +} + +/* Operate is called every time a query passes by this module. The event can be + * used to determine which direction in the module chain it came from. */ +EXPORT void operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* entry) { + log_info("dynlib: hello world from operate"); + log_info("dynlib: incoming query: %s %s(%d) %s(%d)", + qstate->qinfo.qname, + sldns_lookup_by_id(sldns_rr_classes, qstate->qinfo.qclass)->name, + qstate->qinfo.qclass, + sldns_rr_descript(qstate->qinfo.qtype)->_name, + qstate->qinfo.qtype); + if (event == module_event_new || event == module_event_pass) { + qstate->ext_state[id] = module_wait_module; + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env == NULL) { + env->dyn_env = calloc(3, sizeof(int)); + ((int *)env->dyn_env)[0] = 42; + ((int *)env->dyn_env)[1] = 102; + ((int *)env->dyn_env)[2] = 192; + } else { + log_err("dynlib: already has data!"); + qstate->ext_state[id] = module_error; + } + } else if (event == module_event_moddone) { + qstate->ext_state[id] = module_finished; + } else { + qstate->ext_state[id] = module_error; + } +} + +/* Inform super is called when a query is completed or errors out, but only if + * a sub-query has been registered to it by this module. Look at + * mesh_attach_sub in services/mesh.h to see how this is done. */ +EXPORT void inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super) { + log_info("dynlib: hello world from inform_super"); +} + +/* Clear is called once a query is complete and the response has been sent + * back. It is used to clear up any per-query allocations. */ +EXPORT void clear(struct module_qstate* qstate, int id) { + log_info("dynlib: hello world from clear"); + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env != NULL) { + free(env->dyn_env); + env->dyn_env = NULL; + } +} + +/* Get mem is called when Unbound is printing performance information. This + * only happens explicitly and is only used to show memory usage to the user. */ +EXPORT size_t get_mem(struct module_env* env, int id) { + log_info("dynlib: hello world from get_mem"); + return 0; +} + +/* The callback that was forward declared earlier. It is registered in the init + * procedure to run when a query is being replied to. */ +int reply_callback(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback) { + log_info("dynlib: hello world from callback"); + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env != NULL) { + log_info("dynlib: numbers gotten from query: %d, %d, and %d", + ((int *)env->dyn_env)[0], + ((int *)env->dyn_env)[1], + ((int *)env->dyn_env)[2]); + } + return 0; +} diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index 37dc550cd..f1b401b90 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -386,8 +386,7 @@ update_cache(struct module_qstate *qstate, int id) rep->flags |= (BIT_RA | BIT_QR); /* fix flags to be sensible for */ rep->flags &= ~(BIT_AA | BIT_CD);/* a reply based on the cache */ addrtree_insert(tree, (addrkey_t*)edns->subnet_addr, - edns->subnet_source_mask, - sq->ecs_server_in.subnet_scope_mask, rep, + edns->subnet_source_mask, sq->max_scope, rep, rep->ttl, *qstate->env->now); lock_rw_unlock(&lru_entry->lock); @@ -543,7 +542,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) c_out->subnet_addr_fam = c_in->subnet_addr_fam; c_out->subnet_source_mask = c_in->subnet_source_mask; memcpy(&c_out->subnet_addr, &c_in->subnet_addr, INET6_SIZE); - c_out->subnet_scope_mask = s_in->subnet_scope_mask; + c_out->subnet_scope_mask = sq->max_scope; /* Limit scope returned to client to scope used for caching. */ if(c_out->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) { if(c_out->subnet_scope_mask > @@ -648,6 +647,19 @@ ecs_query_response(struct module_qstate* qstate, struct dns_msg* response, qstate->env->cfg->client_subnet_opcode); sq->subnet_sent = 0; memset(&sq->ecs_server_out, 0, sizeof(sq->ecs_server_out)); + } else if (!sq->track_max_scope && + FLAGS_GET_RCODE(response->rep->flags) == LDNS_RCODE_NOERROR && + response->rep->an_numrrsets > 0 + ) { + struct ub_packed_rrset_key* s = response->rep->rrsets[0]; + if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && + query_dname_compare(qstate->qinfo.qname, + s->rk.dname) == 0) { + /* CNAME response for QNAME. From now on keep track of + * longest received ECS prefix for all queries on this + * qstate. */ + sq->track_max_scope = 1; + } } return 1; } @@ -663,16 +675,19 @@ ecs_edns_back_parsed(struct module_qstate* qstate, int id, return 1; if((ecs_opt = edns_opt_list_find( qstate->edns_opts_back_in, - qstate->env->cfg->client_subnet_opcode))) { - if(parse_subnet_option(ecs_opt, &sq->ecs_server_in) && - sq->subnet_sent && - sq->ecs_server_in.subnet_validdata) + qstate->env->cfg->client_subnet_opcode)) && + parse_subnet_option(ecs_opt, &sq->ecs_server_in) && + sq->subnet_sent && sq->ecs_server_in.subnet_validdata) { /* Only skip global cache store if we sent an ECS option * and received one back. Answers from non-whitelisted * servers will end up in global cache. Answers for * queries with 0 source will not (unless nameserver * does not support ECS). */ qstate->no_cache_store = 1; + if(!sq->track_max_scope || (sq->track_max_scope && + sq->ecs_server_in.subnet_scope_mask > + sq->max_scope)) + sq->max_scope = sq->ecs_server_in.subnet_scope_mask; } return 1; diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h index e408627b0..27ba2ee74 100644 --- a/edns-subnet/subnetmod.h +++ b/edns-subnet/subnetmod.h @@ -45,6 +45,7 @@ #include "util/alloc.h" #include "util/net_help.h" #include "util/storage/slabhash.h" +#include "util/data/dname.h" #include "edns-subnet/addrtree.h" #include "edns-subnet/edns-subnet.h" @@ -83,6 +84,12 @@ struct subnet_qstate { struct ecs_data ecs_server_out; int subnet_downstream; int subnet_sent; + /** keep track of longest received scope, set after receiving CNAME for + * incoming QNAME. */ + int track_max_scope; + /** longest received scope mask since track_max_scope is set. This value + * is used for caching and answereing to client. */ + uint8_t max_scope; /** has the subnet module been started with no_cache_store? */ int started_no_cache_store; }; diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c index f88b3e115..9a672b0af 100644 --- a/iterator/iter_delegpt.c +++ b/iterator/iter_delegpt.c @@ -84,7 +84,7 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) } for(a = dp->target_list; a; a = a->next_target) { if(!delegpt_add_addr(copy, region, &a->addr, a->addrlen, - a->bogus, a->lame, a->tls_auth_name)) + a->bogus, a->lame, a->tls_auth_name, NULL)) return NULL; } return copy; @@ -161,7 +161,7 @@ delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr, int delegpt_add_target(struct delegpt* dp, struct regional* region, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame) + socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions) { struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen); log_assert(!dp->dp_type_mlc); @@ -176,13 +176,14 @@ delegpt_add_target(struct delegpt* dp, struct regional* region, if(ns->got4 && ns->got6) ns->resolved = 1; } - return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL); + return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL, + additions); } int delegpt_add_addr(struct delegpt* dp, struct regional* region, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, - uint8_t lame, char* tls_auth_name) + uint8_t lame, char* tls_auth_name, int* additions) { struct delegpt_addr* a; log_assert(!dp->dp_type_mlc); @@ -194,6 +195,8 @@ delegpt_add_addr(struct delegpt* dp, struct regional* region, a->lame = 0; return 1; } + if(additions) + *additions = 1; a = (struct delegpt_addr*)regional_alloc(region, sizeof(struct delegpt_addr)); @@ -382,10 +385,10 @@ delegpt_from_message(struct dns_msg* msg, struct regional* region) continue; if(ntohs(s->rk.type) == LDNS_RR_TYPE_A) { - if(!delegpt_add_rrset_A(dp, region, s, 0)) + if(!delegpt_add_rrset_A(dp, region, s, 0, NULL)) return NULL; } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_AAAA) { - if(!delegpt_add_rrset_AAAA(dp, region, s, 0)) + if(!delegpt_add_rrset_AAAA(dp, region, s, 0, NULL)) return NULL; } } @@ -416,7 +419,7 @@ delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region, int delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* ak, uint8_t lame) + struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; @@ -432,7 +435,7 @@ delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, memmove(&sa.sin_addr, d->rr_data[i]+2, INET_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, - len, (d->security==sec_status_bogus), lame)) + len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; @@ -440,7 +443,7 @@ delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* ak, uint8_t lame) + struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; @@ -456,7 +459,7 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, memmove(&sa.sin6_addr, d->rr_data[i]+2, INET6_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, - len, (d->security==sec_status_bogus), lame)) + len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; @@ -464,20 +467,33 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, int delegpt_add_rrset(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* rrset, uint8_t lame) + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions) { if(!rrset) return 1; if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_NS) return delegpt_rrset_add_ns(dp, region, rrset, lame); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_A) - return delegpt_add_rrset_A(dp, region, rrset, lame); + return delegpt_add_rrset_A(dp, region, rrset, lame, additions); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_AAAA) - return delegpt_add_rrset_AAAA(dp, region, rrset, lame); + return delegpt_add_rrset_AAAA(dp, region, rrset, lame, + additions); log_warn("Unknown rrset type added to delegpt"); return 1; } +void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype) +{ + if(ns) { + if(qtype == LDNS_RR_TYPE_A) + ns->got4 = 2; + else if(qtype == LDNS_RR_TYPE_AAAA) + ns->got6 = 2; + if(ns->got4 && ns->got6) + ns->resolved = 1; + } +} + void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg) { struct reply_info* rep = (struct reply_info*)msg->entry.data; @@ -487,14 +503,7 @@ void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg) if(FLAGS_GET_RCODE(rep->flags) != 0 || rep->an_numrrsets == 0) { struct delegpt_ns* ns = delegpt_find_ns(dp, msg->key.qname, msg->key.qname_len); - if(ns) { - if(msg->key.qtype == LDNS_RR_TYPE_A) - ns->got4 = 1; - else if(msg->key.qtype == LDNS_RR_TYPE_AAAA) - ns->got6 = 1; - if(ns->got4 && ns->got6) - ns->resolved = 1; - } + delegpt_mark_neg(ns, msg->key.qtype); } } diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h index 6c0882645..138eb6e1b 100644 --- a/iterator/iter_delegpt.h +++ b/iterator/iter_delegpt.h @@ -106,9 +106,10 @@ struct delegpt_ns { * and marked true if got4 and got6 are both true. */ int resolved; - /** if the ipv4 address is in the delegpt */ + /** if the ipv4 address is in the delegpt, 0=not, 1=yes 2=negative, + * negative means it was done, but no content. */ uint8_t got4; - /** if the ipv6 address is in the delegpt */ + /** if the ipv6 address is in the delegpt, 0=not, 1=yes 2=negative */ uint8_t got6; /** * If the name is parent-side only and thus dispreferred. @@ -215,11 +216,12 @@ int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* regional, * @param addrlen: the length of addr. * @param bogus: security status for the address, pass true if bogus. * @param lame: address is lame. + * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_target(struct delegpt* dp, struct regional* regional, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame); + socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions); /** * Add A RRset to delegpt. @@ -227,10 +229,11 @@ int delegpt_add_target(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset A to add. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add AAAA RRset to delegpt. @@ -238,10 +241,11 @@ int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset AAAA to add. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add any RRset to delegpt. @@ -250,10 +254,11 @@ int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset to add, NS, A, AAAA. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add address to the delegation point. No servername is associated or checked. @@ -264,11 +269,12 @@ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, * @param bogus: if address is bogus. * @param lame: if address is lame. * @param tls_auth_name: TLS authentication name (or NULL). + * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_addr(struct delegpt* dp, struct regional* regional, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t bogus, uint8_t lame, char* tls_auth_name); + uint8_t bogus, uint8_t lame, char* tls_auth_name, int* additions); /** * Find NS record in name list of delegation point. @@ -341,6 +347,14 @@ size_t delegpt_count_targets(struct delegpt* dp); struct delegpt* delegpt_from_message(struct dns_msg* msg, struct regional* regional); +/** + * Mark negative return in delegation point for specific nameserver. + * sets the got4 or got6 to negative, updates the ns->resolved. + * @param ns: the nameserver in the delegpt. + * @param qtype: A or AAAA (host order). + */ +void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype); + /** * Add negative message to delegation point. * @param dp: delegation point. diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c index cceec3d56..aae934dd4 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c @@ -185,8 +185,9 @@ mark_additional_rrset(sldns_buffer* pkt, struct msg_parse* msg, /** Get target name of a CNAME */ static int parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname, - size_t* snamelen) + size_t* snamelen, sldns_buffer* pkt) { + size_t oldpos, dlen; if(rrset->rr_count != 1) { struct rr_parse* sig; verbose(VERB_ALGO, "Found CNAME rrset with " @@ -204,6 +205,19 @@ parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname, *sname = rrset->rr_first->ttl_data + sizeof(uint32_t) + sizeof(uint16_t); /* skip ttl, rdatalen */ *snamelen = rrset->rr_first->size - sizeof(uint16_t); + + if(rrset->rr_first->outside_packet) { + if(!dname_valid(*sname, *snamelen)) + return 0; + return 1; + } + oldpos = sldns_buffer_position(pkt); + sldns_buffer_set_position(pkt, (size_t)(*sname - sldns_buffer_begin(pkt))); + dlen = pkt_dname_len(pkt); + sldns_buffer_set_position(pkt, oldpos); + if(dlen == 0) + return 0; /* parse fail on the rdata name */ + *snamelen = dlen; return 1; } @@ -215,7 +229,7 @@ synth_cname(uint8_t* qname, size_t qnamelen, struct rrset_parse* dname_rrset, /* we already know that sname is a strict subdomain of DNAME owner */ uint8_t* dtarg = NULL; size_t dtarglen; - if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen)) + if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen, pkt)) return 0; if(qnamelen <= dname_rrset->dname_len) return 0; @@ -388,7 +402,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, /* check next cname */ uint8_t* t = NULL; size_t tlen = 0; - if(!parse_get_cname_target(nx, &t, &tlen)) + if(!parse_get_cname_target(nx, &t, &tlen, pkt)) return 0; if(dname_pkt_compare(pkt, alias, t) == 0) { /* it's OK and better capitalized */ @@ -439,7 +453,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, size_t tlen = 0; if(synth_cname(sname, snamelen, nx, alias, &aliaslen, pkt) && - parse_get_cname_target(rrset, &t, &tlen) && + parse_get_cname_target(rrset, &t, &tlen, pkt) && dname_pkt_compare(pkt, alias, t) == 0) { /* the synthesized CNAME equals the * current CNAME. This CNAME is the @@ -460,7 +474,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, } /* move to next name in CNAME chain */ - if(!parse_get_cname_target(rrset, &sname, &snamelen)) + if(!parse_get_cname_target(rrset, &sname, &snamelen, pkt)) return 0; prev = rrset; rrset = rrset->rrset_all_next; diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index c726ba6b3..7bc67da69 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -1199,7 +1199,7 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env, log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside4 = 1; /* a negative-cache-element has no addresses it adds */ - if(!delegpt_add_rrset_A(dp, region, akey, 1)) + if(!delegpt_add_rrset_A(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } @@ -1211,7 +1211,7 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env, log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside6 = 1; /* a negative-cache-element has no addresses it adds */ - if(!delegpt_add_rrset_AAAA(dp, region, akey, 1)) + if(!delegpt_add_rrset_AAAA(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } diff --git a/iterator/iterator.c b/iterator/iterator.c index eea2f2fb2..23b07ea90 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -72,6 +72,8 @@ /* in msec */ int UNKNOWN_SERVER_NICENESS = 376; +static void target_count_increase_nx(struct iter_qstate* iq, int num); + int iter_init(struct module_env* env, int id) { @@ -150,6 +152,7 @@ iter_new(struct module_qstate* qstate, int id) iq->sent_count = 0; iq->ratelimit_ok = 0; iq->target_count = NULL; + iq->dp_target_count = 0; iq->wait_priming_stub = 0; iq->refetch_glue = 0; iq->dnssec_expected = 0; @@ -221,6 +224,7 @@ final_state(struct iter_qstate* iq) static void error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) { + struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* super_iq = (struct iter_qstate*)super->minfo[id]; if(qstate->qinfo.qtype == LDNS_RR_TYPE_A || @@ -246,7 +250,11 @@ error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) super->region, super_iq->dp)) log_err("out of memory adding missing"); } + delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* mark as failed */ + if((dpns->got4 == 2 || !ie->supports_ipv4) && + (dpns->got6 == 2 || !ie->supports_ipv6)) + target_count_increase_nx(super_iq, 1); } if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS) { /* prime failed to get delegation */ @@ -621,7 +629,7 @@ static void target_count_create(struct iter_qstate* iq) { if(!iq->target_count) { - iq->target_count = (int*)calloc(2, sizeof(int)); + iq->target_count = (int*)calloc(3, sizeof(int)); /* if calloc fails we simply do not track this number */ if(iq->target_count) iq->target_count[0] = 1; @@ -634,6 +642,15 @@ target_count_increase(struct iter_qstate* iq, int num) target_count_create(iq); if(iq->target_count) iq->target_count[1] += num; + iq->dp_target_count++; +} + +static void +target_count_increase_nx(struct iter_qstate* iq, int num) +{ + target_count_create(iq); + if(iq->target_count) + iq->target_count[2] += num; } /** @@ -656,13 +673,15 @@ target_count_increase(struct iter_qstate* iq, int num) * @param subq_ret: if newly allocated, the subquerystate, or NULL if it does * not need initialisation. * @param v: if true, validation is done on the subquery. + * @param detached: true if this qstate should not attach to the subquery * @return false on error (malloc). */ static int generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct module_qstate* qstate, int id, struct iter_qstate* iq, enum iter_state initial_state, - enum iter_state finalstate, struct module_qstate** subq_ret, int v) + enum iter_state finalstate, struct module_qstate** subq_ret, int v, + int detached) { struct module_qstate* subq = NULL; struct iter_qstate* subiq = NULL; @@ -689,11 +708,23 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, valrec = 1; } - /* attach subquery, lookup existing or make a new one */ - fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); - if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, valrec, - &subq)) { - return 0; + if(detached) { + struct mesh_state* sub = NULL; + fptr_ok(fptr_whitelist_modenv_add_sub( + qstate->env->add_sub)); + if(!(*qstate->env->add_sub)(qstate, &qinf, + qflags, prime, valrec, &subq, &sub)){ + return 0; + } + } + else { + /* attach subquery, lookup existing or make a new one */ + fptr_ok(fptr_whitelist_modenv_attach_sub( + qstate->env->attach_sub)); + if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, + valrec, &subq)) { + return 0; + } } *subq_ret = subq; if(subq) { @@ -716,6 +747,7 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, subiq->target_count = iq->target_count; if(iq->target_count) iq->target_count[0] ++; /* extra reference */ + subiq->dp_target_count = 0; subiq->num_current_queries = 0; subiq->depth = iq->depth+1; outbound_list_init(&subiq->outlist); @@ -759,7 +791,7 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, * the normal INIT state logic (which would cause an infloop). */ if(!generate_sub_request((uint8_t*)"\000", 1, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, - &subq, 0)) { + &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime root"); return 0; } @@ -850,7 +882,7 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, * redundant INIT state processing. */ if(!generate_sub_request(stub_dp->name, stub_dp->namelen, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, - QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0)) { + QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime stub"); errinf(qstate, "could not generate lookup for stub prime"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); @@ -1025,7 +1057,7 @@ generate_a_aaaa_check(struct module_qstate* qstate, struct iter_qstate* iq, if(!generate_sub_request(s->rk.dname, s->rk.dname_len, ntohs(s->rk.type), ntohs(s->rk.rrset_class), qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate addr check"); return; } @@ -1069,7 +1101,7 @@ generate_ns_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) iq->dp->name, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate ns check"); return; } @@ -1126,7 +1158,7 @@ generate_dnskey_prefetch(struct module_qstate* qstate, iq->dp->name, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { /* we'll be slower, but it'll work */ verbose(VERB_ALGO, "could not generate dnskey prefetch"); return; @@ -1315,6 +1347,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, iq->refetch_glue = 0; iq->query_restart_count++; iq->sent_count = 0; + iq->dp_target_count = 0; sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; @@ -1693,7 +1726,7 @@ generate_parentside_target_query(struct module_qstate* qstate, { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, - id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) + id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; if(subq) { struct iter_qstate* subiq = @@ -1744,7 +1777,7 @@ generate_target_query(struct module_qstate* qstate, struct iter_qstate* iq, { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, - id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) + id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; log_nametypeclass(VERB_QUERY, "new target", name, qtype, qclass); return 1; @@ -1783,6 +1816,14 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, "number of glue fetches %d", s, iq->target_count[1]); return 0; } + if(iq->dp_target_count > MAX_DP_TARGET_COUNT) { + char s[LDNS_MAX_DOMAINLEN+1]; + dname_str(qstate->qinfo.qname, s); + verbose(VERB_QUERY, "request %s has exceeded the maximum " + "number of glue fetches %d to a single delegation point", + s, iq->dp_target_count); + return 0; + } iter_mark_cycle_targets(qstate, iq->dp); missing = (int)delegpt_count_missing_targets(iq->dp); @@ -1896,7 +1937,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, for(a = p->target_list; a; a=a->next_target) { (void)delegpt_add_addr(iq->dp, qstate->region, &a->addr, a->addrlen, a->bogus, - a->lame, a->tls_auth_name); + a->lame, a->tls_auth_name, NULL); } } iq->dp->has_parent_side_NS = 1; @@ -1913,6 +1954,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, iq->refetch_glue = 1; iq->query_restart_count++; iq->sent_count = 0; + iq->dp_target_count = 0; if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; return next_state(iq, INIT_REQUEST_STATE); @@ -2078,7 +2120,7 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) iq->dsns_point, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dsns_point, iq->dsns_point_len, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { errinf_dname(qstate, "for DS query parent-child nameserver search, could not generate NS lookup for", iq->dsns_point); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -2136,6 +2178,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, errinf(qstate, "exceeded the maximum number of sends"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } + if(iq->target_count && iq->target_count[2] > MAX_TARGET_NX) { + verbose(VERB_QUERY, "request has exceeded the maximum " + " number of nxdomain nameserver lookups with %d", + iq->target_count[2]); + errinf(qstate, "exceeded the maximum nameserver nxdomains"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } /* Make sure we have a delegation point, otherwise priming failed * or another failure occurred */ @@ -2240,12 +2289,41 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->qinfo_out.qtype, iq->qinfo_out.qclass, qstate->query_flags, qstate->region, qstate->env->scratch, 0); - if(msg && msg->rep->an_numrrsets == 0 - && FLAGS_GET_RCODE(msg->rep->flags) == + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NOERROR) /* no need to send query if it is already - * cached as NOERROR/NODATA */ + * cached as NOERROR */ return 1; + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == + LDNS_RCODE_NXDOMAIN && + qstate->env->need_to_validate && + qstate->env->cfg->harden_below_nxdomain) { + if(msg->rep->security == sec_status_secure) { + iq->response = msg; + return final_state(iq); + } + if(msg->rep->security == sec_status_unchecked) { + struct module_qstate* subq = NULL; + if(!generate_sub_request( + iq->qinfo_out.qname, + iq->qinfo_out.qname_len, + iq->qinfo_out.qtype, + iq->qinfo_out.qclass, + qstate, id, iq, + INIT_REQUEST_STATE, + FINISHED_STATE, &subq, 1, 1)) + verbose(VERB_ALGO, + "could not validate NXDOMAIN " + "response"); + } + } + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == + LDNS_RCODE_NXDOMAIN) { + /* return and add a label in the next + * minimisation iteration. + */ + return 1; + } } } if(iq->minimisation_state == SKIP_MINIMISE_STATE) { @@ -2321,6 +2399,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, * generated query will immediately be discarded due to depth and * that servfail is cached, which is not good as opportunism goes. */ if(iq->depth < ie->max_dependency_depth + && iq->num_target_queries == 0 + && (!iq->target_count || iq->target_count[2]==0) && iq->sent_count < TARGET_FETCH_STOP) { tf_policy = ie->target_fetch_policy[iq->depth]; } @@ -2366,6 +2446,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; + iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } @@ -2453,6 +2534,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; + iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } @@ -2748,7 +2830,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Make subrequest to validate intermediate * NXDOMAIN if harden-below-nxdomain is * enabled. */ - if(qstate->env->cfg->harden_below_nxdomain) { + if(qstate->env->cfg->harden_below_nxdomain && + qstate->env->need_to_validate) { struct module_qstate* subq = NULL; log_query_info(VERB_QUERY, "schedule NXDOMAIN validation:", @@ -2760,16 +2843,10 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iq->response->qinfo.qclass, qstate, id, iq, INIT_REQUEST_STATE, - FINISHED_STATE, &subq, 1)) + FINISHED_STATE, &subq, 1, 1)) verbose(VERB_ALGO, "could not validate NXDOMAIN " "response"); - outbound_list_clear(&iq->outlist); - iq->num_current_queries = 0; - fptr_ok(fptr_whitelist_modenv_detach_subs( - qstate->env->detach_subs)); - (*qstate->env->detach_subs)(qstate); - iq->num_target_queries = 0; } } return next_state(iq, QUERYTARGETS_STATE); @@ -2853,6 +2930,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Count this as a referral. */ iq->referral_count++; iq->sent_count = 0; + iq->dp_target_count = 0; /* see if the next dp is a trust anchor, or a DS was sent * along, indicating dnssec is expected for next zone */ iq->dnssec_expected = iter_indicates_dnssec(qstate->env, @@ -2929,6 +3007,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iq->dsns_point = NULL; iq->auth_zone_response = 0; iq->sent_count = 0; + iq->dp_target_count = 0; if(iq->minimisation_state != MINIMISE_STATE) /* Only count as query restart when it is not an extra * query as result of qname minimisation. */ @@ -3121,7 +3200,7 @@ processPrimeResponse(struct module_qstate* qstate, int id) if(!generate_sub_request(qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, qstate->qinfo.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate prime check"); } generate_a_aaaa_check(qstate, iq, id); @@ -3149,6 +3228,7 @@ static void processTargetResponse(struct module_qstate* qstate, int id, struct module_qstate* forq) { + struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; struct iter_qstate* foriq = (struct iter_qstate*)forq->minfo[id]; struct ub_packed_rrset_key* rrset; @@ -3186,7 +3266,7 @@ processTargetResponse(struct module_qstate* qstate, int id, log_rrset_key(VERB_ALGO, "add parentside glue to dp", iq->pside_glue); if(!delegpt_add_rrset(foriq->dp, forq->region, - iq->pside_glue, 1)) + iq->pside_glue, 1, NULL)) log_err("out of memory adding pside glue"); } @@ -3197,6 +3277,7 @@ processTargetResponse(struct module_qstate* qstate, int id, * response type was ANSWER. */ rrset = reply_find_answer_rrset(&iq->qchase, qstate->return_msg->rep); if(rrset) { + int additions = 0; /* if CNAMEs have been followed - add new NS to delegpt. */ /* BTW. RFC 1918 says NS should not have got CNAMEs. Robust. */ if(!delegpt_find_ns(foriq->dp, rrset->rk.dname, @@ -3208,13 +3289,23 @@ processTargetResponse(struct module_qstate* qstate, int id, } /* if dpns->lame then set the address(es) lame too */ if(!delegpt_add_rrset(foriq->dp, forq->region, rrset, - dpns->lame)) + dpns->lame, &additions)) log_err("out of memory adding targets"); + if(!additions) { + /* no new addresses, increase the nxns counter, like + * this could be a list of wildcards with no new + * addresses */ + target_count_increase_nx(foriq, 1); + } verbose(VERB_ALGO, "added target response"); delegpt_log(VERB_ALGO, foriq->dp); } else { verbose(VERB_ALGO, "iterator TargetResponse failed"); + delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* fail the target */ + if((dpns->got4 == 2 || !ie->supports_ipv4) && + (dpns->got6 == 2 || !ie->supports_ipv6)) + target_count_increase_nx(foriq, 1); } } @@ -3388,7 +3479,7 @@ processCollectClass(struct module_qstate* qstate, int id) qstate->qinfo.qname_len, qstate->qinfo.qtype, c, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, - (int)!(qstate->query_flags&BIT_CD))) { + (int)!(qstate->query_flags&BIT_CD), 0)) { errinf(qstate, "could not generate class ANY" " lookup query"); return error_response(qstate, id, diff --git a/iterator/iterator.h b/iterator/iterator.h index 26ff39559..342ac207e 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -55,6 +55,11 @@ struct rbtree_type; /** max number of targets spawned for a query and its subqueries */ #define MAX_TARGET_COUNT 64 +/** max number of target lookups per qstate, per delegation point */ +#define MAX_DP_TARGET_COUNT 16 +/** max number of nxdomains allowed for target lookups for a query and + * its subqueries */ +#define MAX_TARGET_NX 5 /** max number of query restarts. Determines max number of CNAME chain. */ #define MAX_RESTART_COUNT 8 /** max number of referrals. Makes sure resolver does not run away */ @@ -305,9 +310,14 @@ struct iter_qstate { int sent_count; /** number of target queries spawned in [1], for this query and its - * subqueries, the malloced-array is shared, [0] refcount. */ + * subqueries, the malloced-array is shared, [0] refcount. + * in [2] the number of nxdomains is counted. */ int* target_count; + /** number of target lookups per delegation point. Reset to 0 after + * receiving referral answer. Not shared with subqueries. */ + int dp_target_count; + /** if true, already tested for ratelimiting and passed the test */ int ratelimit_ok; diff --git a/libunbound/unbound.h b/libunbound/unbound.h index ca9592d62..b53426c76 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -642,6 +642,7 @@ struct ub_shm_stat_info { long long respip; long long dnscrypt_shared_secret; long long dnscrypt_nonce; + long long dynlib; } mem; }; diff --git a/services/cache/dns.c b/services/cache/dns.c index 2a5bca4ac..7b6e142c9 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -273,7 +273,7 @@ find_add_addrs(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_A(dp, region, akey, 0)) { + if(!delegpt_add_rrset_A(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -293,7 +293,7 @@ find_add_addrs(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_AAAA(dp, region, akey, 0)) { + if(!delegpt_add_rrset_AAAA(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -327,7 +327,8 @@ cache_fill_missing(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_A(dp, region, akey, ns->lame)) { + if(!delegpt_add_rrset_A(dp, region, akey, ns->lame, + NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -347,7 +348,8 @@ cache_fill_missing(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_AAAA(dp, region, akey, ns->lame)) { + if(!delegpt_add_rrset_AAAA(dp, region, akey, ns->lame, + NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 51d5a3fdb..cc56d3fd3 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -884,11 +884,11 @@ set_ip_dscp(int socket, int addrfamily, int dscp) ds = dscp << 2; switch(addrfamily) { case AF_INET6: - if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, &ds, sizeof(ds)) < 0) + if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; default: - if(setsockopt(socket, IPPROTO_IP, IP_TOS, &ds, sizeof(ds)) < 0) + if(setsockopt(socket, IPPROTO_IP, IP_TOS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; } diff --git a/services/modstack.c b/services/modstack.c index 68e592814..a600549b1 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -51,6 +51,9 @@ #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif +#ifdef WITH_DYNLIBMODULE +#include "dynlibmod/dynlibmod.h" +#endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif @@ -140,6 +143,9 @@ module_list_avail(void) #ifdef WITH_PYTHONMODULE "python", #endif +#ifdef WITH_DYNLIBMODULE + "dynlib", +#endif #ifdef USE_CACHEDB "cachedb", #endif @@ -171,6 +177,9 @@ module_funcs_avail(void) #ifdef WITH_PYTHONMODULE &pythonmod_get_funcblock, #endif +#ifdef WITH_DYNLIBMODULE + &dynlibmod_get_funcblock, +#endif #ifdef USE_CACHEDB &cachedb_get_funcblock, #endif diff --git a/sldns/parseutil.c b/sldns/parseutil.c index 82dbc0fe1..3515d64c5 100644 --- a/sldns/parseutil.c +++ b/sldns/parseutil.c @@ -167,7 +167,7 @@ sldns_gmtime64_r(int64_t clock, struct tm *result) static int64_t sldns_serial_arithmetics_time(int32_t time, time_t now) { - int32_t offset = time - (int32_t) now; + int32_t offset = (int32_t)((uint32_t) time - (uint32_t) now); return (int64_t) now + offset; } diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 3fc638cae..54a0ab78c 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -569,6 +569,64 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "python dns64 iterator") != 0 && strcmp(cfg->module_conf, "python dns64 validator iterator") != 0 #endif +#ifdef WITH_DYNLIBMODULE + && strcmp(cfg->module_conf, "dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 + && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 + && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dns64 validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "validator cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip validator cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "validator dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "respip validator dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod respip iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib respip iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod respip validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib respip validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator dynlib iterator") != 0 +#endif #ifdef USE_CACHEDB && strcmp(cfg->module_conf, "validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip validator cachedb iterator") != 0 diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 4e5ce1e4b..c2b42e951 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -268,6 +268,9 @@ static void print_mem(struct ub_shm_stat_info* shm_stat, #ifdef USE_IPSECMOD PR_LL("mem.mod.ipsecmod", shm_stat->mem.ipsecmod); #endif +#ifdef WITH_DYNLIBMODULE + PR_LL("mem.mod.dynlib", shm_stat->mem.dynlib); +#endif #ifdef USE_DNSCRYPT PR_LL("mem.cache.dnscrypt_shared_secret", shm_stat->mem.dnscrypt_shared_secret); diff --git a/testcode/testbound.c b/testcode/testbound.c index b38407637..602dffaff 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -274,8 +274,6 @@ setup_config(FILE* in, int* lineno, int* pass_argc, char* pass_argv[]) fprintf(cfg, " pidfile: \"\"\n"); fprintf(cfg, " val-log-level: 2\n"); fprintf(cfg, "remote-control: control-enable: no\n"); - /* some basic settings to facilitate testing */ - fprintf(cfg, "server: rrset-roundrobin: no\n"); while(fgets(line, MAX_LINE_LEN-1, in)) { parse = line; (*lineno)++; diff --git a/testdata/autotrust_10key.rpl b/testdata/autotrust_10key.rpl index 22cd53681..8e4ab5a18 100644 --- a/testdata/autotrust_10key.rpl +++ b/testdata/autotrust_10key.rpl @@ -106,7 +106,6 @@ www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END -RANGE_END RANGE_END diff --git a/testdata/autotrust_revtp.rpl b/testdata/autotrust_revtp.rpl index 4ed113f74..ec3eeaa4d 100644 --- a/testdata/autotrust_revtp.rpl +++ b/testdata/autotrust_revtp.rpl @@ -97,7 +97,6 @@ www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END -RANGE_END RANGE_END diff --git a/testdata/autotrust_revtp_read.rpl b/testdata/autotrust_revtp_read.rpl index cd48a6339..7428f7aae 100644 --- a/testdata/autotrust_revtp_read.rpl +++ b/testdata/autotrust_revtp_read.rpl @@ -85,7 +85,6 @@ www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END -RANGE_END RANGE_END diff --git a/testdata/black_data.rpl b/testdata/black_data.rpl index de6f57ec1..e6ef1b79d 100644 --- a/testdata/black_data.rpl +++ b/testdata/black_data.rpl @@ -8,6 +8,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/black_prime.rpl b/testdata/black_prime.rpl index 7e73f32f3..fbe92a721 100644 --- a/testdata/black_prime.rpl +++ b/testdata/black_prime.rpl @@ -8,6 +8,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/dynlibmod.tdir/dynlibmod.conf b/testdata/dynlibmod.tdir/dynlibmod.conf new file mode 100644 index 000000000..d59444344 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.conf @@ -0,0 +1,32 @@ +server: + verbosity: 2 + num-threads: 3 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" + module-config: "dynlib iterator" + +dynlib: + dynlib-file: "@DLL_FILE@" + +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/dynlibmod.tdir/dynlibmod.dsc b/testdata/dynlibmod.tdir/dynlibmod.dsc new file mode 100644 index 000000000..b1a83910d --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.dsc @@ -0,0 +1,16 @@ +BaseName: dynlibmod +Version: 1.0 +Description: test dynlibmod module +CreationDate: Tue May 19 15:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dynlibmod.pre +Post: dynlibmod.post +Test: dynlibmod.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dynlibmod.tdir/dynlibmod.post b/testdata/dynlibmod.tdir/dynlibmod.post new file mode 100644 index 000000000..caa0da4f5 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.post @@ -0,0 +1,15 @@ +# #-- dynlibmod.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +exit 0 diff --git a/testdata/dynlibmod.tdir/dynlibmod.pre b/testdata/dynlibmod.tdir/dynlibmod.pre new file mode 100644 index 000000000..94adaa723 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.pre @@ -0,0 +1,35 @@ +# #-- dynlibmod.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dynlibmod.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +if grep "define USE_WINSOCK 1" $PRE/config.h; then + DLL_FILE="helloworld.dll" +else + DLL_FILE="helloworld.so" +fi +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@DLL_FILE\@/'$DLL_FILE'/' < dynlibmod.conf > ub.conf + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log diff --git a/testdata/dynlibmod.tdir/dynlibmod.test b/testdata/dynlibmod.tdir/dynlibmod.test new file mode 100644 index 000000000..f99f6fbc4 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.test @@ -0,0 +1,74 @@ +# #-- dynlibmod.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# compile the dynamic library module +if grep "define USE_WINSOCK 1" $PRE/config.h; then + echo "compile dynamic library dll for mingw" + echo "x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a" + x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a + if test $? != 0; then + echo "compile failure" + exit 1; + fi +else + echo "compile dynamic library" + echo "gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c" + gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c + if test $? != 0; then + echo "compile failure" + exit 1; + fi +fi + +# start unbound in the background +LD_LIBRARY_PATH="." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +wait_unbound_up unbound.log + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check log for dynlibmod info" +# wait for a moment for filesystem to catch up. +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 10; fi +if grep "hello world from operate" unbound.log; then echo "yes it is in unbound.log"; +else + echo "information not in unbound.log" + echo "failed" + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/dynlibmod.tdir/dynlibmod.testns b/testdata/dynlibmod.tdir/dynlibmod.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dynlibmod.tdir/unbound_control.key b/testdata/dynlibmod.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_control.pem b/testdata/dynlibmod.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dynlibmod.tdir/unbound_server.key b/testdata/dynlibmod.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_server.pem b/testdata/dynlibmod.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf index 08e9d6432..5b2c8045a 100644 --- a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf @@ -10,6 +10,7 @@ server: username: "" do-not-query-localhost: no minimal-responses: no + rrset-roundrobin: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/iter_lame_noaa.rpl b/testdata/iter_lame_noaa.rpl index 7a6eb1b30..defaa5ca8 100644 --- a/testdata/iter_lame_noaa.rpl +++ b/testdata/iter_lame_noaa.rpl @@ -4,6 +4,7 @@ server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_lame_nosoa.rpl b/testdata/iter_lame_nosoa.rpl index 4914f7461..3bf6ccc18 100644 --- a/testdata/iter_lame_nosoa.rpl +++ b/testdata/iter_lame_nosoa.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_ns_badip.rpl b/testdata/iter_ns_badip.rpl index ad266c64d..e0bf96674 100644 --- a/testdata/iter_ns_badip.rpl +++ b/testdata/iter_ns_badip.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "3 2 1 0 0" qname-minimisation: "no" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_pcnamech.rpl b/testdata/iter_pcnamech.rpl index 098ae0bb5..32b3130c8 100644 --- a/testdata/iter_pcnamech.rpl +++ b/testdata/iter_pcnamech.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_pcnamechrec.rpl b/testdata/iter_pcnamechrec.rpl index ca996bb38..8bf7ad879 100644 --- a/testdata/iter_pcnamechrec.rpl +++ b/testdata/iter_pcnamechrec.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_ranoaa_lame.rpl b/testdata/iter_ranoaa_lame.rpl index 4808b25a9..0e6d98778 100644 --- a/testdata/iter_ranoaa_lame.rpl +++ b/testdata/iter_ranoaa_lame.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_reclame_one.rpl b/testdata/iter_reclame_one.rpl index 4df9b6594..4a6abfae5 100644 --- a/testdata/iter_reclame_one.rpl +++ b/testdata/iter_reclame_one.rpl @@ -3,6 +3,7 @@ server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/iter_reclame_two.rpl b/testdata/iter_reclame_two.rpl index de4ef4165..459dcb17f 100644 --- a/testdata/iter_reclame_two.rpl +++ b/testdata/iter_reclame_two.rpl @@ -2,6 +2,7 @@ server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/localdata.rpl b/testdata/localdata.rpl index 08aec6d7d..a2e7eeba2 100644 --- a/testdata/localdata.rpl +++ b/testdata/localdata.rpl @@ -4,6 +4,7 @@ server: hide-version: no identity: "test-identity" version: "test-version" + rrset-roundrobin: no ; implicit transparent zone should not block id.server local-data: "mydata.server. CH A 10.11.12.13" diff --git a/testdata/rpz_axfr.rpl b/testdata/rpz_axfr.rpl index b5b84bfd3..f57363616 100644 --- a/testdata/rpz_axfr.rpl +++ b/testdata/rpz_axfr.rpl @@ -3,6 +3,7 @@ server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no + rrset-roundrobin: no rpz: name: "rpz.example.com." diff --git a/testdata/rpz_ixfr.rpl b/testdata/rpz_ixfr.rpl index 3f7cb3d35..ca2b62335 100644 --- a/testdata/rpz_ixfr.rpl +++ b/testdata/rpz_ixfr.rpl @@ -3,6 +3,7 @@ server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no + rrset-roundrobin: no rpz: name: "rpz.example.com." diff --git a/testdata/rrset_updated.rpl b/testdata/rrset_updated.rpl index d36ab8cc8..55da56bac 100644 --- a/testdata/rrset_updated.rpl +++ b/testdata/rrset_updated.rpl @@ -2,6 +2,7 @@ ; config options go here. server: minimal-responses: no + rrset-roundrobin: no forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END diff --git a/testdata/val_any.rpl b/testdata/val_any.rpl index 058f44925..4ce195134 100644 --- a/testdata/val_any.rpl +++ b/testdata/val_any.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_any_dname.rpl b/testdata/val_any_dname.rpl index 3957f7bae..6ab3cded7 100644 --- a/testdata/val_any_dname.rpl +++ b/testdata/val_any_dname.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout.rpl b/testdata/val_nsec3_b3_optout.rpl index 0b0569201..9d84be974 100644 --- a/testdata/val_nsec3_b3_optout.rpl +++ b/testdata/val_nsec3_b3_optout.rpl @@ -1,12 +1,13 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_negcache.rpl b/testdata/val_nsec3_b3_optout_negcache.rpl index f8ef6f87d..497a8591a 100644 --- a/testdata/val_nsec3_b3_optout_negcache.rpl +++ b/testdata/val_nsec3_b3_optout_negcache.rpl @@ -1,12 +1,13 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_noce.rpl b/testdata/val_nsec3_b3_optout_noce.rpl index ddcd4c01a..c5601e386 100644 --- a/testdata/val_nsec3_b3_optout_noce.rpl +++ b/testdata/val_nsec3_b3_optout_noce.rpl @@ -1,11 +1,12 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b3_optout_nonc.rpl b/testdata/val_nsec3_b3_optout_nonc.rpl index c4b044e33..53e8898de 100644 --- a/testdata/val_nsec3_b3_optout_nonc.rpl +++ b/testdata/val_nsec3_b3_optout_nonc.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b4_wild.rpl b/testdata/val_nsec3_b4_wild.rpl index db205ab23..8bf3a5466 100644 --- a/testdata/val_nsec3_b4_wild.rpl +++ b/testdata/val_nsec3_b4_wild.rpl @@ -1,11 +1,12 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nsec3_b5_wcnodata.rpl b/testdata/val_nsec3_b5_wcnodata.rpl index a10d6b75a..c8be6a48f 100644 --- a/testdata/val_nsec3_b5_wcnodata.rpl +++ b/testdata/val_nsec3_b5_wcnodata.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b5_wcnodata_noce.rpl b/testdata/val_nsec3_b5_wcnodata_noce.rpl index f35eae18d..fdd175f9e 100644 --- a/testdata/val_nsec3_b5_wcnodata_noce.rpl +++ b/testdata/val_nsec3_b5_wcnodata_noce.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b5_wcnodata_nonc.rpl b/testdata/val_nsec3_b5_wcnodata_nonc.rpl index e4c58c62a..6c35ead13 100644 --- a/testdata/val_nsec3_b5_wcnodata_nonc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nonc.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_b5_wcnodata_nowc.rpl b/testdata/val_nsec3_b5_wcnodata_nowc.rpl index 27f68d614..8e972ccc8 100644 --- a/testdata/val_nsec3_b5_wcnodata_nowc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nowc.rpl @@ -1,6 +1,6 @@ ; config options server: - trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" + trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" diff --git a/testdata/val_nsec3_wcany.rpl b/testdata/val_nsec3_wcany.rpl index 24bdaeb18..b653f6bde 100644 --- a/testdata/val_nsec3_wcany.rpl +++ b/testdata/val_nsec3_wcany.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_nx_nsec3_collision.rpl b/testdata/val_nx_nsec3_collision.rpl index 41cd0d6e7..8ff7e4b06 100644 --- a/testdata/val_nx_nsec3_collision.rpl +++ b/testdata/val_nx_nsec3_collision.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_refer_unsignadd.rpl b/testdata/val_refer_unsignadd.rpl index 90e0f0421..4d073016f 100644 --- a/testdata/val_refer_unsignadd.rpl +++ b/testdata/val_refer_unsignadd.rpl @@ -9,6 +9,7 @@ server: qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_referglue.rpl b/testdata/val_referglue.rpl index dd7e7de91..54b767156 100644 --- a/testdata/val_referglue.rpl +++ b/testdata/val_referglue.rpl @@ -10,6 +10,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no stub-zone: name: "." diff --git a/testdata/val_twocname.rpl b/testdata/val_twocname.rpl index d8e8cf316..bc7c3bcb2 100644 --- a/testdata/val_twocname.rpl +++ b/testdata/val_twocname.rpl @@ -5,6 +5,7 @@ server: fake-sha1: yes trust-anchor-signaling: no minimal-responses: no + rrset-roundrobin: no forward-zone: name: "." diff --git a/util/config_file.c b/util/config_file.c index 7ae0f384b..7cc75027c 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -269,6 +269,7 @@ config_create(void) cfg->unblock_lan_zones = 0; cfg->insecure_lan_zones = 0; cfg->python_script = NULL; + cfg->dynlib_file = NULL; cfg->remote_control_enable = 0; cfg->control_ifs.first = NULL; cfg->control_ifs.last = NULL; @@ -630,6 +631,7 @@ 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_STRLIST("python-script:", python_script) + else S_STRLIST("dynlib-file:", dynlib_file) else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check) #ifdef CLIENT_SUBNET /* Can't set max subnet prefix here, since that value is used when @@ -1102,6 +1104,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) else O_LST(opt, "python-script", python_script) + else O_LST(opt, "dynlib-file", dynlib_file) else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check) else O_DEC(opt, "ip-ratelimit", ip_ratelimit) else O_DEC(opt, "ratelimit", ratelimit) @@ -1495,6 +1498,7 @@ config_delete(struct config_file* cfg) config_deldblstrlist(cfg->ratelimit_for_domain); config_deldblstrlist(cfg->ratelimit_below_domain); config_delstrlist(cfg->python_script); + config_delstrlist(cfg->dynlib_file); #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); diff --git a/util/config_file.h b/util/config_file.h index f422bf75a..c8b8776d3 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -452,6 +452,9 @@ struct config_file { /** Python script file */ struct config_strlist* python_script; + /** Dynamic library file */ + struct config_strlist* dynlib_file; + /** Use systemd socket activation. */ int use_systemd; diff --git a/util/configlexer.c b/util/configlexer.c index 279dee6d2..8a9e7193f 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 313 -#define YY_END_OF_BUFFER 314 +#define YY_NUM_RULES 315 +#define YY_END_OF_BUFFER 316 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,347 +363,349 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3084] = +static const flex_int16_t yy_accept[3096] = { 0, - 1, 1, 295, 295, 299, 299, 303, 303, 307, 307, - 1, 1, 314, 311, 1, 293, 293, 312, 2, 312, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 295, 296, 296, 297, 312, 299, 300, 300, - 301, 312, 306, 303, 304, 304, 305, 312, 307, 308, - 308, 309, 312, 310, 294, 2, 298, 312, 310, 311, - 0, 1, 2, 2, 2, 2, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 1, 1, 297, 297, 301, 301, 305, 305, 309, 309, + 1, 1, 316, 313, 1, 295, 295, 314, 2, 314, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 297, 298, 298, 299, 314, 301, 302, 302, + 303, 314, 308, 305, 306, 306, 307, 314, 309, 310, + 310, 311, 314, 312, 296, 2, 300, 314, 312, 313, + 0, 1, 2, 2, 2, 2, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 295, 0, 299, 0, 306, 0, 303, 307, 0, 310, - 0, 2, 2, 310, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 297, 0, 301, 0, 308, 0, 305, 309, 0, + 312, 0, 2, 2, 312, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 310, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 312, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 116, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 124, 311, 311, 311, - 311, 311, 311, 311, 310, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 116, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 124, + 313, 313, 313, 313, 313, 313, 313, 312, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 100, 311, 311, 311, 311, 311, 311, 8, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 117, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 129, 311, 310, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 100, 313, 313, 313, 313, 313, + 313, 8, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 117, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 288, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 129, 313, 312, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 290, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 310, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 57, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 226, 311, 14, 15, 311, - 19, 18, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 312, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 57, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 228, 313, 14, 15, 313, 19, 18, 313, 313, 212, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 123, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 210, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 3, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 123, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 210, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 3, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 310, 311, 311, 311, 311, 311, 311, 311, 282, - 311, 311, 281, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 302, 311, - 311, 311, 311, 311, 311, 311, 311, 56, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 312, 313, + 313, 313, 313, 313, 313, 313, 284, 313, 313, 283, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 304, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 60, 311, 256, 311, 311, 311, - 311, 311, 311, 311, 311, 289, 290, 311, 311, 311, - 311, 311, 61, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 120, - 311, 311, 311, 311, 311, 311, 311, 311, 199, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 21, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 56, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 60, 313, 258, 313, 313, 313, 313, 313, + 313, 313, 313, 291, 292, 313, 313, 313, 313, 313, + 61, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 120, 313, 313, + 313, 313, 313, 313, 313, 313, 199, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 21, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 148, 311, - 311, 302, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 98, 311, 311, 311, 311, 311, 311, 311, - 264, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 171, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 147, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 148, 313, 313, 304, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 98, 313, 313, 313, 313, 313, 313, 313, 266, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 171, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 147, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 97, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 32, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 33, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 58, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 122, 311, 311, 311, 311, 311, 115, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 97, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 32, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 33, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 58, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 59, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 229, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 172, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 47, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 122, 313, 313, 313, 313, 313, 115, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 59, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 231, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 172, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 47, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 247, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 51, 311, 52, - 311, 311, 311, 311, 311, 101, 311, 102, 311, 311, - 311, 311, 99, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 7, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 249, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 51, 313, 52, + 313, 313, 313, 313, 313, 101, 313, 102, 313, 313, + 313, 313, 99, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 7, 313, 313, 313, 313, 313, 313, 313, 313, - 219, 311, 311, 311, 311, 150, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 230, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 48, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 191, 311, 190, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 221, 313, 313, 313, 313, 150, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 232, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 48, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 191, 313, 190, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 16, 17, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 62, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 198, 311, - 311, 311, 311, 311, 311, 104, 311, 103, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 182, - 311, 311, 311, 311, 311, 311, 311, 311, 130, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 82, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 16, 17, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 62, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 198, + 313, 313, 313, 313, 313, 313, 104, 313, 103, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 182, 313, 313, 313, 313, 313, 313, 313, 313, 130, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 82, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 86, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 55, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 185, 186, 311, 311, 311, 258, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 6, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 211, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 86, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 55, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 185, 186, 313, 313, 313, + 260, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 6, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 262, 311, 311, 311, 311, 311, 311, - 283, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 42, 311, 311, 311, 311, 44, 311, 311, 311, - 311, 311, 311, 311, 311, 45, 311, 311, 311, 311, - 311, 311, 311, 311, 178, 311, 311, 311, 125, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 203, - 311, 179, 311, 311, 311, 216, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 46, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 264, 313, 313, 313, 313, + 313, 313, 285, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 42, 313, 313, 313, 313, 44, 313, + 313, 313, 313, 313, 313, 313, 313, 45, 313, 313, + 313, 313, 313, 313, 313, 313, 178, 313, 313, 313, + 125, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 203, 313, 179, 313, 313, 313, 218, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 127, 109, 311, 110, 311, - 311, 311, 108, 311, 311, 311, 311, 311, 311, 311, - 311, 145, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 246, 311, 311, 311, 311, 311, - 311, 311, 311, 180, 311, 311, 311, 311, 311, 183, - 311, 189, 311, 311, 311, 311, 311, 215, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 96, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 121, 311, 311, 311, 311, 311, 311, 53, 311, + 313, 313, 313, 313, 313, 313, 313, 46, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 127, 109, 313, + 110, 313, 313, 313, 108, 313, 313, 313, 313, 313, + 313, 313, 313, 145, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 248, 313, 313, 313, + 313, 313, 313, 313, 313, 180, 313, 313, 313, 313, + 313, 183, 313, 189, 313, 313, 313, 313, 313, 217, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 96, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 26, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 20, 311, 311, 311, 311, 311, 311, 27, - 36, 311, 155, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 70, 72, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 266, 311, 311, - 311, 227, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 111, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 144, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 121, 313, 313, 313, 313, 313, 313, + 53, 313, 313, 313, 26, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 20, 313, 313, 313, 313, 313, + 313, 27, 36, 313, 155, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 70, 72, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 268, + 313, 313, 313, 229, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 111, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 277, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 149, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 209, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 286, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 166, 311, 311, 311, 311, - 311, 311, 311, 311, 105, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 161, 311, 173, 311, 311, 311, + 313, 313, 313, 313, 313, 144, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 279, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 149, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 209, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 288, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 166, 313, 313, + 313, 313, 313, 313, 313, 313, 105, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 311, 311, 133, 311, 311, 311, 311, 311, 92, 311, - 311, 311, 311, 201, 311, 311, 311, 311, 311, 311, - 217, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 238, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 126, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 165, 311, 311, - 311, 311, 311, 73, 311, 74, 311, 311, 311, 311, - 311, 54, 311, 311, 311, 311, 311, 81, 174, 311, - 192, 311, 220, 311, 311, 184, 259, 311, 311, 311, - 311, 311, 66, 311, 176, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 161, 313, 173, 313, + 313, 313, 313, 313, 133, 313, 313, 313, 313, 313, + 92, 313, 313, 313, 313, 201, 313, 313, 313, 313, + 313, 313, 219, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 240, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 126, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 165, + 313, 313, 313, 313, 313, 73, 313, 74, 313, 313, + 313, 313, 313, 54, 313, 313, 313, 313, 313, 81, + 174, 313, 192, 313, 222, 313, 313, 184, 261, 313, - 9, 311, 311, 311, 95, 311, 311, 311, 311, 251, - 311, 311, 311, 311, 200, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 164, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 151, 311, 265, 311, 311, - 311, 311, 237, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 211, 311, 311, 311, 311, 257, + 313, 313, 313, 313, 66, 313, 176, 313, 313, 313, + 313, 313, 9, 313, 313, 313, 95, 313, 313, 313, + 313, 253, 313, 313, 313, 313, 200, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 164, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 151, 313, 267, + 313, 313, 313, 313, 239, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 280, 311, 175, 311, 311, - 311, 311, 311, 311, 311, 65, 67, 311, 311, 311, - 311, 311, 311, 311, 94, 311, 311, 311, 311, 249, - 311, 311, 311, 311, 261, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 205, 34, 28, 30, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 35, - 311, 29, 31, 311, 311, 311, 311, 311, 311, 311, - 311, 91, 311, 311, 311, 311, 311, 311, 311, 311, + 313, 313, 313, 313, 313, 313, 213, 313, 313, 313, + 313, 259, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 282, 313, 175, + 313, 313, 313, 313, 313, 313, 313, 65, 67, 313, + 313, 313, 313, 313, 313, 313, 94, 313, 313, 313, + 313, 251, 313, 313, 313, 313, 263, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 205, 34, + 28, 30, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 35, 313, 29, 31, 313, 313, 313, 313, 313, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 207, - 204, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 64, 311, - 311, 128, 311, 112, 311, 311, 311, 311, 311, 311, - 311, 311, 146, 13, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 275, 311, 278, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 12, 311, 311, - 22, 311, 311, 311, 255, 311, 311, 311, 311, 263, - 311, 311, 311, 68, 311, 213, 311, 311, 311, 311, - 206, 311, 311, 63, 311, 311, 311, 311, 23, 311, + 313, 313, 313, 91, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 207, 204, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 64, 313, 313, 128, 313, 112, 313, 313, 313, 313, + 313, 313, 313, 313, 146, 13, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 277, 313, 280, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 12, + 313, 313, 22, 313, 313, 313, 257, 313, 313, 313, + 313, 265, 313, 313, 313, 68, 313, 215, 313, 313, - 43, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 160, 159, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 208, 202, 311, 218, 311, 311, - 267, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 75, 311, - 311, 311, 311, 250, 311, 311, 311, 311, 188, 311, - 311, 311, 311, 212, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 284, 285, 157, 311, 311, 69, 311, - 311, 311, 311, 167, 311, 311, 106, 107, 311, 311, + 313, 313, 206, 313, 313, 63, 313, 313, 313, 313, + 23, 313, 43, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 160, 159, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 208, 202, 313, 220, + 313, 313, 269, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 75, 313, 313, 313, 313, 252, 313, 313, 313, 313, + 188, 313, 313, 313, 313, 214, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 286, 287, 157, 313, 313, - 311, 311, 152, 311, 154, 311, 193, 311, 311, 311, - 311, 158, 311, 311, 221, 311, 311, 311, 311, 311, - 311, 311, 135, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 228, 311, 311, 311, 311, 311, - 311, 311, 24, 311, 260, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 79, 194, 311, 311, - 248, 311, 279, 311, 187, 311, 311, 311, 311, 49, - 311, 311, 311, 311, 4, 311, 311, 311, 311, 119, - 134, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 224, + 69, 313, 313, 313, 313, 167, 313, 313, 106, 107, + 313, 313, 313, 313, 152, 313, 154, 313, 193, 313, + 313, 313, 313, 158, 313, 313, 223, 313, 313, 313, + 313, 313, 313, 313, 135, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 230, 313, 313, 313, + 313, 313, 313, 313, 24, 313, 262, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 79, 194, + 313, 313, 250, 313, 281, 313, 187, 313, 313, 313, + 313, 49, 313, 313, 313, 313, 4, 313, 313, 313, + 313, 119, 134, 313, 313, 313, 313, 313, 313, 313, - 37, 38, 311, 311, 311, 311, 311, 311, 311, 268, - 311, 311, 311, 311, 311, 311, 236, 311, 311, 311, - 311, 311, 311, 311, 197, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 78, 311, 50, 254, 311, 225, - 311, 311, 311, 311, 11, 311, 311, 311, 311, 311, - 311, 118, 311, 311, 311, 311, 195, 83, 311, 40, - 311, 311, 311, 311, 311, 311, 311, 311, 163, 311, - 311, 311, 311, 311, 137, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 235, 311, 311, 311, 311, 131, - 311, 311, 113, 114, 311, 311, 311, 85, 89, 84, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 226, 37, 38, 313, 313, 313, 313, 313, 313, + 313, 270, 313, 313, 313, 313, 313, 313, 238, 313, + 313, 313, 313, 313, 313, 313, 197, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 78, 313, 50, 256, + 313, 227, 313, 313, 313, 313, 11, 313, 313, 313, + 313, 313, 313, 118, 313, 313, 313, 313, 195, 83, + 313, 40, 313, 313, 313, 313, 313, 313, 313, 313, + 163, 313, 313, 313, 313, 313, 137, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 237, 313, 313, 313, - 311, 76, 311, 311, 311, 311, 311, 10, 311, 311, - 311, 252, 287, 311, 311, 311, 311, 292, 39, 311, - 311, 311, 311, 311, 162, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 90, 88, 311, - 77, 276, 311, 311, 311, 311, 311, 311, 311, 181, - 311, 311, 311, 311, 311, 196, 311, 311, 311, 311, - 311, 311, 311, 311, 153, 71, 311, 311, 311, 311, - 311, 269, 311, 311, 311, 311, 311, 311, 311, 232, - 311, 311, 231, 132, 311, 87, 138, 139, 142, 143, + 313, 131, 313, 313, 113, 114, 313, 313, 313, 85, + 89, 84, 313, 76, 313, 313, 313, 313, 313, 10, + 313, 313, 313, 254, 289, 313, 313, 313, 313, 294, + 39, 313, 313, 313, 313, 313, 162, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 90, + 88, 313, 77, 278, 313, 313, 313, 313, 313, 313, + 313, 181, 313, 313, 313, 313, 313, 196, 313, 313, + 313, 313, 313, 313, 313, 313, 153, 71, 313, 313, + 313, 313, 313, 271, 313, 313, 313, 313, 313, 313, - 140, 141, 80, 311, 253, 311, 311, 311, 311, 156, - 311, 311, 311, 311, 311, 223, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 169, 168, 41, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 93, 311, 222, 311, 245, 273, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 5, 311, - 311, 214, 311, 311, 274, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 233, 25, 311, 311, 311, 311, + 313, 234, 313, 313, 233, 132, 313, 87, 138, 139, + 142, 143, 140, 141, 80, 313, 255, 313, 313, 313, + 313, 156, 313, 313, 313, 313, 313, 225, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 169, 168, 41, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 93, 313, 224, 313, 247, 275, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 5, 313, 313, 216, 313, 313, 276, 313, 313, 313, + + 313, 313, 313, 313, 313, 313, 235, 25, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 236, 313, 313, 313, 136, 313, 313, 313, 313, 313, + 313, 313, 313, 170, 313, 177, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 272, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 293, 313, 313, 243, 313, 313, 313, + 313, 313, 273, 313, 313, 313, 313, 313, 313, 274, + 313, 313, 313, 241, 313, 244, 245, 313, 313, 313, + 313, 313, 242, 246, 0 - 311, 311, 311, 311, 311, 311, 311, 311, 234, 311, - 311, 311, 136, 311, 311, 311, 311, 311, 311, 311, - 311, 170, 311, 177, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 270, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 291, 311, 311, 241, 311, 311, 311, 311, 311, - 271, 311, 311, 311, 311, 311, 311, 272, 311, 311, - 311, 239, 311, 242, 243, 311, 311, 311, 311, 311, - 240, 244, 0 } ; static const YY_CHAR yy_ec[256] = @@ -746,697 +748,699 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3098] = +static const flex_int16_t yy_base[3110] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2237, 1788, 81, 6010, 6010, 6010, 96, 52, - 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, - 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1748, 6010, 6010, 6010, 107, 1464, 6010, 6010, - 6010, 165, 1434, 1375, 6010, 6010, 6010, 211, 1257, 6010, - 6010, 6010, 180, 948, 6010, 217, 6010, 221, 168, 767, - 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, - 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, - 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, + 90, 112, 1815, 1761, 81, 6038, 6038, 6038, 96, 52, + 106, 63, 107, 128, 70, 116, 123, 134, 57, 88, + 76, 145, 151, 114, 158, 97, 169, 181, 179, 188, + 194, 129, 1601, 6038, 6038, 6038, 135, 1574, 6038, 6038, + 6038, 146, 1142, 1110, 6038, 6038, 6038, 220, 1034, 6038, + 6038, 6038, 171, 903, 6038, 224, 6038, 228, 157, 818, + 232, 167, 0, 239, 0, 0, 165, 205, 85, 166, + 226, 190, 233, 234, 228, 240, 241, 242, 98, 130, + 250, 243, 245, 248, 258, 256, 262, 267, 273, 251, - 279, 262, 282, 285, 270, 272, 291, 293, 290, 299, - 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, - 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, - 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, - 723, 379, 595, 381, 503, 388, 450, 365, 392, 278, - 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, - 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, - 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, - 453, 454, 446, 455, 456, 458, 461, 462, 477, 464, - 465, 463, 486, 472, 488, 490, 487, 498, 499, 475, + 276, 272, 264, 281, 285, 275, 284, 289, 290, 287, + 302, 301, 303, 304, 307, 310, 312, 305, 315, 313, + 326, 319, 318, 324, 332, 327, 204, 329, 336, 331, + 342, 347, 348, 351, 353, 356, 360, 359, 352, 372, + 361, 721, 372, 711, 388, 597, 392, 432, 320, 383, + 235, 396, 400, 0, 392, 394, 402, 379, 398, 401, + 403, 404, 405, 406, 410, 407, 408, 425, 418, 423, + 429, 437, 435, 432, 439, 422, 442, 444, 445, 447, + 448, 457, 454, 460, 456, 462, 463, 464, 466, 467, + 483, 469, 473, 476, 485, 490, 494, 502, 486, 504, - 506, 504, 511, 516, 512, 489, 514, 501, 517, 491, - 518, 515, 522, 524, 525, 529, 530, 537, 534, 535, - 538, 532, 547, 543, 552, 544, 551, 555, 548, 558, - 566, 569, 549, 576, 559, 572, 573, 578, 581, 585, - 582, 580, 583, 590, 587, 589, 591, 593, 592, 600, - 610, 607, 608, 620, 609, 605, 616, 617, 618, 596, - 628, 627, 623, 632, 638, 629, 636, 639, 641, 643, - 642, 644, 646, 656, 649, 659, 652, 666, 661, 667, - 664, 676, 651, 662, 672, 673, 674, 678, 677, 679, - 684, 687, 688, 690, 691, 685, 698, 696, 700, 713, + 505, 495, 513, 510, 517, 518, 519, 508, 522, 509, + 524, 520, 523, 525, 527, 534, 533, 481, 535, 545, + 536, 540, 546, 537, 553, 549, 557, 552, 556, 175, + 554, 562, 566, 570, 563, 571, 574, 575, 576, 579, + 587, 590, 583, 580, 588, 592, 591, 598, 594, 595, + 596, 607, 615, 608, 611, 618, 617, 620, 621, 622, + 623, 599, 633, 625, 635, 629, 641, 626, 642, 645, + 640, 647, 648, 649, 650, 652, 660, 655, 663, 664, + 671, 668, 673, 670, 682, 658, 667, 677, 679, 680, + 683, 684, 687, 688, 690, 693, 695, 696, 697, 706, - 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, - 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, - 756, 757, 761, 768, 769, 6010, 760, 773, 771, 774, - 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, - 825, 791, 801, 804, 814, 795, 6010, 815, 807, 849, - 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, - 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, - 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, - 893, 895, 902, 905, 904, 908, 916, 909, 915, 917, - 921, 922, 925, 927, 929, 923, 926, 933, 950, 931, + 701, 703, 717, 705, 710, 718, 719, 727, 712, 720, + 739, 744, 745, 733, 731, 747, 749, 752, 754, 760, + 755, 757, 763, 764, 765, 766, 773, 768, 6038, 772, + 774, 782, 784, 786, 790, 787, 796, 794, 777, 804, + 806, 802, 810, 832, 788, 800, 809, 811, 814, 6038, + 822, 816, 856, 827, 820, 840, 837, 836, 844, 845, + 838, 846, 867, 850, 849, 852, 879, 854, 862, 864, + 874, 880, 878, 887, 890, 886, 888, 894, 898, 895, + 896, 897, 907, 899, 901, 909, 910, 911, 914, 918, + 923, 928, 921, 915, 931, 926, 932, 936, 939, 933, - 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, - 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, - 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, - 6010, 1007, 1009, 1011, 1012, 1013, 1010, 6010, 1014, 1015, - 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, - 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, - 1061, 1064, 1065, 1068, 1070, 1088, 6010, 1071, 1077, 1080, - 1079, 1085, 1082, 1090, 1097, 1100, 1103, 1106, 1116, 1093, - 1117, 1111, 1113, 1072, 1118, 1123, 1125, 1126, 1127, 1128, - 1129, 1130, 1132, 1131, 1137, 1139, 6010, 1144, 1154, 1155, + 937, 943, 955, 950, 951, 959, 961, 960, 953, 966, + 962, 969, 972, 970, 978, 980, 981, 976, 982, 984, + 987, 993, 986, 988, 995, 997, 996, 1000, 1005, 1006, + 1010, 990, 1018, 1001, 6038, 1020, 1012, 1014, 1016, 1024, + 1026, 6038, 1027, 1028, 1029, 1036, 1031, 1041, 1032, 1039, + 1046, 1049, 1042, 1050, 1061, 1051, 1059, 1064, 1060, 1063, + 1066, 1069, 1072, 1070, 1077, 1073, 1067, 935, 1080, 1094, + 6038, 1079, 1081, 1085, 1084, 1091, 1097, 1106, 1104, 1112, + 1105, 1109, 1122, 1123, 1125, 1126, 1130, 1086, 1129, 1131, + 1133, 1134, 1136, 1137, 1135, 1138, 1144, 1140, 1145, 1141, - 1136, 1146, 1156, 1157, 1159, 1160, 1162, 1163, 1165, 1164, - 1169, 1179, 1170, 1183, 1180, 1181, 1185, 1186, 1188, 1187, - 1189, 1191, 1203, 1196, 1195, 1211, 1206, 1213, 1215, 1222, - 1204, 1217, 1218, 1219, 1221, 1224, 1226, 1228, 1230, 1232, - 1239, 1237, 1234, 1235, 1242, 1250, 1243, 1245, 1253, 1254, - 1246, 1255, 1258, 1263, 1266, 1267, 1260, 6010, 1276, 1269, - 1277, 1279, 1282, 1285, 1284, 1286, 1290, 813, 1291, 1292, - 1293, 1295, 1298, 1296, 1300, 1301, 1299, 1309, 1306, 1314, - 1321, 1320, 1322, 1324, 1325, 1332, 1328, 1335, 1331, 1336, - 1344, 1337, 1340, 1346, 1354, 1330, 1347, 1352, 1355, 1358, + 6038, 1152, 1158, 1169, 1155, 1164, 1165, 1166, 1168, 1170, + 1171, 1172, 1174, 1173, 1178, 1192, 1182, 1193, 1189, 1195, + 1190, 1191, 1197, 1196, 1200, 1205, 1213, 1210, 1215, 1218, + 1226, 1225, 1228, 1235, 1237, 1211, 1230, 1203, 1222, 1234, + 1240, 1239, 1238, 1245, 1246, 1253, 1248, 1249, 1251, 1254, + 1263, 1255, 1258, 1265, 1262, 1269, 1266, 1259, 1278, 1281, + 1271, 1279, 6038, 1288, 1287, 1289, 1291, 1293, 1297, 1299, + 1290, 1301, 1302, 1303, 1305, 1307, 1312, 1313, 1314, 1308, + 1320, 1318, 1321, 1325, 1323, 1337, 1336, 1338, 1328, 1340, + 1347, 1344, 1348, 1350, 1351, 1358, 1332, 1355, 1359, 1366, - 1360, 1361, 1368, 1369, 1371, 1378, 1373, 1345, 1380, 1383, - 1384, 1385, 1387, 1388, 1389, 1390, 1397, 1392, 1395, 1394, - 1398, 1393, 1399, 1400, 1401, 1420, 1407, 1415, 1417, 1419, - 1422, 1423, 1424, 1425, 1428, 1429, 1430, 1431, 1432, 1449, - 1437, 1439, 1444, 1452, 1451, 1442, 1455, 1459, 1460, 1462, - 1470, 1471, 1454, 1473, 1474, 1463, 1478, 1479, 1481, 1482, - 1484, 1489, 1490, 1492, 1494, 1493, 1496, 1497, 1501, 1502, - 6010, 1504, 1515, 1505, 1512, 1510, 1513, 1517, 1524, 1519, - 1521, 1526, 1520, 1529, 1550, 6010, 1531, 6010, 6010, 1530, - 6010, 6010, 1532, 1533, 1536, 1553, 1542, 1560, 1537, 1540, + 1361, 1362, 1365, 1363, 1372, 1367, 1381, 1375, 1376, 1377, + 1391, 1386, 1389, 1392, 1393, 1395, 1398, 1400, 1401, 1396, + 1402, 1409, 1404, 1411, 1406, 1410, 1405, 1407, 1417, 1413, + 1430, 1427, 1431, 1432, 1433, 1434, 1435, 1439, 1436, 1440, + 1437, 1442, 1446, 1444, 1457, 1448, 1462, 1449, 1464, 1450, + 1465, 1468, 1470, 1471, 1472, 1475, 1478, 1474, 1482, 1485, + 1486, 1487, 1490, 1488, 1495, 1497, 1491, 1499, 1503, 1506, + 1504, 1510, 1512, 1515, 1507, 6038, 1511, 1523, 1519, 1522, + 1524, 1527, 1528, 1535, 1532, 1531, 1533, 1534, 1537, 1560, + 6038, 1541, 6038, 6038, 1544, 6038, 6038, 1545, 1542, 6038, - 1551, 1534, 1573, 1574, 1563, 1556, 1564, 1566, 1580, 1585, - 1587, 1588, 1590, 1595, 1596, 1598, 1599, 1601, 1608, 1609, - 1604, 1610, 1613, 1612, 1614, 1571, 1618, 1615, 1620, 1621, - 1623, 1624, 1625, 1637, 1635, 1627, 1644, 6010, 1645, 1648, - 1652, 1649, 1657, 1653, 1655, 1658, 1660, 1663, 1664, 1665, - 1668, 1667, 1669, 1671, 1675, 1677, 1682, 1678, 6010, 1680, - 1681, 1679, 1686, 1687, 1692, 1693, 1694, 1699, 1700, 1701, - 1711, 1706, 1702, 1704, 1712, 1713, 1715, 6010, 1720, 1728, - 1719, 1725, 1729, 1716, 1731, 1732, 1733, 1734, 1735, 1738, - 1739, 1741, 1752, 1747, 1749, 1744, 1745, 1762, 1755, 1765, + 1543, 1547, 1558, 1566, 1570, 1553, 1550, 1573, 1555, 1583, + 1588, 1576, 1578, 1584, 1585, 1591, 1597, 1586, 1603, 1598, + 1609, 1611, 1615, 1605, 1616, 1618, 1622, 1619, 1623, 1625, + 1626, 1628, 1627, 1632, 1630, 1634, 1636, 1638, 1639, 1640, + 1649, 1650, 1653, 1660, 6038, 1658, 1667, 1670, 1666, 1674, + 1641, 1669, 1657, 1673, 1677, 1678, 1679, 1680, 1681, 1682, + 1684, 1687, 1690, 1695, 1691, 6038, 1693, 1694, 1692, 1699, + 1700, 1705, 1706, 1707, 1712, 1713, 1714, 1724, 1719, 1715, + 1717, 1725, 1726, 1728, 6038, 1733, 1741, 1732, 1738, 1742, + 1729, 1744, 1745, 1746, 1747, 1748, 1751, 1752, 1754, 1765, - 1767, 1764, 1771, 1772, 1773, 1774, 1775, 1776, 1778, 1783, - 1785, 1782, 1793, 1786, 1805, 1807, 1800, 1789, 1790, 1809, - 1791, 1815, 1817, 1818, 1813, 1819, 1826, 1803, 1825, 1822, - 1828, 1830, 1827, 1834, 1835, 1837, 1841, 1839, 1843, 6010, - 1845, 1846, 6010, 1847, 1849, 1871, 1850, 1848, 1853, 1855, - 1856, 1873, 1857, 1864, 1858, 1865, 1889, 1884, 1886, 1885, - 1891, 1893, 1894, 1895, 1897, 1901, 1904, 1913, 1914, 1912, - 1921, 1923, 1903, 1919, 1922, 1941, 1920, 1924, 1930, 1927, - 1933, 1926, 1928, 1937, 1935, 1943, 1946, 1948, 6010, 1956, - 1963, 1953, 1959, 1957, 1971, 1968, 1958, 6010, 1866, 1969, + 1760, 1762, 1757, 1758, 1775, 1768, 1778, 1780, 1777, 1784, + 1785, 1786, 1787, 1788, 1789, 1791, 1796, 1798, 1795, 1806, + 1799, 1818, 1820, 1813, 1802, 1803, 1822, 1804, 1828, 1830, + 1831, 1826, 1832, 1839, 1816, 1838, 1835, 1841, 1843, 1840, + 1847, 1848, 1850, 1854, 1852, 1856, 6038, 1858, 1859, 6038, + 1860, 1862, 1884, 1863, 1861, 1866, 1868, 1869, 1886, 1870, + 1877, 1871, 1878, 1902, 1897, 1899, 1898, 1904, 1906, 1907, + 1908, 1910, 1914, 1879, 1917, 1926, 1927, 1925, 1934, 1936, + 1916, 1932, 1935, 1954, 1933, 1937, 1943, 1940, 1946, 1939, + 1941, 1950, 1948, 1956, 1959, 1961, 6038, 1969, 1976, 1966, - 1974, 1981, 1976, 1979, 1982, 1980, 1983, 1984, 1989, 1986, - 1993, 1988, 1991, 2005, 6010, 1996, 6010, 1992, 2003, 2007, - 2010, 2009, 2013, 2011, 2014, 6010, 6010, 2015, 2021, 2017, - 2031, 2022, 6010, 2029, 2038, 2039, 2033, 2034, 2041, 2042, - 2044, 2046, 2049, 2053, 2050, 2057, 2052, 2055, 2054, 6010, - 2063, 2056, 2069, 2071, 2065, 2073, 2075, 2072, 6010, 2079, - 2082, 2083, 2092, 2088, 2090, 2091, 2093, 2094, 2097, 2100, - 2101, 2102, 2103, 2110, 2112, 2108, 2117, 2118, 2120, 6010, - 2107, 2111, 2130, 2127, 2129, 2126, 2133, 2134, 2136, 2137, - 2138, 1628, 2139, 2144, 2143, 2151, 2153, 2146, 2149, 2159, + 1972, 1970, 1984, 1981, 1971, 6038, 1982, 1987, 1988, 1995, + 1992, 1993, 1994, 1997, 2000, 1998, 2003, 2002, 2007, 2013, + 2005, 2026, 6038, 2008, 6038, 2009, 2010, 2006, 2021, 2027, + 2028, 2029, 2031, 6038, 6038, 2032, 2033, 2038, 2046, 2041, + 6038, 2044, 2053, 2055, 2048, 2049, 2050, 2057, 2058, 2061, + 2062, 2071, 2064, 2072, 2067, 2075, 2069, 6038, 2078, 2068, + 2085, 2086, 2079, 2087, 2088, 2094, 6038, 2096, 2097, 2098, + 2105, 2101, 2103, 2107, 2108, 2109, 2114, 2115, 2116, 2117, + 2118, 2127, 2128, 2119, 2130, 2133, 2129, 6038, 2126, 2137, + 2145, 2141, 2143, 2140, 2147, 2148, 2150, 2151, 2152, 2153, - 2148, 2150, 2160, 2169, 2163, 2166, 2168, 2170, 6010, 2171, - 2174, 124, 2177, 2178, 2176, 2179, 2180, 2183, 2185, 2192, - 2200, 2196, 2197, 2198, 2202, 2204, 2206, 2207, 2208, 2210, - 2209, 2212, 6010, 2214, 2215, 2219, 2220, 2226, 2221, 2228, - 6010, 2238, 2225, 2246, 2236, 2234, 2249, 2240, 2250, 2251, - 2253, 2254, 2256, 2255, 2257, 6010, 2263, 2264, 2265, 2267, - 2272, 2271, 2274, 2278, 2279, 2280, 2284, 2282, 2281, 2286, - 2285, 2289, 2290, 2295, 2291, 2292, 2300, 2302, 6010, 2309, - 2305, 2307, 2313, 2314, 2316, 2317, 2324, 2322, 2325, 2327, - 2331, 2342, 2335, 2328, 2344, 2345, 2349, 2334, 2358, 2357, + 2158, 2159, 2160, 2167, 2168, 2163, 2165, 2173, 2174, 2175, + 2180, 2181, 2182, 2185, 2183, 2184, 6038, 2186, 2188, 147, + 2190, 2191, 2195, 2196, 2199, 2198, 2203, 2216, 2217, 2213, + 2212, 2215, 2219, 2221, 2222, 2224, 2225, 2229, 2226, 2228, + 6038, 2231, 2232, 2234, 2238, 2237, 2240, 2245, 6038, 2248, + 2251, 2255, 2258, 2257, 2263, 2262, 2267, 2268, 2269, 2270, + 2272, 2273, 2275, 2276, 6038, 2280, 2282, 2283, 2290, 2291, + 2293, 2292, 2294, 2298, 2299, 2300, 2302, 2304, 2303, 2305, + 2306, 2307, 2308, 2316, 2319, 2320, 2321, 6038, 2328, 2323, + 2326, 2329, 2332, 2333, 2335, 2342, 2343, 2344, 2346, 2350, - 2359, 2366, 2353, 2368, 2370, 2336, 2360, 2363, 2371, 2376, - 2379, 2377, 2386, 2388, 2384, 2383, 2385, 2396, 2409, 2400, - 6010, 2398, 2404, 2390, 2412, 2416, 2413, 2392, 2418, 2417, - 2420, 2424, 2425, 2426, 2433, 2434, 2428, 2432, 2437, 2438, - 2430, 2441, 2445, 2448, 2450, 2447, 2455, 2456, 6010, 2457, - 2461, 2463, 2464, 2468, 2451, 2475, 2476, 2478, 2465, 2469, - 2480, 2472, 2481, 2485, 2488, 2487, 2489, 2494, 6010, 2495, - 2499, 2497, 2501, 2503, 2509, 2506, 2513, 2519, 2516, 2504, - 2523, 2500, 2524, 6010, 2531, 2532, 2528, 2536, 2534, 2527, - 2538, 2540, 2535, 6010, 2541, 2542, 2550, 2551, 2547, 6010, + 2363, 2352, 2345, 2361, 2356, 2364, 2366, 2373, 2374, 2378, + 2380, 2370, 2384, 2387, 2377, 2388, 2389, 2393, 2394, 2395, + 2396, 2407, 2408, 2400, 2411, 2403, 2424, 2429, 2420, 6038, + 2418, 2428, 2416, 2430, 2438, 2433, 2435, 2436, 2440, 2444, + 2445, 2446, 2447, 2410, 2448, 2450, 2452, 2451, 2455, 2459, + 2460, 2462, 2467, 2471, 2473, 2475, 2477, 6038, 2480, 2476, + 2463, 2484, 2486, 2489, 2491, 2494, 2492, 2496, 2498, 2500, + 2501, 2502, 2503, 2506, 2504, 2508, 2507, 6038, 2512, 2514, + 2522, 2516, 2526, 2520, 2532, 2533, 2534, 2536, 2524, 2539, + 2353, 2540, 6038, 2549, 2550, 2546, 2554, 2547, 2552, 2555, - 2554, 2552, 2556, 2557, 2559, 2560, 2562, 2564, 2558, 2567, - 2570, 2580, 2568, 2577, 6010, 2571, 2587, 2574, 2588, 2593, - 2589, 2594, 2595, 2599, 2596, 2600, 6010, 2608, 2611, 2605, - 2618, 2606, 2619, 2620, 2621, 2622, 2623, 2624, 6010, 2627, - 2629, 2630, 2631, 2633, 2634, 2635, 2642, 2639, 2643, 2646, - 2649, 2650, 2653, 2656, 2659, 2658, 2655, 2667, 2668, 2670, - 2671, 2657, 2674, 2681, 2686, 2688, 2683, 2689, 6010, 2692, - 2693, 2687, 2694, 2695, 2698, 2699, 2700, 2702, 2703, 2705, - 2704, 2707, 2720, 2729, 2715, 2716, 2708, 2721, 2724, 2725, - 2731, 2732, 2736, 2743, 2734, 2738, 2747, 2742, 2745, 2755, + 2558, 2559, 6038, 2560, 2561, 2568, 2569, 2564, 6038, 2573, + 2572, 2565, 2575, 2574, 2576, 2577, 2581, 2582, 2590, 2591, + 2598, 2583, 2595, 6038, 2593, 2605, 2602, 2609, 2603, 2610, + 2613, 2614, 2617, 2619, 2616, 6038, 2633, 2631, 2615, 2640, + 2623, 2636, 2637, 2638, 2641, 2645, 2644, 2647, 6038, 2650, + 2648, 2651, 2652, 2654, 2656, 2657, 2665, 2660, 2661, 2668, + 2670, 2671, 2673, 2678, 2677, 2688, 2679, 2681, 2694, 2687, + 2698, 2675, 2700, 2707, 2709, 2712, 2710, 2713, 6038, 2716, + 2717, 2699, 2718, 2719, 2720, 2722, 2723, 2725, 2726, 2727, + 2728, 2730, 2744, 2747, 2731, 2739, 2737, 2748, 2750, 2752, - 2744, 2746, 2748, 2753, 2756, 2757, 2758, 2759, 2766, 2762, - 2776, 2780, 2777, 2781, 2771, 2783, 2786, 2787, 6010, 2790, - 2791, 2788, 2794, 2795, 2798, 2800, 2807, 2802, 2809, 2810, - 2812, 2819, 2804, 2813, 2818, 2826, 2828, 6010, 2821, 6010, - 2825, 2829, 2832, 2836, 2835, 6010, 2841, 6010, 2842, 2844, - 2837, 2847, 6010, 2848, 2849, 2850, 2856, 2852, 2854, 2858, - 2860, 2862, 2870, 2864, 2861, 2866, 2868, 2882, 2872, 2874, - 2880, 2884, 2888, 2890, 2878, 2895, 2889, 2891, 2897, 2900, - 2903, 6010, 2905, 2906, 2907, 2909, 2912, 2910, 2913, 2915, - 2916, 2917, 2918, 2925, 2922, 2931, 2934, 2938, 2923, 2946, + 2753, 2754, 2755, 2764, 2760, 2761, 2768, 2763, 2769, 2776, + 2766, 2771, 2777, 2778, 2779, 2780, 2783, 2788, 2781, 2791, + 2795, 2800, 2802, 2804, 2792, 2806, 2809, 2810, 6038, 2813, + 2814, 2811, 2817, 2818, 2821, 2823, 2830, 2825, 2832, 2833, + 2835, 2842, 2827, 2836, 2841, 2849, 2851, 6038, 2844, 6038, + 2848, 2852, 2855, 2859, 2858, 6038, 2864, 6038, 2865, 2867, + 2860, 2870, 6038, 2871, 2872, 2873, 2879, 2875, 2877, 2881, + 2883, 2885, 2893, 2887, 2884, 2889, 2891, 2905, 2895, 2897, + 2903, 2907, 2911, 2913, 2901, 2918, 2912, 2914, 2920, 2923, + 2926, 6038, 2928, 2929, 2930, 2932, 2935, 2933, 2936, 2938, - 6010, 2941, 2945, 2947, 2948, 6010, 2951, 2949, 2952, 2957, - 2950, 2959, 2960, 2962, 2967, 2969, 2963, 2976, 2978, 2980, - 2971, 6010, 2961, 2984, 2986, 2988, 2993, 2992, 2995, 2998, - 3006, 3002, 3001, 3003, 3004, 3005, 3009, 3016, 3019, 3015, - 3024, 3008, 3017, 3027, 3028, 3029, 3030, 3032, 3034, 3035, - 3039, 3040, 3042, 3037, 3038, 3041, 3044, 3043, 6010, 3046, - 3055, 3060, 3062, 3056, 3059, 3066, 3067, 3068, 3069, 3072, - 3074, 3076, 6010, 3078, 6010, 3070, 3088, 3081, 3097, 3082, - 3087, 3099, 3101, 3103, 3089, 3104, 3106, 3107, 3112, 3110, - 3113, 3115, 3114, 3131, 3118, 3120, 3121, 3129, 3122, 3130, + 2939, 2940, 2941, 2948, 2945, 2689, 2956, 2963, 2946, 2968, + 6038, 2955, 2971, 2954, 2972, 6038, 2974, 2964, 2975, 2980, + 2977, 2967, 2982, 2983, 2989, 2984, 2987, 2992, 2999, 3000, + 3001, 6038, 2994, 3006, 3002, 3009, 3014, 3021, 3017, 3018, + 3023, 3031, 3028, 3016, 3008, 3030, 3032, 3034, 3041, 3042, + 3038, 3045, 3040, 3046, 3048, 3050, 3044, 3053, 3054, 3056, + 3057, 3060, 3064, 3065, 3058, 3066, 3061, 3069, 3067, 6038, + 3076, 3079, 3080, 3086, 3089, 3084, 3068, 3090, 3091, 3094, + 3095, 3101, 3096, 6038, 3103, 6038, 3097, 3111, 3106, 3116, + 3107, 3117, 3121, 3126, 3120, 3127, 3129, 3131, 3128, 3132, - 3133, 6010, 6010, 3135, 3137, 3138, 3141, 3142, 3143, 3149, - 3144, 3154, 3152, 3158, 3162, 3167, 6010, 3163, 3168, 3165, - 3169, 3178, 3171, 3176, 3188, 3181, 3190, 3185, 6010, 3173, - 3192, 3200, 3195, 3196, 3203, 6010, 3201, 6010, 3198, 3202, - 3204, 3207, 3210, 3211, 3213, 3214, 3219, 3226, 3231, 3222, - 3230, 3232, 3215, 3234, 3236, 3243, 3238, 3239, 3241, 6010, - 3245, 3242, 3246, 3251, 3258, 3261, 3248, 3247, 6010, 3254, - 3265, 3267, 3268, 3271, 3273, 3274, 3275, 3277, 3279, 3276, - 3278, 3287, 3284, 3283, 3293, 3303, 3294, 3305, 6010, 3306, - 3300, 3313, 3315, 3308, 3310, 3316, 3317, 3318, 3321, 3323, + 3130, 3137, 3140, 3141, 3144, 3143, 3145, 3151, 3153, 3154, + 3157, 3155, 6038, 6038, 3158, 3159, 3160, 3162, 3163, 3169, + 3175, 3170, 3180, 3166, 3181, 3186, 3193, 6038, 3189, 3191, + 3188, 3194, 3201, 3196, 3198, 3211, 3207, 3215, 3213, 6038, + 3200, 3208, 3223, 3216, 3218, 3230, 6038, 3225, 6038, 3226, + 3228, 3231, 3232, 3235, 3236, 3237, 3238, 3243, 3240, 3250, + 3246, 3254, 3255, 3256, 3257, 3258, 3266, 3261, 3262, 3263, + 6038, 3268, 3265, 3269, 3272, 3279, 3282, 3280, 3270, 6038, + 3286, 3291, 3288, 3292, 3294, 3296, 3297, 3298, 3300, 3302, + 3299, 3303, 3315, 3308, 3306, 3310, 3322, 3325, 3327, 6038, - 3322, 3324, 3326, 3328, 3325, 3335, 3329, 3342, 3331, 3345, - 3351, 3352, 3332, 3348, 3355, 3356, 3359, 3358, 3362, 3365, - 3369, 3366, 3378, 3379, 3370, 3373, 3382, 3383, 3390, 3385, - 6010, 3395, 3375, 3398, 3396, 3397, 3402, 3403, 3405, 3406, - 3407, 3408, 3409, 3416, 3411, 6010, 3423, 3414, 3413, 3424, - 3430, 3438, 3433, 3434, 3436, 3440, 3437, 3443, 3441, 3446, - 3447, 3450, 3451, 6010, 6010, 3453, 3455, 3456, 6010, 3458, - 3460, 3470, 3473, 3462, 3459, 3285, 3466, 3469, 3476, 3478, - 3482, 6010, 3479, 3491, 3486, 3487, 3496, 3499, 3489, 3492, - 3500, 3501, 3503, 3502, 3505, 3507, 3510, 3511, 3519, 3523, + 3329, 3330, 3337, 3333, 3335, 3317, 3338, 3336, 3340, 3342, + 3343, 3344, 3345, 3346, 3348, 3350, 3357, 3351, 3364, 3365, + 3352, 3373, 3359, 3368, 6038, 3374, 3375, 3377, 3378, 3382, + 3383, 3386, 3388, 3381, 3395, 3399, 3390, 3392, 3403, 3404, + 3412, 3407, 6038, 3415, 3405, 3420, 3416, 3418, 3425, 3426, + 3428, 3417, 3419, 3432, 3433, 3440, 3435, 6038, 3443, 3438, + 3444, 3445, 3447, 3454, 3449, 3451, 3457, 3460, 3461, 3463, + 3465, 3466, 3467, 3470, 3472, 6038, 6038, 3474, 3475, 3477, + 6038, 3480, 3476, 3490, 3482, 3483, 3479, 3491, 3493, 3495, + 3505, 3496, 3499, 6038, 3503, 3507, 3509, 3510, 3518, 3519, - 3515, 3516, 3520, 6010, 3518, 3526, 3527, 3529, 3530, 3537, - 6010, 3534, 3539, 3541, 3533, 3545, 3546, 3551, 3555, 3556, - 3557, 3559, 3558, 3560, 3561, 3570, 3568, 3569, 3566, 3572, - 3575, 6010, 3576, 3582, 3584, 3587, 6010, 3589, 3596, 3597, - 3600, 3592, 3601, 3599, 3608, 6010, 3603, 3605, 3607, 3610, - 3620, 3612, 3622, 3613, 6010, 3617, 3621, 3623, 6010, 3624, - 3630, 3633, 3637, 3626, 3644, 3639, 3642, 3643, 3641, 6010, - 3648, 6010, 3651, 3652, 3655, 6010, 3657, 3658, 3660, 3662, - 3659, 3666, 3667, 3674, 3663, 3675, 3676, 3677, 3678, 3680, - 3687, 3679, 3686, 3688, 3689, 6010, 3690, 3692, 3698, 3699, + 3524, 3511, 3525, 3520, 3514, 3526, 3527, 3528, 3531, 3535, + 3543, 3545, 3532, 3541, 3544, 6038, 3542, 3547, 3549, 3551, + 3553, 3555, 6038, 3558, 3559, 3560, 3565, 3568, 3571, 3573, + 3579, 3561, 3576, 3580, 3581, 3583, 3585, 3593, 3591, 3592, + 3595, 3600, 3598, 6038, 3604, 3596, 3588, 3610, 6038, 3615, + 3617, 3624, 3625, 3620, 3621, 3622, 3629, 6038, 3627, 3628, + 3630, 3631, 3641, 3633, 3643, 3636, 6038, 3638, 3640, 3644, + 6038, 3651, 3652, 3658, 3661, 3645, 3668, 3663, 3666, 3664, + 3667, 6038, 3672, 6038, 3675, 3673, 3679, 6038, 3674, 3681, + 3682, 3684, 3688, 3689, 3690, 3692, 3696, 3698, 3699, 3700, - 3704, 3693, 3701, 3709, 3708, 6010, 6010, 3712, 6010, 3715, - 3716, 3717, 6010, 3719, 3723, 3726, 3724, 3727, 3729, 3736, - 3730, 6010, 3739, 3725, 3742, 3740, 3744, 3747, 3748, 3751, - 3750, 3752, 3753, 3755, 6010, 3756, 3757, 3764, 3754, 3767, - 3770, 3775, 3771, 6010, 3777, 3779, 3783, 3784, 3785, 6010, - 3786, 6010, 3788, 3790, 3793, 3794, 3797, 6010, 3798, 3803, - 3808, 3802, 3804, 3810, 3813, 3814, 3811, 3815, 3826, 3822, - 3821, 3823, 6010, 3824, 3825, 3833, 3836, 3830, 3838, 3846, - 3842, 3848, 3841, 3844, 3854, 3849, 3855, 3862, 3857, 3864, - 3865, 6010, 3867, 3868, 3851, 3881, 3873, 3874, 6010, 3877, + 3701, 3703, 3710, 3702, 3706, 3709, 3711, 6038, 3712, 3714, + 3721, 3722, 3726, 3728, 3718, 3729, 3731, 6038, 6038, 3737, + 6038, 3738, 3733, 3742, 6038, 3745, 3743, 3752, 3747, 3750, + 3753, 3762, 3748, 6038, 3759, 3754, 3767, 3763, 3765, 3769, + 3770, 3773, 3771, 3775, 3776, 3778, 6038, 3779, 3777, 3793, + 3780, 3785, 3787, 3795, 3794, 6038, 3802, 3804, 3803, 3808, + 3809, 6038, 3810, 6038, 3811, 3815, 3818, 3820, 3812, 6038, + 3823, 3826, 3828, 3817, 3832, 3833, 3834, 3836, 3838, 3842, + 3850, 3846, 3845, 3847, 6038, 3848, 3849, 3853, 3859, 3854, + 3857, 3870, 3861, 3871, 3865, 3868, 3875, 3878, 3879, 3881, - 3885, 3887, 6010, 3871, 3878, 3888, 3894, 3891, 3895, 3896, - 3900, 3901, 6010, 3899, 3903, 3902, 3905, 3918, 3908, 6010, - 6010, 3919, 6010, 3920, 3904, 3906, 3924, 3907, 3928, 3930, - 3931, 3934, 3935, 3939, 3936, 3944, 3951, 3952, 3953, 3955, - 3948, 3949, 6010, 6010, 3960, 3961, 3963, 3965, 3966, 3968, - 3970, 3977, 3973, 3974, 3982, 3979, 3989, 6010, 3986, 3985, - 3991, 6010, 3992, 3993, 3996, 3994, 3997, 4000, 3999, 4001, - 4003, 4004, 4007, 4010, 4012, 4011, 4013, 4020, 4022, 4023, - 4024, 4025, 4030, 6010, 4034, 4031, 4033, 4035, 4036, 4038, - 4040, 4044, 4045, 6010, 4047, 4049, 4051, 4046, 4053, 4055, + 3885, 3886, 3887, 6038, 3888, 3893, 3889, 3902, 3898, 3892, + 6038, 3899, 3903, 3909, 6038, 3906, 3912, 3913, 3916, 3917, + 3918, 3921, 3920, 3923, 6038, 3927, 3928, 3924, 3925, 3926, + 3933, 6038, 6038, 3941, 6038, 3943, 3929, 3946, 3945, 3948, + 3950, 3954, 3955, 3957, 3951, 3958, 3966, 3965, 3975, 3982, + 3983, 3981, 3972, 3967, 6038, 6038, 3986, 3988, 3990, 3992, + 3993, 3995, 3979, 4002, 4000, 4008, 4011, 4001, 4004, 6038, + 4012, 4013, 4015, 6038, 4017, 4018, 4020, 4021, 4022, 4026, + 4024, 4025, 4029, 4028, 4031, 4035, 4032, 4041, 4037, 4048, + 4038, 4049, 4051, 4052, 4056, 6038, 4053, 4058, 4059, 4062, - 4063, 4070, 4071, 4075, 4065, 4072, 4076, 4078, 4082, 4079, - 6010, 4083, 4086, 4089, 4091, 4093, 4095, 4096, 4098, 4099, - 4101, 4104, 4102, 4111, 4113, 4108, 4105, 4116, 4118, 6010, - 4120, 4124, 4121, 4127, 4128, 4129, 4131, 4132, 4139, 4136, - 4141, 4142, 4144, 6010, 4145, 4147, 4149, 4150, 4152, 4153, - 4157, 4158, 4159, 6010, 4167, 4160, 4168, 4163, 4169, 4171, - 4176, 4178, 4181, 4182, 4183, 6010, 4185, 4188, 4191, 4192, - 4194, 4195, 4199, 4198, 6010, 4200, 4206, 4208, 4215, 4210, - 4218, 4214, 4220, 4213, 4221, 4226, 4227, 4228, 4230, 4232, - 4233, 4246, 4248, 4245, 6010, 4235, 6010, 4243, 4250, 4259, + 4065, 4067, 4066, 4068, 4069, 6038, 4073, 4072, 4076, 4081, + 4082, 4084, 4074, 4092, 4093, 4099, 4100, 4101, 4102, 4104, + 4106, 4107, 6038, 4117, 4108, 4109, 4111, 4119, 4121, 4124, + 4126, 4127, 4131, 4132, 4133, 4135, 4137, 4139, 4140, 4141, + 4142, 6038, 4146, 4157, 4144, 4159, 4148, 4154, 4162, 4167, + 4170, 4152, 4164, 4172, 4174, 6038, 4175, 4176, 4177, 4178, + 4181, 4184, 4185, 4186, 4187, 6038, 4189, 4193, 4197, 4194, + 4196, 4198, 4200, 4205, 4209, 4210, 4217, 6038, 4207, 4222, + 4223, 4211, 4221, 4224, 4225, 4215, 6038, 4233, 4239, 4231, + 4248, 4229, 4249, 4247, 4251, 4232, 4240, 4255, 4254, 4259, - 4256, 4244, 6010, 4254, 4258, 4261, 4262, 4263, 6010, 4267, - 4268, 4271, 4269, 6010, 4273, 4275, 4278, 4282, 4288, 4289, - 6010, 4292, 4293, 4295, 4303, 4305, 4302, 4304, 4306, 4308, - 4309, 4310, 4311, 4319, 4314, 4316, 6010, 4322, 4324, 4331, - 4332, 4325, 4315, 4336, 4339, 4333, 6010, 4342, 4341, 4343, - 4344, 4345, 4348, 4350, 4357, 4353, 4352, 6010, 4356, 4360, - 4373, 4354, 4283, 6010, 4366, 6010, 4364, 4376, 4371, 4369, - 4379, 6010, 4381, 4388, 4384, 4387, 4383, 6010, 6010, 4390, - 6010, 4391, 6010, 4393, 4394, 6010, 6010, 4397, 4398, 4399, - 4400, 4412, 6010, 4414, 6010, 4421, 4416, 4403, 4401, 4420, + 4260, 4261, 4262, 4271, 4272, 4273, 6038, 4264, 6038, 4274, + 4278, 4281, 4285, 4267, 6038, 4280, 4282, 4291, 4288, 4292, + 6038, 4293, 4295, 4297, 4302, 6038, 4304, 4308, 4299, 4306, + 4310, 4315, 6038, 4321, 4322, 4323, 4330, 4332, 4334, 4317, + 4335, 4327, 4329, 4337, 4340, 4344, 4345, 4342, 6038, 4346, + 4348, 4353, 4349, 4355, 4357, 4358, 4361, 4363, 6038, 4365, + 4366, 4367, 4368, 4369, 4371, 4374, 4378, 4375, 4380, 6038, + 4383, 4384, 4394, 4385, 4390, 6038, 4395, 6038, 4396, 4400, + 4402, 4397, 4406, 6038, 4408, 4409, 4413, 4415, 4411, 6038, + 6038, 4417, 6038, 4418, 6038, 4419, 4421, 6038, 6038, 4422, - 6010, 4408, 4406, 4429, 6010, 4422, 4432, 4430, 4434, 6010, - 4436, 4437, 4433, 4438, 6010, 4441, 4444, 4445, 4439, 4446, - 4453, 4459, 4451, 4454, 4460, 4462, 4463, 4464, 4471, 4474, - 4476, 4478, 4479, 4466, 4480, 4481, 4486, 4488, 4489, 4490, - 4492, 4494, 4495, 4497, 4499, 4502, 4503, 4504, 4505, 4506, - 4507, 4509, 4516, 4519, 4521, 4520, 4522, 4524, 4523, 4525, - 4527, 4531, 4533, 4534, 6010, 4532, 4535, 4538, 4541, 4545, - 4551, 4553, 4555, 4563, 4564, 6010, 4566, 6010, 4568, 4552, - 4560, 4572, 6010, 4573, 4574, 4575, 4576, 4577, 4578, 4579, - 4580, 4583, 4584, 4587, 6010, 4590, 4582, 4585, 4606, 6010, + 4424, 4426, 4429, 4439, 6038, 4441, 6038, 4448, 4443, 4430, + 4432, 4447, 6038, 4445, 4449, 4456, 6038, 4451, 4459, 4457, + 4458, 6038, 4463, 4465, 4466, 4469, 6038, 4470, 4477, 4467, + 4474, 4479, 4478, 4480, 4481, 4484, 4489, 4486, 4490, 4494, + 4497, 4503, 4505, 4507, 4500, 4493, 4508, 4514, 4516, 4509, + 4518, 4519, 4520, 4523, 4524, 4526, 4528, 4529, 4532, 4428, + 4533, 4531, 4537, 4534, 4535, 4547, 4541, 4538, 4548, 4549, + 4552, 4553, 4556, 4560, 4558, 4559, 6038, 4561, 4563, 4565, + 4572, 4566, 4577, 4578, 4571, 4587, 4589, 6038, 4591, 6038, + 4593, 4581, 4584, 4596, 6038, 4597, 4598, 4600, 4601, 4602, - 4599, 4610, 4595, 4603, 4607, 4611, 4612, 4615, 4616, 4617, - 4619, 4623, 4631, 4620, 4624, 4627, 4628, 4629, 4635, 4637, - 4640, 4641, 4648, 4649, 4653, 6010, 4644, 6010, 4650, 4654, - 4656, 4658, 4660, 4661, 4664, 6010, 6010, 4662, 4666, 4671, - 4672, 4667, 4675, 4676, 6010, 4677, 4684, 4690, 4686, 6010, - 4679, 4691, 4693, 4696, 6010, 4697, 4698, 4700, 4702, 4703, - 4706, 4710, 4708, 4712, 4714, 4719, 6010, 6010, 6010, 6010, - 4720, 4716, 4724, 4727, 4729, 4725, 4730, 4732, 4733, 6010, - 4736, 6010, 6010, 4741, 4744, 4737, 4745, 4747, 4743, 4752, - 4756, 6010, 4753, 4754, 4758, 4757, 4766, 4770, 4760, 4771, + 4603, 4604, 4605, 4608, 4609, 4612, 6038, 4619, 4607, 4624, + 4631, 6038, 4628, 4635, 4614, 4620, 4636, 4639, 4640, 4641, + 4644, 4642, 4646, 4648, 4655, 4650, 4651, 4652, 4653, 4657, + 4656, 4663, 4664, 4670, 4674, 4675, 4679, 6038, 4665, 6038, + 4680, 4681, 4682, 4685, 4686, 4687, 4690, 6038, 6038, 4688, + 4692, 4697, 4698, 4693, 4702, 4699, 6038, 4704, 4706, 4715, + 4712, 6038, 4716, 4717, 4718, 4721, 6038, 4722, 4723, 4724, + 4727, 4729, 4736, 4739, 4733, 4730, 4740, 4750, 6038, 6038, + 6038, 6038, 4753, 4741, 4756, 4745, 4747, 4757, 4759, 4762, + 4764, 6038, 4770, 6038, 6038, 4767, 4771, 4751, 4773, 4774, - 4773, 4774, 4781, 4777, 4778, 4780, 4783, 4785, 4787, 6010, - 6010, 4789, 4794, 4796, 4804, 4800, 4801, 4813, 4808, 4809, - 4810, 4811, 4815, 4797, 4822, 4827, 4820, 4817, 6010, 4828, - 4831, 6010, 4824, 6010, 4830, 4832, 4838, 4839, 4840, 4841, - 4842, 4844, 6010, 6010, 4845, 4846, 4848, 4855, 4851, 4857, - 4859, 4847, 4861, 4863, 6010, 4865, 6010, 4869, 4870, 4872, - 4873, 4881, 4883, 4884, 4886, 4879, 4888, 6010, 4890, 4891, - 6010, 4892, 4894, 4895, 6010, 4900, 4897, 4903, 4906, 6010, - 4912, 4909, 4914, 6010, 4917, 6010, 4907, 4918, 4920, 4930, - 6010, 4921, 4925, 6010, 4934, 4936, 4928, 4937, 6010, 4922, + 4775, 4777, 4780, 6038, 4781, 4784, 4785, 4783, 4792, 4800, + 4795, 4801, 4787, 4793, 4803, 4804, 4807, 4810, 4812, 4814, + 4816, 6038, 6038, 4818, 4820, 4821, 4828, 4829, 4830, 4832, + 4833, 4836, 4838, 4839, 4840, 4823, 4849, 4851, 4850, 4846, + 6038, 4852, 4853, 6038, 4859, 6038, 4860, 4861, 4862, 4863, + 4864, 4868, 4869, 4872, 6038, 6038, 4867, 4874, 4878, 4883, + 4884, 4879, 4887, 4875, 4889, 4885, 6038, 4892, 6038, 4893, + 4895, 4901, 4902, 4909, 4911, 4912, 4915, 4908, 4917, 6038, + 4910, 4918, 6038, 4920, 4921, 4923, 6038, 4925, 4928, 4930, + 4933, 6038, 4937, 4939, 4940, 6038, 4942, 6038, 4934, 4944, - 6010, 4938, 4943, 4944, 4947, 4939, 4949, 4951, 4952, 4953, - 4961, 4957, 4959, 6010, 6010, 4966, 4962, 4968, 4969, 4971, - 4978, 4973, 4975, 4981, 6010, 6010, 4982, 6010, 4976, 4983, - 6010, 4974, 4990, 4991, 4992, 4994, 4995, 4996, 5001, 5002, - 5003, 5004, 5005, 5011, 5023, 5007, 5021, 5027, 5029, 5031, - 5033, 5025, 5035, 5036, 5013, 5037, 5038, 5042, 6010, 5044, - 5048, 5049, 5045, 6010, 5051, 5053, 5055, 5059, 6010, 5066, - 5061, 5067, 5068, 6010, 5057, 5072, 5069, 5074, 5078, 5085, - 5081, 5080, 5082, 6010, 6010, 6010, 5087, 5091, 6010, 5096, - 5088, 5097, 5098, 6010, 5099, 5100, 6010, 6010, 5101, 5104, + 4947, 4956, 6038, 4948, 4951, 6038, 4958, 4961, 4962, 4953, + 6038, 4963, 6038, 4964, 4970, 4971, 4974, 4967, 4976, 4977, + 4978, 4979, 4986, 4988, 4985, 6038, 6038, 4998, 4983, 4991, + 4994, 4995, 5005, 5000, 5003, 5009, 6038, 6038, 5010, 6038, + 5004, 5013, 6038, 5002, 5017, 5018, 5019, 5021, 5022, 5023, + 5029, 5026, 5030, 5031, 5032, 5038, 5049, 5034, 5055, 5056, + 5058, 5060, 5062, 5050, 5047, 5044, 5065, 5067, 5068, 5069, + 6038, 5071, 5073, 5074, 5075, 6038, 5079, 5080, 5082, 5085, + 6038, 5084, 5086, 5092, 5094, 6038, 5096, 5098, 5100, 5099, + 5102, 5111, 5106, 5107, 5109, 6038, 6038, 6038, 5115, 5122, - 5103, 5111, 6010, 5106, 6010, 5107, 6010, 5109, 5110, 5119, - 5121, 6010, 5124, 5131, 6010, 5134, 5137, 5139, 5140, 5125, - 5127, 5142, 6010, 5150, 5143, 5151, 5153, 5141, 5154, 5155, - 5158, 5163, 5161, 5165, 6010, 5162, 5167, 5168, 5169, 5171, - 5174, 5177, 6010, 5179, 6010, 5180, 5181, 5183, 5182, 5184, - 5185, 5188, 5198, 5192, 5202, 5195, 6010, 6010, 5206, 5208, - 6010, 5199, 6010, 5210, 6010, 5211, 5212, 5213, 5216, 6010, - 5223, 5215, 5217, 5219, 6010, 5224, 5230, 5226, 5232, 6010, - 6010, 5233, 5242, 5234, 5237, 5247, 5249, 5241, 5251, 5243, - 5255, 5252, 5262, 5257, 5263, 5258, 5266, 5268, 5273, 6010, + 6038, 5124, 5112, 5118, 5127, 6038, 5125, 5128, 6038, 6038, + 5129, 5130, 5131, 5138, 6038, 5135, 6038, 5136, 6038, 5137, + 5141, 5148, 5144, 6038, 5150, 5158, 6038, 5161, 5164, 5166, + 5167, 5152, 5156, 5168, 6038, 5177, 5169, 5178, 5180, 5170, + 5181, 5182, 5185, 5190, 5186, 5192, 6038, 5189, 5194, 5195, + 5196, 5198, 5201, 5204, 6038, 5206, 6038, 5207, 5208, 5209, + 5210, 5212, 5214, 5215, 5222, 5218, 5226, 5229, 6038, 6038, + 5231, 5235, 6038, 5232, 6038, 5237, 6038, 5238, 5239, 5240, + 5241, 6038, 5243, 5245, 5247, 5249, 6038, 5250, 5252, 5257, + 5259, 6038, 6038, 5260, 5267, 5264, 5262, 5272, 5274, 5263, - 6010, 6010, 5267, 5260, 5283, 5282, 5284, 5291, 5286, 6010, - 5288, 5289, 5290, 5298, 5295, 5297, 6010, 5299, 5300, 5301, - 5302, 5306, 5303, 5307, 6010, 5320, 5324, 5325, 5314, 5327, - 5334, 5336, 5338, 5339, 6010, 5341, 6010, 6010, 5310, 6010, - 5321, 5331, 5342, 5345, 6010, 5348, 5349, 5350, 5308, 5352, - 5355, 6010, 5362, 5357, 5359, 5360, 6010, 6010, 5367, 6010, - 5369, 5371, 5358, 5379, 5374, 5375, 5381, 5382, 6010, 5384, - 5385, 5388, 5389, 5390, 6010, 5391, 5392, 5394, 5395, 5398, - 5397, 5400, 5402, 5403, 6010, 5407, 5406, 5425, 5422, 6010, - 5409, 5420, 6010, 6010, 5431, 5435, 5424, 6010, 6010, 6010, + 5278, 5275, 5279, 5281, 5291, 5287, 5282, 5289, 5293, 5295, + 5299, 6038, 6038, 6038, 5290, 5296, 5310, 5308, 5311, 5318, + 5303, 6038, 5315, 5317, 5305, 5319, 5323, 5326, 6038, 5327, + 5328, 5329, 5330, 5332, 5333, 5335, 6038, 5337, 5348, 5345, + 5342, 5353, 5360, 5362, 5364, 5365, 6038, 5367, 6038, 6038, + 5338, 6038, 5349, 5351, 5355, 5368, 6038, 5375, 5372, 5376, + 5378, 5380, 5382, 6038, 5389, 5384, 5388, 5385, 6038, 6038, + 5392, 6038, 5394, 5395, 5397, 5405, 5398, 5401, 5403, 5408, + 6038, 5406, 5412, 5414, 5415, 5416, 6038, 5417, 5418, 5420, + 5421, 5424, 5423, 5428, 5429, 5430, 6038, 5431, 5433, 5444, - 5437, 6010, 5439, 5443, 5447, 5451, 5442, 6010, 5453, 5432, - 5454, 6010, 6010, 5455, 5456, 5457, 5459, 6010, 6010, 5460, - 5463, 5461, 5464, 5466, 6010, 5469, 5471, 5477, 5483, 5489, - 5479, 5467, 5484, 5492, 5501, 5474, 5490, 5497, 5498, 5502, - 5500, 5509, 5510, 5506, 5514, 5516, 5517, 6010, 6010, 5521, - 6010, 6010, 5524, 5526, 5528, 5530, 5532, 5534, 5536, 6010, - 5537, 5539, 5540, 5541, 5542, 6010, 5544, 5548, 5543, 5551, - 5545, 5554, 5550, 5560, 6010, 6010, 5552, 5566, 5556, 5567, - 5561, 6010, 5571, 5578, 5573, 5575, 5576, 5581, 5577, 6010, - 5583, 5585, 6010, 6010, 5586, 6010, 6010, 6010, 6010, 6010, + 5443, 6038, 5434, 5447, 6038, 6038, 5452, 5456, 5457, 6038, + 6038, 6038, 5459, 6038, 5463, 5467, 5471, 5475, 5466, 6038, + 5477, 5474, 5479, 6038, 6038, 5478, 5480, 5481, 5483, 6038, + 6038, 5484, 5487, 5485, 5488, 5490, 6038, 5495, 5499, 5501, + 5504, 5507, 5496, 5510, 5512, 5520, 5522, 5517, 5518, 5523, + 5525, 5526, 5527, 5529, 5538, 5534, 5536, 5548, 5545, 6038, + 6038, 5552, 6038, 6038, 5554, 5556, 5558, 5560, 5562, 5564, + 5566, 6038, 5567, 5569, 5570, 5537, 5571, 6038, 5573, 5575, + 5572, 5577, 5581, 5582, 5580, 5585, 6038, 6038, 5578, 5586, + 5588, 5597, 5594, 6038, 5599, 5606, 5601, 5603, 5604, 5607, - 6010, 6010, 6010, 5588, 6010, 5584, 5603, 5605, 5607, 6010, - 5590, 5600, 5592, 5598, 5608, 6010, 5610, 5410, 5611, 5612, - 5615, 5619, 5621, 5617, 5623, 5624, 5625, 5627, 5626, 5631, - 5628, 5632, 5639, 6010, 6010, 6010, 5637, 5638, 5646, 5647, - 5654, 5659, 5662, 5664, 5629, 5655, 5665, 5666, 5667, 5657, - 5669, 5676, 5673, 5674, 5678, 5677, 5680, 5681, 5685, 5689, - 6010, 5690, 6010, 5691, 6010, 6010, 5693, 5694, 5698, 5699, - 5707, 5708, 5700, 5703, 5710, 5712, 5720, 5722, 6010, 5711, - 5713, 6010, 5723, 5724, 6010, 5715, 5725, 5726, 5727, 5731, - 5734, 5736, 5738, 5747, 6010, 6010, 5739, 5742, 5748, 5750, + 5605, 6038, 5610, 5609, 6038, 6038, 5611, 6038, 6038, 6038, + 6038, 6038, 6038, 6038, 6038, 5617, 6038, 5619, 5628, 5630, + 5634, 6038, 5613, 5622, 5539, 5624, 5635, 6038, 5637, 5639, + 5638, 5640, 5641, 5645, 5648, 5647, 5651, 5652, 5653, 5655, + 5654, 5659, 5658, 5657, 5662, 6038, 6038, 6038, 5672, 5664, + 5674, 5676, 5681, 5682, 5688, 5690, 5675, 5691, 5692, 5693, + 5696, 5697, 5699, 5706, 5702, 5703, 5704, 5705, 5708, 5712, + 5710, 5718, 6038, 5713, 6038, 5719, 6038, 6038, 5721, 5723, + 5726, 5730, 5738, 5739, 5731, 5735, 5736, 5741, 5743, 5751, + 6038, 5740, 5744, 6038, 5752, 5753, 6038, 5747, 5754, 5756, - 5751, 5758, 5754, 5757, 5761, 5763, 5764, 5771, 6010, 5770, - 5772, 5774, 6010, 5775, 5776, 5778, 5780, 5781, 5788, 5784, - 5789, 6010, 5786, 6010, 5791, 5792, 5793, 5794, 5796, 5797, - 5805, 5807, 5808, 6010, 5809, 5816, 5811, 5818, 5822, 5820, - 5824, 5814, 5827, 5829, 5836, 5840, 5837, 5841, 5828, 5845, - 5832, 6010, 5843, 5846, 6010, 5849, 5852, 5853, 5855, 5858, - 6010, 5861, 5856, 5862, 5863, 5867, 5869, 6010, 5871, 5878, - 5873, 6010, 5879, 6010, 6010, 5882, 5883, 5885, 5889, 5891, - 6010, 6010, 6010, 5918, 5925, 5932, 5939, 5946, 88, 5953, - 5960, 5967, 5974, 5981, 5988, 5995, 6002 + 5758, 5760, 5762, 5763, 5765, 5777, 6038, 6038, 5769, 5772, + 5774, 5779, 5780, 5788, 5783, 5786, 5787, 5794, 5795, 5802, + 6038, 5798, 5800, 5804, 6038, 5806, 5801, 5808, 5807, 5809, + 5817, 5812, 5816, 6038, 5818, 6038, 5822, 5823, 5825, 5824, + 5827, 5834, 5836, 5833, 5839, 6038, 5840, 5841, 5844, 5848, + 5850, 5853, 5854, 5845, 5856, 5857, 5865, 5860, 5868, 5869, + 5870, 5872, 5871, 6038, 5874, 5878, 6038, 5879, 5880, 5881, + 5882, 5886, 6038, 5892, 5883, 5888, 5893, 5896, 5898, 6038, + 5904, 5909, 5899, 6038, 5910, 6038, 6038, 5911, 5912, 5913, + 5918, 5920, 6038, 6038, 6038, 5946, 5953, 5960, 5967, 5974, + 88, 5981, 5988, 5995, 6002, 6009, 6016, 6023, 6030 } ; -static const flex_int16_t yy_def[3098] = +static const flex_int16_t yy_def[3110] = { 0, - 3083, 1, 3084, 3084, 3085, 3085, 3086, 3086, 3087, 3087, - 3088, 3088, 3083, 3089, 3083, 3083, 3083, 3083, 3090, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3091, 3083, 3083, 3083, 3091, 3092, 3083, 3083, - 3083, 3092, 3093, 3083, 3083, 3083, 3083, 3093, 3094, 3083, - 3083, 3083, 3094, 3095, 3083, 3096, 3083, 3095, 3095, 3089, - 3089, 3083, 3097, 3090, 3097, 3090, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3095, 1, 3096, 3096, 3097, 3097, 3098, 3098, 3099, 3099, + 3100, 3100, 3095, 3101, 3095, 3095, 3095, 3095, 3102, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3103, 3095, 3095, 3095, 3103, 3104, 3095, 3095, + 3095, 3104, 3105, 3095, 3095, 3095, 3095, 3105, 3106, 3095, + 3095, 3095, 3106, 3107, 3095, 3108, 3095, 3107, 3107, 3101, + 3101, 3095, 3109, 3102, 3109, 3102, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3091, 3091, 3092, 3092, 3093, 3093, 3083, 3094, 3094, 3095, - 3095, 3096, 3096, 3095, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3103, 3103, 3104, 3104, 3105, 3105, 3095, 3106, 3106, + 3107, 3107, 3108, 3108, 3107, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3095, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3107, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3095, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3107, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3095, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3095, 3101, 3107, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3095, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3083, 3089, - 3083, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3107, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3095, 3095, 3101, 3095, 3095, 3101, 3101, 3095, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3095, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3107, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3095, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3107, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3083, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3083, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3083, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3083, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3083, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3083, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3083, 3083, 3089, - 3083, 3089, 3083, 3089, 3089, 3083, 3083, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, + 3095, 3101, 3095, 3101, 3095, 3101, 3101, 3095, 3095, 3101, - 3083, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, + 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3083, 3083, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3083, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, + 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3083, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, 3089, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3083, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3083, 3083, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3083, 3083, 3089, 3089, + 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3095, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3095, 3101, 3101, - 3089, 3089, 3083, 3089, 3083, 3089, 3083, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3089, - 3083, 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, + 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3095, 3095, + 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3095, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, + 3101, 3101, 3095, 3101, 3095, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3083, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3083, 3083, 3089, 3083, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3083, 3083, 3089, 3089, 3089, 3083, 3083, 3083, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3095, 3095, + 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3095, 3095, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3083, 3083, 3089, 3089, 3089, 3089, 3083, 3083, 3089, - 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3083, 3089, - 3083, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3083, 3083, 3089, 3083, 3083, 3083, 3083, 3083, + 3101, 3095, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3095, + 3095, 3095, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3095, + 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3095, 3101, 3095, 3095, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, - 3083, 3083, 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3083, - 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3083, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3083, 3089, 3083, 3083, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3083, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3083, 3083, 3089, 3089, 3089, 3089, + 3101, 3095, 3101, 3101, 3095, 3095, 3101, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3101, 3095, 3101, 3101, 3101, + 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3095, 3101, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, - 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, 3089, - 3089, 3083, 3089, 3089, 3083, 3089, 3089, 3089, 3089, 3089, - 3083, 3089, 3089, 3089, 3089, 3089, 3089, 3083, 3089, 3089, - 3089, 3083, 3089, 3083, 3083, 3089, 3089, 3089, 3089, 3089, - 3083, 3083, 0, 3083, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083 + 3101, 3101, 3101, 3101, 3101, 3101, 3095, 3095, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3095, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3095, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, + 3101, 3101, 3101, 3095, 3101, 3101, 3095, 3101, 3101, 3101, + 3101, 3101, 3095, 3101, 3101, 3101, 3101, 3101, 3101, 3095, + 3101, 3101, 3101, 3095, 3101, 3095, 3095, 3101, 3101, 3101, + 3101, 3101, 3095, 3095, 0, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095 } ; -static const flex_int16_t yy_nxt[6051] = +static const flex_int16_t yy_nxt[6079] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1446,666 +1450,669 @@ static const flex_int16_t yy_nxt[6051] = 51, 47, 51, 70, 47, 70, 70, 52, 70, 52, 54, 55, 56, 57, 70, 18, 54, 55, 56, 57, 71, 18, 58, 60, 61, 62, 71, 82, 58, 60, - 61, 62, 72, 71, 63, 102, 73, 92, 70, 71, + 61, 62, 72, 71, 63, 103, 73, 93, 70, 71, 63, 15, 16, 17, 65, 66, 67, 75, 71, 75, - 75, 71, 75, 68, 104, 157, 103, 93, 75, 76, - 141, 141, 69, 15, 16, 17, 65, 66, 67, 71, - 71, 83, 77, 78, 71, 68, 79, 71, 84, 87, - 71, 80, 85, 88, 69, 86, 89, 151, 90, 91, - 81, 71, 94, 71, 96, 71, 71, 159, 71, 105, - 98, 112, 97, 99, 71, 109, 95, 106, 71, 110, - 100, 71, 101, 107, 172, 71, 113, 108, 143, 71, - 114, 143, 118, 71, 119, 111, 115, 71, 120, 116, - 140, 151, 124, 148, 148, 125, 117, 163, 121, 122, - 71, 123, 126, 71, 133, 154, 127, 128, 71, 129, + 75, 71, 75, 68, 105, 158, 104, 94, 75, 76, + 71, 71, 69, 15, 16, 17, 65, 66, 67, 71, + 71, 83, 77, 78, 119, 68, 79, 71, 84, 71, + 95, 80, 85, 172, 69, 86, 71, 97, 142, 142, + 81, 71, 71, 71, 96, 98, 87, 71, 113, 144, + 88, 99, 144, 89, 100, 90, 91, 141, 71, 106, + 152, 101, 173, 102, 71, 110, 92, 107, 72, 111, + 152, 71, 73, 108, 149, 149, 114, 109, 71, 71, + 115, 156, 71, 120, 155, 112, 116, 121, 71, 117, + 340, 159, 71, 130, 71, 131, 118, 122, 123, 125, - 224, 130, 71, 137, 134, 158, 71, 138, 135, 136, - 131, 139, 145, 71, 145, 145, 132, 145, 75, 71, - 75, 75, 150, 75, 150, 150, 70, 150, 70, 70, - 153, 70, 72, 165, 71, 171, 73, 70, 75, 71, - 75, 75, 155, 75, 71, 71, 225, 71, 156, 75, - 76, 71, 71, 71, 160, 161, 164, 71, 71, 166, - 173, 71, 71, 169, 170, 167, 71, 168, 162, 71, - 71, 175, 177, 178, 71, 71, 184, 71, 176, 174, - 179, 182, 253, 71, 71, 71, 189, 180, 181, 183, - 71, 151, 71, 185, 191, 71, 186, 71, 71, 199, + 124, 71, 126, 71, 132, 134, 161, 71, 138, 127, + 133, 226, 139, 128, 129, 135, 140, 71, 71, 136, + 137, 146, 157, 146, 146, 75, 146, 75, 75, 151, + 75, 151, 151, 70, 151, 70, 70, 154, 70, 71, + 75, 71, 75, 75, 70, 75, 71, 71, 152, 162, + 165, 75, 76, 71, 71, 71, 71, 174, 71, 160, + 167, 71, 163, 71, 71, 164, 168, 166, 169, 71, + 176, 71, 177, 170, 171, 71, 175, 71, 186, 191, + 71, 178, 179, 180, 184, 71, 71, 182, 71, 71, + 181, 185, 187, 183, 71, 188, 193, 71, 71, 194, - 192, 194, 197, 71, 71, 195, 71, 198, 200, 187, - 188, 190, 71, 201, 71, 71, 202, 205, 71, 203, - 193, 196, 207, 71, 71, 71, 71, 204, 71, 212, - 209, 71, 71, 206, 210, 71, 214, 71, 71, 71, - 71, 208, 71, 220, 211, 215, 213, 71, 226, 229, - 217, 216, 223, 71, 221, 71, 219, 218, 222, 233, - 230, 71, 71, 71, 235, 227, 71, 71, 228, 231, - 71, 239, 71, 236, 232, 238, 71, 234, 149, 240, - 71, 242, 141, 141, 143, 237, 243, 143, 241, 145, - 151, 145, 145, 244, 145, 148, 148, 150, 248, 150, + 71, 196, 71, 71, 192, 197, 202, 199, 189, 190, + 203, 201, 200, 204, 71, 71, 71, 71, 71, 195, + 71, 198, 205, 71, 209, 71, 71, 206, 71, 214, + 211, 71, 71, 150, 212, 208, 207, 71, 213, 71, + 71, 210, 71, 216, 71, 71, 215, 219, 222, 71, + 228, 231, 217, 225, 227, 71, 221, 220, 218, 223, + 71, 71, 232, 224, 71, 71, 71, 229, 237, 71, + 230, 233, 71, 71, 71, 142, 142, 238, 241, 234, + 236, 240, 235, 243, 242, 71, 149, 149, 245, 239, + 244, 144, 71, 146, 144, 146, 146, 151, 146, 151, - 150, 75, 150, 75, 75, 71, 75, 71, 246, 71, - 245, 71, 71, 153, 71, 71, 71, 250, 71, 71, - 71, 256, 249, 247, 251, 259, 252, 255, 258, 71, - 254, 71, 260, 264, 262, 71, 263, 71, 257, 71, - 71, 265, 71, 71, 268, 261, 266, 71, 273, 269, - 71, 147, 71, 71, 270, 275, 274, 276, 279, 71, - 271, 272, 278, 267, 71, 277, 71, 71, 71, 71, - 281, 71, 282, 283, 71, 71, 71, 71, 71, 288, - 289, 285, 295, 284, 286, 71, 299, 280, 71, 287, - 71, 290, 297, 298, 291, 300, 292, 302, 296, 71, + 151, 75, 151, 75, 75, 152, 75, 71, 246, 248, + 250, 71, 247, 154, 71, 71, 71, 71, 71, 71, + 71, 71, 252, 71, 249, 255, 251, 254, 258, 253, + 260, 71, 261, 148, 257, 71, 71, 256, 71, 262, + 259, 264, 71, 265, 266, 71, 267, 276, 71, 270, + 71, 268, 71, 275, 271, 71, 263, 71, 71, 272, + 71, 71, 278, 279, 282, 273, 274, 71, 269, 71, + 71, 284, 280, 71, 277, 71, 71, 71, 285, 71, + 71, 281, 71, 286, 291, 292, 71, 298, 288, 71, + 287, 289, 301, 283, 71, 290, 71, 293, 71, 71, - 71, 71, 71, 71, 71, 304, 305, 301, 293, 307, - 294, 71, 71, 308, 71, 313, 146, 71, 310, 71, - 303, 306, 309, 311, 71, 71, 317, 71, 71, 71, - 71, 71, 312, 314, 315, 71, 316, 71, 71, 318, - 320, 319, 71, 71, 325, 71, 321, 71, 71, 326, - 71, 71, 327, 322, 331, 329, 71, 71, 323, 334, - 71, 71, 71, 324, 71, 71, 328, 330, 71, 336, - 337, 71, 71, 340, 332, 333, 341, 335, 339, 71, - 338, 342, 71, 343, 344, 71, 71, 346, 348, 71, - 347, 71, 350, 71, 71, 71, 71, 351, 71, 345, + 294, 303, 295, 71, 302, 300, 299, 71, 71, 305, + 326, 307, 308, 304, 296, 71, 297, 71, 71, 306, + 311, 71, 71, 71, 313, 314, 71, 309, 312, 310, + 71, 71, 71, 71, 316, 71, 71, 71, 71, 315, + 71, 317, 318, 319, 321, 323, 71, 71, 71, 71, + 71, 322, 328, 71, 330, 320, 324, 329, 71, 71, + 334, 325, 71, 332, 337, 71, 71, 71, 327, 71, + 71, 331, 333, 343, 339, 71, 71, 344, 346, 71, + 335, 336, 342, 71, 71, 338, 341, 71, 71, 71, + 349, 350, 71, 71, 351, 345, 71, 353, 354, 347, - 71, 354, 71, 151, 71, 71, 71, 361, 144, 71, - 357, 359, 349, 71, 352, 355, 353, 362, 71, 356, - 71, 71, 71, 71, 358, 363, 364, 365, 360, 71, - 71, 71, 367, 71, 371, 372, 71, 366, 374, 370, - 71, 71, 71, 373, 369, 71, 375, 368, 376, 71, - 378, 71, 71, 379, 71, 71, 71, 71, 382, 71, - 377, 383, 71, 385, 71, 71, 387, 388, 384, 71, - 380, 381, 71, 389, 71, 71, 386, 71, 390, 71, - 71, 392, 393, 394, 395, 71, 71, 71, 399, 71, - 71, 71, 71, 396, 400, 391, 402, 71, 71, 398, + 71, 71, 348, 71, 71, 152, 357, 71, 71, 71, + 147, 71, 71, 362, 364, 355, 356, 358, 352, 360, + 71, 71, 365, 359, 71, 368, 366, 361, 71, 367, + 71, 71, 363, 71, 71, 71, 71, 374, 71, 71, + 375, 376, 71, 378, 373, 369, 71, 370, 71, 372, + 377, 379, 371, 71, 71, 71, 381, 380, 71, 382, + 71, 71, 71, 71, 385, 71, 386, 389, 71, 383, + 391, 71, 387, 71, 388, 384, 71, 71, 393, 392, + 71, 71, 390, 71, 71, 394, 71, 396, 397, 398, + 71, 399, 71, 71, 403, 71, 71, 71, 400, 404, - 71, 71, 405, 71, 71, 410, 397, 407, 401, 71, - 409, 71, 411, 71, 71, 71, 403, 71, 404, 438, - 71, 406, 421, 419, 408, 412, 71, 71, 71, 71, - 422, 425, 423, 420, 430, 413, 142, 71, 414, 431, - 71, 71, 426, 415, 416, 417, 418, 71, 424, 427, - 71, 71, 428, 429, 432, 71, 71, 71, 433, 71, - 440, 434, 435, 71, 436, 437, 71, 71, 439, 71, - 71, 442, 441, 71, 71, 447, 71, 465, 453, 443, - 71, 71, 71, 448, 71, 449, 71, 71, 444, 446, - 445, 452, 454, 451, 450, 71, 71, 71, 71, 457, + 71, 71, 395, 71, 406, 402, 71, 409, 71, 71, + 71, 401, 411, 414, 71, 405, 71, 415, 71, 71, + 407, 408, 413, 71, 145, 71, 410, 423, 416, 412, + 71, 71, 71, 71, 143, 426, 425, 427, 430, 417, + 71, 424, 418, 429, 71, 431, 71, 419, 420, 421, + 422, 434, 71, 428, 432, 433, 435, 71, 71, 439, + 71, 436, 71, 437, 442, 71, 438, 71, 71, 440, + 71, 441, 443, 71, 444, 446, 71, 71, 71, 71, + 451, 71, 452, 445, 453, 71, 71, 71, 447, 457, + 71, 469, 456, 454, 450, 71, 448, 71, 449, 71, - 455, 458, 71, 466, 71, 460, 456, 464, 71, 71, - 71, 459, 467, 71, 71, 468, 71, 71, 461, 469, - 71, 462, 483, 463, 479, 470, 71, 71, 71, 471, - 71, 484, 481, 734, 486, 480, 71, 472, 71, 473, - 71, 474, 482, 71, 71, 494, 496, 485, 151, 495, - 498, 497, 71, 71, 475, 500, 71, 476, 501, 477, - 504, 478, 71, 71, 487, 488, 71, 71, 71, 499, - 71, 71, 502, 71, 489, 503, 490, 491, 492, 505, - 508, 493, 507, 71, 71, 71, 71, 506, 513, 514, - 509, 511, 516, 510, 71, 517, 71, 71, 71, 71, + 71, 71, 458, 71, 459, 455, 461, 71, 462, 71, + 460, 470, 464, 71, 463, 71, 468, 71, 471, 71, + 472, 483, 71, 71, 71, 465, 473, 71, 466, 71, + 467, 71, 474, 71, 484, 71, 475, 485, 488, 486, + 71, 487, 499, 490, 476, 71, 477, 500, 478, 152, + 71, 71, 501, 71, 489, 498, 502, 71, 71, 71, + 506, 479, 71, 71, 480, 71, 481, 71, 482, 71, + 503, 491, 492, 505, 508, 71, 504, 71, 507, 511, + 71, 493, 510, 494, 495, 496, 512, 71, 497, 509, + 514, 71, 71, 71, 520, 515, 513, 516, 518, 71, - 515, 521, 71, 512, 71, 71, 71, 71, 71, 519, - 524, 525, 526, 520, 71, 71, 518, 71, 71, 531, - 523, 71, 71, 536, 528, 533, 527, 522, 71, 71, - 71, 529, 530, 534, 71, 71, 71, 532, 71, 71, - 71, 546, 71, 547, 71, 538, 71, 537, 535, 542, - 539, 545, 541, 540, 71, 548, 71, 549, 71, 553, - 543, 151, 544, 71, 551, 550, 71, 71, 71, 556, - 552, 71, 554, 71, 555, 558, 71, 71, 559, 71, - 561, 562, 71, 71, 557, 71, 563, 71, 71, 71, - 560, 71, 568, 566, 567, 71, 71, 71, 564, 71, + 71, 71, 517, 71, 521, 525, 519, 71, 71, 71, + 71, 71, 71, 523, 71, 528, 152, 529, 530, 522, + 71, 524, 71, 71, 71, 527, 535, 71, 71, 536, + 532, 71, 531, 526, 71, 538, 71, 534, 533, 71, + 539, 71, 541, 543, 71, 71, 71, 537, 71, 71, + 71, 551, 71, 542, 552, 540, 71, 545, 547, 546, + 544, 550, 554, 71, 71, 553, 71, 621, 71, 548, + 556, 549, 71, 71, 71, 71, 557, 558, 559, 71, + 561, 563, 71, 71, 555, 71, 560, 567, 562, 71, + 564, 71, 566, 71, 71, 71, 565, 71, 568, 71, - 569, 71, 71, 71, 574, 71, 565, 570, 578, 575, - 71, 573, 71, 577, 576, 572, 571, 71, 580, 71, - 71, 582, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 579, 584, 592, 585, 587, 594, 71, 593, 71, - 71, 581, 71, 583, 591, 588, 586, 589, 590, 71, - 71, 596, 71, 71, 595, 599, 71, 602, 597, 71, - 603, 598, 604, 71, 605, 71, 71, 600, 71, 71, - 71, 601, 71, 608, 71, 71, 611, 71, 71, 607, - 612, 71, 614, 71, 71, 71, 645, 610, 606, 613, - 71, 609, 71, 71, 615, 71, 617, 628, 71, 631, + 71, 71, 571, 71, 569, 572, 71, 573, 71, 71, + 71, 575, 579, 71, 71, 574, 570, 580, 71, 71, + 582, 576, 578, 71, 584, 71, 577, 71, 583, 71, + 581, 71, 585, 71, 587, 589, 586, 71, 590, 71, + 71, 71, 71, 597, 71, 71, 588, 150, 599, 71, + 600, 592, 71, 598, 71, 71, 596, 591, 593, 71, + 594, 595, 71, 71, 71, 604, 601, 602, 607, 605, + 603, 610, 71, 71, 71, 609, 71, 71, 606, 71, + 71, 613, 71, 71, 608, 71, 71, 612, 617, 616, + 71, 619, 71, 71, 71, 611, 620, 71, 71, 71, - 616, 71, 618, 71, 626, 627, 71, 619, 632, 620, - 71, 629, 633, 71, 630, 621, 71, 622, 635, 71, - 623, 624, 641, 639, 71, 634, 71, 625, 638, 71, - 71, 71, 636, 642, 640, 637, 71, 647, 71, 71, - 71, 71, 71, 71, 71, 71, 644, 643, 653, 71, - 71, 649, 71, 648, 654, 650, 646, 71, 657, 71, - 651, 661, 660, 655, 652, 656, 658, 151, 71, 71, - 71, 659, 71, 71, 662, 71, 71, 71, 71, 667, - 669, 671, 71, 71, 664, 670, 672, 665, 663, 668, - 674, 666, 71, 71, 71, 673, 71, 676, 71, 71, + 650, 614, 633, 615, 71, 618, 622, 71, 623, 632, + 71, 148, 631, 624, 636, 625, 634, 71, 71, 71, + 635, 626, 71, 627, 637, 71, 628, 629, 638, 644, + 640, 643, 639, 630, 641, 71, 71, 642, 71, 71, + 645, 647, 71, 71, 71, 652, 71, 71, 71, 71, + 71, 71, 646, 71, 71, 147, 658, 71, 71, 654, + 662, 653, 648, 649, 655, 71, 659, 651, 71, 656, + 657, 152, 660, 661, 663, 664, 665, 71, 71, 71, + 666, 71, 71, 71, 71, 71, 71, 71, 672, 674, + 676, 71, 667, 669, 675, 71, 670, 668, 673, 677, - 71, 71, 71, 680, 71, 675, 679, 688, 71, 71, - 685, 681, 677, 690, 678, 686, 71, 71, 682, 71, - 684, 683, 687, 689, 71, 691, 71, 692, 71, 693, - 71, 71, 71, 695, 71, 71, 696, 71, 694, 71, - 699, 71, 698, 71, 700, 71, 704, 71, 71, 703, - 71, 697, 71, 707, 705, 71, 71, 709, 71, 71, - 717, 710, 702, 71, 701, 706, 71, 71, 71, 712, - 149, 71, 711, 71, 713, 708, 71, 714, 715, 71, - 71, 720, 71, 724, 721, 716, 718, 719, 723, 71, - 71, 725, 71, 726, 722, 71, 727, 71, 71, 71, + 679, 671, 71, 71, 71, 71, 71, 678, 71, 71, + 71, 681, 685, 71, 680, 684, 71, 682, 71, 683, + 690, 703, 686, 71, 71, 691, 71, 693, 71, 687, + 694, 71, 688, 695, 689, 71, 692, 696, 71, 71, + 697, 71, 698, 71, 699, 701, 702, 71, 71, 700, + 71, 71, 71, 71, 704, 705, 706, 707, 71, 71, + 711, 71, 71, 710, 71, 712, 71, 71, 71, 714, + 716, 71, 71, 717, 708, 71, 71, 709, 71, 71, + 713, 719, 71, 724, 71, 718, 720, 715, 726, 721, + 722, 71, 71, 723, 71, 731, 727, 725, 729, 728, - 729, 730, 731, 71, 71, 71, 71, 738, 71, 71, - 736, 71, 71, 71, 71, 732, 744, 735, 728, 71, - 739, 733, 71, 742, 743, 745, 737, 71, 740, 741, - 746, 747, 748, 71, 71, 71, 749, 71, 71, 753, - 750, 71, 755, 71, 71, 71, 754, 756, 71, 71, - 71, 758, 752, 71, 757, 751, 759, 71, 71, 71, - 71, 765, 766, 760, 762, 71, 761, 71, 71, 767, - 768, 71, 770, 71, 71, 774, 147, 772, 763, 764, - 771, 71, 71, 780, 71, 777, 71, 779, 769, 776, - 778, 71, 773, 71, 775, 781, 71, 71, 71, 783, + 71, 71, 71, 71, 71, 733, 71, 730, 734, 732, + 71, 736, 71, 737, 71, 71, 71, 738, 71, 739, + 71, 71, 741, 743, 745, 71, 71, 71, 751, 742, + 735, 71, 740, 71, 71, 746, 71, 748, 71, 753, + 744, 71, 749, 750, 752, 71, 747, 754, 755, 71, + 71, 71, 756, 71, 760, 762, 757, 71, 767, 758, + 71, 71, 761, 71, 71, 765, 763, 759, 71, 764, + 766, 71, 71, 772, 71, 71, 71, 769, 71, 71, + 71, 768, 781, 775, 774, 71, 777, 778, 71, 71, + 71, 770, 771, 773, 71, 783, 776, 779, 784, 71, - 71, 71, 71, 71, 789, 71, 71, 71, 71, 790, - 71, 71, 71, 71, 71, 782, 784, 791, 785, 786, - 71, 787, 792, 788, 794, 796, 793, 798, 71, 797, - 71, 795, 71, 71, 799, 71, 71, 71, 71, 803, - 800, 71, 71, 71, 71, 71, 812, 146, 810, 801, - 71, 802, 71, 805, 804, 71, 806, 71, 811, 807, - 808, 809, 71, 815, 71, 71, 813, 71, 71, 814, - 817, 816, 71, 71, 819, 71, 71, 144, 822, 821, - 818, 820, 823, 71, 71, 826, 71, 71, 824, 825, - 829, 71, 71, 827, 151, 71, 828, 71, 833, 832, + 786, 782, 71, 785, 71, 71, 71, 788, 71, 71, + 790, 71, 780, 71, 71, 71, 796, 71, 71, 71, + 71, 797, 71, 71, 71, 789, 71, 787, 794, 791, + 71, 792, 793, 798, 799, 795, 801, 805, 800, 802, + 71, 804, 803, 71, 71, 71, 71, 71, 71, 71, + 71, 810, 71, 71, 806, 71, 807, 71, 819, 71, + 817, 71, 71, 71, 808, 809, 811, 813, 812, 816, + 71, 814, 815, 818, 820, 71, 823, 71, 71, 825, + 821, 71, 824, 71, 71, 71, 822, 71, 71, 829, + 828, 71, 830, 831, 827, 71, 832, 826, 71, 71, - 830, 834, 71, 71, 831, 71, 71, 71, 840, 71, - 71, 841, 836, 843, 71, 71, 835, 71, 71, 842, - 837, 838, 846, 71, 844, 71, 71, 839, 71, 848, - 71, 852, 71, 71, 71, 849, 845, 71, 847, 71, - 853, 854, 71, 71, 71, 71, 71, 71, 851, 71, - 71, 850, 867, 71, 866, 71, 870, 855, 856, 864, - 865, 872, 857, 71, 71, 868, 71, 875, 858, 71, - 869, 873, 859, 71, 871, 860, 71, 71, 874, 71, - 876, 884, 861, 862, 71, 863, 71, 71, 877, 878, - 885, 879, 905, 71, 880, 886, 888, 889, 71, 881, + 71, 152, 834, 71, 71, 833, 839, 835, 71, 837, + 71, 840, 71, 836, 841, 838, 71, 71, 842, 71, + 71, 843, 847, 71, 71, 71, 848, 850, 71, 851, + 853, 844, 71, 845, 849, 71, 71, 71, 846, 855, + 71, 71, 859, 852, 71, 71, 71, 71, 71, 856, + 71, 861, 854, 860, 71, 71, 71, 71, 71, 858, + 71, 874, 875, 71, 862, 857, 71, 873, 71, 871, + 864, 71, 863, 71, 872, 877, 876, 880, 865, 71, + 878, 881, 866, 71, 879, 867, 71, 145, 883, 71, + 884, 71, 868, 869, 892, 870, 71, 71, 71, 71, - 71, 71, 891, 71, 887, 882, 883, 890, 71, 71, - 894, 71, 71, 893, 71, 896, 895, 71, 892, 897, - 898, 71, 71, 71, 899, 71, 71, 71, 71, 900, - 902, 71, 906, 71, 71, 909, 71, 71, 71, 915, - 71, 71, 901, 907, 913, 903, 904, 908, 71, 911, - 71, 916, 1176, 914, 910, 919, 917, 71, 71, 920, - 912, 71, 71, 918, 922, 71, 71, 921, 71, 923, - 71, 71, 926, 71, 924, 927, 71, 71, 71, 925, - 71, 71, 71, 933, 71, 928, 930, 931, 71, 936, - 71, 71, 71, 71, 71, 71, 929, 934, 935, 71, + 882, 71, 885, 886, 71, 887, 898, 896, 888, 897, + 71, 71, 893, 889, 143, 894, 71, 899, 71, 890, + 891, 904, 71, 895, 71, 902, 900, 901, 71, 71, + 906, 71, 71, 903, 905, 71, 71, 907, 71, 71, + 71, 71, 910, 71, 908, 71, 914, 71, 913, 71, + 917, 71, 71, 71, 71, 909, 921, 931, 915, 911, + 912, 916, 71, 71, 919, 923, 71, 924, 922, 918, + 71, 71, 925, 71, 927, 920, 926, 928, 933, 71, + 71, 930, 71, 71, 929, 934, 71, 71, 932, 935, + 71, 71, 71, 71, 71, 71, 941, 71, 938, 936, - 71, 932, 938, 939, 941, 71, 71, 71, 943, 942, - 937, 944, 71, 71, 71, 71, 940, 71, 949, 71, - 951, 945, 947, 950, 71, 71, 71, 948, 71, 71, - 952, 956, 71, 71, 954, 958, 953, 946, 71, 957, - 959, 71, 71, 961, 71, 71, 71, 71, 71, 963, - 955, 71, 71, 960, 71, 969, 967, 71, 71, 972, - 71, 142, 71, 962, 964, 71, 966, 965, 71, 973, - 970, 968, 976, 971, 974, 71, 975, 71, 71, 980, - 71, 977, 978, 979, 71, 71, 71, 71, 71, 71, - 989, 71, 990, 982, 984, 71, 71, 981, 71, 71, + 71, 939, 944, 71, 71, 71, 71, 71, 71, 942, + 937, 943, 71, 71, 940, 946, 947, 949, 71, 71, + 71, 951, 950, 945, 952, 71, 71, 71, 71, 948, + 71, 957, 71, 959, 953, 955, 958, 71, 71, 71, + 956, 71, 71, 960, 964, 71, 71, 962, 966, 961, + 954, 71, 965, 967, 71, 71, 969, 71, 71, 71, + 71, 71, 971, 963, 71, 71, 968, 71, 977, 975, + 71, 71, 980, 71, 71, 71, 970, 972, 71, 974, + 973, 71, 981, 978, 976, 984, 979, 982, 71, 983, + 71, 71, 988, 71, 985, 986, 987, 71, 71, 71, - 992, 71, 71, 71, 71, 983, 71, 985, 987, 991, - 986, 988, 994, 71, 995, 998, 71, 996, 71, 993, - 71, 997, 71, 999, 1003, 1001, 71, 1000, 71, 1002, - 71, 71, 71, 1007, 1004, 71, 1008, 1009, 71, 71, - 71, 71, 1012, 151, 1005, 1006, 1011, 71, 71, 1015, - 71, 1014, 71, 1010, 71, 1013, 71, 1018, 71, 71, - 71, 71, 71, 71, 1030, 1031, 71, 1033, 71, 71, - 71, 71, 1016, 1021, 1017, 1019, 1038, 71, 71, 71, - 1022, 1032, 1020, 1023, 71, 1036, 71, 1024, 1089, 1025, - 1035, 1037, 1039, 1026, 1034, 1027, 1040, 71, 71, 71, + 71, 71, 71, 997, 71, 998, 990, 992, 71, 71, + 989, 71, 71, 1000, 3095, 71, 71, 71, 991, 71, + 993, 995, 999, 994, 996, 1002, 71, 1003, 1006, 71, + 1004, 71, 1001, 71, 1005, 71, 1007, 1011, 1009, 71, + 1008, 71, 1010, 71, 71, 71, 1015, 1012, 71, 1016, + 1017, 71, 71, 71, 71, 1020, 152, 1013, 1014, 1019, + 71, 71, 1023, 71, 1022, 71, 1018, 71, 1021, 71, + 1026, 71, 71, 71, 71, 71, 71, 1038, 1039, 71, + 1041, 71, 71, 71, 71, 1024, 1029, 1025, 1027, 1046, + 71, 71, 71, 1030, 1040, 1028, 1031, 71, 1044, 71, - 1028, 1041, 71, 1043, 71, 1029, 71, 71, 71, 1046, - 71, 1042, 1049, 1045, 71, 1044, 71, 71, 1048, 1047, - 1054, 1055, 1050, 1053, 1056, 71, 71, 71, 1052, 1057, - 1058, 1051, 71, 71, 71, 71, 71, 71, 1059, 71, - 71, 71, 1070, 71, 1074, 1069, 71, 1073, 71, 1075, - 71, 1060, 1072, 1061, 71, 1062, 71, 1071, 1079, 71, - 1063, 71, 1064, 1081, 1076, 1080, 71, 1077, 1065, 71, - 71, 71, 71, 1066, 1067, 1078, 71, 1084, 1086, 1082, - 1068, 71, 71, 1085, 71, 1083, 1087, 71, 1092, 71, - 1088, 1090, 71, 71, 71, 71, 71, 71, 1093, 71, + 1032, 1061, 1033, 1043, 1045, 1047, 1034, 1042, 1035, 1048, + 71, 71, 71, 1036, 1049, 71, 1051, 71, 1037, 71, + 71, 71, 1054, 71, 1050, 1057, 1053, 71, 1052, 71, + 71, 1056, 1055, 1063, 1064, 1058, 1062, 1065, 71, 71, + 71, 1060, 1066, 1067, 1059, 71, 71, 71, 71, 71, + 71, 1068, 71, 71, 71, 1079, 71, 1083, 1078, 71, + 1082, 71, 1084, 71, 1069, 1081, 1070, 71, 1071, 71, + 1080, 1088, 71, 1072, 71, 1073, 1090, 1085, 1089, 71, + 1086, 1074, 71, 71, 71, 71, 1075, 1076, 1087, 71, + 1093, 1095, 1091, 1077, 71, 71, 1094, 71, 1092, 1096, - 1095, 71, 71, 1091, 71, 71, 71, 1102, 1100, 71, - 1097, 1094, 1104, 1096, 1099, 1101, 71, 1098, 71, 1106, - 71, 1103, 71, 71, 71, 1105, 71, 71, 71, 1112, - 71, 1116, 1113, 1114, 71, 71, 1107, 1109, 1117, 1108, - 1110, 1111, 71, 1115, 71, 1120, 71, 71, 1118, 1124, - 1121, 71, 71, 1122, 71, 71, 1123, 71, 1119, 71, - 1131, 1125, 71, 71, 1133, 71, 71, 71, 71, 71, - 71, 1127, 1129, 1135, 1126, 1128, 71, 1130, 71, 1137, - 1134, 1136, 71, 1132, 71, 71, 71, 1139, 71, 1140, - 1138, 1142, 71, 1143, 1141, 71, 71, 1144, 1145, 1148, + 71, 71, 1101, 1097, 1098, 71, 71, 71, 71, 1099, + 71, 71, 1104, 71, 1102, 71, 71, 1100, 71, 71, + 71, 71, 71, 71, 1109, 1103, 71, 1106, 1108, 1110, + 1105, 1107, 1111, 1113, 71, 1112, 1115, 1114, 1117, 71, + 71, 71, 71, 1116, 71, 71, 71, 1121, 1118, 1122, + 1123, 71, 1125, 1126, 71, 1124, 1120, 71, 1119, 71, + 1129, 71, 71, 71, 1133, 1130, 71, 1127, 71, 1131, + 71, 71, 1132, 1128, 71, 71, 1134, 71, 1140, 1142, + 71, 71, 71, 1135, 71, 71, 1136, 1138, 71, 1137, + 1139, 71, 71, 1144, 1146, 1143, 1145, 1141, 71, 71, - 1149, 71, 1147, 71, 71, 71, 71, 71, 1153, 1152, - 71, 1146, 1150, 71, 71, 71, 71, 1159, 1157, 1160, - 71, 71, 1151, 71, 71, 71, 1161, 1164, 1154, 1158, - 71, 71, 1155, 71, 1156, 1162, 1163, 1167, 1165, 71, - 71, 1169, 71, 71, 1166, 1168, 71, 71, 1170, 71, - 71, 71, 71, 1174, 1175, 1171, 71, 71, 1180, 71, - 1181, 71, 71, 71, 71, 1172, 71, 1183, 1173, 1178, - 1177, 1184, 71, 71, 1182, 1179, 71, 1186, 1188, 71, - 1185, 71, 71, 71, 71, 1187, 1194, 71, 1190, 71, - 71, 71, 71, 71, 1189, 1200, 71, 1198, 71, 1202, + 71, 71, 1147, 1148, 1149, 1151, 1152, 71, 1150, 71, + 71, 71, 1157, 1158, 71, 1154, 71, 1156, 71, 1153, + 71, 71, 71, 1162, 1161, 1159, 1155, 71, 71, 71, + 71, 71, 71, 1166, 1168, 1169, 1173, 1170, 1160, 71, + 71, 71, 71, 71, 1167, 1163, 71, 1164, 1171, 1165, + 71, 1172, 1176, 71, 71, 1178, 71, 1174, 71, 1177, + 71, 71, 1179, 71, 71, 71, 71, 1183, 1184, 1180, + 1175, 71, 71, 71, 1189, 1190, 71, 1185, 71, 1181, + 71, 71, 1182, 1192, 1187, 1193, 71, 71, 71, 1186, + 1197, 1191, 1188, 71, 71, 71, 71, 71, 71, 71, - 1191, 1197, 1199, 1193, 1195, 71, 1196, 1203, 1192, 71, - 71, 71, 1205, 71, 1204, 71, 1206, 71, 1201, 71, - 71, 71, 71, 71, 1209, 71, 1215, 71, 71, 1207, - 1212, 1208, 71, 71, 71, 1210, 3083, 1213, 71, 71, - 1211, 71, 1216, 1226, 1214, 1219, 1221, 71, 1218, 71, - 1217, 71, 1225, 71, 1220, 1222, 1228, 1223, 1227, 71, - 1224, 1229, 71, 71, 71, 1230, 71, 71, 71, 71, - 71, 1234, 1231, 1233, 1236, 1239, 71, 71, 71, 1237, - 71, 1232, 1240, 1241, 71, 71, 1235, 71, 1244, 1238, - 1243, 71, 71, 71, 71, 71, 1245, 71, 71, 71, + 1203, 71, 1195, 71, 71, 1196, 1194, 1199, 71, 71, + 1209, 71, 71, 1198, 1207, 1200, 71, 1204, 1202, 1205, + 1206, 1208, 1201, 1211, 1212, 71, 71, 1214, 71, 71, + 71, 1213, 71, 1215, 71, 71, 1210, 71, 71, 71, + 1218, 71, 71, 1224, 71, 71, 1216, 71, 1217, 1221, + 71, 71, 1219, 71, 1222, 3095, 1228, 1220, 71, 1225, + 1223, 71, 1234, 1230, 71, 1226, 1227, 1236, 71, 1235, + 71, 71, 1231, 1229, 1232, 71, 71, 1233, 1237, 1239, + 71, 71, 71, 71, 1238, 71, 71, 1243, 71, 71, + 1242, 1246, 1249, 71, 1240, 71, 71, 1245, 1241, 1247, - 1242, 1251, 71, 71, 71, 71, 1246, 1247, 71, 1249, - 1250, 1252, 1248, 71, 1256, 71, 1261, 1253, 71, 1257, - 71, 1255, 71, 1254, 1260, 1258, 71, 71, 1263, 71, - 71, 1268, 1262, 1259, 1266, 71, 1269, 71, 71, 3083, - 71, 71, 1267, 1265, 71, 1273, 1264, 71, 71, 71, - 1281, 1282, 1271, 1272, 1270, 71, 1285, 71, 71, 1283, - 1274, 1280, 71, 1275, 1276, 1286, 71, 1284, 1277, 1294, - 71, 71, 71, 71, 1278, 1287, 71, 1288, 1279, 71, - 1289, 71, 1291, 71, 71, 1296, 1292, 1290, 1293, 71, - 71, 1295, 71, 1301, 1298, 1302, 71, 71, 71, 71, + 1250, 1251, 1244, 71, 71, 71, 71, 71, 1248, 1253, + 1254, 71, 71, 71, 1255, 71, 71, 71, 71, 71, + 71, 71, 1256, 1252, 1261, 1259, 1257, 1266, 1262, 71, + 1260, 1258, 71, 71, 71, 1271, 71, 1263, 1265, 71, + 1264, 71, 71, 1270, 1267, 71, 71, 1273, 71, 1278, + 1272, 1276, 1268, 1269, 1279, 71, 71, 71, 71, 71, + 1277, 1275, 1274, 71, 1283, 71, 71, 1291, 1292, 71, + 1293, 1281, 1282, 1383, 71, 1280, 71, 71, 1290, 71, + 1296, 1284, 1294, 71, 1285, 1286, 71, 71, 1295, 1287, + 71, 71, 1297, 71, 1299, 1288, 1298, 71, 1301, 1289, - 1304, 71, 1303, 71, 1297, 71, 1299, 1305, 1300, 71, - 1310, 71, 1306, 71, 1307, 1314, 1308, 71, 1309, 1311, - 1312, 1316, 71, 1318, 1313, 71, 71, 1321, 1319, 71, - 71, 71, 1315, 71, 1317, 1320, 1322, 71, 71, 71, - 1328, 71, 1324, 71, 1323, 71, 71, 71, 1329, 1330, - 71, 71, 1334, 1327, 71, 1332, 1325, 1326, 71, 1331, - 71, 71, 1338, 71, 71, 1333, 1337, 1340, 71, 71, - 71, 1341, 1335, 1342, 71, 1339, 71, 71, 71, 1343, - 1346, 71, 71, 1336, 1347, 71, 1345, 1348, 71, 71, - 1349, 71, 1353, 71, 71, 1344, 1350, 1355, 71, 1351, + 71, 71, 71, 1302, 1300, 1303, 71, 71, 71, 71, + 1304, 1306, 1308, 71, 1311, 1312, 71, 1338, 1313, 1305, + 71, 71, 1309, 71, 71, 1315, 1307, 1310, 1314, 71, + 1316, 71, 1317, 71, 1318, 1324, 1319, 71, 1320, 1321, + 1322, 71, 71, 71, 1323, 1328, 71, 1326, 71, 71, + 1329, 71, 1327, 71, 1332, 1330, 1325, 71, 71, 71, + 71, 71, 1339, 71, 71, 71, 1334, 1333, 71, 1342, + 1331, 1340, 71, 71, 1337, 71, 71, 1335, 1336, 1341, + 71, 1344, 1343, 1348, 71, 1347, 71, 1350, 71, 71, + 71, 1345, 1351, 71, 1353, 1354, 1352, 71, 1356, 71, - 71, 71, 71, 1352, 1359, 1354, 1357, 71, 71, 1358, - 71, 1361, 71, 71, 71, 1363, 71, 71, 1356, 71, - 1373, 1365, 71, 3083, 1367, 1360, 71, 1362, 1364, 71, - 1366, 1368, 71, 1369, 1370, 1371, 71, 71, 1375, 1376, - 71, 71, 1372, 1378, 71, 71, 1377, 71, 71, 71, - 1374, 71, 1382, 71, 71, 71, 1379, 1386, 1387, 1380, - 71, 1389, 1381, 71, 71, 71, 1388, 71, 1383, 71, - 71, 71, 71, 71, 1384, 71, 1396, 71, 1385, 1390, - 71, 71, 1393, 71, 71, 1391, 1394, 71, 1400, 1392, - 71, 1395, 1401, 71, 1405, 1403, 1398, 1397, 1399, 1406, + 1346, 1349, 71, 1358, 71, 71, 1355, 71, 1359, 71, + 1360, 71, 1363, 71, 71, 71, 71, 71, 1365, 71, + 71, 71, 1357, 1369, 1367, 71, 1368, 71, 1371, 71, + 1361, 3095, 1362, 71, 1364, 71, 1366, 71, 1370, 71, + 1373, 1376, 1372, 1374, 1375, 71, 71, 71, 1379, 71, + 1377, 1378, 71, 71, 1380, 1381, 1385, 1386, 1382, 71, + 71, 1388, 71, 71, 1387, 71, 1384, 71, 71, 1389, + 1392, 71, 71, 71, 71, 1396, 1397, 71, 71, 1391, + 1399, 71, 71, 1398, 1390, 71, 71, 71, 71, 71, + 71, 1406, 1393, 1394, 71, 71, 71, 1395, 1402, 1400, - 71, 71, 71, 1404, 1402, 1407, 71, 71, 71, 71, - 1408, 1416, 71, 71, 1409, 1418, 1410, 1414, 71, 71, - 1415, 71, 1411, 1412, 71, 1421, 1413, 1417, 1419, 1420, - 1422, 71, 71, 71, 71, 71, 71, 71, 1423, 1426, - 71, 1428, 71, 71, 71, 1433, 71, 71, 71, 1437, - 1434, 1425, 71, 1427, 1430, 71, 71, 1429, 1424, 71, - 1431, 1432, 71, 71, 1438, 1435, 71, 1436, 71, 71, - 71, 71, 71, 1440, 1444, 1439, 1446, 1441, 1442, 1445, - 71, 71, 1449, 71, 71, 1443, 1447, 71, 1454, 1448, - 1451, 1452, 1453, 1455, 71, 1456, 71, 1457, 1450, 71, + 1403, 1404, 3095, 71, 71, 1401, 71, 1405, 71, 1410, + 1411, 71, 1415, 1413, 1407, 71, 71, 1416, 71, 1412, + 1408, 1409, 71, 71, 1419, 1414, 71, 71, 71, 71, + 71, 1418, 71, 1417, 1426, 1424, 71, 1420, 1425, 1430, + 1428, 1421, 1422, 1427, 71, 1423, 71, 1431, 1429, 71, + 71, 71, 1432, 71, 71, 1433, 1436, 71, 71, 1437, + 71, 71, 1439, 71, 71, 71, 1444, 71, 1435, 71, + 71, 1445, 1448, 71, 71, 1434, 1438, 1441, 71, 1442, + 1440, 71, 1443, 71, 71, 1449, 71, 1446, 71, 1447, + 71, 71, 71, 1450, 71, 1451, 1455, 1456, 1452, 1453, - 71, 71, 71, 1458, 1459, 71, 71, 71, 71, 1461, - 1460, 71, 71, 71, 1466, 71, 71, 71, 71, 1465, - 71, 71, 1463, 1469, 1468, 1462, 1464, 1472, 71, 71, - 1477, 1470, 1473, 71, 71, 1467, 1474, 71, 71, 1471, - 1478, 1475, 71, 1481, 71, 71, 1480, 71, 1476, 71, - 1485, 71, 1486, 1479, 1488, 71, 71, 71, 71, 71, - 71, 71, 1491, 1482, 1490, 1483, 71, 1484, 71, 71, - 71, 71, 71, 1499, 1489, 71, 1492, 1487, 1493, 71, - 1494, 3083, 1500, 1496, 71, 1495, 1498, 1501, 1502, 71, - 71, 1497, 1503, 71, 71, 1504, 71, 1506, 1505, 71, + 71, 71, 71, 1459, 1594, 1454, 1457, 71, 1460, 1463, + 1458, 71, 71, 71, 1465, 1461, 1466, 1462, 1464, 1467, + 71, 1472, 71, 71, 1468, 71, 71, 1469, 1470, 71, + 71, 71, 71, 71, 1471, 71, 71, 1477, 71, 71, + 71, 71, 1476, 71, 71, 1480, 1474, 1479, 1475, 1473, + 71, 1483, 71, 1488, 1485, 1481, 1484, 71, 1478, 1486, + 71, 71, 1482, 71, 1487, 71, 71, 71, 71, 1489, + 1492, 1496, 1491, 71, 71, 1499, 71, 71, 1497, 71, + 1490, 71, 71, 1502, 71, 1493, 1495, 1494, 1501, 71, + 71, 71, 71, 71, 71, 1500, 71, 1511, 1503, 3095, - 71, 71, 1509, 71, 71, 1507, 1510, 71, 71, 1513, - 1517, 71, 1508, 71, 1519, 71, 1514, 71, 1518, 1511, - 71, 1512, 71, 71, 1516, 71, 71, 1515, 1522, 1523, - 1520, 71, 71, 1528, 71, 1521, 1524, 1525, 71, 71, - 1529, 71, 71, 1534, 1526, 71, 1533, 1532, 71, 71, - 71, 1527, 1530, 1536, 71, 71, 1538, 71, 1537, 1531, - 71, 71, 71, 71, 1541, 71, 1539, 71, 1535, 71, - 1544, 71, 1543, 71, 71, 71, 1540, 71, 1548, 71, - 1545, 71, 1542, 71, 1550, 71, 1551, 71, 1546, 1549, - 1547, 71, 1552, 71, 1553, 71, 1555, 71, 1558, 1556, + 1498, 71, 1510, 1504, 71, 71, 1507, 1513, 71, 1505, + 1506, 1509, 1514, 71, 1508, 71, 1512, 71, 1517, 71, + 1515, 1516, 71, 71, 71, 1520, 71, 71, 1518, 1521, + 71, 71, 1524, 1528, 71, 1519, 71, 1530, 71, 1525, + 71, 1529, 1522, 71, 1523, 71, 71, 1527, 71, 71, + 1526, 1533, 1534, 1531, 71, 71, 1539, 71, 1532, 1535, + 1536, 71, 71, 1540, 71, 71, 1545, 1537, 71, 1544, + 1543, 71, 71, 71, 1538, 1541, 1547, 71, 71, 1549, + 71, 1548, 1542, 71, 71, 71, 71, 1552, 71, 1550, + 71, 1546, 71, 1555, 71, 1554, 71, 71, 71, 1551, - 1560, 71, 71, 71, 71, 1557, 1554, 1561, 71, 1563, - 71, 1562, 1559, 71, 1566, 1565, 71, 1569, 71, 71, - 71, 1568, 71, 71, 1564, 71, 71, 1576, 71, 71, - 71, 71, 1567, 1577, 1571, 71, 71, 1570, 71, 1574, - 1580, 1572, 1573, 1581, 71, 1585, 1583, 71, 1575, 1578, - 1579, 71, 1584, 1587, 71, 1582, 1586, 1589, 71, 71, - 71, 71, 71, 71, 71, 71, 1594, 1591, 1588, 1592, - 71, 1595, 71, 71, 71, 71, 71, 1596, 1599, 1590, - 71, 1600, 71, 1610, 71, 1606, 1593, 1608, 1598, 71, - 1597, 71, 1603, 71, 1601, 1604, 1602, 71, 1607, 71, + 71, 1559, 71, 1556, 71, 1553, 71, 1561, 71, 1562, + 71, 1557, 1560, 1558, 71, 1563, 71, 1564, 71, 1566, + 71, 1569, 1567, 1571, 71, 71, 71, 71, 1568, 1565, + 1572, 71, 1574, 71, 1573, 1570, 71, 1577, 1576, 71, + 1580, 71, 71, 71, 1579, 71, 71, 1575, 71, 71, + 1587, 71, 71, 71, 71, 1578, 1588, 1582, 71, 71, + 1581, 71, 1585, 1591, 1583, 1584, 1592, 71, 71, 71, + 1596, 1586, 1589, 1590, 1595, 1598, 71, 71, 1593, 1597, + 71, 71, 1599, 1600, 71, 71, 1601, 71, 71, 1605, + 71, 1602, 1603, 71, 1606, 71, 71, 71, 1608, 1610, - 1614, 71, 1611, 1609, 1613, 71, 71, 1605, 71, 1616, - 1615, 71, 1617, 1618, 71, 71, 71, 71, 71, 71, - 1619, 71, 71, 1625, 1612, 1624, 1626, 1620, 71, 71, - 71, 1628, 71, 1627, 1621, 1630, 1622, 71, 1623, 1631, - 71, 71, 71, 71, 1629, 71, 1632, 71, 71, 1640, - 71, 71, 71, 71, 71, 71, 71, 71, 1646, 71, - 1633, 1636, 1637, 1634, 1638, 1635, 1639, 1642, 71, 71, - 1641, 1644, 71, 71, 1643, 71, 1649, 1645, 1648, 71, - 71, 71, 71, 71, 1650, 71, 1651, 71, 1647, 71, - 1654, 71, 1656, 1664, 71, 71, 1657, 1655, 1653, 1658, + 71, 1604, 71, 1611, 1607, 71, 1617, 71, 1614, 1612, + 1609, 1615, 71, 71, 71, 71, 1621, 1619, 1618, 71, + 1613, 71, 71, 1616, 1622, 1624, 1625, 71, 1626, 71, + 71, 71, 1628, 1620, 71, 1627, 71, 1629, 1630, 1633, + 1623, 71, 1632, 71, 71, 71, 1631, 71, 1637, 1638, + 1636, 71, 1640, 71, 71, 71, 1639, 71, 71, 71, + 1643, 71, 1634, 71, 1642, 1635, 71, 71, 1644, 71, + 71, 71, 1652, 71, 71, 1645, 1641, 71, 71, 71, + 71, 71, 71, 1648, 1649, 1650, 1646, 1647, 1658, 71, + 1651, 1653, 71, 71, 1655, 1654, 1656, 71, 1660, 71, - 71, 71, 71, 1652, 1663, 1659, 1660, 1666, 1662, 1665, - 71, 1661, 71, 1669, 71, 1668, 71, 71, 1667, 71, - 71, 1671, 1672, 71, 1673, 71, 71, 71, 71, 1670, - 1682, 71, 1676, 71, 71, 71, 1680, 1678, 1681, 1674, - 1679, 1675, 71, 71, 71, 1677, 71, 1684, 71, 1686, - 71, 71, 1691, 1683, 71, 71, 71, 71, 1688, 1687, - 1685, 1694, 71, 1695, 1693, 71, 1697, 71, 1690, 1698, - 1692, 71, 1699, 1689, 1703, 71, 71, 1696, 71, 1704, - 71, 71, 71, 1700, 71, 1709, 71, 1708, 1711, 71, - 1705, 71, 1701, 1702, 71, 1712, 1706, 1714, 71, 1713, + 1661, 1657, 71, 71, 71, 1664, 3095, 71, 71, 71, + 71, 1663, 1659, 1666, 71, 1668, 71, 1662, 1676, 71, + 71, 1665, 1667, 1669, 71, 1671, 1670, 1675, 1677, 71, + 71, 1672, 1678, 71, 71, 1674, 1673, 1680, 1681, 71, + 71, 71, 71, 71, 71, 71, 1682, 1684, 1679, 1685, + 71, 1693, 1688, 71, 71, 1694, 71, 71, 71, 1683, + 1686, 1687, 1690, 1692, 71, 1691, 71, 71, 71, 1689, + 71, 71, 71, 71, 1703, 71, 71, 1696, 1695, 71, + 1700, 1698, 71, 71, 1697, 1705, 1699, 1706, 71, 1707, + 1702, 1704, 1709, 71, 71, 1710, 1701, 1712, 1711, 71, - 1707, 71, 1710, 71, 1715, 71, 1716, 1718, 71, 71, - 1722, 71, 1720, 71, 71, 71, 71, 71, 1721, 1717, - 71, 1719, 1723, 71, 71, 1726, 71, 71, 71, 1727, - 1724, 1732, 71, 1734, 1725, 71, 1728, 1729, 1735, 71, - 1730, 1731, 1737, 71, 71, 71, 1739, 71, 1736, 71, - 1742, 71, 71, 1733, 71, 71, 71, 1746, 71, 71, - 71, 71, 1741, 1748, 71, 1738, 1740, 71, 1744, 1749, - 1752, 71, 1745, 1743, 71, 1747, 1750, 1755, 71, 1751, - 71, 71, 1754, 1753, 71, 1759, 71, 71, 71, 71, - 71, 71, 71, 1757, 1766, 1761, 71, 71, 71, 1756, + 1715, 71, 71, 1708, 71, 1716, 71, 71, 1721, 71, + 1723, 71, 1720, 71, 71, 1713, 1717, 1714, 1724, 1718, + 71, 71, 1726, 1719, 71, 1725, 71, 1722, 71, 71, + 1730, 71, 1727, 1728, 1732, 1729, 71, 1734, 71, 71, + 1733, 71, 1731, 71, 71, 71, 1735, 1746, 71, 71, + 71, 71, 1738, 71, 1739, 1744, 71, 1747, 1736, 71, + 1737, 1740, 1741, 71, 1742, 1743, 1749, 71, 71, 71, + 71, 71, 1748, 1754, 71, 71, 71, 1745, 71, 71, + 1758, 71, 71, 71, 1753, 71, 1760, 1751, 1750, 1752, + 1761, 1756, 71, 71, 1757, 71, 1755, 1762, 1759, 71, - 71, 1760, 1762, 1758, 1763, 1861, 71, 71, 1764, 1767, - 1771, 1765, 1769, 71, 1768, 1770, 71, 1772, 71, 71, - 1775, 71, 1774, 71, 1773, 1778, 71, 1776, 71, 71, - 71, 71, 1779, 1777, 71, 71, 71, 71, 71, 71, - 1784, 71, 71, 1788, 71, 71, 1785, 3083, 71, 1794, - 1780, 1786, 1782, 1781, 1783, 71, 1787, 1789, 71, 1797, - 1792, 71, 1791, 1796, 71, 71, 1798, 1793, 71, 71, - 1790, 71, 71, 1795, 1802, 71, 1805, 1806, 71, 71, - 1799, 1807, 71, 71, 1800, 1803, 71, 1804, 71, 1801, - 1809, 71, 71, 1810, 1813, 71, 71, 1815, 71, 1808, + 1763, 71, 1764, 1767, 71, 71, 1765, 71, 1771, 71, + 71, 71, 71, 71, 1766, 71, 71, 1769, 1773, 71, + 1768, 71, 1778, 71, 1772, 1774, 1770, 1775, 71, 1781, + 71, 1776, 1790, 1779, 1782, 71, 1777, 1780, 71, 1784, + 71, 1783, 71, 71, 1787, 1788, 71, 1785, 71, 71, + 71, 71, 1786, 71, 1791, 71, 71, 71, 71, 71, + 1789, 71, 1796, 71, 71, 71, 1809, 1797, 1800, 1792, + 71, 1798, 71, 1794, 1795, 1793, 1799, 71, 71, 1801, + 1807, 71, 1804, 1806, 1803, 1808, 71, 71, 71, 1805, + 71, 71, 1802, 1814, 71, 71, 71, 1817, 1818, 71, - 1814, 1816, 1817, 71, 1811, 1819, 1818, 1812, 71, 71, - 71, 71, 1824, 1821, 1822, 71, 71, 1823, 71, 71, - 71, 71, 71, 1832, 71, 3083, 71, 71, 1837, 71, - 1834, 1825, 1826, 1827, 1820, 1835, 71, 71, 1828, 1830, - 1829, 1836, 1831, 71, 1833, 1840, 71, 71, 1838, 71, - 71, 71, 1844, 71, 71, 1841, 71, 1846, 1839, 71, - 71, 1849, 1850, 71, 71, 1852, 71, 1842, 71, 71, - 1843, 71, 71, 71, 1847, 71, 1845, 1857, 1854, 71, - 1855, 1848, 71, 71, 1851, 1858, 71, 1860, 1862, 71, - 1864, 71, 71, 1853, 1856, 71, 1859, 1867, 1868, 71, + 1819, 71, 1810, 71, 1812, 71, 1811, 1821, 71, 1815, + 1813, 1816, 71, 1822, 1820, 1825, 71, 71, 71, 1827, + 71, 1826, 1829, 1828, 1823, 71, 1824, 1831, 71, 71, + 71, 71, 71, 71, 1833, 1836, 1830, 1834, 71, 71, + 1835, 71, 1837, 1838, 1839, 71, 71, 1844, 71, 1840, + 1846, 71, 1841, 71, 1832, 1847, 71, 71, 71, 1849, + 71, 1852, 71, 1842, 71, 1848, 1843, 71, 1845, 1850, + 71, 1853, 1856, 71, 71, 1851, 71, 1858, 71, 71, + 71, 1861, 1862, 71, 1854, 71, 1864, 71, 71, 71, + 71, 1855, 71, 71, 1870, 71, 71, 1869, 1859, 1866, - 71, 1873, 71, 1871, 71, 71, 1872, 1870, 1863, 71, - 1874, 1866, 71, 71, 71, 71, 71, 1865, 71, 1869, - 71, 1879, 1875, 71, 71, 1882, 1883, 1878, 71, 71, - 1884, 71, 71, 71, 1876, 1877, 71, 1887, 1880, 71, - 71, 1892, 71, 71, 1886, 1891, 71, 71, 1885, 1881, - 71, 1889, 71, 1888, 71, 1898, 1896, 1899, 71, 71, - 1897, 1890, 1893, 1900, 71, 1894, 1895, 1903, 71, 71, - 71, 71, 71, 71, 71, 1901, 1907, 1910, 1913, 71, - 1902, 71, 71, 71, 1905, 71, 1914, 1912, 71, 71, - 1904, 1906, 1915, 1908, 1909, 71, 1911, 71, 1916, 1920, + 1857, 1860, 1867, 71, 71, 1863, 71, 1872, 71, 71, + 1868, 1873, 71, 1865, 1880, 1874, 71, 1871, 71, 1876, + 71, 1879, 71, 71, 71, 1883, 1884, 71, 1878, 1886, + 1882, 71, 71, 71, 1875, 1877, 1885, 71, 71, 71, + 71, 71, 1881, 1891, 71, 71, 1889, 1887, 71, 1894, + 1895, 1890, 1896, 1888, 71, 71, 71, 71, 71, 1892, + 71, 1899, 71, 1904, 71, 1897, 71, 1903, 71, 1898, + 1893, 71, 71, 71, 71, 1901, 1908, 1900, 71, 1909, + 1911, 71, 1902, 1906, 71, 1905, 71, 1910, 1912, 71, + 1907, 1915, 71, 71, 71, 1916, 71, 1913, 71, 1919, - 71, 1921, 71, 1922, 1924, 71, 1917, 1925, 1923, 71, - 71, 1918, 71, 71, 71, 1929, 71, 1919, 71, 1927, - 71, 71, 1931, 71, 1928, 71, 71, 1934, 1930, 1936, - 71, 1926, 1932, 71, 71, 71, 71, 71, 1937, 71, - 1941, 1940, 1938, 71, 1942, 1943, 71, 1935, 1933, 1944, - 71, 1946, 71, 1939, 71, 71, 71, 71, 1947, 1945, - 1948, 71, 1949, 1950, 71, 71, 1951, 1952, 71, 1954, - 71, 71, 71, 71, 1958, 71, 71, 1953, 1957, 71, - 71, 1959, 1955, 1956, 1960, 1961, 1962, 71, 71, 71, - 71, 71, 71, 71, 1969, 1967, 1963, 1964, 1968, 71, + 1922, 71, 1914, 1917, 71, 71, 71, 1925, 71, 71, + 1924, 71, 1918, 71, 1926, 1927, 1920, 71, 1921, 1923, + 1929, 1931, 1932, 71, 1934, 1930, 1928, 1933, 71, 1935, + 71, 1936, 1937, 71, 71, 71, 1941, 71, 71, 1939, + 71, 71, 71, 71, 71, 1943, 71, 1940, 1946, 71, + 1948, 71, 1942, 71, 71, 1944, 71, 71, 71, 1938, + 3095, 1949, 1952, 1950, 71, 71, 1954, 1953, 1947, 1945, + 1955, 71, 1951, 1956, 71, 1958, 71, 71, 1957, 71, + 71, 71, 1959, 1961, 1960, 71, 71, 71, 71, 1962, + 1963, 1964, 71, 1966, 71, 71, 1970, 71, 1965, 1967, - 71, 71, 71, 71, 1974, 71, 71, 1965, 1971, 1966, - 1970, 71, 71, 1978, 71, 1975, 1973, 71, 1980, 1972, - 1977, 71, 71, 1976, 1984, 71, 1979, 1982, 71, 71, - 71, 1985, 71, 1990, 1983, 1981, 71, 71, 71, 71, - 71, 1992, 71, 71, 1993, 1986, 1987, 1988, 1994, 71, - 1989, 1995, 71, 71, 1991, 71, 1998, 71, 1997, 1996, - 71, 71, 1999, 71, 71, 71, 71, 71, 71, 71, - 71, 3083, 2001, 2002, 2007, 2004, 2011, 71, 2000, 2003, - 71, 2006, 2010, 71, 71, 2012, 2014, 2008, 71, 2009, - 71, 2005, 71, 2015, 2018, 2017, 71, 71, 71, 71, + 1969, 71, 71, 71, 1974, 71, 1968, 1972, 1973, 71, + 1971, 71, 71, 71, 71, 71, 71, 1981, 1979, 71, + 1976, 1980, 71, 71, 71, 71, 1986, 71, 1983, 1975, + 1977, 71, 1978, 1982, 71, 71, 1990, 1987, 1985, 71, + 1984, 71, 71, 1989, 71, 1988, 71, 1994, 1991, 1996, + 71, 71, 1993, 1992, 1997, 71, 71, 1995, 71, 2002, + 71, 71, 1998, 71, 2004, 71, 71, 71, 2005, 2007, + 2001, 1999, 71, 2000, 2006, 71, 71, 2003, 71, 2008, + 71, 2010, 71, 71, 71, 2011, 71, 2009, 71, 71, + 71, 71, 71, 71, 2013, 2014, 2016, 2019, 71, 2012, - 2013, 71, 2020, 71, 2016, 2021, 71, 71, 2022, 2026, - 71, 71, 2024, 2028, 2019, 71, 71, 71, 2025, 2023, - 2030, 71, 2032, 71, 71, 2033, 71, 71, 71, 2027, - 2029, 2034, 2035, 2038, 71, 71, 71, 71, 71, 71, - 2039, 2031, 2036, 71, 2041, 2044, 71, 2040, 2037, 71, - 2045, 71, 2043, 2048, 71, 71, 2042, 71, 2046, 71, - 2049, 71, 71, 2050, 71, 2052, 2054, 71, 71, 2056, - 71, 2047, 2051, 2053, 2055, 71, 2057, 71, 71, 2058, - 71, 71, 2059, 2063, 71, 2064, 71, 71, 2065, 2061, - 71, 71, 2062, 2066, 71, 2067, 2060, 2072, 71, 2068, + 71, 2015, 2022, 2026, 2018, 2023, 71, 71, 71, 3095, + 2020, 2024, 2021, 2027, 2017, 71, 71, 71, 2025, 2030, + 2029, 71, 71, 71, 71, 71, 2032, 2028, 71, 2033, + 71, 71, 2034, 71, 2031, 2038, 71, 2036, 2040, 71, + 2042, 71, 2035, 2037, 2039, 71, 71, 71, 2045, 71, + 2044, 71, 2046, 2041, 2047, 71, 2043, 2050, 71, 71, + 71, 71, 71, 71, 2051, 2056, 71, 71, 2053, 2048, + 71, 2052, 71, 2057, 71, 2049, 2055, 2060, 71, 2061, + 2054, 71, 2058, 71, 71, 3095, 2062, 2066, 71, 2064, + 2059, 71, 71, 2068, 71, 2069, 2063, 2065, 71, 71, - 71, 71, 2069, 2070, 71, 2071, 2075, 71, 71, 71, - 2074, 2073, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 2076, 2084, 2081, 2078, 2077, 2079, 2082, 2080, - 2086, 71, 71, 71, 2091, 2083, 2085, 71, 2087, 2089, - 2090, 71, 2095, 71, 71, 2093, 2097, 71, 71, 71, - 2094, 2088, 71, 2096, 2100, 2092, 2099, 71, 2102, 2104, - 2105, 71, 71, 2103, 71, 71, 71, 2098, 71, 2107, - 2101, 2106, 2109, 71, 71, 2110, 71, 2114, 71, 71, - 2115, 71, 2108, 71, 2118, 2113, 71, 71, 2120, 2111, - 71, 2119, 71, 2116, 2121, 71, 2123, 2122, 71, 71, + 71, 71, 71, 2067, 2071, 71, 71, 2070, 2075, 2077, + 2073, 71, 71, 2074, 2078, 71, 71, 2080, 2072, 71, + 2079, 2082, 71, 2076, 2081, 71, 71, 2083, 2087, 71, + 71, 71, 2084, 71, 71, 2086, 71, 71, 71, 71, + 71, 71, 71, 2096, 2097, 2085, 71, 2091, 2088, 2089, + 2090, 2092, 2093, 2094, 71, 2098, 71, 2095, 71, 71, + 2099, 71, 2101, 71, 71, 2102, 2107, 71, 71, 2109, + 71, 71, 2106, 2100, 2103, 2111, 2104, 2108, 71, 71, + 71, 3095, 2114, 2110, 2112, 71, 2105, 2115, 71, 2116, + 2117, 2113, 71, 2119, 71, 71, 71, 2118, 2121, 71, - 2112, 2117, 71, 2124, 71, 71, 71, 71, 2126, 71, - 71, 2128, 71, 71, 71, 2131, 71, 71, 2125, 2137, - 71, 2135, 2130, 71, 71, 71, 71, 2138, 2133, 2140, - 2127, 2132, 2129, 71, 2134, 71, 71, 71, 71, 2136, - 2139, 2144, 2147, 71, 71, 2142, 71, 71, 71, 71, - 2145, 71, 2141, 71, 2143, 2148, 2146, 71, 71, 71, - 71, 2158, 71, 2149, 71, 2150, 71, 2159, 71, 2155, - 2153, 2151, 2160, 2152, 2154, 2157, 71, 2163, 71, 2156, - 2161, 2162, 2164, 71, 71, 71, 2165, 2166, 71, 71, - 2169, 71, 71, 2167, 2172, 71, 71, 2173, 2168, 71, + 2120, 71, 2122, 71, 2126, 71, 71, 2127, 71, 2130, + 2129, 2135, 2125, 71, 71, 71, 2123, 71, 2131, 2134, + 2128, 71, 2132, 2133, 71, 71, 71, 2124, 71, 2136, + 71, 71, 2138, 71, 71, 71, 2140, 71, 71, 71, + 2143, 71, 71, 2149, 71, 71, 2137, 2147, 71, 2142, + 71, 71, 2150, 2145, 71, 2139, 2141, 2144, 2146, 2152, + 2151, 71, 71, 2148, 71, 71, 71, 2156, 2159, 71, + 2155, 71, 71, 2154, 2160, 71, 2153, 2157, 71, 71, + 71, 71, 71, 2158, 2170, 71, 71, 71, 2175, 71, + 2161, 2162, 2171, 2167, 71, 71, 3095, 71, 2163, 2165, - 2170, 2174, 71, 2171, 71, 2178, 71, 2179, 71, 71, - 2181, 71, 71, 2183, 71, 71, 2177, 71, 71, 2175, - 2185, 71, 2176, 2186, 71, 2187, 71, 2189, 2180, 71, - 2182, 71, 2184, 71, 71, 2188, 2193, 71, 2192, 2195, - 71, 71, 71, 2190, 71, 71, 2199, 2198, 2197, 71, - 2191, 2201, 71, 2194, 71, 71, 2205, 71, 71, 2196, - 71, 2200, 71, 71, 2210, 71, 71, 2209, 2202, 2203, - 71, 71, 71, 71, 2204, 2212, 71, 2208, 2206, 2215, - 71, 71, 71, 2207, 71, 2211, 2213, 2214, 2217, 71, - 2218, 71, 2222, 2216, 71, 71, 71, 2224, 71, 2225, + 2166, 2169, 2164, 2168, 2176, 71, 71, 2172, 2177, 2173, + 2174, 2178, 71, 71, 71, 71, 2181, 71, 2184, 71, + 71, 71, 71, 3095, 71, 2185, 2182, 2180, 2179, 2183, + 71, 2190, 71, 2191, 71, 2186, 2189, 71, 2193, 71, + 71, 2187, 2188, 2195, 71, 71, 71, 2198, 71, 2199, + 71, 2197, 71, 71, 71, 71, 2192, 71, 2194, 71, + 2196, 71, 2201, 3095, 2204, 71, 2200, 71, 2202, 2205, + 71, 2207, 71, 2209, 2203, 71, 2206, 71, 2210, 2208, + 71, 2211, 2213, 71, 2214, 71, 2217, 71, 71, 71, + 71, 71, 2215, 2222, 71, 2221, 2212, 71, 71, 71, - 2219, 71, 2220, 2223, 71, 71, 2229, 71, 71, 2230, - 2228, 71, 71, 71, 2226, 2221, 2227, 2234, 2236, 71, - 2232, 71, 2239, 71, 2237, 2241, 71, 71, 71, 2233, - 2231, 71, 2242, 71, 71, 3083, 2238, 2235, 2243, 71, - 71, 71, 2246, 71, 2240, 71, 71, 2245, 71, 2247, - 2248, 2244, 2249, 2252, 2250, 2253, 71, 71, 71, 71, - 2251, 71, 2254, 71, 2257, 2256, 2258, 71, 2255, 71, - 2259, 71, 71, 2265, 71, 71, 71, 2261, 2260, 2262, - 71, 71, 71, 2263, 71, 2267, 71, 2264, 71, 2272, - 2266, 71, 2268, 2273, 2271, 71, 71, 2269, 2316, 2270, + 71, 2227, 71, 2224, 2216, 2220, 71, 71, 2218, 71, + 71, 71, 2219, 71, 2225, 2226, 2223, 2229, 71, 2234, + 71, 2230, 71, 71, 71, 2236, 2228, 2231, 71, 2232, + 71, 2235, 2240, 2237, 71, 71, 71, 71, 71, 2233, + 2241, 2242, 71, 2246, 71, 71, 71, 2244, 2238, 2243, + 2239, 2248, 71, 71, 2247, 2251, 2253, 2249, 2245, 2250, + 71, 71, 71, 2252, 71, 2254, 2257, 71, 71, 2255, + 2256, 2258, 71, 71, 71, 71, 2259, 71, 2264, 2265, + 71, 2260, 2261, 2262, 71, 71, 71, 71, 2270, 2263, + 2266, 71, 2269, 71, 71, 71, 2268, 2267, 71, 2271, - 2276, 71, 71, 2277, 2278, 71, 71, 2275, 71, 2279, - 2281, 2274, 2282, 2280, 2283, 71, 71, 71, 71, 71, - 2285, 71, 71, 71, 71, 2289, 2290, 71, 71, 71, - 3083, 2284, 71, 2286, 2292, 71, 2287, 71, 71, 2293, - 2294, 2291, 2288, 2295, 71, 71, 71, 2297, 2298, 71, - 2296, 2300, 71, 2299, 71, 71, 71, 71, 71, 2301, - 2302, 71, 2306, 71, 2309, 71, 71, 71, 2308, 71, - 71, 2305, 2310, 71, 2303, 2315, 2304, 71, 2313, 71, - 2314, 2307, 71, 2311, 71, 2312, 71, 2320, 2317, 71, - 2319, 2318, 71, 2322, 71, 2324, 71, 71, 2323, 2326, + 2273, 71, 2274, 2277, 71, 71, 71, 2272, 71, 2275, + 71, 2276, 71, 3095, 2279, 71, 2278, 71, 2280, 71, + 2284, 71, 2288, 71, 2281, 2282, 2285, 2283, 71, 2289, + 71, 2287, 2286, 2290, 71, 71, 71, 2293, 2291, 2294, + 71, 2292, 71, 71, 2296, 71, 2295, 71, 71, 2297, + 71, 2302, 2298, 71, 2301, 71, 2299, 71, 71, 71, + 2304, 71, 71, 2305, 2306, 2307, 71, 2308, 71, 2300, + 71, 71, 2303, 2312, 71, 2311, 71, 2309, 71, 71, + 71, 71, 71, 2314, 71, 2321, 2318, 71, 71, 2313, + 2310, 71, 2320, 71, 2322, 2317, 71, 71, 71, 2315, - 71, 71, 2328, 71, 71, 2327, 71, 71, 2321, 2325, - 71, 71, 71, 71, 71, 2332, 71, 2334, 2335, 71, - 2330, 71, 2329, 2331, 2336, 71, 2337, 71, 2338, 71, - 2339, 2344, 2340, 71, 71, 71, 2341, 2333, 2342, 2347, - 2343, 2345, 71, 71, 2346, 71, 71, 71, 2350, 71, - 71, 71, 71, 2351, 71, 2354, 2355, 71, 71, 71, - 3083, 2348, 2349, 2356, 71, 2352, 71, 71, 2358, 2353, - 2357, 2359, 71, 71, 2360, 71, 71, 71, 2361, 71, - 2364, 2362, 2366, 2367, 71, 2363, 2368, 71, 2369, 71, - 2370, 71, 71, 71, 71, 2374, 2365, 2372, 2373, 71, + 2316, 2326, 2325, 71, 2319, 2328, 2327, 71, 71, 71, + 71, 2323, 2324, 71, 2331, 71, 2336, 2329, 2332, 71, + 2334, 71, 71, 2330, 71, 2335, 71, 2338, 71, 2340, + 71, 71, 71, 2339, 71, 71, 2333, 71, 2337, 71, + 2344, 71, 71, 71, 2346, 71, 2342, 2347, 2398, 2341, + 2343, 2348, 71, 2349, 71, 2350, 71, 2351, 71, 2352, + 71, 71, 71, 2345, 71, 2354, 2359, 2353, 2357, 71, + 71, 71, 71, 2358, 2356, 2362, 71, 2355, 71, 71, + 71, 2363, 71, 71, 2366, 2368, 2361, 71, 2360, 2367, + 71, 71, 71, 71, 71, 2372, 2371, 71, 2364, 71, - 2375, 71, 71, 71, 2371, 71, 2380, 71, 71, 2382, - 71, 2383, 71, 2376, 2377, 71, 71, 71, 71, 71, - 71, 2379, 71, 2378, 2386, 2389, 2384, 2381, 2385, 71, - 2387, 2392, 71, 71, 71, 71, 71, 71, 71, 2388, - 71, 2399, 2390, 2393, 71, 71, 71, 71, 71, 2391, - 2396, 71, 2398, 2400, 71, 2395, 3083, 2406, 71, 2394, - 2397, 2401, 2402, 2403, 71, 71, 71, 2410, 71, 2408, - 2404, 2409, 2407, 71, 2405, 2411, 71, 71, 2412, 71, - 2413, 71, 2414, 2415, 2416, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 2424, 71, 71, 71, 71, 2422, + 2365, 2370, 71, 71, 2376, 2369, 71, 71, 2373, 2379, + 71, 2374, 2378, 71, 2375, 2380, 71, 2381, 71, 2382, + 71, 71, 71, 2377, 2384, 2383, 2385, 71, 2386, 71, + 2387, 71, 71, 71, 2388, 2392, 71, 71, 2394, 71, + 2395, 71, 71, 2389, 71, 71, 71, 71, 71, 2391, + 71, 71, 2390, 2396, 71, 2401, 2393, 2397, 2399, 2404, + 71, 71, 71, 2405, 2400, 71, 71, 2402, 2403, 71, + 2411, 71, 71, 71, 71, 2408, 71, 2406, 71, 71, + 2410, 2407, 2412, 2422, 71, 71, 2413, 2414, 2418, 2409, + 71, 71, 2415, 2419, 71, 2420, 2421, 71, 2416, 2423, - 71, 2428, 2429, 71, 2417, 2419, 2418, 2431, 71, 2421, - 2420, 2423, 71, 2425, 2426, 2427, 71, 2430, 2432, 71, - 71, 2433, 2434, 71, 71, 71, 2435, 2437, 71, 71, - 71, 2443, 71, 71, 2436, 2444, 71, 71, 2445, 2438, - 71, 71, 71, 2439, 71, 2441, 2440, 2450, 71, 2442, - 71, 2446, 2447, 71, 71, 2449, 2454, 71, 2453, 2448, - 2455, 71, 71, 71, 2456, 2457, 71, 71, 2451, 71, - 2452, 71, 2459, 71, 71, 71, 2458, 71, 2463, 71, - 71, 2461, 2467, 2468, 71, 71, 2460, 2471, 71, 71, - 71, 2462, 71, 2472, 2464, 2466, 2465, 71, 2470, 71, + 71, 2417, 71, 2424, 71, 2425, 71, 2426, 2428, 71, + 71, 71, 2427, 71, 71, 71, 71, 71, 71, 2436, + 71, 71, 71, 3095, 2434, 71, 2440, 71, 2429, 2431, + 2430, 2441, 71, 71, 2433, 2432, 2435, 71, 2437, 2438, + 2439, 71, 2442, 2444, 71, 2447, 2443, 2446, 71, 71, + 2445, 2448, 71, 71, 71, 71, 2449, 71, 2455, 71, + 2456, 71, 2457, 71, 71, 71, 71, 2450, 71, 71, + 71, 2451, 2452, 2453, 2454, 2462, 71, 71, 71, 2459, + 2461, 2458, 2465, 71, 2460, 2466, 2467, 71, 71, 2463, + 2468, 2469, 71, 71, 71, 71, 2464, 2470, 71, 71, - 2469, 2474, 2475, 71, 71, 2473, 71, 2477, 2480, 71, - 71, 71, 2476, 71, 2484, 71, 71, 2483, 2486, 71, - 2482, 71, 2481, 71, 2478, 71, 2479, 71, 2487, 71, - 2488, 2491, 71, 71, 2492, 2485, 2494, 71, 71, 2490, - 71, 2489, 71, 71, 2499, 71, 71, 2497, 2501, 71, - 71, 2493, 2498, 2495, 71, 2496, 71, 71, 71, 2502, - 71, 2500, 2503, 2505, 2504, 71, 71, 71, 2506, 71, - 71, 71, 2511, 71, 2508, 2507, 2512, 2509, 2514, 71, - 2516, 2510, 2515, 71, 71, 2513, 71, 71, 2520, 2517, - 71, 71, 2522, 71, 71, 2521, 71, 2525, 71, 2526, + 71, 71, 2471, 71, 2475, 71, 71, 2473, 2479, 2480, + 71, 71, 71, 2472, 2483, 71, 2484, 71, 2474, 71, + 2476, 2478, 2477, 2486, 2482, 71, 2481, 2487, 71, 71, + 71, 71, 2485, 2492, 71, 71, 71, 71, 2488, 2496, + 71, 2495, 71, 71, 2489, 2494, 71, 2493, 2498, 71, + 2490, 2491, 71, 71, 71, 2500, 3095, 2499, 71, 2501, + 71, 2497, 2503, 71, 71, 2502, 71, 2504, 2506, 71, + 71, 2507, 71, 2508, 2511, 71, 2505, 71, 2516, 2509, + 71, 2510, 2513, 71, 71, 2514, 71, 71, 71, 2515, + 71, 2517, 2512, 71, 71, 2518, 71, 71, 71, 2520, - 71, 2524, 71, 3083, 2518, 2519, 2528, 71, 2523, 71, - 71, 2530, 2529, 71, 71, 2527, 2531, 71, 2532, 2533, - 2534, 71, 71, 71, 71, 2535, 71, 2536, 71, 2541, - 71, 2540, 2537, 71, 2542, 71, 2539, 71, 2543, 2538, - 71, 71, 2544, 71, 71, 71, 2545, 2546, 2548, 2547, - 2549, 71, 71, 71, 71, 71, 2554, 71, 71, 71, - 71, 71, 2552, 2553, 71, 2551, 2555, 2559, 71, 2550, - 71, 2560, 71, 2564, 71, 2563, 71, 2556, 71, 2557, - 2558, 2562, 71, 71, 2569, 71, 71, 2568, 2571, 2561, - 2572, 2573, 71, 2566, 71, 2565, 71, 71, 2574, 71, + 71, 2521, 2523, 2524, 2526, 71, 71, 2519, 71, 2522, + 2532, 2525, 2527, 71, 71, 2528, 71, 71, 2530, 2529, + 71, 2534, 2533, 71, 2531, 71, 2537, 71, 2538, 71, + 2536, 71, 2540, 71, 71, 2542, 71, 2541, 2535, 2546, + 2543, 71, 71, 71, 2539, 71, 71, 2544, 2545, 71, + 2547, 71, 71, 71, 2548, 3095, 2553, 2552, 2554, 71, + 2549, 2551, 71, 71, 71, 71, 71, 2550, 2555, 2558, + 2557, 2556, 71, 71, 71, 71, 71, 71, 2560, 2561, + 71, 71, 71, 2566, 2559, 71, 2564, 71, 71, 2563, + 2565, 71, 71, 2562, 2567, 2571, 71, 71, 71, 2568, - 2575, 71, 2567, 71, 71, 71, 2576, 71, 71, 2579, - 71, 2570, 2577, 71, 2582, 2584, 71, 2578, 2585, 71, - 71, 2580, 71, 2581, 2586, 71, 2587, 71, 2583, 2589, - 71, 71, 2588, 71, 71, 71, 2591, 2593, 71, 2596, - 2590, 71, 2594, 71, 2599, 2592, 2597, 71, 2598, 71, - 71, 71, 71, 2601, 2595, 2603, 71, 71, 2604, 2605, - 71, 2607, 71, 2600, 71, 71, 71, 2606, 2611, 2612, - 71, 2602, 71, 2614, 71, 71, 2613, 2608, 2615, 71, - 2610, 71, 71, 2609, 71, 2620, 71, 71, 71, 71, - 2619, 71, 2622, 2623, 71, 71, 71, 2625, 2616, 2626, + 71, 2576, 71, 2575, 2572, 71, 71, 2569, 71, 2574, + 2570, 2573, 2580, 2581, 71, 71, 2583, 2577, 2584, 2585, + 2578, 71, 71, 71, 71, 71, 2579, 2586, 71, 2587, + 71, 71, 2589, 71, 71, 2588, 71, 2591, 71, 2594, + 2582, 71, 2596, 71, 2590, 2597, 71, 71, 2592, 2598, + 71, 2593, 71, 71, 2601, 71, 2599, 71, 2600, 2595, + 71, 71, 2603, 2605, 71, 2608, 71, 2602, 2606, 71, + 2609, 71, 2604, 2610, 71, 71, 71, 71, 2611, 2612, + 71, 2607, 2615, 71, 71, 2616, 2617, 71, 2619, 71, + 71, 71, 71, 2623, 2613, 2618, 71, 2614, 71, 71, - 2624, 2617, 2618, 71, 71, 71, 2628, 71, 71, 71, - 2631, 2621, 2627, 2635, 71, 71, 71, 71, 71, 2637, - 71, 2629, 2630, 2634, 71, 2632, 71, 2638, 2633, 2636, - 2642, 2639, 2641, 2645, 71, 2643, 71, 2640, 71, 2644, - 71, 2646, 71, 2647, 71, 2648, 71, 2649, 71, 71, - 71, 71, 2653, 2651, 2650, 71, 2657, 71, 71, 2654, - 2658, 71, 71, 2661, 71, 2659, 71, 2663, 71, 2652, - 71, 2655, 71, 2662, 71, 2656, 2660, 2664, 2665, 71, - 71, 71, 71, 2666, 2670, 71, 2671, 71, 2669, 2667, - 2668, 71, 2674, 71, 71, 71, 2672, 2675, 71, 2678, + 2624, 71, 2625, 2620, 71, 2626, 2622, 71, 71, 2621, + 2627, 71, 2632, 71, 2631, 71, 71, 71, 71, 2628, + 2634, 2635, 71, 71, 2629, 2637, 71, 2630, 2636, 2638, + 71, 71, 71, 2640, 71, 71, 71, 2643, 2633, 71, + 2639, 2647, 71, 71, 71, 71, 2649, 71, 2641, 2642, + 2646, 71, 2644, 2648, 2650, 2645, 2654, 71, 2651, 2653, + 71, 2655, 71, 71, 2652, 2663, 2656, 2657, 71, 71, + 2658, 71, 2659, 71, 2660, 71, 2661, 2664, 71, 2662, + 71, 71, 71, 2669, 71, 2670, 71, 71, 71, 2666, + 2671, 2673, 71, 71, 2675, 71, 2677, 71, 71, 71, - 71, 71, 2677, 2680, 71, 2679, 2673, 2676, 2681, 71, - 71, 71, 71, 71, 71, 2682, 71, 71, 2690, 71, - 71, 2685, 71, 71, 71, 2686, 2688, 2693, 2694, 2684, - 3083, 2691, 71, 2695, 71, 2683, 2689, 71, 71, 2687, - 71, 2692, 2697, 2696, 71, 2698, 2700, 71, 2699, 2701, - 71, 2702, 71, 71, 71, 71, 71, 2707, 2704, 2705, - 2706, 2708, 2703, 71, 71, 2710, 71, 71, 71, 2709, - 2715, 71, 2711, 2713, 71, 71, 71, 2717, 71, 2718, - 71, 71, 71, 2721, 71, 2719, 2720, 71, 2712, 2714, - 71, 2725, 71, 71, 71, 71, 71, 71, 71, 2716, + 2674, 2667, 2668, 2676, 2665, 71, 2672, 71, 2678, 71, + 2682, 71, 71, 71, 2679, 71, 2680, 2683, 2686, 71, + 71, 2684, 71, 2687, 71, 71, 2690, 2681, 71, 2689, + 2685, 71, 2688, 2691, 2692, 71, 2693, 71, 71, 2694, + 71, 71, 71, 71, 71, 2702, 3095, 2697, 71, 71, + 71, 71, 2700, 2698, 71, 2705, 2695, 71, 2696, 2706, + 2703, 71, 2707, 71, 2701, 71, 2708, 2699, 2709, 71, + 2704, 71, 2710, 2712, 71, 2711, 2713, 71, 2714, 71, + 71, 71, 71, 71, 2719, 2716, 2718, 2720, 2717, 2715, + 71, 71, 2722, 71, 71, 71, 2721, 2727, 71, 71, - 2728, 71, 2723, 2722, 2729, 71, 2726, 2727, 71, 2732, - 2724, 71, 71, 2730, 2735, 71, 2733, 2731, 2737, 71, - 2738, 71, 2740, 71, 71, 71, 71, 2736, 71, 71, - 71, 2734, 71, 2739, 2744, 2745, 71, 71, 2749, 71, - 2741, 2742, 2743, 71, 2752, 71, 71, 71, 2746, 2754, - 71, 2748, 2755, 2747, 71, 71, 71, 2750, 2751, 2757, - 71, 2758, 71, 2760, 71, 71, 2753, 2762, 71, 2765, - 71, 71, 2756, 71, 2759, 71, 71, 2763, 2769, 71, - 71, 71, 3083, 2761, 2770, 2764, 71, 2771, 2767, 2766, - 2774, 2768, 2772, 2773, 2775, 71, 71, 71, 2777, 71, + 2725, 2723, 71, 71, 2729, 71, 2730, 71, 71, 71, + 2733, 71, 2731, 2732, 71, 2724, 2726, 71, 2737, 71, + 71, 71, 71, 71, 2728, 71, 2740, 71, 71, 2735, + 2734, 71, 2741, 2738, 2739, 71, 2744, 2736, 2747, 71, + 2745, 2742, 71, 2749, 71, 71, 2743, 2750, 71, 2752, + 71, 71, 71, 71, 71, 2757, 71, 2746, 71, 2756, + 71, 2748, 71, 71, 2761, 71, 2751, 2753, 2754, 2755, + 71, 2764, 71, 71, 2766, 71, 71, 71, 2758, 2762, + 71, 2760, 2767, 2759, 2769, 71, 2770, 71, 71, 2763, + 2772, 71, 71, 2765, 71, 71, 2771, 2768, 2777, 2774, - 2776, 71, 71, 71, 71, 2782, 2779, 2780, 71, 2785, - 71, 71, 71, 71, 71, 71, 71, 2778, 2790, 71, - 71, 71, 2781, 71, 2786, 2783, 2784, 71, 2789, 2792, - 2811, 2787, 2793, 71, 71, 2791, 2794, 71, 71, 2788, - 71, 2796, 2803, 2795, 71, 2797, 2798, 71, 2799, 71, - 2800, 71, 71, 2802, 71, 71, 2804, 2801, 71, 2807, - 2808, 71, 71, 71, 2812, 71, 2805, 2813, 71, 2814, - 71, 71, 71, 71, 3083, 71, 2809, 2806, 2817, 2818, - 71, 2819, 71, 2810, 71, 2821, 2822, 71, 71, 2820, - 2815, 2816, 71, 2825, 71, 71, 2824, 71, 71, 2823, + 71, 2775, 71, 71, 71, 2781, 71, 2779, 71, 71, + 2773, 2782, 71, 2783, 2776, 2784, 71, 2786, 71, 2778, + 2787, 71, 2780, 71, 71, 2789, 2794, 2788, 71, 2785, + 71, 71, 71, 2791, 2790, 2792, 71, 2793, 2797, 71, + 71, 71, 71, 71, 2802, 71, 71, 3095, 71, 2805, + 71, 71, 2798, 2795, 2796, 71, 2801, 2804, 71, 2799, + 2806, 71, 71, 2807, 71, 2803, 71, 2800, 71, 2808, + 2815, 2809, 2810, 71, 2811, 71, 2812, 71, 71, 2814, + 71, 71, 2819, 2813, 2816, 71, 2817, 2820, 71, 71, + 2818, 71, 2824, 71, 2825, 71, 2826, 71, 71, 2821, - 2826, 71, 71, 71, 71, 71, 2829, 71, 71, 2831, - 71, 71, 2832, 71, 2830, 71, 71, 2827, 2828, 71, - 71, 2841, 71, 71, 2833, 2842, 2837, 2834, 2835, 2836, - 2838, 2839, 2844, 71, 2943, 71, 2840, 71, 71, 2843, - 2845, 2850, 2846, 2848, 71, 71, 2847, 2849, 71, 2851, - 71, 2852, 71, 2853, 2854, 71, 71, 2855, 2856, 2859, - 71, 2857, 2858, 2861, 71, 2860, 71, 71, 71, 71, - 71, 2866, 71, 71, 71, 2865, 71, 71, 2869, 71, - 71, 2862, 71, 2868, 71, 2878, 2870, 71, 2863, 2864, - 71, 2874, 71, 2873, 2871, 2875, 71, 71, 2867, 2881, + 2823, 71, 71, 2829, 2830, 71, 2831, 71, 71, 2822, + 71, 71, 2834, 2832, 71, 2837, 71, 2827, 71, 71, + 2828, 71, 2836, 2835, 2833, 71, 2838, 71, 71, 71, + 71, 71, 2841, 71, 71, 2843, 71, 71, 2844, 2839, + 2842, 71, 71, 71, 71, 2840, 71, 71, 2853, 2854, + 2845, 2856, 2849, 2846, 2847, 2848, 71, 71, 2850, 2851, + 71, 2857, 3095, 2852, 2860, 71, 2855, 2858, 2861, 71, + 71, 2863, 71, 2859, 2862, 2864, 71, 2865, 2866, 71, + 71, 2867, 2868, 2871, 71, 2869, 2870, 71, 71, 2872, + 71, 71, 71, 71, 71, 2878, 71, 71, 71, 2877, - 2872, 2876, 71, 71, 2882, 71, 2879, 2877, 2883, 2880, - 71, 71, 2884, 71, 71, 71, 2887, 2891, 2885, 71, - 2888, 2890, 71, 71, 3083, 2892, 2893, 71, 2894, 71, - 71, 2886, 2889, 2896, 71, 2895, 2897, 71, 2898, 71, - 2899, 71, 2900, 71, 2901, 71, 2902, 71, 2903, 71, - 71, 2905, 71, 71, 71, 71, 71, 71, 71, 2904, - 2910, 71, 2906, 71, 71, 71, 2907, 71, 2914, 71, - 2913, 2911, 2916, 71, 71, 2908, 2909, 2912, 2915, 71, - 71, 2920, 2918, 2917, 71, 2923, 71, 2922, 71, 71, - 71, 71, 2921, 2925, 71, 2919, 71, 71, 71, 71, + 71, 71, 2881, 71, 3095, 2873, 2874, 2880, 71, 71, + 2882, 2875, 71, 2876, 71, 2886, 2887, 71, 2883, 2888, + 71, 2885, 2879, 71, 2889, 71, 2884, 2893, 2890, 2895, + 71, 71, 2894, 71, 2891, 71, 71, 2892, 71, 71, + 71, 2902, 71, 2899, 2900, 2903, 2897, 71, 2905, 71, + 71, 71, 71, 2904, 3095, 2896, 2951, 2898, 71, 2901, + 2906, 71, 2919, 2907, 2908, 71, 2909, 71, 2910, 71, + 2911, 71, 2912, 71, 2913, 71, 2914, 71, 2915, 71, + 71, 2917, 71, 71, 71, 71, 71, 2922, 71, 2916, + 71, 71, 2918, 71, 71, 71, 2926, 2928, 71, 71, - 2924, 71, 2929, 71, 2932, 71, 2928, 2930, 2926, 2939, - 2933, 71, 2927, 71, 2931, 2934, 71, 2935, 71, 2936, - 71, 71, 2938, 71, 71, 71, 2937, 2945, 71, 2944, - 71, 2940, 71, 2947, 71, 2941, 71, 71, 71, 71, - 71, 71, 71, 2946, 71, 71, 2942, 2948, 2954, 2949, - 71, 71, 71, 2951, 2950, 2953, 2955, 2958, 2961, 71, - 71, 2967, 2956, 2952, 2959, 2957, 2963, 71, 71, 2962, - 71, 2960, 71, 2964, 2965, 71, 2966, 71, 71, 71, - 71, 2969, 71, 2974, 2970, 2971, 71, 71, 2968, 71, - 71, 71, 2979, 71, 71, 2972, 2977, 2973, 71, 2976, + 2923, 71, 2930, 2924, 2920, 2921, 2925, 71, 2927, 2929, + 71, 2932, 71, 2935, 71, 2934, 71, 71, 71, 71, + 71, 2937, 71, 71, 71, 2933, 71, 2931, 2936, 2941, + 71, 2942, 71, 2944, 2940, 71, 2938, 71, 2939, 2943, + 2946, 71, 2947, 71, 2950, 2945, 2948, 71, 71, 2949, + 71, 71, 71, 71, 71, 2957, 2956, 2952, 71, 2959, + 71, 71, 2953, 2955, 71, 71, 71, 71, 71, 2958, + 71, 71, 71, 2954, 2960, 71, 2966, 71, 3095, 2961, + 2970, 2963, 2962, 2965, 2967, 71, 2973, 71, 71, 71, + 2969, 2964, 2968, 2975, 71, 71, 2976, 2972, 2974, 2971, - 2975, 2982, 71, 71, 71, 2985, 71, 71, 2986, 2980, - 2978, 71, 71, 71, 2989, 2990, 71, 2981, 2983, 2987, - 71, 71, 2984, 71, 71, 71, 71, 2991, 71, 2992, - 2994, 2988, 2995, 71, 2996, 71, 71, 71, 71, 71, - 71, 3000, 2993, 3002, 71, 2997, 2998, 71, 3001, 71, - 2999, 71, 71, 3004, 3007, 71, 3008, 3005, 3003, 3009, - 71, 71, 3013, 71, 71, 3015, 3006, 71, 3016, 3014, - 71, 71, 3010, 3011, 71, 3017, 71, 71, 3021, 3018, - 3012, 3019, 3022, 71, 71, 71, 3024, 71, 71, 71, - 3023, 71, 3025, 71, 71, 3030, 3020, 71, 3027, 71, + 2977, 71, 2978, 71, 71, 71, 71, 2979, 2981, 71, + 71, 2982, 71, 2986, 2983, 71, 71, 71, 71, 71, + 2991, 71, 2989, 71, 2980, 71, 71, 2985, 2988, 2987, + 2994, 71, 71, 2997, 71, 2984, 71, 2998, 2990, 71, + 2992, 2995, 2993, 71, 71, 3001, 3002, 2999, 71, 71, + 2996, 71, 71, 71, 71, 3007, 71, 71, 3003, 3006, + 71, 3004, 3000, 3008, 71, 71, 71, 71, 3005, 71, + 3012, 71, 3014, 71, 3009, 71, 71, 3010, 71, 3011, + 3013, 3019, 71, 3020, 3016, 71, 3017, 71, 3015, 3021, + 71, 3025, 71, 71, 3018, 3027, 71, 3028, 3026, 71, - 3033, 71, 71, 3034, 71, 71, 71, 71, 3026, 71, - 71, 3037, 3028, 3029, 3035, 3032, 3031, 3036, 71, 3041, - 71, 71, 71, 3040, 71, 3042, 3038, 71, 3039, 71, - 3045, 71, 3047, 71, 3043, 71, 3048, 71, 3049, 3052, - 71, 71, 71, 3046, 3050, 71, 3051, 3053, 3044, 71, - 71, 3054, 3055, 71, 71, 3061, 71, 3056, 71, 71, - 3058, 3057, 71, 3059, 3060, 71, 71, 3063, 71, 71, - 3064, 71, 3067, 3068, 71, 71, 71, 3071, 3062, 3072, - 71, 3083, 71, 3074, 71, 3065, 71, 3066, 3069, 3073, - 3075, 71, 71, 3076, 3070, 71, 71, 3077, 71, 3083, + 71, 71, 3022, 3023, 3029, 3030, 3024, 71, 71, 3033, + 3034, 71, 3031, 71, 71, 71, 3036, 71, 3035, 71, + 71, 71, 71, 3037, 3042, 71, 3095, 3032, 3039, 71, + 71, 71, 3045, 3038, 3046, 71, 71, 71, 71, 3040, + 71, 3041, 3044, 3049, 3043, 3047, 71, 71, 3048, 71, + 3053, 3054, 71, 71, 71, 3057, 3050, 71, 71, 3051, + 3052, 71, 3059, 71, 3060, 3055, 71, 71, 3064, 71, + 71, 3061, 3067, 71, 3062, 3065, 3058, 3063, 71, 3056, + 3066, 71, 71, 71, 71, 71, 3073, 71, 3068, 3069, + 3071, 71, 71, 71, 71, 71, 71, 3075, 3076, 71, - 3078, 3081, 71, 3082, 71, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3079, 3083, 3080, 43, 43, - 43, 43, 43, 43, 43, 48, 48, 48, 48, 48, - 48, 48, 53, 53, 53, 53, 53, 53, 53, 59, - 59, 59, 59, 59, 59, 59, 64, 64, 64, 64, - 64, 64, 64, 74, 74, 3083, 74, 74, 74, 74, - 141, 141, 3083, 3083, 3083, 141, 141, 143, 143, 3083, - 3083, 143, 3083, 143, 145, 3083, 3083, 3083, 3083, 3083, - 145, 148, 148, 3083, 3083, 3083, 148, 148, 150, 3083, - 3083, 3083, 3083, 3083, 150, 152, 152, 3083, 152, 152, + 3079, 71, 3070, 3072, 3080, 71, 71, 3083, 3084, 71, + 3074, 71, 71, 3077, 3078, 3081, 3086, 71, 3085, 3088, + 3082, 3087, 71, 71, 71, 71, 71, 3095, 3089, 3090, + 3093, 71, 3094, 71, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3091, 3092, 43, 43, 43, 43, + 43, 43, 43, 48, 48, 48, 48, 48, 48, 48, + 53, 53, 53, 53, 53, 53, 53, 59, 59, 59, + 59, 59, 59, 59, 64, 64, 64, 64, 64, 64, + 64, 74, 74, 3095, 74, 74, 74, 74, 142, 142, + 3095, 3095, 3095, 142, 142, 144, 144, 3095, 3095, 144, - 152, 152, 75, 75, 3083, 75, 75, 75, 75, 13, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083 + 3095, 144, 146, 3095, 3095, 3095, 3095, 3095, 146, 149, + 149, 3095, 3095, 3095, 149, 149, 151, 3095, 3095, 3095, + 3095, 3095, 151, 153, 153, 3095, 153, 153, 153, 153, + 75, 75, 3095, 75, 75, 75, 75, 13, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095 } ; -static const flex_int16_t yy_chk[6051] = +static const flex_int16_t yy_chk[6079] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2115,663 +2122,666 @@ static const flex_int16_t yy_chk[6051] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3089, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3101, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, - 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, - 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 1012, 24, 24, - 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, - 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, - 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, - 35, 52, 36, 37, 37, 33, 35, 38, 37, 35, - 42, 69, 38, 63, 63, 38, 35, 84, 37, 37, - 40, 37, 38, 80, 40, 69, 38, 38, 39, 39, + 36, 89, 11, 12, 12, 12, 12, 12, 12, 21, + 23, 23, 21, 21, 36, 12, 21, 34, 23, 26, + 26, 21, 23, 89, 12, 23, 27, 27, 47, 47, + 21, 24, 42, 90, 26, 27, 24, 28, 34, 52, + 24, 28, 52, 24, 28, 24, 24, 42, 32, 32, + 1020, 28, 90, 28, 33, 33, 24, 32, 72, 33, + 69, 35, 72, 32, 63, 63, 35, 32, 77, 80, + 35, 77, 37, 37, 69, 33, 35, 37, 230, 35, + 230, 80, 39, 39, 38, 39, 35, 37, 37, 38, - 126, 39, 41, 41, 40, 80, 126, 41, 40, 40, - 39, 41, 58, 89, 58, 58, 39, 58, 66, 86, - 66, 66, 68, 66, 68, 68, 71, 68, 71, 71, - 66, 71, 72, 86, 127, 89, 72, 71, 74, 77, - 74, 74, 77, 74, 78, 88, 127, 85, 78, 74, - 74, 82, 83, 87, 82, 83, 85, 92, 93, 87, - 91, 94, 99, 88, 88, 87, 91, 87, 83, 95, - 96, 92, 94, 94, 161, 102, 99, 97, 93, 91, - 94, 97, 161, 105, 98, 106, 101, 95, 96, 98, - 100, 150, 101, 100, 102, 103, 100, 112, 104, 106, + 37, 40, 38, 82, 39, 40, 82, 41, 41, 38, + 39, 127, 41, 38, 38, 40, 41, 127, 78, 40, + 40, 58, 78, 58, 58, 66, 58, 66, 66, 68, + 66, 68, 68, 71, 68, 71, 71, 66, 71, 81, + 74, 85, 74, 74, 71, 74, 83, 84, 151, 83, + 85, 74, 74, 86, 87, 88, 92, 91, 93, 81, + 87, 94, 83, 91, 100, 84, 87, 86, 87, 96, + 92, 95, 93, 88, 88, 97, 91, 103, 100, 102, + 98, 94, 95, 95, 98, 102, 99, 96, 106, 101, + 95, 99, 101, 97, 104, 101, 103, 107, 105, 104, - 103, 104, 105, 109, 107, 104, 108, 105, 107, 100, - 100, 101, 110, 108, 111, 113, 109, 112, 114, 110, - 103, 104, 114, 115, 117, 116, 119, 111, 118, 118, - 116, 122, 120, 113, 116, 121, 120, 123, 132, 125, - 124, 115, 129, 124, 117, 120, 119, 128, 128, 129, - 121, 120, 125, 130, 124, 131, 123, 122, 124, 132, - 129, 133, 134, 135, 134, 128, 136, 137, 128, 130, - 138, 136, 140, 134, 131, 135, 139, 133, 148, 137, - 157, 139, 142, 142, 144, 134, 140, 144, 138, 146, - 154, 146, 146, 154, 146, 149, 149, 151, 157, 151, + 110, 105, 108, 109, 102, 105, 108, 106, 101, 101, + 109, 107, 106, 110, 112, 111, 113, 114, 118, 104, + 115, 105, 111, 116, 115, 117, 120, 112, 119, 119, + 117, 123, 122, 149, 117, 114, 113, 124, 118, 121, + 126, 116, 128, 121, 130, 125, 120, 122, 125, 129, + 129, 130, 121, 126, 128, 131, 124, 123, 121, 125, + 132, 133, 130, 125, 134, 139, 135, 129, 135, 136, + 129, 131, 138, 137, 141, 143, 143, 135, 137, 132, + 134, 136, 133, 139, 138, 140, 150, 150, 141, 135, + 140, 145, 158, 147, 145, 147, 147, 152, 147, 152, - 151, 152, 151, 152, 152, 155, 152, 158, 156, 159, - 155, 162, 163, 152, 156, 160, 164, 159, 165, 166, - 168, 164, 158, 156, 159, 167, 160, 163, 166, 169, - 162, 167, 167, 171, 169, 170, 170, 175, 165, 171, - 173, 172, 179, 172, 173, 168, 172, 174, 174, 173, - 176, 147, 177, 178, 173, 176, 175, 177, 180, 183, - 173, 173, 179, 172, 180, 178, 181, 182, 184, 185, - 181, 186, 182, 183, 187, 188, 192, 190, 191, 187, - 188, 185, 190, 184, 185, 194, 194, 180, 200, 186, - 189, 189, 192, 193, 189, 195, 189, 196, 191, 193, + 152, 153, 152, 153, 153, 155, 153, 156, 155, 157, + 158, 159, 156, 153, 160, 157, 161, 162, 163, 164, + 166, 167, 160, 165, 157, 162, 159, 161, 165, 160, + 167, 169, 168, 148, 164, 176, 170, 163, 168, 168, + 166, 170, 171, 171, 172, 174, 173, 176, 173, 174, + 172, 173, 175, 175, 174, 177, 169, 178, 179, 174, + 180, 181, 178, 179, 182, 174, 174, 183, 173, 185, + 182, 183, 180, 184, 177, 186, 187, 188, 184, 189, + 190, 181, 192, 185, 189, 190, 193, 192, 187, 194, + 186, 187, 195, 182, 218, 188, 191, 191, 195, 199, - 197, 195, 206, 196, 210, 198, 199, 195, 189, 200, - 189, 198, 199, 201, 208, 206, 145, 202, 203, 201, - 197, 199, 202, 204, 203, 205, 210, 207, 212, 204, - 209, 211, 205, 207, 208, 213, 209, 214, 215, 211, - 213, 212, 216, 217, 218, 222, 214, 219, 220, 218, - 218, 221, 219, 215, 223, 221, 224, 226, 216, 225, - 223, 229, 233, 217, 227, 225, 220, 222, 228, 227, - 228, 230, 235, 231, 224, 224, 232, 226, 230, 231, - 229, 233, 232, 234, 235, 236, 237, 237, 239, 234, - 238, 238, 240, 242, 239, 241, 243, 241, 240, 236, + 191, 197, 191, 196, 196, 194, 193, 197, 202, 198, + 218, 200, 201, 197, 191, 198, 191, 200, 201, 199, + 203, 208, 210, 204, 205, 206, 203, 201, 204, 202, + 205, 206, 207, 212, 208, 209, 213, 211, 214, 207, + 215, 209, 210, 211, 213, 215, 217, 216, 219, 221, + 224, 214, 220, 222, 221, 212, 216, 220, 220, 223, + 225, 217, 226, 223, 227, 228, 225, 231, 219, 229, + 227, 222, 224, 233, 229, 232, 235, 234, 236, 233, + 226, 226, 232, 234, 236, 228, 231, 237, 238, 239, + 239, 240, 240, 244, 241, 235, 243, 242, 243, 237, - 245, 243, 246, 244, 247, 249, 248, 250, 143, 260, - 246, 248, 239, 250, 241, 244, 242, 251, 256, 245, - 252, 253, 255, 251, 247, 252, 253, 254, 249, 257, - 258, 259, 256, 254, 260, 261, 263, 255, 263, 259, - 262, 261, 266, 262, 258, 264, 264, 257, 265, 267, - 267, 265, 268, 268, 269, 271, 270, 272, 271, 273, - 266, 272, 275, 274, 283, 277, 276, 277, 273, 274, - 269, 270, 276, 278, 279, 284, 275, 281, 279, 278, - 280, 280, 281, 282, 283, 285, 286, 287, 287, 282, - 289, 288, 290, 284, 288, 279, 290, 291, 296, 286, + 241, 245, 238, 242, 247, 246, 245, 249, 250, 251, + 146, 248, 262, 250, 252, 243, 244, 246, 241, 248, + 252, 254, 253, 247, 255, 256, 254, 249, 253, 255, + 257, 256, 251, 258, 259, 260, 261, 262, 264, 268, + 263, 264, 266, 266, 261, 257, 263, 258, 265, 260, + 265, 267, 259, 271, 267, 269, 269, 268, 270, 270, + 272, 273, 274, 275, 273, 276, 274, 277, 278, 271, + 279, 286, 275, 277, 276, 272, 279, 280, 281, 280, + 287, 282, 278, 284, 281, 282, 283, 283, 284, 285, + 288, 286, 289, 290, 290, 285, 291, 292, 287, 291, - 292, 293, 293, 294, 295, 297, 285, 295, 289, 298, - 296, 297, 298, 299, 301, 302, 291, 303, 292, 315, - 315, 294, 303, 301, 295, 299, 300, 304, 305, 306, - 304, 305, 304, 302, 309, 300, 141, 307, 300, 309, - 309, 311, 306, 300, 300, 300, 300, 312, 304, 307, - 308, 310, 308, 308, 310, 313, 314, 318, 311, 317, - 317, 311, 312, 316, 313, 314, 319, 320, 316, 321, - 322, 319, 318, 327, 323, 324, 336, 336, 329, 320, - 70, 324, 325, 325, 329, 325, 328, 330, 321, 323, - 322, 328, 330, 327, 325, 331, 332, 333, 335, 332, + 293, 294, 282, 295, 293, 289, 296, 296, 297, 298, + 299, 288, 298, 300, 301, 292, 302, 301, 304, 300, + 294, 295, 299, 305, 144, 309, 297, 304, 302, 298, + 303, 306, 307, 310, 142, 307, 306, 307, 309, 303, + 308, 305, 303, 308, 315, 310, 314, 303, 303, 303, + 303, 312, 311, 307, 311, 311, 312, 312, 313, 315, + 316, 313, 317, 314, 318, 318, 314, 319, 321, 316, + 322, 317, 319, 320, 320, 322, 323, 324, 325, 326, + 327, 328, 328, 321, 328, 330, 327, 331, 323, 332, + 339, 339, 331, 328, 326, 332, 324, 333, 325, 334, - 331, 332, 334, 337, 342, 334, 331, 335, 346, 337, - 339, 333, 338, 338, 343, 339, 340, 344, 334, 340, - 349, 334, 346, 334, 342, 340, 568, 345, 348, 340, - 351, 348, 344, 568, 349, 343, 356, 340, 341, 341, - 352, 341, 345, 357, 354, 351, 353, 348, 355, 352, - 354, 353, 353, 361, 341, 356, 359, 341, 357, 341, - 360, 341, 350, 358, 350, 350, 360, 362, 363, 355, - 365, 366, 358, 368, 350, 359, 350, 350, 350, 361, - 364, 350, 363, 367, 369, 370, 364, 362, 368, 369, - 364, 366, 371, 365, 372, 372, 373, 374, 371, 375, + 336, 345, 333, 335, 334, 330, 335, 338, 335, 337, + 334, 340, 337, 346, 336, 342, 338, 340, 341, 341, + 342, 345, 347, 343, 348, 337, 343, 349, 337, 352, + 337, 70, 343, 355, 346, 351, 343, 347, 351, 348, + 354, 349, 355, 352, 343, 344, 344, 356, 344, 358, + 357, 361, 356, 356, 351, 354, 357, 359, 360, 362, + 361, 344, 365, 364, 344, 366, 344, 368, 344, 353, + 358, 353, 353, 360, 363, 369, 359, 370, 362, 366, + 363, 353, 365, 353, 353, 353, 367, 371, 353, 364, + 368, 373, 367, 372, 374, 369, 367, 370, 372, 376, - 370, 376, 377, 367, 378, 379, 381, 376, 382, 374, - 379, 380, 380, 375, 380, 383, 373, 385, 384, 385, - 378, 386, 388, 388, 382, 386, 381, 377, 389, 387, - 390, 383, 384, 387, 391, 392, 396, 385, 393, 397, - 394, 396, 395, 397, 400, 390, 398, 389, 387, 394, - 391, 395, 393, 392, 405, 398, 403, 399, 401, 403, - 394, 64, 394, 399, 401, 400, 402, 404, 406, 406, - 402, 407, 404, 409, 405, 408, 408, 410, 409, 411, - 411, 412, 413, 414, 407, 415, 413, 412, 416, 417, - 410, 418, 418, 416, 417, 419, 420, 421, 414, 422, + 374, 377, 371, 375, 375, 379, 373, 378, 380, 381, + 382, 379, 384, 377, 385, 382, 64, 383, 383, 376, + 383, 378, 386, 387, 388, 381, 388, 389, 394, 389, + 385, 390, 384, 380, 393, 390, 391, 387, 386, 396, + 391, 392, 392, 394, 395, 397, 400, 389, 468, 398, + 401, 400, 399, 393, 401, 391, 402, 396, 398, 397, + 395, 399, 403, 404, 405, 402, 409, 468, 403, 398, + 405, 398, 406, 408, 407, 411, 406, 407, 408, 410, + 410, 412, 412, 414, 404, 413, 409, 416, 411, 418, + 413, 415, 415, 416, 417, 419, 414, 420, 417, 423, - 418, 423, 425, 427, 423, 424, 415, 419, 427, 424, - 428, 422, 426, 426, 425, 421, 420, 429, 429, 430, - 432, 432, 433, 437, 434, 435, 436, 439, 440, 443, - 441, 428, 434, 442, 435, 437, 444, 446, 443, 442, - 452, 430, 444, 433, 441, 439, 436, 439, 440, 445, - 447, 446, 448, 449, 445, 448, 450, 451, 447, 453, - 452, 447, 453, 451, 454, 455, 458, 449, 456, 457, - 454, 450, 459, 456, 461, 460, 459, 462, 463, 455, - 460, 464, 462, 465, 468, 484, 484, 458, 454, 461, - 469, 457, 471, 470, 463, 473, 465, 470, 472, 473, + 421, 424, 420, 432, 418, 421, 422, 422, 425, 427, + 426, 423, 427, 428, 434, 422, 419, 428, 429, 430, + 430, 424, 426, 431, 432, 437, 425, 438, 431, 439, + 429, 433, 433, 436, 436, 438, 434, 440, 439, 441, + 443, 444, 445, 446, 447, 449, 437, 59, 448, 446, + 449, 441, 450, 447, 448, 453, 445, 440, 443, 451, + 443, 444, 452, 454, 456, 452, 450, 451, 455, 453, + 451, 458, 457, 459, 455, 457, 460, 458, 454, 461, + 467, 460, 462, 464, 456, 463, 466, 459, 464, 463, + 465, 466, 472, 469, 473, 458, 467, 475, 474, 488, - 464, 466, 466, 474, 468, 469, 480, 466, 474, 466, - 475, 471, 474, 476, 472, 466, 477, 466, 476, 478, - 466, 466, 480, 479, 482, 475, 483, 466, 478, 479, - 481, 485, 477, 481, 479, 477, 486, 486, 487, 488, - 489, 490, 491, 492, 494, 493, 483, 482, 492, 501, - 495, 488, 496, 487, 493, 489, 485, 498, 496, 502, - 490, 501, 500, 494, 491, 495, 498, 499, 500, 503, - 504, 499, 505, 506, 502, 507, 508, 510, 509, 507, - 509, 511, 511, 513, 504, 510, 512, 505, 503, 508, - 514, 506, 512, 515, 516, 513, 514, 516, 517, 518, + 488, 461, 474, 462, 476, 465, 469, 470, 470, 473, + 477, 54, 472, 470, 477, 470, 475, 479, 481, 478, + 476, 470, 482, 470, 478, 480, 470, 470, 478, 483, + 480, 482, 479, 470, 481, 483, 484, 481, 485, 486, + 483, 485, 489, 487, 490, 490, 491, 492, 495, 493, + 494, 496, 484, 498, 500, 53, 496, 497, 499, 492, + 500, 491, 486, 487, 493, 502, 497, 489, 505, 494, + 495, 503, 498, 499, 502, 503, 504, 506, 507, 508, + 505, 509, 504, 510, 511, 512, 514, 513, 511, 513, + 515, 515, 506, 508, 514, 517, 509, 507, 512, 516, - 520, 519, 521, 520, 522, 515, 519, 525, 525, 524, - 523, 521, 517, 527, 518, 523, 523, 531, 521, 527, - 522, 521, 524, 526, 526, 528, 528, 529, 529, 530, - 532, 533, 534, 532, 535, 530, 533, 536, 531, 537, - 536, 538, 535, 539, 537, 540, 541, 543, 544, 540, - 542, 534, 541, 544, 542, 545, 547, 546, 548, 551, - 551, 547, 539, 546, 538, 543, 549, 550, 552, 549, - 59, 553, 548, 557, 549, 545, 554, 549, 549, 555, - 556, 554, 560, 559, 555, 550, 552, 553, 557, 559, - 561, 560, 562, 561, 556, 563, 562, 565, 564, 566, + 518, 510, 519, 521, 522, 516, 518, 517, 520, 524, + 523, 520, 524, 525, 519, 523, 538, 521, 526, 522, + 527, 538, 525, 528, 536, 527, 527, 529, 529, 525, + 530, 530, 525, 531, 526, 539, 528, 532, 532, 531, + 533, 533, 534, 537, 535, 536, 537, 540, 534, 535, + 535, 543, 542, 541, 539, 540, 541, 542, 544, 545, + 546, 547, 548, 545, 549, 547, 546, 550, 552, 549, + 551, 553, 558, 552, 543, 555, 551, 544, 554, 557, + 548, 554, 556, 556, 561, 553, 554, 550, 558, 554, + 554, 559, 562, 555, 560, 564, 559, 557, 561, 560, - 563, 564, 565, 567, 569, 570, 571, 572, 572, 574, - 570, 573, 577, 575, 576, 566, 578, 569, 562, 579, - 573, 567, 578, 576, 577, 579, 571, 580, 574, 575, - 580, 581, 581, 582, 581, 583, 582, 584, 585, 586, - 583, 587, 588, 596, 589, 586, 587, 589, 588, 590, - 592, 591, 585, 593, 590, 584, 591, 591, 608, 594, - 597, 595, 596, 592, 594, 598, 593, 595, 599, 597, - 598, 600, 600, 601, 602, 603, 54, 602, 594, 594, - 601, 603, 604, 608, 605, 606, 607, 607, 599, 605, - 606, 606, 602, 609, 604, 609, 610, 611, 612, 611, + 565, 564, 566, 571, 567, 566, 568, 562, 567, 565, + 569, 568, 570, 569, 572, 573, 574, 570, 575, 571, + 576, 580, 573, 575, 577, 577, 578, 579, 583, 574, + 567, 582, 572, 581, 583, 578, 585, 580, 584, 585, + 576, 589, 581, 582, 584, 597, 579, 586, 586, 587, + 586, 588, 587, 590, 591, 593, 588, 592, 597, 589, + 591, 593, 592, 594, 595, 596, 594, 590, 598, 595, + 596, 596, 599, 600, 601, 602, 604, 599, 603, 600, + 606, 598, 608, 603, 602, 605, 605, 606, 608, 609, + 610, 599, 599, 601, 607, 610, 604, 607, 611, 612, - 613, 614, 615, 616, 617, 618, 622, 620, 619, 618, - 617, 621, 623, 624, 625, 610, 612, 619, 613, 614, - 627, 615, 620, 616, 622, 624, 621, 626, 628, 625, - 629, 623, 630, 626, 627, 631, 632, 633, 634, 631, - 628, 635, 636, 637, 638, 639, 639, 53, 637, 629, - 641, 630, 642, 633, 632, 646, 634, 643, 638, 635, - 635, 636, 640, 642, 645, 644, 640, 653, 647, 641, - 644, 643, 648, 649, 646, 650, 656, 48, 649, 648, - 645, 647, 650, 651, 652, 653, 654, 655, 651, 652, - 656, 657, 658, 654, 659, 660, 655, 661, 660, 659, + 612, 609, 613, 611, 611, 614, 615, 614, 616, 620, + 616, 617, 607, 618, 619, 621, 622, 623, 627, 625, + 628, 623, 622, 626, 624, 615, 630, 613, 620, 617, + 629, 618, 619, 624, 625, 621, 627, 631, 626, 628, + 632, 630, 629, 631, 633, 634, 635, 636, 637, 639, + 641, 636, 638, 640, 632, 642, 633, 644, 644, 643, + 642, 646, 648, 650, 634, 635, 637, 639, 638, 641, + 645, 640, 640, 643, 645, 647, 648, 649, 651, 650, + 646, 652, 649, 653, 654, 655, 647, 658, 656, 654, + 653, 657, 655, 656, 652, 659, 657, 651, 660, 661, - 657, 661, 662, 663, 658, 664, 666, 665, 667, 667, - 668, 668, 663, 669, 669, 670, 662, 672, 674, 668, - 664, 665, 673, 676, 670, 675, 677, 666, 673, 675, - 678, 679, 680, 683, 681, 676, 672, 679, 674, 682, - 680, 681, 684, 690, 687, 693, 694, 702, 678, 695, - 699, 677, 694, 700, 693, 697, 697, 682, 683, 687, - 690, 699, 684, 685, 701, 695, 696, 702, 685, 706, - 696, 700, 685, 698, 698, 685, 705, 707, 701, 708, - 703, 705, 685, 685, 726, 685, 703, 704, 704, 704, - 706, 704, 726, 709, 704, 707, 709, 710, 710, 704, + 662, 664, 659, 663, 667, 658, 664, 660, 665, 662, + 666, 665, 668, 661, 666, 663, 669, 671, 667, 670, + 675, 668, 672, 672, 677, 673, 673, 674, 674, 675, + 678, 669, 679, 670, 673, 680, 678, 681, 671, 680, + 682, 683, 684, 677, 686, 685, 687, 688, 684, 681, + 689, 686, 679, 685, 692, 699, 701, 695, 698, 683, + 702, 699, 701, 707, 687, 682, 706, 698, 709, 692, + 689, 703, 688, 690, 695, 703, 702, 706, 690, 704, + 704, 707, 690, 705, 705, 690, 708, 48, 709, 712, + 710, 713, 690, 690, 712, 690, 710, 714, 715, 718, - 711, 712, 712, 713, 708, 704, 704, 711, 714, 715, - 715, 716, 717, 714, 718, 717, 716, 721, 713, 718, - 719, 719, 720, 722, 720, 724, 723, 725, 728, 721, - 723, 727, 727, 729, 730, 730, 731, 732, 733, 736, - 736, 992, 722, 728, 734, 724, 725, 729, 735, 732, - 734, 737, 992, 735, 731, 740, 737, 737, 739, 741, - 733, 740, 742, 739, 743, 741, 744, 742, 745, 744, - 743, 746, 747, 747, 745, 748, 748, 749, 750, 746, - 752, 751, 753, 754, 754, 749, 751, 752, 755, 757, - 756, 758, 762, 760, 761, 757, 750, 755, 756, 763, + 708, 711, 711, 711, 716, 711, 718, 716, 711, 717, + 717, 720, 713, 711, 43, 714, 719, 719, 724, 711, + 711, 724, 721, 715, 722, 722, 720, 721, 723, 725, + 726, 726, 728, 723, 725, 727, 729, 727, 730, 731, + 733, 732, 730, 735, 728, 734, 734, 736, 733, 737, + 737, 738, 739, 740, 751, 729, 741, 751, 735, 731, + 732, 736, 741, 742, 739, 743, 743, 744, 742, 738, + 753, 746, 744, 744, 747, 740, 746, 748, 753, 749, + 747, 750, 752, 748, 749, 754, 754, 750, 752, 755, + 755, 756, 757, 758, 759, 760, 761, 761, 758, 756, - 764, 753, 760, 761, 763, 765, 766, 767, 765, 764, - 758, 766, 768, 769, 770, 773, 762, 774, 771, 772, - 772, 767, 769, 771, 771, 775, 776, 770, 777, 784, - 773, 777, 781, 779, 775, 779, 774, 768, 782, 777, - 780, 780, 783, 782, 785, 786, 787, 788, 789, 784, - 776, 790, 791, 781, 792, 790, 788, 796, 797, 793, - 794, 43, 795, 783, 785, 793, 787, 786, 799, 794, - 791, 789, 797, 792, 795, 798, 796, 802, 800, 801, - 801, 798, 799, 800, 803, 804, 805, 806, 807, 808, - 810, 809, 811, 803, 805, 812, 810, 802, 811, 814, + 762, 759, 764, 763, 765, 769, 767, 768, 764, 762, + 757, 763, 770, 771, 760, 767, 768, 770, 772, 773, + 774, 772, 771, 765, 773, 775, 776, 777, 780, 769, + 781, 778, 779, 779, 774, 776, 778, 778, 782, 783, + 777, 784, 791, 780, 784, 788, 786, 782, 786, 781, + 775, 789, 784, 787, 787, 790, 789, 792, 793, 794, + 795, 796, 791, 783, 797, 798, 788, 799, 797, 795, + 803, 804, 800, 801, 14, 802, 790, 792, 800, 794, + 793, 806, 801, 798, 796, 804, 799, 802, 805, 803, + 809, 807, 808, 808, 805, 806, 807, 810, 811, 812, - 813, 14, 818, 819, 821, 804, 813, 806, 808, 812, - 807, 809, 815, 817, 816, 819, 828, 817, 815, 814, - 816, 818, 820, 819, 823, 821, 825, 820, 822, 822, - 823, 824, 826, 827, 824, 830, 828, 829, 829, 827, - 833, 831, 832, 832, 825, 826, 831, 834, 835, 835, - 836, 834, 838, 830, 837, 833, 839, 838, 841, 842, - 844, 848, 845, 847, 847, 848, 849, 850, 850, 851, - 853, 855, 836, 842, 837, 839, 855, 854, 856, 899, - 844, 849, 841, 845, 846, 853, 852, 846, 899, 846, - 852, 854, 856, 846, 851, 846, 857, 858, 860, 859, + 813, 814, 815, 817, 816, 818, 810, 812, 819, 817, + 809, 818, 821, 820, 13, 825, 826, 828, 811, 820, + 813, 815, 819, 814, 816, 822, 824, 823, 826, 835, + 824, 822, 821, 823, 825, 827, 826, 830, 828, 832, + 827, 829, 829, 830, 831, 833, 834, 831, 837, 835, + 836, 836, 834, 840, 838, 839, 839, 832, 833, 838, + 841, 842, 842, 843, 841, 845, 837, 844, 840, 846, + 845, 848, 849, 851, 855, 852, 854, 854, 855, 856, + 857, 857, 858, 860, 862, 843, 849, 844, 846, 862, + 861, 863, 874, 851, 856, 848, 852, 853, 860, 859, - 846, 857, 857, 859, 861, 846, 862, 863, 864, 861, - 865, 858, 863, 860, 866, 859, 873, 867, 862, 861, - 868, 869, 864, 867, 870, 870, 868, 869, 866, 871, - 872, 865, 874, 877, 871, 875, 872, 878, 873, 882, - 880, 883, 878, 879, 882, 877, 881, 881, 885, 883, - 884, 874, 880, 875, 876, 876, 886, 879, 887, 887, - 876, 888, 876, 890, 884, 888, 892, 885, 876, 890, - 894, 897, 893, 876, 876, 886, 891, 893, 895, 891, - 876, 896, 900, 894, 895, 892, 896, 901, 902, 903, - 897, 900, 904, 906, 902, 905, 907, 908, 903, 910, + 853, 874, 853, 859, 861, 863, 853, 858, 853, 864, + 865, 867, 866, 853, 864, 864, 866, 868, 853, 869, + 870, 871, 868, 872, 865, 870, 867, 873, 866, 881, + 875, 869, 868, 876, 877, 871, 875, 878, 878, 876, + 877, 873, 879, 880, 872, 882, 885, 879, 883, 880, + 886, 881, 890, 888, 891, 886, 887, 890, 885, 889, + 889, 893, 891, 892, 882, 888, 883, 884, 884, 894, + 887, 895, 895, 884, 896, 884, 898, 892, 896, 900, + 893, 884, 898, 902, 905, 901, 884, 884, 894, 899, + 901, 903, 899, 884, 904, 907, 902, 903, 900, 904, - 905, 912, 909, 901, 913, 918, 911, 912, 910, 916, - 907, 904, 914, 906, 909, 911, 919, 908, 914, 918, - 920, 913, 922, 921, 924, 916, 923, 925, 928, 924, - 930, 930, 925, 928, 929, 932, 919, 921, 931, 920, - 922, 923, 934, 929, 931, 935, 937, 938, 932, 937, - 935, 935, 936, 936, 939, 940, 936, 941, 934, 942, - 944, 938, 943, 945, 946, 947, 944, 949, 948, 952, - 946, 940, 942, 948, 939, 941, 951, 943, 955, 951, - 947, 949, 953, 945, 954, 958, 956, 953, 957, 954, - 952, 956, 960, 957, 955, 961, 962, 958, 960, 963, + 908, 909, 910, 905, 907, 911, 912, 913, 910, 908, + 914, 916, 913, 915, 911, 918, 917, 909, 921, 928, + 919, 924, 926, 927, 918, 912, 920, 915, 917, 919, + 914, 916, 920, 922, 929, 921, 926, 924, 928, 922, + 930, 931, 932, 927, 933, 936, 937, 932, 929, 933, + 936, 938, 938, 939, 940, 937, 931, 942, 930, 939, + 943, 945, 946, 947, 945, 943, 943, 940, 944, 944, + 948, 949, 944, 942, 950, 951, 946, 953, 952, 954, + 955, 960, 957, 947, 952, 954, 948, 950, 956, 949, + 951, 959, 963, 956, 959, 955, 957, 953, 961, 962, - 964, 964, 962, 965, 966, 963, 967, 968, 968, 967, - 969, 961, 965, 970, 971, 972, 973, 974, 972, 975, - 981, 976, 966, 974, 982, 975, 976, 979, 969, 973, - 977, 978, 970, 979, 971, 977, 978, 983, 981, 986, - 984, 985, 985, 983, 982, 984, 987, 988, 986, 989, - 990, 991, 993, 990, 991, 987, 995, 994, 996, 998, - 997, 1001, 999, 1002, 996, 988, 997, 999, 989, 994, - 993, 1000, 1000, 1003, 998, 995, 1005, 1002, 1004, 1006, - 1001, 1007, 1004, 1008, 1010, 1003, 1011, 1011, 1006, 1015, - 1013, 1014, 1016, 1017, 1005, 1018, 1018, 1016, 1019, 1020, + 964, 965, 960, 961, 962, 964, 965, 966, 963, 968, + 969, 970, 971, 972, 972, 968, 973, 970, 971, 966, + 974, 975, 976, 976, 975, 973, 969, 977, 978, 979, + 980, 981, 984, 980, 982, 983, 987, 984, 974, 989, + 982, 983, 987, 985, 981, 977, 986, 978, 985, 979, + 990, 986, 991, 994, 992, 993, 993, 989, 991, 992, + 995, 996, 994, 997, 998, 999, 1000, 998, 999, 995, + 990, 1001, 1002, 1003, 1004, 1005, 1006, 1000, 1007, 996, + 1004, 1005, 997, 1007, 1002, 1008, 1008, 1009, 1010, 1001, + 1012, 1006, 1003, 1011, 1012, 1013, 1015, 1016, 1014, 1018, - 1007, 1015, 1017, 1010, 1013, 1020, 1014, 1021, 1008, 1022, - 1023, 1024, 1023, 1021, 1022, 1025, 1024, 1026, 1019, 1027, - 1028, 1029, 1031, 1030, 1027, 1032, 1034, 1034, 1035, 1025, - 1030, 1026, 1036, 1037, 1039, 1028, 13, 1031, 1043, 1038, - 1029, 1040, 1035, 1043, 1032, 1038, 1040, 1046, 1037, 1045, - 1036, 1042, 1042, 1048, 1039, 1040, 1045, 1040, 1044, 1044, - 1040, 1046, 1047, 1049, 1050, 1047, 1051, 1052, 1054, 1053, - 1055, 1051, 1048, 1050, 1053, 1057, 1057, 1058, 1059, 1054, - 1060, 1049, 1058, 1059, 1062, 1061, 1052, 1063, 1062, 1055, - 1061, 1064, 1065, 1066, 1069, 1068, 1063, 1067, 1071, 1070, + 1019, 1019, 1010, 1021, 1022, 1011, 1009, 1014, 1023, 1024, + 1026, 1026, 1025, 1013, 1024, 1015, 1027, 1021, 1018, 1022, + 1023, 1025, 1016, 1028, 1029, 1031, 1030, 1031, 1032, 1028, + 1029, 1030, 1033, 1032, 1034, 1035, 1027, 1036, 1037, 1039, + 1035, 1040, 1038, 1042, 1042, 1043, 1033, 1044, 1034, 1038, + 1046, 1045, 1036, 1047, 1039, 0, 1046, 1037, 1048, 1043, + 1040, 1050, 1050, 1048, 1051, 1044, 1045, 1052, 1052, 1051, + 1054, 1053, 1048, 1047, 1048, 1056, 1055, 1048, 1053, 1055, + 1057, 1058, 1059, 1060, 1054, 1061, 1062, 1059, 1063, 1064, + 1058, 1062, 1066, 1066, 1056, 1067, 1068, 1061, 1057, 1063, - 1060, 1069, 1072, 1073, 1075, 1076, 1064, 1065, 1074, 1067, - 1068, 1070, 1066, 1077, 1074, 1078, 1080, 1071, 1081, 1075, - 1082, 1073, 1080, 1072, 1078, 1076, 1083, 1084, 1082, 1085, - 1086, 1087, 1081, 1077, 1085, 1088, 1087, 1087, 1089, 0, - 1090, 1094, 1086, 1084, 1091, 1091, 1083, 1098, 1093, 1106, - 1094, 1095, 1089, 1090, 1088, 1092, 1098, 1095, 1096, 1096, - 1092, 1093, 1097, 1092, 1092, 1099, 1103, 1097, 1092, 1106, - 1100, 1099, 1101, 1107, 1092, 1100, 1108, 1101, 1092, 1102, - 1102, 1104, 1104, 1105, 1109, 1108, 1105, 1103, 1105, 1110, - 1112, 1107, 1111, 1113, 1110, 1114, 1116, 1115, 1117, 1113, + 1067, 1068, 1060, 1069, 1070, 1072, 1071, 1073, 1064, 1070, + 1071, 1074, 1075, 1076, 1072, 1077, 1079, 1078, 1080, 1081, + 1082, 1083, 1073, 1069, 1078, 1076, 1074, 1083, 1079, 1084, + 1077, 1075, 1085, 1086, 1087, 1089, 1090, 1080, 1082, 1091, + 1081, 1089, 1092, 1087, 1084, 1093, 1094, 1091, 1095, 1096, + 1090, 1094, 1085, 1086, 1096, 1096, 1097, 1098, 1103, 1099, + 1095, 1093, 1092, 1100, 1100, 1102, 1191, 1103, 1104, 1105, + 1105, 1098, 1099, 1191, 1104, 1097, 1101, 1106, 1102, 1107, + 1108, 1101, 1106, 1112, 1101, 1101, 1108, 1109, 1107, 1101, + 1115, 1110, 1109, 1111, 1111, 1101, 1110, 1113, 1113, 1101, - 1116, 1114, 1115, 1124, 1109, 1128, 1111, 1117, 1112, 1118, - 1118, 1122, 1117, 1120, 1117, 1122, 1117, 1123, 1117, 1119, - 1119, 1124, 1119, 1126, 1120, 1125, 1127, 1128, 1126, 1126, - 1130, 1129, 1123, 1131, 1125, 1127, 1129, 1132, 1133, 1134, - 1135, 1137, 1131, 1141, 1130, 1138, 1135, 1136, 1136, 1137, - 1139, 1140, 1141, 1134, 1142, 1139, 1132, 1133, 1143, 1138, - 1146, 1144, 1145, 1145, 1155, 1140, 1144, 1147, 1147, 1148, - 1150, 1148, 1142, 1150, 1151, 1146, 1152, 1153, 1159, 1151, - 1154, 1154, 1160, 1143, 1155, 1162, 1153, 1156, 1156, 1157, - 1157, 1158, 1161, 1161, 1163, 1152, 1158, 1163, 1164, 1159, + 1114, 1116, 1117, 1114, 1112, 1114, 1118, 1119, 1120, 1121, + 1115, 1117, 1119, 1124, 1122, 1123, 1126, 1144, 1124, 1116, + 1122, 1123, 1120, 1144, 1125, 1126, 1118, 1121, 1125, 1133, + 1126, 1131, 1126, 1129, 1126, 1131, 1126, 1127, 1127, 1128, + 1128, 1132, 1128, 1134, 1129, 1135, 1136, 1133, 1137, 1138, + 1135, 1135, 1134, 1139, 1138, 1136, 1132, 1140, 1141, 1142, + 1143, 1145, 1145, 1146, 1148, 1147, 1140, 1139, 1149, 1148, + 1137, 1146, 1150, 1151, 1143, 1152, 1161, 1141, 1142, 1147, + 1153, 1150, 1149, 1154, 1154, 1153, 1155, 1156, 1156, 1160, + 1157, 1151, 1157, 1159, 1160, 1161, 1159, 1162, 1163, 1163, - 1166, 1165, 1167, 1160, 1167, 1162, 1165, 1168, 1170, 1166, - 1172, 1170, 1171, 1182, 1173, 1172, 1174, 1180, 1164, 1176, - 1182, 1174, 1175, 0, 1176, 1168, 1177, 1171, 1173, 1179, - 1175, 1177, 1178, 1178, 1179, 1180, 1181, 1183, 1185, 1186, - 1190, 1187, 1181, 1188, 1185, 1186, 1187, 1189, 1193, 1188, - 1183, 1191, 1192, 1192, 1195, 1196, 1189, 1197, 1198, 1190, - 1199, 1201, 1191, 1197, 1198, 1202, 1199, 1201, 1193, 1203, - 1204, 1209, 1205, 1206, 1195, 1207, 1207, 1208, 1196, 1202, - 1210, 1213, 1204, 1211, 1216, 1202, 1205, 1218, 1211, 1203, - 1214, 1206, 1212, 1212, 1217, 1214, 1209, 1208, 1210, 1217, + 1152, 1155, 1164, 1165, 1165, 1167, 1162, 1166, 1166, 1168, + 1167, 1169, 1170, 1170, 1171, 1172, 1173, 1175, 1172, 1174, + 1177, 1176, 1164, 1176, 1174, 1179, 1175, 1180, 1179, 1182, + 1168, 0, 1169, 1184, 1171, 1181, 1173, 1189, 1177, 1183, + 1181, 1184, 1180, 1182, 1183, 1185, 1186, 1187, 1187, 1188, + 1185, 1186, 1190, 1192, 1188, 1189, 1194, 1195, 1190, 1196, + 1198, 1197, 1194, 1195, 1196, 1199, 1192, 1197, 1200, 1198, + 1201, 1201, 1202, 1204, 1205, 1206, 1207, 1208, 1212, 1200, + 1210, 1206, 1207, 1208, 1199, 1211, 1210, 1214, 1213, 1215, + 1216, 1216, 1202, 1204, 1217, 1218, 1222, 1205, 1212, 1211, - 1217, 1219, 1221, 1216, 1213, 1218, 1220, 1222, 1223, 1225, - 1219, 1225, 1224, 1226, 1220, 1228, 1221, 1224, 1230, 1232, - 1224, 1228, 1222, 1223, 1229, 1231, 1223, 1226, 1229, 1230, - 1231, 1231, 1233, 1234, 1235, 1236, 1237, 1238, 1232, 1235, - 1240, 1237, 1241, 1242, 1243, 1243, 1244, 1245, 1246, 1247, - 1244, 1234, 1248, 1236, 1240, 1247, 1249, 1238, 1233, 1250, - 1241, 1242, 1251, 1252, 1248, 1245, 1253, 1246, 1257, 1254, - 1262, 1256, 1255, 1250, 1254, 1249, 1256, 1251, 1252, 1255, - 1258, 1259, 1259, 1260, 1261, 1253, 1257, 1263, 1264, 1258, - 1261, 1262, 1263, 1265, 1264, 1266, 1267, 1267, 1260, 1265, + 1213, 1214, 0, 1219, 1220, 1211, 1225, 1215, 1223, 1220, + 1221, 1221, 1226, 1223, 1217, 1227, 1229, 1226, 1226, 1222, + 1218, 1219, 1228, 1230, 1229, 1225, 1231, 1232, 1239, 1235, + 1233, 1228, 1234, 1227, 1234, 1233, 1241, 1230, 1233, 1239, + 1237, 1231, 1232, 1235, 1238, 1232, 1237, 1240, 1238, 1242, + 1243, 1244, 1240, 1240, 1245, 1241, 1244, 1247, 1246, 1245, + 1248, 1251, 1247, 1250, 1252, 1253, 1253, 1254, 1243, 1255, + 1256, 1254, 1257, 1258, 1259, 1242, 1246, 1250, 1257, 1251, + 1248, 1260, 1252, 1261, 1262, 1258, 1263, 1255, 1272, 1256, + 1265, 1264, 1267, 1259, 1268, 1260, 1264, 1265, 1261, 1262, - 1272, 1266, 1268, 1268, 1270, 1270, 1271, 1273, 1274, 1272, - 1271, 1275, 1276, 1277, 1277, 1278, 1279, 1281, 1280, 1276, - 1282, 1287, 1274, 1280, 1279, 1273, 1275, 1283, 1285, 1286, - 1286, 1281, 1283, 1283, 1288, 1278, 1284, 1289, 1290, 1282, - 1287, 1284, 1284, 1290, 1291, 1292, 1289, 1295, 1285, 1293, - 1294, 1296, 1295, 1288, 1297, 1298, 1294, 1301, 1299, 1302, - 1297, 1303, 1300, 1291, 1299, 1292, 1304, 1293, 1300, 1305, - 1306, 1307, 1308, 1308, 1298, 1310, 1301, 1296, 1302, 1309, - 1303, 0, 1309, 1305, 1315, 1304, 1307, 1310, 1311, 1311, - 1313, 1306, 1312, 1312, 1314, 1313, 1316, 1315, 1314, 1317, + 1270, 1266, 1406, 1268, 1406, 1263, 1266, 1269, 1269, 1272, + 1267, 1271, 1282, 1273, 1274, 1270, 1275, 1271, 1273, 1276, + 1274, 1282, 1275, 1277, 1277, 1276, 1278, 1278, 1280, 1280, + 1281, 1283, 1284, 1285, 1281, 1286, 1287, 1287, 1288, 1289, + 1290, 1291, 1286, 1292, 1295, 1290, 1284, 1289, 1285, 1283, + 1297, 1293, 1296, 1296, 1294, 1291, 1293, 1293, 1288, 1294, + 1294, 1298, 1292, 1299, 1295, 1300, 1301, 1302, 1303, 1297, + 1300, 1304, 1299, 1305, 1306, 1307, 1308, 1304, 1305, 1311, + 1298, 1307, 1309, 1310, 1312, 1301, 1303, 1302, 1309, 1310, + 1313, 1314, 1315, 1316, 1319, 1308, 1317, 1319, 1311, 0, - 1318, 1322, 1318, 1320, 1321, 1316, 1318, 1323, 1324, 1321, - 1325, 1325, 1317, 1326, 1327, 1328, 1322, 1333, 1326, 1318, - 1327, 1320, 1329, 1330, 1324, 1331, 1334, 1323, 1330, 1331, - 1328, 1335, 1332, 1336, 1339, 1329, 1332, 1333, 1341, 1336, - 1337, 1337, 1342, 1344, 1334, 1343, 1343, 1342, 1345, 1344, - 1351, 1335, 1339, 1347, 1347, 1349, 1350, 1350, 1349, 1341, - 1352, 1354, 1355, 1356, 1354, 1358, 1351, 1359, 1345, 1357, - 1357, 1360, 1356, 1361, 1365, 1362, 1352, 1364, 1361, 1366, - 1358, 1367, 1355, 1363, 1363, 1369, 1364, 1370, 1359, 1362, - 1360, 1375, 1365, 1371, 1366, 1368, 1368, 1372, 1371, 1369, + 1306, 1318, 1318, 1312, 1320, 1325, 1315, 1321, 1321, 1313, + 1314, 1317, 1322, 1322, 1316, 1323, 1320, 1324, 1325, 1326, + 1323, 1324, 1327, 1328, 1332, 1328, 1330, 1331, 1326, 1328, + 1333, 1334, 1331, 1335, 1335, 1327, 1336, 1337, 1338, 1332, + 1343, 1336, 1328, 1337, 1330, 1339, 1340, 1334, 1341, 1344, + 1333, 1340, 1341, 1338, 1345, 1342, 1346, 1349, 1339, 1342, + 1343, 1351, 1346, 1347, 1347, 1352, 1354, 1344, 1353, 1353, + 1352, 1355, 1354, 1361, 1345, 1349, 1357, 1357, 1359, 1360, + 1360, 1359, 1351, 1362, 1364, 1365, 1366, 1364, 1368, 1361, + 1369, 1355, 1367, 1367, 1370, 1366, 1371, 1375, 1372, 1362, - 1373, 1373, 1377, 1374, 1378, 1370, 1367, 1374, 1376, 1376, - 1379, 1375, 1372, 1380, 1379, 1378, 1381, 1383, 1383, 1384, - 1385, 1381, 1386, 1388, 1377, 1387, 1389, 1389, 1390, 1391, - 1392, 1393, 1380, 1390, 1385, 1395, 1399, 1384, 1394, 1387, - 1393, 1386, 1386, 1394, 1396, 1398, 1396, 1397, 1388, 1391, - 1392, 1398, 1397, 1400, 1402, 1395, 1399, 1403, 1403, 1400, - 1404, 1405, 1408, 1411, 1407, 1409, 1409, 1405, 1402, 1407, - 1410, 1410, 1412, 1413, 1423, 1414, 1417, 1411, 1414, 1404, - 1415, 1415, 1416, 1423, 1421, 1419, 1408, 1421, 1413, 1418, - 1412, 1419, 1418, 1420, 1416, 1418, 1417, 1424, 1420, 1425, + 1374, 1371, 1376, 1368, 1377, 1365, 1373, 1373, 1379, 1374, + 1380, 1369, 1372, 1370, 1385, 1375, 1381, 1376, 1378, 1378, + 1382, 1381, 1379, 1383, 1383, 1387, 1384, 1388, 1380, 1377, + 1384, 1386, 1386, 1389, 1385, 1382, 1390, 1389, 1388, 1391, + 1393, 1393, 1394, 1395, 1391, 1396, 1398, 1387, 1397, 1399, + 1399, 1400, 1401, 1402, 1403, 1390, 1400, 1395, 1405, 1409, + 1394, 1404, 1397, 1403, 1396, 1396, 1404, 1414, 1412, 1407, + 1408, 1398, 1401, 1402, 1407, 1410, 1408, 1418, 1405, 1409, + 1422, 1410, 1412, 1413, 1413, 1415, 1414, 1417, 1419, 1419, + 1421, 1415, 1417, 1420, 1420, 1423, 1424, 1426, 1422, 1424, - 1427, 1426, 1424, 1421, 1426, 1428, 1427, 1418, 1429, 1429, - 1428, 1430, 1430, 1431, 1433, 1432, 1434, 1435, 1436, 1431, - 1432, 1442, 1437, 1438, 1425, 1437, 1439, 1433, 1440, 1438, - 1443, 1441, 1439, 1440, 1434, 1443, 1435, 1441, 1436, 1444, - 1444, 1445, 1446, 1447, 1442, 1448, 1445, 1449, 1450, 1453, - 1454, 1455, 1451, 1452, 1456, 1453, 1458, 1457, 1460, 1460, - 1446, 1449, 1450, 1447, 1451, 1448, 1452, 1455, 1461, 1464, - 1454, 1457, 1465, 1462, 1456, 1463, 1463, 1458, 1462, 1466, - 1467, 1468, 1469, 1476, 1464, 1470, 1465, 1471, 1461, 1472, - 1468, 1474, 1470, 1478, 1478, 1480, 1471, 1469, 1467, 1471, + 1427, 1418, 1425, 1425, 1421, 1428, 1429, 1433, 1428, 1426, + 1423, 1428, 1429, 1430, 1431, 1435, 1433, 1431, 1430, 1434, + 1427, 1445, 1436, 1428, 1434, 1436, 1437, 1437, 1438, 1444, + 1439, 1440, 1440, 1431, 1438, 1439, 1441, 1441, 1442, 1445, + 1435, 1443, 1444, 1446, 1442, 1447, 1443, 1448, 1449, 1450, + 1448, 1451, 1452, 1453, 1449, 1450, 1451, 1457, 1452, 1454, + 1455, 1455, 1446, 1456, 1454, 1447, 1458, 1459, 1456, 1460, + 1461, 1465, 1464, 1462, 1467, 1457, 1453, 1463, 1464, 1466, + 1469, 1477, 1468, 1460, 1461, 1462, 1458, 1459, 1471, 1471, + 1463, 1465, 1472, 1473, 1467, 1466, 1468, 1476, 1473, 1474, - 1481, 1477, 1485, 1466, 1477, 1472, 1474, 1480, 1476, 1479, - 1479, 1474, 1482, 1483, 1483, 1482, 1484, 1486, 1481, 1487, - 1488, 1485, 1486, 1490, 1487, 1489, 1491, 1493, 1492, 1484, - 1495, 1495, 1490, 1496, 1497, 1499, 1493, 1492, 1494, 1488, - 1492, 1489, 1498, 1500, 1494, 1491, 1501, 1497, 1504, 1499, - 1505, 1506, 1506, 1496, 1507, 1508, 1509, 1511, 1501, 1500, - 1498, 1509, 1510, 1510, 1508, 1513, 1511, 1512, 1505, 1511, - 1507, 1514, 1512, 1504, 1516, 1515, 1518, 1510, 1520, 1516, - 1516, 1519, 1521, 1513, 1523, 1522, 1530, 1521, 1524, 1524, - 1518, 1522, 1514, 1515, 1526, 1525, 1519, 1527, 1528, 1526, + 1474, 1469, 1475, 1478, 1479, 1477, 0, 1480, 1481, 1483, + 1487, 1476, 1472, 1479, 1482, 1481, 1485, 1475, 1489, 1489, + 1491, 1478, 1480, 1482, 1488, 1483, 1482, 1488, 1490, 1490, + 1492, 1485, 1491, 1495, 1493, 1487, 1485, 1493, 1494, 1494, + 1496, 1499, 1497, 1501, 1498, 1500, 1495, 1497, 1492, 1498, + 1502, 1505, 1501, 1503, 1504, 1506, 1506, 1505, 1507, 1496, + 1499, 1500, 1503, 1504, 1508, 1503, 1509, 1510, 1512, 1502, + 1511, 1515, 1516, 1517, 1517, 1518, 1519, 1508, 1507, 1524, + 1512, 1510, 1520, 1522, 1509, 1519, 1511, 1520, 1521, 1521, + 1516, 1518, 1522, 1523, 1525, 1522, 1515, 1524, 1523, 1526, - 1520, 1525, 1523, 1527, 1528, 1531, 1530, 1532, 1533, 1534, - 1535, 1539, 1534, 1532, 1537, 1540, 1535, 1541, 1534, 1531, - 1542, 1533, 1537, 1543, 1544, 1541, 1545, 1546, 1553, 1542, - 1539, 1547, 1547, 1548, 1540, 1550, 1543, 1544, 1549, 1548, - 1545, 1546, 1551, 1551, 1549, 1552, 1553, 1554, 1550, 1555, - 1556, 1557, 1558, 1547, 1559, 1562, 1556, 1561, 1561, 1563, - 1568, 1567, 1555, 1563, 1564, 1552, 1554, 1570, 1558, 1564, - 1567, 1565, 1559, 1557, 1566, 1562, 1565, 1571, 1571, 1566, - 1572, 1573, 1570, 1568, 1574, 1575, 1575, 1576, 1577, 1580, - 1578, 1581, 1579, 1573, 1582, 1577, 1584, 1583, 1676, 1572, + 1527, 1531, 1529, 1521, 1530, 1527, 1527, 1532, 1533, 1534, + 1535, 1535, 1532, 1541, 1533, 1525, 1529, 1526, 1536, 1530, + 1537, 1542, 1538, 1531, 1536, 1537, 1539, 1534, 1538, 1544, + 1543, 1545, 1539, 1541, 1545, 1542, 1543, 1546, 1548, 1550, + 1545, 1551, 1544, 1546, 1552, 1553, 1548, 1559, 1554, 1555, + 1556, 1557, 1552, 1559, 1553, 1558, 1558, 1560, 1550, 1561, + 1551, 1554, 1555, 1560, 1556, 1557, 1562, 1562, 1563, 1564, + 1565, 1566, 1561, 1567, 1568, 1569, 1570, 1558, 1573, 1567, + 1572, 1572, 1574, 1579, 1566, 1575, 1574, 1564, 1563, 1565, + 1575, 1569, 1576, 1578, 1570, 1577, 1568, 1576, 1573, 1581, - 1582, 1576, 1578, 1574, 1579, 1676, 1585, 1587, 1580, 1583, - 1587, 1581, 1585, 1591, 1584, 1586, 1586, 1588, 1588, 1590, - 1592, 1594, 1591, 1595, 1590, 1595, 1592, 1593, 1593, 1596, - 1597, 1598, 1596, 1594, 1599, 1601, 1600, 1602, 1605, 1603, - 1601, 1604, 1607, 1605, 1609, 1613, 1602, 0, 1606, 1609, - 1597, 1603, 1599, 1598, 1600, 1608, 1604, 1606, 1610, 1612, - 1608, 1614, 1607, 1611, 1611, 1612, 1613, 1608, 1615, 1616, - 1606, 1618, 1617, 1610, 1617, 1619, 1619, 1620, 1620, 1622, - 1614, 1621, 1621, 1625, 1615, 1618, 1626, 1618, 1633, 1616, - 1623, 1623, 1624, 1624, 1627, 1627, 1628, 1629, 1630, 1622, + 1577, 1583, 1578, 1582, 1582, 1584, 1579, 1585, 1586, 1586, + 1587, 1588, 1591, 1589, 1581, 1590, 1592, 1584, 1588, 1595, + 1583, 1594, 1593, 1596, 1587, 1589, 1585, 1590, 1593, 1596, + 1606, 1591, 1606, 1594, 1597, 1597, 1592, 1595, 1598, 1599, + 1599, 1598, 1601, 1602, 1603, 1604, 1604, 1601, 1605, 1608, + 1603, 1607, 1602, 1609, 1607, 1610, 1611, 1612, 1613, 1614, + 1605, 1615, 1612, 1616, 1618, 1621, 1623, 1613, 1616, 1608, + 1617, 1614, 1623, 1610, 1611, 1609, 1615, 1619, 1620, 1617, + 1621, 1624, 1619, 1620, 1618, 1622, 1622, 1626, 1627, 1619, + 1628, 1629, 1617, 1629, 1634, 1630, 1631, 1631, 1632, 1632, - 1628, 1630, 1632, 1629, 1625, 1634, 1633, 1626, 1632, 1635, - 1636, 1634, 1639, 1636, 1637, 1637, 1638, 1638, 1639, 1640, - 1641, 1642, 1643, 1644, 1645, 0, 1649, 1648, 1649, 1644, - 1647, 1640, 1640, 1640, 1635, 1647, 1647, 1650, 1640, 1642, - 1641, 1648, 1643, 1651, 1645, 1652, 1653, 1654, 1650, 1655, - 1657, 1652, 1656, 1656, 1659, 1653, 1658, 1658, 1651, 1660, - 1661, 1661, 1662, 1662, 1663, 1666, 1666, 1654, 1667, 1668, - 1655, 1670, 1675, 1671, 1659, 1674, 1657, 1672, 1668, 1677, - 1670, 1660, 1678, 1672, 1663, 1673, 1673, 1675, 1677, 1679, - 1679, 1680, 1683, 1667, 1671, 1681, 1674, 1683, 1684, 1685, + 1633, 1633, 1624, 1637, 1627, 1638, 1626, 1635, 1635, 1630, + 1628, 1630, 1636, 1636, 1634, 1639, 1639, 1640, 1645, 1641, + 1642, 1640, 1644, 1642, 1637, 1641, 1638, 1646, 1644, 1647, + 1652, 1648, 1653, 1646, 1648, 1651, 1645, 1649, 1649, 1650, + 1650, 1651, 1652, 1652, 1652, 1654, 1655, 1656, 1657, 1652, + 1659, 1660, 1653, 1656, 1647, 1659, 1659, 1661, 1662, 1661, + 1663, 1664, 1665, 1654, 1666, 1660, 1655, 1664, 1657, 1662, + 1667, 1665, 1668, 1668, 1669, 1663, 1670, 1670, 1671, 1672, + 1673, 1673, 1674, 1674, 1666, 1675, 1678, 1678, 1679, 1683, + 1680, 1667, 1687, 1682, 1685, 1685, 1686, 1684, 1671, 1680, - 1686, 1689, 1689, 1687, 1684, 1690, 1688, 1686, 1678, 1687, - 1690, 1681, 1688, 1691, 1692, 1694, 1693, 1680, 1695, 1685, - 1696, 1695, 1691, 1697, 1698, 1698, 1699, 1694, 1701, 1702, - 1700, 1705, 1699, 1703, 1692, 1693, 1700, 1703, 1696, 1706, - 1707, 1708, 1708, 1709, 1702, 1707, 1715, 1712, 1701, 1697, - 1710, 1705, 1713, 1703, 1714, 1715, 1713, 1716, 1716, 1717, - 1714, 1706, 1709, 1717, 1718, 1710, 1712, 1719, 1719, 1720, - 1721, 1723, 1722, 1724, 1725, 1718, 1723, 1726, 1729, 1729, - 1718, 1727, 1728, 1726, 1721, 1730, 1730, 1728, 1731, 1733, - 1720, 1722, 1731, 1724, 1725, 1734, 1727, 1735, 1733, 1736, + 1669, 1672, 1682, 1684, 1688, 1675, 1689, 1687, 1690, 1692, + 1683, 1688, 1693, 1679, 1696, 1689, 1695, 1686, 1691, 1691, + 1696, 1695, 1697, 1698, 1702, 1699, 1700, 1705, 1693, 1702, + 1698, 1699, 1700, 1704, 1690, 1692, 1701, 1701, 1703, 1706, + 1707, 1708, 1697, 1707, 1709, 1713, 1705, 1703, 1710, 1710, + 1711, 1706, 1712, 1704, 1714, 1717, 1711, 1715, 1712, 1708, + 1718, 1715, 1719, 1720, 1720, 1713, 1721, 1719, 1722, 1714, + 1709, 1724, 1725, 1726, 1732, 1717, 1725, 1715, 1727, 1726, + 1728, 1728, 1718, 1722, 1729, 1721, 1730, 1727, 1729, 1733, + 1724, 1731, 1731, 1734, 1735, 1732, 1736, 1730, 1737, 1735, - 1736, 1738, 1738, 1739, 1740, 1742, 1734, 1741, 1739, 1739, - 1740, 1734, 1744, 1741, 1743, 1745, 1747, 1735, 1748, 1743, - 1749, 1745, 1748, 1750, 1744, 1752, 1754, 1751, 1747, 1753, - 1756, 1742, 1749, 1751, 1757, 1753, 1758, 1760, 1754, 1764, - 1760, 1758, 1756, 1761, 1761, 1762, 1762, 1752, 1750, 1763, - 1763, 1765, 1766, 1757, 1769, 1767, 1768, 1765, 1766, 1764, - 1767, 1771, 1768, 1769, 1773, 1774, 1771, 1773, 1775, 1775, - 1777, 1778, 1781, 1779, 1780, 1780, 1785, 1774, 1779, 1782, - 1783, 1781, 1777, 1778, 1782, 1783, 1784, 1784, 1786, 1787, - 1788, 1789, 1792, 1790, 1791, 1789, 1785, 1786, 1790, 1793, + 1738, 1747, 1730, 1733, 1739, 1740, 1738, 1741, 1741, 1746, + 1740, 1743, 1734, 1742, 1742, 1743, 1736, 1745, 1737, 1739, + 1746, 1747, 1748, 1748, 1751, 1746, 1745, 1750, 1750, 1751, + 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1752, 1753, 1755, + 1759, 1760, 1757, 1761, 1762, 1760, 1764, 1756, 1763, 1766, + 1765, 1768, 1759, 1769, 1763, 1761, 1765, 1770, 1776, 1754, + 0, 1766, 1770, 1768, 1772, 1773, 1773, 1772, 1764, 1762, + 1774, 1774, 1769, 1775, 1775, 1777, 1778, 1780, 1776, 1779, + 1781, 1777, 1778, 1780, 1779, 1783, 1786, 1789, 1785, 1781, + 1783, 1785, 1787, 1787, 1790, 1791, 1792, 1792, 1786, 1789, - 1791, 1794, 1795, 1797, 1797, 1798, 1802, 1787, 1793, 1788, - 1792, 1799, 1800, 1800, 1803, 1797, 1795, 1801, 1802, 1794, - 1799, 1805, 1804, 1798, 1808, 1808, 1801, 1804, 1810, 1811, - 1812, 1810, 1814, 1816, 1805, 1803, 1815, 1817, 1824, 1816, - 1818, 1818, 1819, 1821, 1819, 1811, 1812, 1814, 1820, 1820, - 1815, 1821, 1823, 1826, 1817, 1825, 1825, 1827, 1824, 1823, - 1828, 1829, 1826, 1831, 1830, 1832, 1833, 1839, 1834, 1836, - 1837, 0, 1828, 1829, 1834, 1831, 1838, 1838, 1827, 1830, - 1840, 1833, 1837, 1841, 1843, 1839, 1841, 1834, 1842, 1836, - 1845, 1832, 1846, 1842, 1846, 1845, 1847, 1848, 1849, 1851, + 1791, 1793, 1794, 1795, 1796, 1796, 1790, 1794, 1795, 1797, + 1793, 1798, 1799, 1800, 1801, 1804, 1802, 1803, 1801, 1805, + 1798, 1802, 1806, 1803, 1807, 1809, 1809, 1810, 1805, 1797, + 1799, 1815, 1800, 1804, 1811, 1812, 1812, 1809, 1807, 1813, + 1806, 1814, 1816, 1811, 1817, 1810, 1823, 1816, 1813, 1820, + 1820, 1822, 1815, 1814, 1822, 1824, 1827, 1817, 1826, 1828, + 1829, 1833, 1823, 1830, 1830, 1828, 1831, 1836, 1831, 1833, + 1827, 1824, 1835, 1826, 1832, 1832, 1838, 1829, 1839, 1835, + 1837, 1837, 1840, 1841, 1843, 1838, 1842, 1836, 1844, 1845, + 1849, 1846, 1848, 1851, 1840, 1841, 1843, 1846, 1852, 1839, - 1840, 1853, 1848, 1854, 1843, 1849, 1855, 1856, 1851, 1856, - 1857, 1859, 1854, 1859, 1847, 1862, 1860, 1863, 1855, 1853, - 1861, 1861, 1863, 1864, 1867, 1864, 1865, 1866, 1868, 1857, - 1860, 1865, 1866, 1869, 1871, 1870, 1872, 1874, 1875, 1869, - 1870, 1862, 1867, 1878, 1872, 1876, 1876, 1871, 1868, 1877, - 1877, 1879, 1875, 1880, 1883, 1881, 1874, 1884, 1878, 1880, - 1881, 1882, 1886, 1882, 1895, 1884, 1885, 1885, 1887, 1887, - 1889, 1879, 1883, 1884, 1886, 1888, 1888, 1890, 1891, 1889, - 1893, 1894, 1890, 1894, 1904, 1895, 1897, 1898, 1896, 1893, - 1900, 1905, 1893, 1896, 1896, 1897, 1891, 1904, 1901, 1898, + 1853, 1842, 1849, 1853, 1845, 1850, 1850, 1855, 1854, 0, + 1846, 1851, 1848, 1854, 1844, 1857, 1859, 1858, 1852, 1858, + 1857, 1860, 1861, 1863, 1865, 1869, 1860, 1855, 1866, 1861, + 1874, 1867, 1863, 1868, 1859, 1868, 1871, 1866, 1871, 1872, + 1873, 1873, 1865, 1867, 1869, 1875, 1876, 1877, 1876, 1878, + 1875, 1879, 1877, 1872, 1878, 1880, 1874, 1881, 1883, 1882, + 1884, 1886, 1887, 1881, 1882, 1888, 1888, 1890, 1884, 1879, + 1891, 1883, 1889, 1889, 1893, 1880, 1887, 1892, 1895, 1893, + 1886, 1896, 1890, 1892, 1894, 0, 1894, 1897, 1897, 1896, + 1891, 1898, 1899, 1899, 1900, 1900, 1895, 1896, 1901, 1902, - 1902, 1906, 1900, 1901, 1908, 1902, 1907, 1907, 1909, 1910, - 1906, 1905, 1914, 1911, 1912, 1916, 1915, 1925, 1917, 1926, - 1928, 1919, 1908, 1917, 1914, 1910, 1909, 1911, 1915, 1912, - 1919, 1918, 1922, 1924, 1926, 1916, 1918, 1927, 1922, 1924, - 1925, 1929, 1930, 1930, 1931, 1928, 1932, 1932, 1933, 1935, - 1929, 1922, 1934, 1931, 1935, 1927, 1934, 1936, 1937, 1938, - 1939, 1941, 1942, 1937, 1937, 1938, 1939, 1933, 1940, 1941, - 1936, 1940, 1945, 1945, 1946, 1946, 1947, 1948, 1948, 1949, - 1949, 1950, 1942, 1951, 1952, 1947, 1953, 1954, 1954, 1946, - 1952, 1953, 1956, 1950, 1955, 1955, 1957, 1956, 1960, 1959, + 1903, 1905, 1907, 1898, 1902, 1910, 1906, 1901, 1906, 1908, + 1905, 1909, 1912, 1905, 1908, 1908, 1913, 1910, 1903, 1916, + 1909, 1913, 1914, 1907, 1912, 1917, 1918, 1914, 1919, 1919, + 1920, 1921, 1916, 1923, 1922, 1918, 1924, 1928, 1929, 1930, + 1926, 1927, 1937, 1929, 1930, 1917, 1931, 1923, 1920, 1921, + 1922, 1924, 1926, 1927, 1934, 1931, 1936, 1928, 1939, 1938, + 1934, 1940, 1936, 1941, 1945, 1937, 1942, 1942, 1943, 1944, + 1944, 1946, 1941, 1934, 1938, 1946, 1939, 1943, 1948, 1947, + 1954, 0, 1949, 1945, 1947, 1953, 1940, 1949, 1949, 1950, + 1951, 1948, 1963, 1953, 1952, 1950, 1951, 1952, 1957, 1957, - 1946, 1951, 1957, 1959, 1961, 1963, 1964, 1966, 1961, 1965, - 1967, 1964, 1969, 1968, 1970, 1967, 1971, 1972, 1960, 1973, - 1973, 1971, 1966, 1974, 1976, 1975, 1977, 1974, 1969, 1976, - 1963, 1968, 1965, 1978, 1970, 1979, 1980, 1981, 1982, 1972, - 1975, 1980, 1983, 1983, 1986, 1978, 1987, 1985, 1988, 1989, - 1981, 1990, 1977, 1991, 1979, 1985, 1982, 1992, 1993, 1998, - 1995, 1996, 1996, 1986, 1997, 1987, 1999, 1997, 2000, 1992, - 1990, 1988, 1998, 1989, 1991, 1995, 2001, 2001, 2005, 1993, - 1999, 2000, 2002, 2002, 2003, 2006, 2003, 2004, 2004, 2007, - 2007, 2008, 2010, 2005, 2009, 2009, 2012, 2010, 2006, 2013, + 1954, 1958, 1958, 1959, 1960, 1960, 1961, 1961, 1962, 1964, + 1963, 1969, 1959, 1965, 1968, 1964, 1958, 1969, 1965, 1968, + 1962, 1966, 1966, 1967, 1967, 1971, 1972, 1958, 1973, 1971, + 1975, 1976, 1973, 1977, 1978, 1979, 1976, 1981, 1982, 1980, + 1979, 1984, 1983, 1985, 1985, 1987, 1972, 1983, 1986, 1978, + 1989, 1991, 1986, 1981, 1988, 1975, 1977, 1980, 1982, 1988, + 1987, 1990, 1992, 1984, 1993, 1994, 1997, 1992, 1995, 1995, + 1991, 1998, 1999, 1990, 1997, 2000, 1989, 1993, 2001, 2003, + 2002, 2004, 2005, 1994, 2008, 2008, 2007, 2013, 2013, 2009, + 1998, 1999, 2009, 2004, 2010, 2011, 0, 2012, 2000, 2002, - 2008, 2012, 2014, 2008, 2015, 2016, 2016, 2017, 2017, 2018, - 2019, 2019, 2020, 2021, 2021, 2023, 2015, 2022, 2027, 2013, - 2023, 2026, 2014, 2024, 2024, 2025, 2025, 2027, 2018, 2028, - 2020, 2029, 2022, 2031, 2033, 2026, 2032, 2032, 2031, 2034, - 2034, 2035, 2036, 2028, 2037, 2038, 2038, 2037, 2036, 2040, - 2029, 2039, 2039, 2033, 2041, 2042, 2043, 2043, 2045, 2035, - 2046, 2038, 2047, 2048, 2049, 2049, 2050, 2048, 2040, 2041, - 2051, 2052, 2053, 2056, 2042, 2051, 2058, 2047, 2045, 2055, - 2055, 2057, 2059, 2046, 2060, 2050, 2052, 2053, 2057, 2061, - 2058, 2062, 2062, 2056, 2063, 2064, 2065, 2064, 2067, 2065, + 2003, 2007, 2001, 2005, 2014, 2014, 2015, 2010, 2015, 2011, + 2012, 2016, 2016, 2017, 2018, 2019, 2019, 2020, 2021, 2021, + 2022, 2025, 2026, 0, 2027, 2022, 2020, 2018, 2017, 2020, + 2024, 2028, 2028, 2029, 2029, 2024, 2027, 2030, 2031, 2031, + 2032, 2025, 2026, 2033, 2033, 2034, 2035, 2036, 2036, 2037, + 2037, 2035, 2038, 2039, 2040, 2041, 2030, 2045, 2032, 2043, + 2034, 2047, 2039, 0, 2043, 2052, 2038, 2048, 2040, 2044, + 2044, 2046, 2046, 2048, 2041, 2049, 2045, 2053, 2049, 2047, + 2050, 2050, 2051, 2051, 2052, 2054, 2055, 2055, 2057, 2058, + 2059, 2060, 2053, 2061, 2061, 2060, 2050, 2062, 2063, 2064, - 2059, 2068, 2060, 2063, 2069, 2070, 2068, 2071, 2072, 2069, - 2067, 2074, 2073, 2076, 2065, 2061, 2065, 2073, 2076, 2077, - 2071, 2078, 2079, 2080, 2077, 2081, 2084, 2082, 2079, 2072, - 2070, 2081, 2082, 2083, 2085, 0, 2078, 2074, 2083, 2086, - 2087, 2088, 2086, 2089, 2080, 2090, 2091, 2085, 2096, 2087, - 2088, 2084, 2089, 2092, 2090, 2093, 2098, 2102, 2094, 2092, - 2091, 2093, 2094, 2099, 2099, 2098, 2100, 2104, 2096, 2101, - 2101, 2105, 2100, 2106, 2106, 2107, 2108, 2102, 2101, 2102, - 2110, 2111, 2113, 2104, 2112, 2108, 2115, 2105, 2116, 2115, - 2107, 2117, 2110, 2116, 2113, 2118, 2163, 2111, 2163, 2112, + 2065, 2067, 2067, 2063, 2054, 2059, 2068, 2070, 2057, 2071, + 2069, 2072, 2058, 2073, 2064, 2065, 2062, 2069, 2074, 2074, + 2079, 2070, 2075, 2076, 2082, 2076, 2068, 2071, 2086, 2072, + 2077, 2075, 2079, 2077, 2083, 2080, 2081, 2084, 2085, 2073, + 2080, 2081, 2092, 2085, 2090, 2096, 2088, 2083, 2077, 2082, + 2077, 2088, 2089, 2097, 2086, 2091, 2093, 2089, 2084, 2090, + 2094, 2091, 2093, 2092, 2095, 2094, 2097, 2099, 2098, 2095, + 2096, 2098, 2100, 2101, 2102, 2103, 2099, 2108, 2104, 2105, + 2114, 2100, 2101, 2102, 2104, 2105, 2106, 2110, 2112, 2103, + 2106, 2111, 2111, 2116, 2112, 2117, 2110, 2108, 2113, 2113, - 2119, 2119, 2120, 2120, 2122, 2122, 2123, 2118, 2124, 2123, - 2125, 2117, 2126, 2124, 2127, 2127, 2125, 2128, 2126, 2129, - 2129, 2130, 2131, 2132, 2133, 2133, 2134, 2135, 2143, 2136, - 0, 2128, 2134, 2130, 2136, 2138, 2131, 2139, 2142, 2138, - 2139, 2135, 2132, 2140, 2140, 2141, 2146, 2142, 2143, 2144, - 2141, 2145, 2145, 2144, 2149, 2148, 2150, 2151, 2152, 2146, - 2148, 2153, 2152, 2154, 2155, 2157, 2156, 2162, 2154, 2159, - 2155, 2151, 2156, 2160, 2149, 2162, 2150, 2167, 2160, 2165, - 2161, 2153, 2170, 2157, 2169, 2159, 2161, 2169, 2165, 2168, - 2168, 2167, 2171, 2171, 2173, 2174, 2177, 2175, 2173, 2176, + 2114, 2119, 2114, 2118, 2118, 2120, 2122, 2113, 2123, 2116, + 2124, 2117, 2129, 0, 2120, 2125, 2119, 2127, 2122, 2130, + 2127, 2128, 2131, 2131, 2123, 2124, 2128, 2125, 2132, 2132, + 2140, 2130, 2129, 2134, 2134, 2135, 2136, 2137, 2135, 2138, + 2142, 2136, 2143, 2137, 2140, 2138, 2139, 2139, 2141, 2141, + 2144, 2146, 2142, 2145, 2145, 2148, 2143, 2146, 2147, 2150, + 2148, 2151, 2153, 2150, 2151, 2152, 2152, 2153, 2154, 2144, + 2155, 2156, 2147, 2157, 2157, 2156, 2158, 2154, 2160, 2161, + 2162, 2163, 2164, 2160, 2165, 2167, 2164, 2166, 2168, 2158, + 2155, 2167, 2166, 2169, 2168, 2163, 2171, 2172, 2174, 2161, - 2176, 2174, 2180, 2180, 2182, 2177, 2184, 2185, 2170, 2175, - 2188, 2189, 2190, 2191, 2199, 2188, 2198, 2190, 2191, 2203, - 2184, 2202, 2182, 2185, 2192, 2192, 2194, 2194, 2196, 2197, - 2197, 2203, 2198, 2200, 2196, 2206, 2199, 2189, 2200, 2207, - 2202, 2204, 2204, 2208, 2206, 2207, 2213, 2209, 2211, 2211, - 2212, 2214, 2219, 2212, 2216, 2216, 2217, 2217, 2218, 2220, - 0, 2208, 2209, 2218, 2223, 2213, 2221, 2224, 2220, 2214, - 2219, 2221, 2222, 2225, 2222, 2226, 2227, 2228, 2223, 2234, - 2226, 2224, 2228, 2229, 2229, 2225, 2230, 2230, 2231, 2231, - 2232, 2232, 2233, 2235, 2236, 2236, 2227, 2234, 2235, 2237, + 2162, 2173, 2172, 2175, 2165, 2175, 2174, 2173, 2177, 2179, + 2182, 2169, 2171, 2180, 2180, 2181, 2186, 2177, 2181, 2183, + 2183, 2185, 2186, 2179, 2189, 2185, 2187, 2188, 2188, 2192, + 2192, 2194, 2196, 2189, 2197, 2200, 2182, 2201, 2187, 2202, + 2200, 2260, 2203, 2210, 2202, 2211, 2196, 2203, 2260, 2194, + 2197, 2204, 2204, 2206, 2206, 2208, 2209, 2209, 2214, 2210, + 2212, 2208, 2215, 2201, 2218, 2212, 2219, 2211, 2216, 2216, + 2220, 2221, 2219, 2218, 2215, 2223, 2223, 2214, 2224, 2225, + 2230, 2224, 2226, 2228, 2228, 2230, 2221, 2231, 2220, 2229, + 2229, 2233, 2232, 2234, 2235, 2234, 2233, 2236, 2225, 2238, - 2237, 2238, 2239, 2240, 2233, 2241, 2242, 2242, 2243, 2244, - 2244, 2245, 2245, 2238, 2239, 2246, 2247, 2248, 2249, 2250, - 2251, 2241, 2252, 2240, 2248, 2251, 2246, 2243, 2247, 2253, - 2249, 2254, 2254, 2256, 2255, 2257, 2259, 2258, 2260, 2250, - 2261, 2261, 2252, 2255, 2262, 2266, 2263, 2264, 2267, 2253, - 2258, 2268, 2260, 2262, 2269, 2257, 0, 2269, 2270, 2256, - 2259, 2263, 2264, 2266, 2271, 2280, 2272, 2273, 2273, 2271, - 2267, 2272, 2270, 2281, 2268, 2274, 2274, 2275, 2275, 2277, - 2277, 2279, 2279, 2280, 2281, 2282, 2284, 2285, 2286, 2287, - 2288, 2289, 2290, 2291, 2290, 2297, 2292, 2293, 2298, 2288, + 2226, 2232, 2237, 2239, 2238, 2231, 2246, 2240, 2235, 2241, + 2241, 2236, 2240, 2245, 2237, 2242, 2242, 2243, 2243, 2244, + 2244, 2247, 2250, 2239, 2246, 2245, 2247, 2248, 2248, 2249, + 2249, 2251, 2252, 2253, 2250, 2254, 2254, 2255, 2256, 2256, + 2257, 2257, 2258, 2251, 2262, 2259, 2261, 2264, 2265, 2253, + 2263, 2268, 2252, 2258, 2267, 2263, 2255, 2259, 2261, 2266, + 2266, 2269, 2270, 2267, 2262, 2271, 2272, 2264, 2265, 2273, + 2273, 2275, 2276, 2274, 2278, 2270, 2279, 2268, 2280, 2282, + 2272, 2269, 2274, 2285, 2285, 2281, 2275, 2276, 2281, 2271, + 2283, 2284, 2278, 2282, 2292, 2283, 2284, 2293, 2279, 2286, - 2294, 2294, 2296, 2296, 2282, 2285, 2284, 2298, 2303, 2287, - 2286, 2289, 2301, 2291, 2292, 2293, 2304, 2297, 2299, 2299, - 2305, 2301, 2302, 2302, 2306, 2307, 2303, 2305, 2308, 2309, - 2310, 2311, 2311, 2314, 2304, 2312, 2312, 2315, 2313, 2306, - 2316, 2317, 2318, 2307, 2313, 2309, 2308, 2318, 2319, 2310, - 2320, 2314, 2315, 2321, 2322, 2317, 2322, 2327, 2321, 2316, - 2323, 2323, 2324, 2329, 2324, 2325, 2325, 2330, 2319, 2331, - 2320, 2332, 2329, 2333, 2334, 2338, 2327, 2335, 2333, 2339, - 2342, 2331, 2339, 2340, 2340, 2341, 2330, 2343, 2343, 2344, - 2346, 2332, 2351, 2344, 2334, 2338, 2335, 2347, 2342, 2349, + 2286, 2280, 2287, 2287, 2289, 2289, 2291, 2291, 2293, 2294, + 2296, 2297, 2292, 2298, 2299, 2300, 2301, 2302, 2303, 2302, + 2309, 2304, 2305, 0, 2300, 2306, 2306, 2315, 2294, 2297, + 2296, 2308, 2308, 2316, 2299, 2298, 2301, 2310, 2303, 2304, + 2305, 2313, 2309, 2311, 2311, 2315, 2310, 2314, 2314, 2317, + 2313, 2316, 2318, 2319, 2320, 2322, 2317, 2321, 2323, 2323, + 2324, 2324, 2325, 2326, 2327, 2328, 2329, 2318, 2325, 2331, + 2330, 2319, 2320, 2321, 2322, 2330, 2332, 2333, 2339, 2327, + 2329, 2326, 2333, 2334, 2328, 2334, 2335, 2335, 2336, 2331, + 2336, 2337, 2337, 2341, 2342, 2343, 2332, 2339, 2344, 2345, - 2341, 2347, 2348, 2348, 2352, 2346, 2353, 2351, 2354, 2354, - 2356, 2357, 2349, 2358, 2359, 2359, 2360, 2358, 2361, 2361, - 2357, 2363, 2356, 2362, 2352, 2364, 2353, 2365, 2362, 2372, - 2363, 2366, 2366, 2371, 2371, 2360, 2373, 2373, 2376, 2365, - 2374, 2364, 2375, 2377, 2378, 2378, 2379, 2376, 2381, 2381, - 2386, 2372, 2377, 2374, 2384, 2375, 2389, 2385, 2387, 2384, - 2388, 2379, 2385, 2387, 2386, 2390, 2393, 2394, 2388, 2391, - 2396, 2395, 2394, 2399, 2390, 2389, 2395, 2391, 2397, 2397, - 2399, 2393, 2398, 2398, 2400, 2396, 2401, 2402, 2403, 2400, - 2404, 2405, 2405, 2406, 2403, 2404, 2407, 2408, 2408, 2409, + 2346, 2350, 2341, 2347, 2345, 2351, 2354, 2343, 2351, 2352, + 2352, 2353, 2356, 2342, 2355, 2355, 2356, 2358, 2344, 2359, + 2346, 2350, 2347, 2359, 2354, 2361, 2353, 2360, 2360, 2363, + 2364, 2365, 2358, 2366, 2366, 2368, 2369, 2370, 2361, 2371, + 2371, 2370, 2372, 2376, 2363, 2369, 2375, 2368, 2373, 2373, + 2364, 2365, 2374, 2377, 2384, 2375, 0, 2374, 2386, 2376, + 2387, 2372, 2378, 2378, 2398, 2377, 2383, 2383, 2385, 2385, + 2388, 2386, 2389, 2387, 2390, 2390, 2384, 2391, 2398, 2388, + 2396, 2389, 2393, 2393, 2397, 2396, 2399, 2400, 2401, 2397, + 2402, 2399, 2391, 2403, 2405, 2400, 2408, 2406, 2407, 2402, - 2409, 2407, 2412, 0, 2401, 2402, 2413, 2413, 2406, 2414, - 2424, 2415, 2414, 2416, 2417, 2412, 2415, 2415, 2416, 2417, - 2418, 2419, 2420, 2421, 2422, 2419, 2418, 2420, 2423, 2425, - 2428, 2424, 2421, 2427, 2426, 2425, 2423, 2433, 2427, 2422, - 2426, 2430, 2428, 2435, 2431, 2436, 2430, 2431, 2435, 2433, - 2436, 2437, 2438, 2439, 2440, 2441, 2441, 2442, 2445, 2446, - 2452, 2447, 2439, 2440, 2449, 2438, 2442, 2448, 2448, 2437, - 2450, 2449, 2451, 2453, 2453, 2452, 2454, 2445, 2456, 2446, - 2447, 2451, 2458, 2459, 2460, 2460, 2461, 2459, 2462, 2450, - 2463, 2464, 2466, 2456, 2462, 2454, 2463, 2464, 2465, 2465, + 2413, 2403, 2406, 2407, 2409, 2409, 2414, 2401, 2411, 2405, + 2415, 2408, 2410, 2410, 2412, 2411, 2415, 2416, 2413, 2412, + 2417, 2417, 2416, 2418, 2414, 2419, 2420, 2420, 2421, 2421, + 2419, 2424, 2425, 2425, 2426, 2427, 2436, 2426, 2418, 2430, + 2427, 2427, 2428, 2429, 2424, 2430, 2431, 2428, 2429, 2432, + 2431, 2433, 2434, 2435, 2432, 0, 2437, 2436, 2438, 2440, + 2433, 2435, 2437, 2439, 2438, 2442, 2443, 2434, 2439, 2443, + 2442, 2440, 2445, 2447, 2448, 2449, 2450, 2451, 2447, 2448, + 2457, 2452, 2453, 2453, 2445, 2454, 2451, 2458, 2464, 2450, + 2452, 2459, 2462, 2449, 2454, 2460, 2460, 2461, 2466, 2457, - 2466, 2467, 2458, 2469, 2470, 2472, 2467, 2473, 2474, 2472, - 2477, 2461, 2469, 2476, 2476, 2478, 2478, 2470, 2479, 2479, - 2487, 2473, 2482, 2474, 2481, 2481, 2482, 2483, 2477, 2485, - 2485, 2488, 2483, 2489, 2492, 2500, 2488, 2490, 2493, 2493, - 2487, 2497, 2490, 2490, 2497, 2489, 2495, 2495, 2496, 2496, - 2498, 2502, 2506, 2500, 2492, 2503, 2503, 2504, 2504, 2505, - 2505, 2507, 2507, 2498, 2508, 2509, 2510, 2506, 2511, 2512, - 2512, 2502, 2513, 2516, 2511, 2517, 2513, 2508, 2516, 2516, - 2510, 2518, 2519, 2509, 2520, 2521, 2522, 2532, 2523, 2529, - 2520, 2521, 2523, 2524, 2524, 2527, 2530, 2529, 2517, 2530, + 2463, 2465, 2465, 2464, 2461, 2468, 2470, 2458, 2471, 2463, + 2459, 2462, 2471, 2472, 2472, 2473, 2474, 2466, 2475, 2476, + 2468, 2478, 2474, 2481, 2475, 2476, 2470, 2477, 2477, 2478, + 2479, 2482, 2481, 2484, 2485, 2479, 2486, 2484, 2488, 2488, + 2473, 2489, 2490, 2490, 2482, 2491, 2491, 2499, 2485, 2493, + 2493, 2486, 2494, 2495, 2497, 2497, 2494, 2500, 2495, 2489, + 2501, 2504, 2500, 2502, 2505, 2505, 2510, 2499, 2502, 2502, + 2507, 2507, 2501, 2508, 2508, 2509, 2512, 2514, 2509, 2510, + 2518, 2504, 2515, 2515, 2516, 2516, 2517, 2517, 2519, 2519, + 2520, 2521, 2522, 2523, 2512, 2518, 2529, 2514, 2525, 2523, - 2527, 2518, 2519, 2533, 2534, 2535, 2533, 2536, 2537, 2538, - 2535, 2522, 2532, 2539, 2539, 2540, 2541, 2542, 2543, 2541, - 2546, 2534, 2534, 2538, 2544, 2536, 2555, 2541, 2537, 2540, - 2545, 2542, 2544, 2547, 2547, 2545, 2545, 2543, 2552, 2546, - 2548, 2548, 2549, 2549, 2550, 2550, 2551, 2551, 2553, 2554, - 2556, 2557, 2555, 2553, 2552, 2558, 2560, 2560, 2563, 2556, - 2561, 2561, 2562, 2565, 2565, 2562, 2566, 2567, 2567, 2554, - 2575, 2557, 2568, 2566, 2571, 2558, 2563, 2568, 2570, 2570, - 2572, 2573, 2577, 2571, 2576, 2576, 2577, 2578, 2575, 2572, - 2573, 2579, 2580, 2582, 2581, 2583, 2578, 2580, 2580, 2583, + 2524, 2524, 2525, 2520, 2530, 2528, 2522, 2531, 2532, 2521, + 2528, 2528, 2533, 2534, 2532, 2544, 2535, 2541, 2533, 2529, + 2535, 2536, 2536, 2539, 2530, 2541, 2542, 2531, 2539, 2542, + 2545, 2546, 2547, 2545, 2548, 2549, 2550, 2547, 2534, 2552, + 2544, 2551, 2551, 2553, 2554, 2555, 2553, 2558, 2546, 2546, + 2550, 2556, 2548, 2552, 2553, 2549, 2557, 2566, 2554, 2556, + 2565, 2557, 2557, 2564, 2555, 2565, 2558, 2559, 2559, 2560, + 2560, 2561, 2561, 2562, 2562, 2563, 2563, 2566, 2567, 2564, + 2568, 2569, 2570, 2572, 2572, 2573, 2573, 2574, 2575, 2568, + 2574, 2577, 2577, 2578, 2579, 2579, 2582, 2582, 2580, 2583, - 2587, 2591, 2582, 2588, 2588, 2587, 2579, 2581, 2590, 2590, - 2592, 2593, 2595, 2596, 2599, 2591, 2601, 2600, 2602, 2604, - 2606, 2595, 2608, 2609, 2602, 2596, 2600, 2608, 2609, 2593, - 0, 2604, 2610, 2610, 2611, 2592, 2601, 2613, 2620, 2599, - 2621, 2606, 2613, 2611, 2614, 2614, 2616, 2616, 2614, 2617, - 2617, 2618, 2618, 2619, 2628, 2622, 2625, 2624, 2620, 2621, - 2622, 2625, 2619, 2624, 2626, 2627, 2627, 2629, 2630, 2626, - 2632, 2631, 2628, 2630, 2633, 2636, 2632, 2634, 2634, 2636, - 2637, 2638, 2639, 2639, 2640, 2637, 2638, 2641, 2629, 2631, - 2642, 2644, 2644, 2646, 2647, 2649, 2648, 2650, 2651, 2633, + 2578, 2569, 2570, 2580, 2567, 2584, 2575, 2585, 2583, 2587, + 2588, 2588, 2590, 2589, 2584, 2591, 2585, 2589, 2592, 2593, + 2594, 2590, 2595, 2592, 2592, 2603, 2595, 2587, 2599, 2594, + 2591, 2604, 2593, 2599, 2600, 2600, 2602, 2602, 2607, 2603, + 2605, 2608, 2611, 2612, 2613, 2614, 0, 2607, 2616, 2618, + 2620, 2614, 2612, 2608, 2621, 2620, 2604, 2623, 2605, 2621, + 2616, 2622, 2622, 2625, 2613, 2632, 2623, 2611, 2625, 2633, + 2618, 2626, 2626, 2628, 2628, 2626, 2629, 2629, 2630, 2630, + 2631, 2634, 2637, 2640, 2636, 2632, 2634, 2637, 2633, 2631, + 2636, 2638, 2639, 2639, 2641, 2642, 2638, 2644, 2643, 2645, - 2648, 2652, 2641, 2640, 2649, 2654, 2646, 2647, 2656, 2652, - 2642, 2653, 2662, 2650, 2655, 2655, 2653, 2651, 2659, 2659, - 2660, 2660, 2664, 2664, 2666, 2667, 2668, 2656, 2672, 2669, - 2673, 2654, 2674, 2662, 2669, 2671, 2671, 2676, 2676, 2678, - 2666, 2667, 2668, 2677, 2679, 2679, 2682, 2684, 2672, 2683, - 2685, 2674, 2684, 2673, 2688, 2683, 2690, 2677, 2678, 2686, - 2686, 2687, 2687, 2689, 2689, 2692, 2682, 2690, 2691, 2693, - 2694, 2696, 2685, 2704, 2688, 2693, 2695, 2691, 2697, 2697, - 2703, 2698, 0, 2689, 2698, 2692, 2699, 2699, 2695, 2694, - 2705, 2696, 2703, 2704, 2706, 2706, 2705, 2707, 2708, 2709, + 2642, 2640, 2648, 2644, 2646, 2646, 2648, 2649, 2650, 2651, + 2651, 2652, 2649, 2650, 2653, 2641, 2643, 2654, 2656, 2656, + 2658, 2659, 2660, 2661, 2645, 2662, 2660, 2663, 2664, 2653, + 2652, 2666, 2661, 2658, 2659, 2665, 2664, 2654, 2667, 2667, + 2665, 2662, 2668, 2671, 2671, 2674, 2663, 2672, 2672, 2676, + 2676, 2678, 2679, 2680, 2681, 2683, 2683, 2666, 2684, 2681, + 2685, 2668, 2686, 2688, 2688, 2689, 2674, 2678, 2679, 2680, + 2690, 2691, 2691, 2694, 2695, 2697, 2700, 2696, 2684, 2689, + 2695, 2686, 2696, 2685, 2698, 2698, 2699, 2699, 2702, 2690, + 2701, 2701, 2703, 2694, 2704, 2707, 2700, 2697, 2705, 2702, - 2707, 2711, 2712, 2713, 2708, 2714, 2711, 2712, 2715, 2716, - 2716, 2714, 2718, 2719, 2720, 2721, 2723, 2709, 2722, 2722, - 2724, 2749, 2713, 2739, 2718, 2715, 2715, 2729, 2721, 2724, - 2749, 2719, 2726, 2726, 2741, 2723, 2727, 2727, 2728, 2720, - 2730, 2729, 2739, 2728, 2742, 2730, 2731, 2731, 2732, 2732, - 2733, 2733, 2734, 2736, 2736, 2743, 2741, 2734, 2744, 2744, - 2746, 2746, 2747, 2748, 2750, 2750, 2742, 2751, 2751, 2753, - 2754, 2763, 2755, 2756, 0, 2753, 2747, 2743, 2756, 2759, - 2759, 2761, 2761, 2748, 2762, 2763, 2764, 2765, 2766, 2762, - 2754, 2755, 2764, 2767, 2767, 2768, 2766, 2770, 2771, 2765, + 2706, 2703, 2708, 2715, 2705, 2709, 2709, 2707, 2710, 2716, + 2701, 2710, 2711, 2711, 2704, 2715, 2721, 2717, 2725, 2706, + 2718, 2718, 2708, 2717, 2719, 2720, 2726, 2719, 2723, 2716, + 2724, 2720, 2726, 2723, 2721, 2724, 2727, 2725, 2728, 2728, + 2730, 2731, 2732, 2733, 2734, 2734, 2735, 0, 2736, 2738, + 2738, 2751, 2730, 2727, 2727, 2741, 2733, 2736, 2740, 2731, + 2739, 2739, 2753, 2740, 2754, 2735, 2742, 2732, 2755, 2741, + 2751, 2742, 2743, 2743, 2744, 2744, 2745, 2745, 2746, 2748, + 2748, 2756, 2756, 2746, 2753, 2759, 2754, 2758, 2758, 2760, + 2755, 2761, 2762, 2762, 2763, 2763, 2765, 2766, 2768, 2759, - 2768, 2772, 2773, 2774, 2776, 2777, 2772, 2778, 2779, 2774, - 2781, 2780, 2776, 2782, 2773, 2783, 2784, 2770, 2771, 2787, - 2786, 2784, 2791, 2918, 2777, 2786, 2781, 2778, 2779, 2780, - 2782, 2782, 2788, 2792, 2918, 2789, 2783, 2797, 2788, 2787, - 2789, 2797, 2791, 2795, 2795, 2810, 2792, 2796, 2796, 2801, - 2801, 2803, 2803, 2804, 2804, 2807, 2804, 2805, 2805, 2807, - 2805, 2806, 2806, 2810, 2806, 2809, 2809, 2811, 2814, 2815, - 2816, 2817, 2817, 2820, 2822, 2816, 2821, 2823, 2822, 2824, - 2832, 2811, 2826, 2821, 2827, 2832, 2823, 2836, 2814, 2815, - 2828, 2828, 2831, 2827, 2824, 2829, 2829, 2833, 2820, 2834, + 2761, 2767, 2765, 2768, 2771, 2771, 2773, 2773, 2774, 2760, + 2775, 2777, 2776, 2774, 2778, 2779, 2779, 2766, 2776, 2782, + 2767, 2780, 2778, 2777, 2775, 2783, 2780, 2784, 2785, 2786, + 2788, 2789, 2784, 2790, 2791, 2786, 2793, 2792, 2788, 2782, + 2785, 2794, 2795, 2796, 2798, 2783, 2799, 2803, 2796, 2798, + 2789, 2800, 2793, 2790, 2791, 2792, 2801, 2800, 2794, 2794, + 2804, 2801, 0, 2795, 2807, 2807, 2799, 2803, 2808, 2808, + 2809, 2813, 2813, 2804, 2809, 2815, 2815, 2816, 2816, 2819, + 2816, 2817, 2817, 2819, 2817, 2818, 2818, 2822, 2818, 2821, + 2821, 2826, 2823, 2827, 2828, 2829, 2829, 2832, 2834, 2828, - 2826, 2830, 2830, 2837, 2834, 2834, 2833, 2831, 2835, 2833, - 2838, 2839, 2836, 2841, 2835, 2840, 2839, 2843, 2837, 2844, - 2840, 2842, 2842, 2843, 0, 2844, 2845, 2845, 2846, 2846, - 2847, 2838, 2841, 2850, 2850, 2847, 2853, 2853, 2854, 2854, - 2855, 2855, 2856, 2856, 2857, 2857, 2858, 2858, 2859, 2859, - 2861, 2862, 2862, 2863, 2864, 2865, 2869, 2867, 2871, 2861, - 2868, 2868, 2863, 2873, 2870, 2877, 2864, 2872, 2872, 2879, - 2871, 2869, 2874, 2874, 2881, 2865, 2867, 2870, 2873, 2878, - 2880, 2880, 2878, 2877, 2883, 2884, 2885, 2883, 2886, 2887, - 2889, 2884, 2881, 2886, 2888, 2879, 2891, 2906, 2892, 2895, + 2833, 2835, 2834, 2836, 0, 2822, 2823, 2833, 2838, 2843, + 2835, 2826, 2839, 2827, 2840, 2840, 2841, 2841, 2836, 2842, + 2842, 2839, 2832, 2844, 2843, 2845, 2838, 2846, 2844, 2847, + 2848, 2849, 2846, 2846, 2845, 2847, 2850, 2845, 2851, 2852, + 2853, 2854, 2854, 2851, 2852, 2855, 2849, 2856, 2857, 2857, + 2876, 2855, 2925, 2856, 0, 2848, 2925, 2850, 2859, 2853, + 2858, 2858, 2876, 2859, 2862, 2862, 2865, 2865, 2866, 2866, + 2867, 2867, 2868, 2868, 2869, 2869, 2870, 2870, 2871, 2871, + 2873, 2874, 2874, 2875, 2877, 2881, 2879, 2880, 2880, 2873, + 2882, 2889, 2875, 2885, 2883, 2884, 2884, 2886, 2886, 2890, - 2885, 2904, 2891, 2911, 2904, 2913, 2889, 2892, 2887, 2913, - 2906, 2914, 2888, 2912, 2895, 2907, 2907, 2908, 2908, 2909, - 2909, 2915, 2912, 2917, 2919, 2920, 2911, 2920, 2921, 2919, - 2924, 2914, 2922, 2922, 2923, 2915, 2925, 2926, 2927, 2929, - 2928, 2931, 2945, 2921, 2930, 2932, 2917, 2923, 2929, 2924, - 2937, 2938, 2933, 2926, 2925, 2928, 2930, 2933, 2939, 2939, - 2940, 2945, 2931, 2927, 2937, 2932, 2941, 2941, 2946, 2940, - 2950, 2938, 2942, 2942, 2943, 2943, 2944, 2944, 2947, 2948, - 2949, 2947, 2951, 2952, 2948, 2949, 2953, 2954, 2946, 2952, - 2956, 2955, 2957, 2957, 2958, 2950, 2955, 2951, 2959, 2954, + 2881, 2891, 2890, 2882, 2877, 2879, 2883, 2893, 2885, 2889, + 2892, 2892, 2895, 2896, 2897, 2895, 2898, 2899, 2901, 2896, + 2900, 2898, 2904, 2903, 2907, 2893, 2923, 2891, 2897, 2903, + 2916, 2904, 2918, 2916, 2901, 2924, 2899, 2926, 2900, 2907, + 2919, 2919, 2920, 2920, 2924, 2918, 2921, 2921, 2927, 2923, + 2929, 2931, 2930, 2932, 2933, 2932, 2931, 2926, 2934, 2934, + 2936, 2935, 2927, 2930, 2937, 2938, 2939, 2941, 2940, 2933, + 2944, 2943, 2942, 2929, 2935, 2945, 2941, 2950, 0, 2936, + 2945, 2938, 2937, 2940, 2942, 2949, 2951, 2951, 2957, 2952, + 2944, 2939, 2943, 2953, 2953, 2954, 2954, 2950, 2952, 2949, - 2953, 2960, 2960, 2962, 2964, 2967, 2967, 2968, 2968, 2958, - 2956, 2969, 2970, 2973, 2971, 2972, 2974, 2959, 2962, 2969, - 2971, 2972, 2964, 2975, 2980, 2976, 2981, 2973, 2986, 2974, - 2976, 2970, 2977, 2977, 2978, 2978, 2983, 2984, 2987, 2988, - 2989, 2984, 2975, 2987, 2990, 2980, 2981, 2991, 2986, 2992, - 2983, 2993, 2997, 2989, 2992, 2998, 2993, 2990, 2988, 2994, - 2994, 2999, 3000, 3000, 3001, 3002, 2991, 3003, 3003, 3001, - 3004, 3002, 2997, 2998, 3005, 3004, 3006, 3007, 3008, 3005, - 2999, 3006, 3010, 3010, 3008, 3011, 3012, 3012, 3014, 3015, - 3011, 3016, 3014, 3017, 3018, 3019, 3007, 3020, 3016, 3023, + 2955, 2955, 2956, 2956, 2958, 2959, 2960, 2957, 2959, 2961, + 2962, 2960, 2963, 2964, 2961, 2965, 2966, 2967, 2968, 2964, + 2969, 2969, 2967, 2971, 2958, 2970, 2974, 2963, 2966, 2965, + 2972, 2972, 2976, 2979, 2979, 2962, 2980, 2980, 2968, 2981, + 2970, 2974, 2971, 2982, 2985, 2983, 2984, 2981, 2986, 2987, + 2976, 2983, 2984, 2992, 2988, 2989, 2989, 2993, 2985, 2988, + 2998, 2986, 2982, 2990, 2990, 2995, 2996, 2999, 2987, 3000, + 2996, 3001, 2999, 3002, 2992, 3003, 3004, 2993, 3005, 2995, + 2998, 3004, 3009, 3005, 3001, 3010, 3002, 3011, 3000, 3006, + 3006, 3012, 3012, 3013, 3003, 3014, 3015, 3015, 3013, 3016, - 3023, 3019, 3021, 3025, 3025, 3026, 3027, 3028, 3015, 3029, - 3030, 3027, 3017, 3018, 3026, 3021, 3020, 3026, 3031, 3031, - 3032, 3033, 3035, 3030, 3037, 3032, 3028, 3042, 3029, 3036, - 3036, 3038, 3038, 3040, 3033, 3039, 3039, 3041, 3040, 3043, - 3043, 3049, 3044, 3037, 3041, 3051, 3042, 3044, 3035, 3045, - 3047, 3045, 3046, 3046, 3048, 3053, 3053, 3047, 3050, 3054, - 3049, 3048, 3056, 3050, 3051, 3057, 3058, 3056, 3059, 3063, - 3057, 3060, 3060, 3062, 3062, 3064, 3065, 3065, 3054, 3066, - 3066, 0, 3067, 3069, 3069, 3058, 3071, 3059, 3063, 3067, - 3070, 3070, 3073, 3071, 3064, 3076, 3077, 3073, 3078, 0, + 3017, 3014, 3009, 3010, 3016, 3017, 3011, 3018, 3019, 3020, + 3022, 3022, 3018, 3023, 3027, 3020, 3024, 3024, 3023, 3026, + 3029, 3028, 3030, 3026, 3031, 3032, 0, 3019, 3028, 3033, + 3031, 3035, 3035, 3027, 3037, 3037, 3038, 3040, 3039, 3029, + 3041, 3030, 3033, 3039, 3032, 3038, 3044, 3042, 3038, 3043, + 3043, 3044, 3045, 3047, 3048, 3048, 3040, 3049, 3054, 3041, + 3042, 3050, 3050, 3051, 3051, 3045, 3052, 3053, 3055, 3055, + 3056, 3052, 3058, 3058, 3053, 3056, 3049, 3054, 3057, 3047, + 3057, 3059, 3060, 3061, 3063, 3062, 3065, 3065, 3059, 3060, + 3062, 3066, 3068, 3069, 3070, 3071, 3075, 3068, 3069, 3072, - 3076, 3079, 3079, 3080, 3080, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3077, 0, 3078, 3084, 3084, - 3084, 3084, 3084, 3084, 3084, 3085, 3085, 3085, 3085, 3085, - 3085, 3085, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3087, - 3087, 3087, 3087, 3087, 3087, 3087, 3088, 3088, 3088, 3088, - 3088, 3088, 3088, 3090, 3090, 0, 3090, 3090, 3090, 3090, - 3091, 3091, 0, 0, 0, 3091, 3091, 3092, 3092, 0, - 0, 3092, 0, 3092, 3093, 0, 0, 0, 0, 0, - 3093, 3094, 3094, 0, 0, 0, 3094, 3094, 3095, 0, - 0, 0, 0, 0, 3095, 3096, 3096, 0, 3096, 3096, + 3072, 3076, 3061, 3063, 3074, 3074, 3077, 3077, 3078, 3078, + 3066, 3079, 3083, 3070, 3071, 3075, 3081, 3081, 3079, 3083, + 3076, 3082, 3082, 3085, 3088, 3089, 3090, 0, 3085, 3088, + 3091, 3091, 3092, 3092, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3089, 3090, 3096, 3096, 3096, 3096, + 3096, 3096, 3096, 3097, 3097, 3097, 3097, 3097, 3097, 3097, + 3098, 3098, 3098, 3098, 3098, 3098, 3098, 3099, 3099, 3099, + 3099, 3099, 3099, 3099, 3100, 3100, 3100, 3100, 3100, 3100, + 3100, 3102, 3102, 0, 3102, 3102, 3102, 3102, 3103, 3103, + 0, 0, 0, 3103, 3103, 3104, 3104, 0, 0, 3104, - 3096, 3096, 3097, 3097, 0, 3097, 3097, 3097, 3097, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, - 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083 + 0, 3104, 3105, 0, 0, 0, 0, 0, 3105, 3106, + 3106, 0, 0, 0, 3106, 3106, 3107, 0, 0, 0, + 0, 0, 3107, 3108, 3108, 0, 3108, 3108, 3108, 3108, + 3109, 3109, 0, 3109, 3109, 3109, 3109, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095, + 3095, 3095, 3095, 3095, 3095, 3095, 3095, 3095 } ; static yy_state_type yy_last_accepting_state; @@ -2970,7 +2980,7 @@ static void config_end_include(void) } #endif -#line 2971 "" +#line 2981 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2979,9 +2989,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2980 "" +#line 2990 "" -#line 2982 "" +#line 2992 "" #define INITIAL 0 #define quotedstring 1 @@ -3203,7 +3213,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3204 "" +#line 3214 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3236,13 +3246,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 >= 3084 ) + if ( yy_current_state >= 3096 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6010 ); + while ( yy_base[yy_current_state] != 6038 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4323,255 +4333,255 @@ YY_RULE_SETUP case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 231: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 232: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 233: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 234: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 442 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 235: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 443 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 236: YY_RULE_SETUP -#line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 445 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 237: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 238: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 239: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 240: YY_RULE_SETUP -#line 451 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 450 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 241: YY_RULE_SETUP -#line 453 "./util/configlexer.lex" +#line 451 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 455 "./util/configlexer.lex" +#line 453 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP -#line 457 "./util/configlexer.lex" +#line 455 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 244: YY_RULE_SETUP -#line 459 "./util/configlexer.lex" +#line 457 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 245: YY_RULE_SETUP -#line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 459 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 246: YY_RULE_SETUP -#line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 461 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 256: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 257: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 258: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 259: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 260: YY_RULE_SETUP @@ -4581,200 +4591,210 @@ YY_RULE_SETUP case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 270: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 271: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 272: YY_RULE_SETUP -#line 489 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 488 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 273: YY_RULE_SETUP -#line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 489 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 274: YY_RULE_SETUP -#line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 491 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 290: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 291: YY_RULE_SETUP #line 509 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 292: YY_RULE_SETUP #line 510 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 293: -/* rule 293 can match eol */ YY_RULE_SETUP #line 511 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 294: +YY_RULE_SETUP +#line 512 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 295: +/* rule 295 can match eol */ +YY_RULE_SETUP +#line 513 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 294: +case 296: YY_RULE_SETUP -#line 514 "./util/configlexer.lex" +#line 516 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 515 "./util/configlexer.lex" +#line 517 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 295: +case 297: YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 522 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 296: -/* rule 296 can match eol */ +case 298: +/* rule 298 can match eol */ YY_RULE_SETUP -#line 521 "./util/configlexer.lex" +#line 523 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 297: +case 299: YY_RULE_SETUP -#line 523 "./util/configlexer.lex" +#line 525 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4787,34 +4807,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 298: +case 300: YY_RULE_SETUP -#line 535 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 536 "./util/configlexer.lex" +#line 538 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 299: +case 301: YY_RULE_SETUP -#line 541 "./util/configlexer.lex" +#line 543 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 300: -/* rule 300 can match eol */ +case 302: +/* rule 302 can match eol */ YY_RULE_SETUP -#line 542 "./util/configlexer.lex" +#line 544 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 301: +case 303: YY_RULE_SETUP -#line 544 "./util/configlexer.lex" +#line 546 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4827,38 +4847,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 302: +case 304: YY_RULE_SETUP -#line 556 "./util/configlexer.lex" +#line 558 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 558 "./util/configlexer.lex" +#line 560 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 303: -YY_RULE_SETUP -#line 562 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 304: -/* rule 304 can match eol */ -YY_RULE_SETUP -#line 563 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK case 305: YY_RULE_SETUP #line 564 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 306: +/* rule 306 can match eol */ YY_RULE_SETUP #line 565 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 307: +YY_RULE_SETUP +#line 566 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 308: +YY_RULE_SETUP +#line 567 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4866,27 +4886,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 570 "./util/configlexer.lex" +#line 572 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 307: +case 309: YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 308: -/* rule 308 can match eol */ +case 310: +/* rule 310 can match eol */ YY_RULE_SETUP -#line 575 "./util/configlexer.lex" +#line 577 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 309: +case 311: YY_RULE_SETUP -#line 577 "./util/configlexer.lex" +#line 579 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4896,7 +4916,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 583 "./util/configlexer.lex" +#line 585 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4908,33 +4928,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 310: +case 312: YY_RULE_SETUP -#line 594 "./util/configlexer.lex" +#line 596 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 311: +case 313: YY_RULE_SETUP -#line 598 "./util/configlexer.lex" +#line 600 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 312: +case 314: YY_RULE_SETUP -#line 602 "./util/configlexer.lex" +#line 604 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 313: +case 315: YY_RULE_SETUP -#line 606 "./util/configlexer.lex" +#line 608 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4935 "" +#line 4955 "" case YY_END_OF_BUFFER: { @@ -5229,7 +5249,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 >= 3084 ) + if ( yy_current_state >= 3096 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5257,11 +5277,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 >= 3084 ) + if ( yy_current_state >= 3096 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3083); + yy_is_jam = (yy_current_state == 3095); return yy_is_jam ? 0 : yy_current_state; } @@ -5900,6 +5920,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 606 "./util/configlexer.lex" +#line 608 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index a2f7333e0..6060610ac 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -416,6 +416,8 @@ control-key-file{COLON} { YDVAR(1, VAR_CONTROL_KEY_FILE) } control-cert-file{COLON} { YDVAR(1, VAR_CONTROL_CERT_FILE) } python-script{COLON} { YDVAR(1, VAR_PYTHON_SCRIPT) } python{COLON} { YDVAR(0, VAR_PYTHON) } +dynlib-file{COLON} { YDVAR(1, VAR_DYNLIB_FILE) } +dynlib{COLON} { YDVAR(0, VAR_DYNLIB) } domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) } minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) } rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) } diff --git a/util/configparser.c b/util/configparser.c index 940e46e30..fc0bfec54 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -419,7 +419,9 @@ extern int yydebug; VAR_RPZ_ACTION_OVERRIDE = 540, VAR_RPZ_CNAME_OVERRIDE = 541, VAR_RPZ_LOG = 542, - VAR_RPZ_LOG_NAME = 543 + VAR_RPZ_LOG_NAME = 543, + VAR_DYNLIB = 544, + VAR_DYNLIB_FILE = 545 }; #endif /* Tokens. */ @@ -709,6 +711,8 @@ extern int yydebug; #define VAR_RPZ_CNAME_OVERRIDE 541 #define VAR_RPZ_LOG 542 #define VAR_RPZ_LOG_NAME 543 +#define VAR_DYNLIB 544 +#define VAR_DYNLIB_FILE 545 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -718,7 +722,7 @@ union YYSTYPE char* str; -#line 722 "util/configparser.c" +#line 726 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -968,19 +972,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 611 +#define YYLAST 617 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 289 +#define YYNTOKENS 291 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 312 +#define YYNNTS 316 /* YYNRULES -- Number of rules. */ -#define YYNRULES 602 +#define YYNRULES 608 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 896 +#define YYNSTATES 903 #define YYUNDEFTOK 2 -#define YYMAXUTOK 543 +#define YYMAXUTOK 545 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1045,74 +1049,74 @@ static const yytype_uint16 yytranslate[] = 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288 + 285, 286, 287, 288, 289, 290 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 179, 179, 179, 180, 180, 181, 181, 182, 182, - 182, 183, 183, 184, 184, 185, 189, 194, 195, 196, - 196, 196, 197, 197, 198, 198, 198, 199, 199, 200, - 200, 200, 201, 201, 202, 202, 202, 203, 203, 203, - 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, - 209, 209, 210, 210, 211, 211, 212, 212, 212, 213, - 213, 213, 214, 214, 214, 215, 215, 216, 216, 217, - 217, 218, 218, 219, 219, 219, 220, 220, 221, 221, - 222, 222, 222, 223, 223, 224, 224, 225, 225, 226, - 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, - 231, 231, 232, 232, 232, 233, 233, 234, 234, 234, - 235, 235, 235, 236, 236, 236, 237, 237, 237, 237, - 238, 239, 239, 239, 240, 240, 240, 241, 241, 242, - 242, 243, 243, 243, 244, 244, 245, 245, 245, 246, - 246, 247, 247, 248, 248, 249, 250, 250, 251, 251, - 252, 252, 253, 254, 254, 255, 255, 256, 256, 257, - 257, 258, 258, 259, 259, 259, 260, 260, 261, 261, - 262, 262, 263, 263, 264, 264, 265, 265, 266, 266, - 266, 267, 267, 267, 268, 268, 268, 269, 269, 270, - 271, 271, 272, 272, 273, 273, 274, 274, 275, 275, - 275, 276, 276, 276, 277, 277, 277, 278, 278, 279, - 279, 280, 280, 281, 283, 295, 296, 297, 297, 297, - 297, 297, 298, 298, 300, 312, 313, 314, 314, 314, - 314, 315, 315, 317, 331, 332, 333, 333, 333, 333, - 334, 334, 334, 336, 353, 354, 355, 355, 355, 355, - 356, 356, 356, 357, 360, 379, 396, 404, 414, 422, - 439, 440, 441, 441, 441, 441, 441, 442, 442, 442, - 443, 443, 445, 454, 463, 474, 483, 492, 501, 512, - 521, 533, 547, 562, 573, 590, 607, 624, 641, 656, - 671, 684, 699, 708, 717, 726, 735, 744, 753, 762, - 771, 780, 789, 798, 807, 816, 825, 838, 847, 860, - 869, 878, 887, 894, 901, 910, 917, 926, 934, 941, - 948, 956, 965, 974, 983, 997, 1006, 1015, 1024, 1033, - 1042, 1051, 1058, 1065, 1091, 1099, 1106, 1113, 1120, 1127, - 1135, 1143, 1151, 1158, 1169, 1180, 1187, 1196, 1205, 1214, - 1221, 1228, 1236, 1244, 1254, 1264, 1274, 1288, 1296, 1309, - 1320, 1328, 1341, 1350, 1359, 1368, 1378, 1388, 1396, 1409, - 1418, 1426, 1435, 1443, 1456, 1465, 1475, 1482, 1492, 1502, - 1512, 1522, 1532, 1542, 1552, 1562, 1569, 1576, 1583, 1592, - 1601, 1610, 1619, 1626, 1636, 1656, 1663, 1681, 1694, 1707, - 1716, 1725, 1734, 1743, 1753, 1763, 1774, 1783, 1792, 1801, - 1810, 1819, 1828, 1841, 1854, 1863, 1870, 1879, 1888, 1897, - 1906, 1914, 1927, 1935, 1976, 1983, 1998, 2008, 2018, 2025, - 2032, 2039, 2048, 2056, 2070, 2091, 2112, 2124, 2136, 2148, - 2157, 2178, 2188, 2197, 2205, 2213, 2226, 2239, 2254, 2269, - 2278, 2287, 2293, 2302, 2311, 2321, 2331, 2344, 2357, 2369, - 2383, 2395, 2409, 2419, 2426, 2433, 2442, 2451, 2461, 2471, - 2481, 2488, 2495, 2504, 2513, 2523, 2533, 2540, 2547, 2554, - 2562, 2572, 2582, 2592, 2602, 2641, 2651, 2659, 2667, 2682, - 2691, 2696, 2697, 2698, 2698, 2698, 2699, 2699, 2699, 2700, - 2700, 2702, 2712, 2721, 2728, 2735, 2742, 2749, 2756, 2763, - 2768, 2769, 2770, 2770, 2771, 2771, 2771, 2772, 2773, 2773, - 2774, 2774, 2775, 2775, 2776, 2777, 2778, 2779, 2780, 2781, - 2783, 2792, 2799, 2806, 2815, 2822, 2829, 2836, 2843, 2852, - 2861, 2868, 2875, 2885, 2895, 2905, 2915, 2925, 2935, 2940, - 2941, 2942, 2944, 2950, 2960, 2967, 2976, 2984, 2989, 2990, - 2992, 2992, 2992, 2993, 2993, 2994, 2995, 2996, 2997, 2998, - 3000, 3010, 3019, 3026, 3035, 3042, 3051, 3059, 3072, 3080, - 3093, 3098, 3099, 3100, 3100, 3101, 3101, 3101, 3102, 3104, - 3116, 3128, 3140, 3155, 3168, 3181, 3192, 3197, 3198, 3199, - 3199, 3201, 3216 + 0, 180, 180, 180, 181, 181, 182, 182, 183, 183, + 183, 184, 184, 185, 185, 186, 186, 190, 195, 196, + 197, 197, 197, 198, 198, 199, 199, 199, 200, 200, + 201, 201, 201, 202, 202, 203, 203, 203, 204, 204, + 204, 205, 205, 206, 206, 207, 207, 208, 208, 209, + 209, 210, 210, 211, 211, 212, 212, 213, 213, 213, + 214, 214, 214, 215, 215, 215, 216, 216, 217, 217, + 218, 218, 219, 219, 220, 220, 220, 221, 221, 222, + 222, 223, 223, 223, 224, 224, 225, 225, 226, 226, + 227, 227, 227, 228, 228, 229, 229, 230, 230, 231, + 231, 232, 232, 233, 233, 233, 234, 234, 235, 235, + 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, + 238, 239, 240, 240, 240, 241, 241, 241, 242, 242, + 243, 243, 244, 244, 244, 245, 245, 246, 246, 246, + 247, 247, 248, 248, 249, 249, 250, 251, 251, 252, + 252, 253, 253, 254, 255, 255, 256, 256, 257, 257, + 258, 258, 259, 259, 260, 260, 260, 261, 261, 262, + 262, 263, 263, 264, 264, 265, 265, 266, 266, 267, + 267, 267, 268, 268, 268, 269, 269, 269, 270, 270, + 271, 272, 272, 273, 273, 274, 274, 275, 275, 276, + 276, 276, 277, 277, 277, 278, 278, 278, 279, 279, + 280, 280, 281, 281, 282, 284, 296, 297, 298, 298, + 298, 298, 298, 299, 299, 301, 313, 314, 315, 315, + 315, 315, 316, 316, 318, 332, 333, 334, 334, 334, + 334, 335, 335, 335, 337, 354, 355, 356, 356, 356, + 356, 357, 357, 357, 358, 361, 380, 397, 405, 415, + 423, 440, 441, 442, 442, 442, 442, 442, 443, 443, + 443, 444, 444, 446, 455, 464, 475, 484, 493, 502, + 513, 522, 534, 548, 563, 574, 591, 608, 625, 642, + 657, 672, 685, 700, 709, 718, 727, 736, 745, 754, + 763, 772, 781, 790, 799, 808, 817, 826, 839, 848, + 861, 870, 879, 888, 895, 902, 911, 918, 927, 935, + 942, 949, 957, 966, 975, 984, 998, 1007, 1016, 1025, + 1034, 1043, 1052, 1059, 1066, 1092, 1100, 1107, 1114, 1121, + 1128, 1136, 1144, 1152, 1159, 1170, 1181, 1188, 1197, 1206, + 1215, 1222, 1229, 1237, 1245, 1255, 1265, 1275, 1289, 1297, + 1310, 1321, 1329, 1342, 1351, 1360, 1369, 1379, 1389, 1397, + 1410, 1419, 1427, 1436, 1444, 1457, 1466, 1476, 1483, 1493, + 1503, 1513, 1523, 1533, 1543, 1553, 1563, 1570, 1577, 1584, + 1593, 1602, 1611, 1620, 1627, 1637, 1657, 1664, 1682, 1695, + 1708, 1717, 1726, 1735, 1744, 1754, 1764, 1775, 1784, 1793, + 1802, 1811, 1820, 1829, 1842, 1855, 1864, 1871, 1880, 1889, + 1898, 1907, 1915, 1928, 1936, 1977, 1984, 1999, 2009, 2019, + 2026, 2033, 2040, 2049, 2057, 2071, 2092, 2113, 2125, 2137, + 2149, 2158, 2179, 2189, 2198, 2206, 2214, 2227, 2240, 2255, + 2270, 2279, 2288, 2294, 2303, 2312, 2322, 2332, 2345, 2358, + 2370, 2384, 2396, 2410, 2420, 2427, 2434, 2443, 2452, 2462, + 2472, 2482, 2489, 2496, 2505, 2514, 2524, 2534, 2541, 2548, + 2555, 2563, 2573, 2583, 2593, 2603, 2642, 2652, 2660, 2668, + 2683, 2692, 2697, 2698, 2699, 2699, 2699, 2700, 2700, 2700, + 2701, 2701, 2703, 2713, 2722, 2729, 2736, 2743, 2750, 2757, + 2764, 2769, 2770, 2771, 2771, 2772, 2772, 2772, 2773, 2774, + 2774, 2775, 2775, 2776, 2776, 2777, 2778, 2779, 2780, 2781, + 2782, 2784, 2793, 2800, 2807, 2816, 2823, 2830, 2837, 2844, + 2853, 2862, 2869, 2876, 2886, 2896, 2906, 2916, 2926, 2936, + 2941, 2942, 2943, 2945, 2951, 2956, 2957, 2958, 2960, 2966, + 2976, 2983, 2992, 3000, 3005, 3006, 3008, 3008, 3008, 3009, + 3009, 3010, 3011, 3012, 3013, 3014, 3016, 3026, 3035, 3042, + 3051, 3058, 3067, 3075, 3088, 3096, 3109, 3114, 3115, 3116, + 3116, 3117, 3117, 3117, 3118, 3120, 3132, 3144, 3156, 3171, + 3184, 3197, 3208, 3213, 3214, 3215, 3215, 3217, 3232 }; #endif @@ -1226,14 +1230,15 @@ static const char *const yytname[] = "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", - "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "$accept", - "toplevelvars", "toplevelvar", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", "viewstart", - "contents_view", "content_view", "authstart", "contents_auth", - "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", - "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz", - "server_num_threads", "server_verbosity", "server_statistics_interval", + "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", + "VAR_DYNLIB", "VAR_DYNLIB_FILE", "$accept", "toplevelvars", + "toplevelvar", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", + "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", + "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", + "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -1338,10 +1343,10 @@ static const char *const yytname[] = "dt_dnstap_log_client_response_messages", "dt_dnstap_log_forwarder_query_messages", "dt_dnstap_log_forwarder_response_messages", "pythonstart", - "contents_py", "content_py", "py_script", - "server_disable_dnssec_lame_check", "server_log_identity", - "server_response_ip", "server_response_ip_data", "dnscstart", - "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", + "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl", + "content_dl", "dl_file", "server_disable_dnssec_lame_check", + "server_log_identity", "server_response_ip", "server_response_ip_data", + "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider", "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated", "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size", @@ -1388,14 +1393,15 @@ static const yytype_uint16 yytoknum[] = 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543 + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545 }; # endif -#define YYPACT_NINF -273 +#define YYPACT_NINF -281 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-273))) + (!!((Yystate) == (-281))) #define YYTABLE_NINF -1 @@ -1406,96 +1412,97 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -273, 0, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, 272, -42, - -37, -41, -7, -43, -30, -137, -106, -178, -173, -272, - 2, 3, 4, 25, 26, 28, 31, 32, 33, 34, - 36, 37, 38, 39, 40, 52, 53, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 87, 88, 91, 93, 94, 95, 96, 97, - 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 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, 202, 206, - 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, - 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, - 238, 244, 246, 247, 248, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 270, 271, 306, 307, 308, 309, - 313, 314, 315, 357, 358, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, 359, 360, 361, 362, 363, 364, 365, -273, -273, - -273, -273, -273, -273, -273, -273, 369, 373, 374, 399, - 400, 401, -273, -273, -273, -273, -273, -273, -273, 403, - 415, 416, 417, 418, 419, 420, -273, -273, -273, -273, - -273, -273, -273, -273, 421, 422, 423, 424, 425, 426, - 427, 428, -273, -273, -273, -273, -273, -273, -273, -273, - -273, 429, 430, 431, 432, 433, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, 473, 475, 491, - 492, 493, 494, 495, 496, -273, -273, -273, -273, -273, - -273, -273, -273, -273, 497, 498, 499, 500, 501, 508, - 509, 510, 511, 512, 513, 514, 516, 517, 518, 519, - 520, 521, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, 522, -273, -273, 525, 528, 531, 532, 541, 542, - 543, 545, 546, 547, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, 548, 549, 550, 551, 552, - 553, -273, -273, -273, -273, -273, -273, -273, 554, 555, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, 556, 557, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, 558, 559, 560, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, 561, 562, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, 563, 564, 565, 566, 567, - 568, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, 569, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, 570, -273, -273, 571, 572, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, 573, 574, 575, -273, -273, - -273, -273, -273, -273, -273, -273 + -281, 0, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 278, -42, -37, -41, -7, -43, -30, -137, -106, -280, + -178, -173, -272, 2, 3, 4, 25, 26, 28, 31, + 32, 33, 34, 36, 37, 38, 39, 40, 52, 53, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 87, 88, 91, 93, 94, + 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 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, 202, 206, 207, 208, 209, 210, 211, 212, 214, + 215, 216, 217, 220, 221, 223, 224, 225, 226, 227, + 228, 229, 230, 238, 244, 246, 247, 248, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 270, 271, 272, + 274, 275, 276, 277, 312, 313, 314, 315, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 319, 320, 321, 363, 364, 365, + 366, -281, -281, -281, -281, -281, -281, -281, -281, 367, + 368, 369, 370, 371, 375, -281, -281, -281, -281, -281, + -281, -281, 379, 380, 405, 406, 407, 409, 421, -281, + -281, -281, -281, -281, -281, -281, -281, 422, 423, 424, + 425, 426, 427, 428, 429, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 430, 431, 432, 433, 434, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 435, 436, 437, 438, 439, 479, 481, 497, -281, -281, + -281, -281, -281, -281, -281, -281, -281, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 514, 515, 516, + 517, 518, 519, 520, 522, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 523, -281, -281, 524, -281, -281, + 525, 526, 527, 528, 531, 534, 537, 538, 547, 548, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, 549, 551, 552, 553, 554, 555, -281, -281, -281, + -281, -281, -281, -281, 556, 557, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, 558, + 559, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, 560, 561, 562, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 563, 564, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, 565, 566, 567, 568, 569, 570, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, 571, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, 572, -281, + -281, 573, 574, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, 575, 576, 577, -281, -281, -281, -281, -281, + -281, -281, -281 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1503,10 +1510,11 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 214, 224, 490, 548, 509, 233, - 557, 580, 243, 596, 259, 3, 18, 216, 226, 235, - 245, 261, 492, 511, 550, 559, 582, 598, 4, 5, - 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, + 2, 0, 1, 17, 215, 225, 491, 549, 510, 234, + 563, 586, 244, 602, 260, 554, 3, 19, 217, 227, + 236, 246, 262, 493, 512, 551, 556, 565, 588, 604, + 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, + 11, 12, 13, 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, @@ -1525,148 +1533,148 @@ 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, 18, 20, + 21, 84, 87, 96, 185, 186, 22, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 35, 75, 23, + 88, 89, 46, 68, 83, 24, 25, 28, 29, 26, + 27, 30, 31, 32, 33, 34, 119, 197, 120, 122, + 123, 124, 199, 204, 200, 211, 212, 213, 214, 181, + 85, 74, 100, 117, 118, 209, 206, 121, 36, 37, + 38, 39, 40, 76, 90, 91, 106, 62, 72, 63, + 189, 190, 101, 56, 57, 188, 58, 59, 110, 114, + 128, 137, 164, 140, 210, 111, 69, 41, 42, 43, + 98, 129, 130, 131, 44, 45, 47, 48, 50, 51, + 49, 135, 141, 52, 53, 54, 60, 79, 115, 93, + 136, 86, 160, 94, 95, 112, 113, 207, 99, 55, + 77, 80, 61, 64, 102, 103, 78, 161, 104, 65, + 66, 67, 198, 116, 174, 175, 176, 177, 178, 179, + 187, 105, 73, 107, 108, 109, 162, 70, 71, 92, + 81, 82, 97, 125, 126, 208, 127, 132, 133, 134, + 165, 166, 168, 170, 171, 169, 172, 182, 138, 139, + 144, 145, 142, 143, 146, 147, 149, 148, 201, 203, + 202, 163, 173, 191, 193, 192, 194, 195, 196, 167, + 180, 183, 184, 205, 0, 0, 0, 0, 0, 0, + 0, 216, 218, 219, 220, 222, 223, 224, 221, 0, + 0, 0, 0, 0, 0, 226, 228, 229, 230, 231, + 232, 233, 0, 0, 0, 0, 0, 0, 0, 235, + 237, 238, 241, 242, 239, 243, 240, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 247, 248, 249, 250, + 254, 251, 252, 253, 0, 0, 0, 0, 0, 265, + 269, 270, 271, 272, 261, 263, 264, 266, 267, 268, + 0, 0, 0, 0, 0, 0, 0, 0, 492, 494, + 496, 495, 501, 497, 498, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 19, 20, 83, 86, - 95, 184, 185, 21, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 34, 74, 22, 87, 88, 45, - 67, 82, 23, 24, 27, 28, 25, 26, 29, 30, - 31, 32, 33, 118, 196, 119, 121, 122, 123, 198, - 203, 199, 210, 211, 212, 213, 180, 84, 73, 99, - 116, 117, 208, 205, 120, 35, 36, 37, 38, 39, - 75, 89, 90, 105, 61, 71, 62, 188, 189, 100, - 55, 56, 187, 57, 58, 109, 113, 127, 136, 163, - 139, 209, 110, 68, 40, 41, 42, 97, 128, 129, - 130, 43, 44, 46, 47, 49, 50, 48, 134, 140, - 51, 52, 53, 59, 78, 114, 92, 135, 85, 159, - 93, 94, 111, 112, 206, 98, 54, 76, 79, 60, - 63, 101, 102, 77, 160, 103, 64, 65, 66, 197, - 115, 173, 174, 175, 176, 177, 178, 186, 104, 72, - 106, 107, 108, 161, 69, 70, 91, 80, 81, 96, - 124, 125, 207, 126, 131, 132, 133, 164, 165, 167, - 169, 170, 168, 171, 181, 137, 138, 143, 144, 141, - 142, 145, 146, 148, 147, 200, 202, 201, 162, 172, - 190, 192, 191, 193, 194, 195, 166, 179, 182, 183, - 204, 0, 0, 0, 0, 0, 0, 0, 215, 217, - 218, 219, 221, 222, 223, 220, 0, 0, 0, 0, - 0, 0, 225, 227, 228, 229, 230, 231, 232, 0, - 0, 0, 0, 0, 0, 0, 234, 236, 237, 240, - 241, 238, 242, 239, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 246, 247, 248, 249, 253, 250, 251, - 252, 0, 0, 0, 0, 0, 264, 268, 269, 270, - 271, 260, 262, 263, 265, 266, 267, 0, 0, 0, - 0, 0, 0, 0, 0, 491, 493, 495, 494, 500, - 496, 497, 498, 499, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 511, 513, 514, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 0, 550, 552, 0, 555, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 510, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 0, 549, 551, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 558, 560, 561, 562, 564, 565, - 563, 566, 567, 568, 569, 0, 0, 0, 0, 0, - 0, 581, 583, 584, 585, 586, 587, 588, 0, 0, - 597, 599, 600, 273, 272, 279, 292, 290, 302, 298, - 299, 303, 300, 301, 304, 305, 306, 307, 308, 331, - 332, 333, 334, 335, 360, 361, 362, 367, 368, 295, - 369, 370, 373, 371, 372, 376, 377, 378, 392, 346, - 347, 349, 350, 379, 395, 340, 342, 396, 402, 403, - 404, 296, 359, 420, 421, 341, 415, 324, 291, 336, - 393, 399, 380, 0, 0, 424, 297, 274, 323, 384, - 275, 293, 294, 337, 338, 422, 382, 386, 387, 276, - 425, 363, 391, 325, 345, 397, 398, 401, 414, 339, - 418, 416, 417, 351, 358, 388, 389, 352, 353, 381, - 406, 326, 327, 330, 309, 311, 312, 313, 314, 315, - 426, 427, 429, 364, 365, 366, 374, 375, 430, 431, - 432, 0, 0, 0, 383, 354, 356, 553, 441, 445, - 443, 442, 446, 444, 0, 0, 449, 450, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 385, 400, - 419, 454, 455, 355, 433, 0, 0, 0, 0, 0, - 0, 407, 408, 409, 410, 411, 412, 413, 554, 348, - 343, 405, 322, 277, 278, 344, 456, 458, 457, 459, - 460, 461, 310, 317, 451, 453, 452, 316, 0, 329, - 390, 428, 328, 357, 318, 319, 321, 320, 462, 463, - 464, 468, 467, 465, 466, 469, 470, 471, 472, 474, - 473, 483, 0, 487, 488, 0, 0, 489, 475, 481, - 476, 477, 478, 480, 482, 479, 254, 255, 256, 257, - 258, 501, 503, 502, 505, 506, 507, 508, 504, 530, - 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, - 541, 542, 543, 544, 545, 546, 547, 552, 570, 571, - 572, 575, 573, 574, 576, 577, 578, 579, 589, 590, - 591, 592, 593, 594, 601, 602, 394, 423, 440, 555, - 556, 447, 448, 434, 435, 0, 0, 0, 439, 595, - 484, 485, 486, 438, 436, 437 + 564, 566, 567, 568, 570, 571, 569, 572, 573, 574, + 575, 0, 0, 0, 0, 0, 0, 587, 589, 590, + 591, 592, 593, 594, 0, 0, 603, 605, 606, 274, + 273, 280, 293, 291, 303, 299, 300, 304, 301, 302, + 305, 306, 307, 308, 309, 332, 333, 334, 335, 336, + 361, 362, 363, 368, 369, 296, 370, 371, 374, 372, + 373, 377, 378, 379, 393, 347, 348, 350, 351, 380, + 396, 341, 343, 397, 403, 404, 405, 297, 360, 421, + 422, 342, 416, 325, 292, 337, 394, 400, 381, 0, + 0, 425, 298, 275, 324, 385, 276, 294, 295, 338, + 339, 423, 383, 387, 388, 277, 426, 364, 392, 326, + 346, 398, 399, 402, 415, 340, 419, 417, 418, 352, + 359, 389, 390, 353, 354, 382, 407, 327, 328, 331, + 310, 312, 313, 314, 315, 316, 427, 428, 430, 365, + 366, 367, 375, 376, 431, 432, 433, 0, 0, 0, + 384, 355, 357, 559, 442, 446, 444, 443, 447, 445, + 0, 0, 450, 451, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 386, 401, 420, 455, 456, 356, + 434, 0, 0, 0, 0, 0, 0, 408, 409, 410, + 411, 412, 413, 414, 560, 349, 344, 406, 323, 278, + 279, 345, 457, 459, 458, 460, 461, 462, 311, 318, + 452, 454, 453, 317, 0, 330, 391, 429, 329, 358, + 319, 320, 322, 321, 463, 464, 465, 469, 468, 466, + 467, 470, 471, 472, 473, 475, 474, 484, 0, 488, + 489, 0, 0, 490, 476, 482, 477, 478, 479, 481, + 483, 480, 255, 256, 257, 258, 259, 502, 504, 503, + 506, 507, 508, 509, 505, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 553, 558, 576, 577, 578, 581, 579, + 580, 582, 583, 584, 585, 595, 596, 597, 598, 599, + 600, 607, 608, 395, 424, 441, 561, 562, 448, 449, + 435, 436, 0, 0, 0, 440, 601, 485, 486, 487, + 439, 437, 438 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -23, - 249, 576, 577, 578, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, - -273, -273 + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, 578, + 579, 580, 581, 582, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 15, 16, 28, 235, 17, 29, 438, 18, - 30, 452, 19, 31, 466, 20, 32, 482, 496, 497, - 498, 499, 500, 21, 33, 501, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 439, 440, 441, 442, - 443, 444, 445, 453, 454, 455, 456, 457, 458, 483, - 484, 485, 486, 487, 488, 489, 490, 467, 468, 469, - 470, 471, 472, 473, 22, 34, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 23, 35, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 558, 559, 560, 24, 36, 562, 563, - 426, 427, 428, 429, 25, 37, 574, 575, 576, 577, - 578, 579, 580, 581, 582, 583, 584, 26, 38, 591, - 592, 593, 594, 595, 596, 597, 430, 27, 39, 600, - 601, 602 + -1, 1, 16, 17, 30, 238, 18, 31, 441, 19, + 32, 455, 20, 33, 469, 21, 34, 485, 499, 500, + 501, 502, 503, 22, 35, 504, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 442, 443, 444, 445, + 446, 447, 448, 456, 457, 458, 459, 460, 461, 486, + 487, 488, 489, 490, 491, 492, 493, 470, 471, 472, + 473, 474, 475, 476, 23, 36, 518, 519, 520, 521, + 522, 523, 524, 525, 526, 24, 37, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 25, 38, 565, 566, + 26, 39, 568, 569, 429, 430, 431, 432, 27, 40, + 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 28, 41, 597, 598, 599, 600, 601, 602, 603, + 433, 29, 42, 606, 607, 608 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1674,74 +1682,74 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 474, 431, 459, 432, 433, 561, 446, 598, 599, - 502, 3, 603, 604, 605, 447, 448, 524, 525, 526, - 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 539, 540, 541, 606, 607, 474, 608, 460, - 461, 609, 610, 611, 612, 4, 613, 614, 615, 616, - 617, 5, 564, 565, 566, 567, 568, 569, 570, 571, - 572, 573, 618, 619, 462, 434, 507, 508, 509, 510, - 511, 512, 513, 514, 585, 586, 587, 588, 589, 590, - 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, - 630, 631, 632, 633, 634, 6, 435, 635, 636, 436, - 449, 637, 450, 638, 639, 640, 641, 642, 643, 644, - 645, 7, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 463, 464, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 684, 8, 685, 686, 687, 688, 689, 690, - 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 465, 703, 704, 705, 706, 707, 708, 709, - 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, - 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, - 740, 9, 741, 476, 477, 478, 742, 743, 744, 745, - 746, 747, 748, 481, 749, 750, 751, 752, 437, 10, - 753, 754, 451, 755, 756, 757, 758, 759, 760, 761, - 762, 491, 492, 493, 494, 495, 11, 475, 763, 476, - 477, 478, 479, 480, 764, 12, 765, 766, 767, 481, - 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, - 778, 779, 780, 781, 782, 783, 784, 785, 786, 13, - 787, 788, 503, 14, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 789, 790, 791, 792, - 72, 73, 74, 793, 794, 795, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 796, 797, 798, - 799, 800, 801, 802, 803, 804, 116, 117, 118, 805, - 119, 120, 121, 806, 807, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 808, - 809, 810, 146, 811, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, - 827, 828, 829, 830, 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, 831, 197, 832, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 833, 834, 835, 836, 837, 838, 839, 840, 841, - 842, 843, 213, 214, 215, 216, 217, 218, 844, 845, - 846, 847, 848, 849, 850, 219, 851, 852, 853, 854, - 855, 856, 857, 220, 221, 858, 222, 223, 859, 224, - 225, 860, 861, 226, 227, 228, 229, 230, 231, 232, - 233, 862, 863, 864, 234, 865, 866, 867, 868, 869, - 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, - 890, 891, 892, 893, 894, 895, 0, 0, 0, 0, + 2, 477, 434, 462, 435, 436, 564, 449, 604, 605, + 567, 3, 609, 610, 611, 450, 451, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 612, 613, 477, 614, 463, + 464, 615, 616, 617, 618, 4, 619, 620, 621, 622, + 623, 5, 570, 571, 572, 573, 574, 575, 576, 577, + 578, 579, 624, 625, 465, 437, 510, 511, 512, 513, + 514, 515, 516, 517, 591, 592, 593, 594, 595, 596, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 6, 438, 641, 642, 439, + 452, 643, 453, 644, 645, 646, 647, 648, 649, 650, + 651, 7, 652, 653, 654, 655, 656, 657, 658, 659, + 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, + 670, 671, 466, 467, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 8, 691, 692, 693, 694, 695, 696, + 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, + 707, 708, 468, 709, 710, 711, 712, 713, 714, 715, + 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, + 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, + 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 9, 747, 479, 480, 481, 748, 749, 750, 751, + 752, 753, 754, 484, 755, 756, 757, 758, 440, 10, + 759, 760, 454, 761, 762, 763, 764, 765, 766, 767, + 768, 494, 495, 496, 497, 498, 11, 478, 769, 479, + 480, 481, 482, 483, 770, 12, 771, 772, 773, 484, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, + 784, 785, 786, 787, 788, 789, 790, 791, 792, 13, + 793, 794, 795, 14, 796, 797, 798, 799, 0, 15, + 43, 44, 45, 46, 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, 800, 801, 802, 803, 75, 76, 77, 804, + 805, 806, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 119, 120, 121, 816, 122, 123, 124, 817, + 818, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 819, 820, 821, 149, 822, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 823, 824, 825, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, + 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, 842, + 200, 843, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 853, 854, 216, 217, + 218, 219, 220, 221, 855, 856, 857, 858, 859, 860, + 861, 222, 862, 863, 864, 865, 866, 867, 868, 223, + 224, 869, 225, 226, 870, 227, 228, 871, 872, 229, + 230, 231, 232, 233, 234, 235, 236, 873, 874, 875, + 237, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, - 505, 506 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 505, 506, 507, 508, 509 }; static const yytype_int16 yycheck[] = { 0, 44, 44, 44, 46, 47, 112, 44, 280, 281, - 33, 11, 10, 10, 10, 52, 53, 154, 155, 156, + 290, 11, 10, 10, 10, 52, 53, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 10, 10, 44, 10, 80, 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, @@ -1768,107 +1776,107 @@ static const yytype_int16 yycheck[] = 257, 258, 259, 260, 10, 255, 10, 10, 10, 266, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 279, - 10, 10, 33, 283, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 10, 10, 10, 10, - 48, 49, 50, 10, 10, 10, 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, 91, 92, 93, 94, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 104, 105, 106, 10, - 108, 109, 110, 10, 10, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 10, - 10, 10, 140, 10, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 10, 10, 10, 10, 10, + 10, 10, 10, 283, 10, 10, 10, 10, -1, 289, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 10, 10, 10, 10, 48, 49, 50, 10, + 10, 10, 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, 91, + 92, 93, 94, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 104, 105, 106, 10, 108, 109, 110, 10, + 10, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 10, 10, 10, 140, 10, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 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, 10, 212, 10, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 240, 241, 242, 243, 244, 245, 10, 10, - 10, 10, 10, 10, 10, 253, 10, 10, 10, 10, - 10, 10, 10, 261, 262, 10, 264, 265, 10, 267, - 268, 10, 10, 271, 272, 273, 274, 275, 276, 277, - 278, 10, 10, 10, 282, 10, 10, 10, 10, 10, + 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, 10, + 212, 10, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 240, 241, + 242, 243, 244, 245, 10, 10, 10, 10, 10, 10, + 10, 253, 10, 10, 10, 10, 10, 10, 10, 261, + 262, 10, 264, 265, 10, 267, 268, 10, 10, 271, + 272, 273, 274, 275, 276, 277, 278, 10, 10, 10, + 282, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, - 33, 33 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 35, 35, 35, 35, 35 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 290, 0, 11, 45, 51, 95, 111, 153, 211, - 229, 246, 255, 279, 283, 291, 292, 295, 298, 301, - 304, 312, 533, 544, 565, 573, 586, 596, 293, 296, - 299, 302, 305, 313, 534, 545, 566, 574, 587, 597, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 48, 49, 50, 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, 91, 92, 93, 94, 104, 105, 106, 108, - 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 140, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 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, 212, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 240, 241, 242, 243, 244, 245, 253, - 261, 262, 264, 265, 267, 268, 271, 272, 273, 274, - 275, 276, 277, 278, 282, 294, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 569, 570, 571, 572, - 595, 44, 46, 47, 107, 138, 141, 270, 297, 505, - 506, 507, 508, 509, 510, 511, 44, 52, 53, 137, - 139, 269, 300, 512, 513, 514, 515, 516, 517, 44, - 80, 81, 105, 173, 174, 213, 303, 526, 527, 528, - 529, 530, 531, 532, 44, 254, 256, 257, 258, 259, - 260, 266, 306, 518, 519, 520, 521, 522, 523, 524, - 525, 284, 285, 286, 287, 288, 307, 308, 309, 310, - 311, 314, 518, 519, 520, 521, 522, 96, 97, 98, - 99, 100, 101, 102, 103, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 546, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, - 564, 112, 567, 568, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 575, 576, 577, 578, 579, 580, - 581, 582, 583, 584, 585, 247, 248, 249, 250, 251, - 252, 588, 589, 590, 591, 592, 593, 594, 280, 281, - 598, 599, 600, 10, 10, 10, 10, 10, 10, 10, + 0, 292, 0, 11, 45, 51, 95, 111, 153, 211, + 229, 246, 255, 279, 283, 289, 293, 294, 297, 300, + 303, 306, 314, 535, 546, 567, 571, 579, 592, 602, + 295, 298, 301, 304, 307, 315, 536, 547, 568, 572, + 580, 593, 603, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 48, 49, 50, 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, 91, 92, 93, 94, 104, + 105, 106, 108, 109, 110, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 140, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 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, + 212, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 240, 241, 242, 243, + 244, 245, 253, 261, 262, 264, 265, 267, 268, 271, + 272, 273, 274, 275, 276, 277, 278, 282, 296, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 575, + 576, 577, 578, 601, 44, 46, 47, 107, 138, 141, + 270, 299, 507, 508, 509, 510, 511, 512, 513, 44, + 52, 53, 137, 139, 269, 302, 514, 515, 516, 517, + 518, 519, 44, 80, 81, 105, 173, 174, 213, 305, + 528, 529, 530, 531, 532, 533, 534, 44, 254, 256, + 257, 258, 259, 260, 266, 308, 520, 521, 522, 523, + 524, 525, 526, 527, 284, 285, 286, 287, 288, 309, + 310, 311, 312, 313, 316, 520, 521, 522, 523, 524, + 96, 97, 98, 99, 100, 101, 102, 103, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 564, 565, 566, 112, 569, 570, 290, 573, 574, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, + 591, 247, 248, 249, 250, 251, 252, 594, 595, 596, + 597, 598, 599, 600, 280, 281, 604, 605, 606, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1897,80 +1905,81 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 289, 290, 290, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 292, 293, 293, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 295, 296, 296, 297, 297, 297, - 297, 297, 297, 297, 298, 299, 299, 300, 300, 300, - 300, 300, 300, 301, 302, 302, 303, 303, 303, 303, - 303, 303, 303, 304, 305, 305, 306, 306, 306, 306, - 306, 306, 306, 306, 307, 308, 309, 310, 311, 312, - 313, 313, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, - 533, 534, 534, 535, 535, 535, 535, 535, 535, 535, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 545, 546, 546, 546, 546, 546, 546, 546, 546, - 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, - 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, - 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, - 566, 567, 568, 569, 570, 571, 572, 573, 574, 574, - 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, - 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, - 586, 587, 587, 588, 588, 588, 588, 588, 588, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 597, 598, - 598, 599, 600 + 0, 291, 292, 292, 293, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 294, 295, 295, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 297, 298, 298, 299, 299, + 299, 299, 299, 299, 299, 300, 301, 301, 302, 302, + 302, 302, 302, 302, 303, 304, 304, 305, 305, 305, + 305, 305, 305, 305, 306, 307, 307, 308, 308, 308, + 308, 308, 308, 308, 308, 309, 310, 311, 312, 313, + 314, 315, 315, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 536, 537, 537, 537, 537, 537, 537, + 537, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 547, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, + 568, 568, 569, 570, 571, 572, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 580, 581, 581, 581, 581, + 581, 581, 581, 581, 581, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 593, 594, + 594, 594, 594, 594, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 603, 604, 604, 605, 606 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1990,13 +1999,13 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2008,28 +2017,28 @@ 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 4, 4, 4, 3, - 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, + 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, + 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, + 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, - 1, 2, 2 + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 2, 1, 2, 0, 1, 2, 2, + 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 3, 1, 2, 0, 1, 1, 2, 2 }; @@ -2713,16 +2722,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: -#line 190 "./util/configparser.y" + case 17: +#line 191 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 2722 "util/configparser.c" +#line 2731 "util/configparser.c" break; - case 214: -#line 284 "./util/configparser.y" + case 215: +#line 285 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2733,11 +2742,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2737 "util/configparser.c" +#line 2746 "util/configparser.c" break; - case 224: -#line 301 "./util/configparser.y" + case 225: +#line 302 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2748,11 +2757,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2752 "util/configparser.c" +#line 2761 "util/configparser.c" break; - case 233: -#line 318 "./util/configparser.y" + case 234: +#line 319 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2765,11 +2774,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2769 "util/configparser.c" +#line 2778 "util/configparser.c" break; - case 243: -#line 337 "./util/configparser.y" + case 244: +#line 338 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2785,11 +2794,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2789 "util/configparser.c" +#line 2798 "util/configparser.c" break; - case 254: -#line 361 "./util/configparser.y" + case 255: +#line 362 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2806,11 +2815,11 @@ yyreduce: } } -#line 2810 "util/configparser.c" +#line 2819 "util/configparser.c" break; - case 255: -#line 380 "./util/configparser.y" + case 256: +#line 381 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2825,21 +2834,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2829 "util/configparser.c" +#line 2838 "util/configparser.c" break; - case 256: -#line 397 "./util/configparser.y" + case 257: +#line 398 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2839 "util/configparser.c" +#line 2848 "util/configparser.c" break; - case 257: -#line 405 "./util/configparser.y" + case 258: +#line 406 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2847,21 +2856,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2851 "util/configparser.c" +#line 2860 "util/configparser.c" break; - case 258: -#line 415 "./util/configparser.y" + case 259: +#line 416 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2861 "util/configparser.c" +#line 2870 "util/configparser.c" break; - case 259: -#line 423 "./util/configparser.y" + case 260: +#line 424 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2877,11 +2886,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2881 "util/configparser.c" +#line 2890 "util/configparser.c" break; - case 272: -#line 446 "./util/configparser.y" + case 273: +#line 447 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2889,11 +2898,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2893 "util/configparser.c" +#line 2902 "util/configparser.c" break; - case 273: -#line 455 "./util/configparser.y" + case 274: +#line 456 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2901,11 +2910,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2905 "util/configparser.c" +#line 2914 "util/configparser.c" break; - case 274: -#line 464 "./util/configparser.y" + case 275: +#line 465 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2915,11 +2924,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2919 "util/configparser.c" +#line 2928 "util/configparser.c" break; - case 275: -#line 475 "./util/configparser.y" + case 276: +#line 476 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2927,11 +2936,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2931 "util/configparser.c" +#line 2940 "util/configparser.c" break; - case 276: -#line 484 "./util/configparser.y" + case 277: +#line 485 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2939,11 +2948,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2943 "util/configparser.c" +#line 2952 "util/configparser.c" break; - case 277: -#line 493 "./util/configparser.y" + case 278: +#line 494 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2951,11 +2960,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2955 "util/configparser.c" +#line 2964 "util/configparser.c" break; - case 278: -#line 502 "./util/configparser.y" + case 279: +#line 503 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2965,11 +2974,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2969 "util/configparser.c" +#line 2978 "util/configparser.c" break; - case 279: -#line 513 "./util/configparser.y" + case 280: +#line 514 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2977,11 +2986,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2981 "util/configparser.c" +#line 2990 "util/configparser.c" break; - case 280: -#line 522 "./util/configparser.y" + case 281: +#line 523 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2992,11 +3001,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2996 "util/configparser.c" +#line 3005 "util/configparser.c" break; - case 281: -#line 534 "./util/configparser.y" + case 282: +#line 535 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3008,11 +3017,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3012 "util/configparser.c" +#line 3021 "util/configparser.c" break; - case 282: -#line 548 "./util/configparser.y" + case 283: +#line 549 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3026,11 +3035,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3030 "util/configparser.c" +#line 3039 "util/configparser.c" break; - case 283: -#line 563 "./util/configparser.y" + case 284: +#line 564 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3040,11 +3049,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3044 "util/configparser.c" +#line 3053 "util/configparser.c" break; - case 284: -#line 574 "./util/configparser.y" + case 285: +#line 575 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3060,11 +3069,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3064 "util/configparser.c" +#line 3073 "util/configparser.c" break; - case 285: -#line 591 "./util/configparser.y" + case 286: +#line 592 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3080,11 +3089,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3084 "util/configparser.c" +#line 3093 "util/configparser.c" break; - case 286: -#line 608 "./util/configparser.y" + case 287: +#line 609 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3100,11 +3109,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3104 "util/configparser.c" +#line 3113 "util/configparser.c" break; - case 287: -#line 625 "./util/configparser.y" + case 288: +#line 626 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3120,11 +3129,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3124 "util/configparser.c" +#line 3133 "util/configparser.c" break; - case 288: -#line 642 "./util/configparser.y" + case 289: +#line 643 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3138,11 +3147,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3142 "util/configparser.c" +#line 3151 "util/configparser.c" break; - case 289: -#line 657 "./util/configparser.y" + case 290: +#line 658 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3156,11 +3165,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3160 "util/configparser.c" +#line 3169 "util/configparser.c" break; - case 290: -#line 672 "./util/configparser.y" + case 291: +#line 673 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3172,11 +3181,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3176 "util/configparser.c" +#line 3185 "util/configparser.c" break; - case 291: -#line 685 "./util/configparser.y" + case 292: +#line 686 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3190,11 +3199,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3194 "util/configparser.c" +#line 3203 "util/configparser.c" break; - case 292: -#line 700 "./util/configparser.y" + case 293: +#line 701 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3202,11 +3211,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3206 "util/configparser.c" +#line 3215 "util/configparser.c" break; - case 293: -#line 709 "./util/configparser.y" + case 294: +#line 710 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3214,11 +3223,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3218 "util/configparser.c" +#line 3227 "util/configparser.c" break; - case 294: -#line 718 "./util/configparser.y" + case 295: +#line 719 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3226,11 +3235,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3230 "util/configparser.c" +#line 3239 "util/configparser.c" break; - case 295: -#line 727 "./util/configparser.y" + case 296: +#line 728 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3238,11 +3247,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3242 "util/configparser.c" +#line 3251 "util/configparser.c" break; - case 296: -#line 736 "./util/configparser.y" + case 297: +#line 737 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3250,11 +3259,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3254 "util/configparser.c" +#line 3263 "util/configparser.c" break; - case 297: -#line 745 "./util/configparser.y" + case 298: +#line 746 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3262,11 +3271,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3266 "util/configparser.c" +#line 3275 "util/configparser.c" break; - case 298: -#line 754 "./util/configparser.y" + case 299: +#line 755 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3274,11 +3283,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3278 "util/configparser.c" +#line 3287 "util/configparser.c" break; - case 299: -#line 763 "./util/configparser.y" + case 300: +#line 764 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3286,11 +3295,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3290 "util/configparser.c" +#line 3299 "util/configparser.c" break; - case 300: -#line 772 "./util/configparser.y" + case 301: +#line 773 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3298,11 +3307,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3302 "util/configparser.c" +#line 3311 "util/configparser.c" break; - case 301: -#line 781 "./util/configparser.y" + case 302: +#line 782 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3310,11 +3319,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3314 "util/configparser.c" +#line 3323 "util/configparser.c" break; - case 302: -#line 790 "./util/configparser.y" + case 303: +#line 791 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3322,11 +3331,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3326 "util/configparser.c" +#line 3335 "util/configparser.c" break; - case 303: -#line 799 "./util/configparser.y" + case 304: +#line 800 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3334,11 +3343,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3338 "util/configparser.c" +#line 3347 "util/configparser.c" break; - case 304: -#line 808 "./util/configparser.y" + case 305: +#line 809 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3346,11 +3355,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3350 "util/configparser.c" +#line 3359 "util/configparser.c" break; - case 305: -#line 817 "./util/configparser.y" + case 306: +#line 818 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3358,11 +3367,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3362 "util/configparser.c" +#line 3371 "util/configparser.c" break; - case 306: -#line 826 "./util/configparser.y" + case 307: +#line 827 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3374,11 +3383,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3378 "util/configparser.c" +#line 3387 "util/configparser.c" break; - case 307: -#line 839 "./util/configparser.y" + case 308: +#line 840 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3386,11 +3395,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3390 "util/configparser.c" +#line 3399 "util/configparser.c" break; - case 308: -#line 848 "./util/configparser.y" + case 309: +#line 849 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3402,11 +3411,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3406 "util/configparser.c" +#line 3415 "util/configparser.c" break; - case 309: -#line 861 "./util/configparser.y" + case 310: +#line 862 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3414,11 +3423,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3418 "util/configparser.c" +#line 3427 "util/configparser.c" break; - case 310: -#line 870 "./util/configparser.y" + case 311: +#line 871 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3426,11 +3435,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3430 "util/configparser.c" +#line 3439 "util/configparser.c" break; - case 311: -#line 879 "./util/configparser.y" + case 312: +#line 880 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3438,31 +3447,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3442 "util/configparser.c" +#line 3451 "util/configparser.c" break; - case 312: -#line 888 "./util/configparser.y" + case 313: +#line 889 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3452 "util/configparser.c" +#line 3461 "util/configparser.c" break; - case 313: -#line 895 "./util/configparser.y" + case 314: +#line 896 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3462 "util/configparser.c" +#line 3471 "util/configparser.c" break; - case 314: -#line 902 "./util/configparser.y" + case 315: +#line 903 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3470,21 +3479,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3474 "util/configparser.c" +#line 3483 "util/configparser.c" break; - case 315: -#line 911 "./util/configparser.y" + case 316: +#line 912 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3484 "util/configparser.c" +#line 3493 "util/configparser.c" break; - case 316: -#line 918 "./util/configparser.y" + case 317: +#line 919 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3492,53 +3501,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3496 "util/configparser.c" +#line 3505 "util/configparser.c" break; - case 317: -#line 927 "./util/configparser.y" + case 318: +#line 928 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3507 "util/configparser.c" +#line 3516 "util/configparser.c" break; - case 318: -#line 935 "./util/configparser.y" + case 319: +#line 936 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3517 "util/configparser.c" +#line 3526 "util/configparser.c" break; - case 319: -#line 942 "./util/configparser.y" + case 320: +#line 943 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3527 "util/configparser.c" +#line 3536 "util/configparser.c" break; - case 320: -#line 949 "./util/configparser.y" + case 321: +#line 950 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3538 "util/configparser.c" +#line 3547 "util/configparser.c" break; - case 321: -#line 957 "./util/configparser.y" + case 322: +#line 958 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3546,11 +3555,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3550 "util/configparser.c" +#line 3559 "util/configparser.c" break; - case 322: -#line 966 "./util/configparser.y" + case 323: +#line 967 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3558,11 +3567,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3562 "util/configparser.c" +#line 3571 "util/configparser.c" break; - case 323: -#line 975 "./util/configparser.y" + case 324: +#line 976 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3570,11 +3579,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3574 "util/configparser.c" +#line 3583 "util/configparser.c" break; - case 324: -#line 984 "./util/configparser.y" + case 325: +#line 985 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3587,11 +3596,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3591 "util/configparser.c" +#line 3600 "util/configparser.c" break; - case 325: -#line 998 "./util/configparser.y" + case 326: +#line 999 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3599,11 +3608,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3603 "util/configparser.c" +#line 3612 "util/configparser.c" break; - case 326: -#line 1007 "./util/configparser.y" + case 327: +#line 1008 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3611,11 +3620,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3615 "util/configparser.c" +#line 3624 "util/configparser.c" break; - case 327: -#line 1016 "./util/configparser.y" + case 328: +#line 1017 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3623,11 +3632,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3627 "util/configparser.c" +#line 3636 "util/configparser.c" break; - case 328: -#line 1025 "./util/configparser.y" + case 329: +#line 1026 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3635,11 +3644,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3639 "util/configparser.c" +#line 3648 "util/configparser.c" break; - case 329: -#line 1034 "./util/configparser.y" + case 330: +#line 1035 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3647,11 +3656,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3651 "util/configparser.c" +#line 3660 "util/configparser.c" break; - case 330: -#line 1043 "./util/configparser.y" + case 331: +#line 1044 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3659,31 +3668,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3663 "util/configparser.c" +#line 3672 "util/configparser.c" break; - case 331: -#line 1052 "./util/configparser.y" + case 332: +#line 1053 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3673 "util/configparser.c" +#line 3682 "util/configparser.c" break; - case 332: -#line 1059 "./util/configparser.y" + case 333: +#line 1060 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3683 "util/configparser.c" +#line 3692 "util/configparser.c" break; - case 333: -#line 1066 "./util/configparser.y" + case 334: +#line 1067 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3708,105 +3717,105 @@ yyreduce: } } } -#line 3712 "util/configparser.c" +#line 3721 "util/configparser.c" break; - case 334: -#line 1092 "./util/configparser.y" + case 335: +#line 1093 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3723 "util/configparser.c" +#line 3732 "util/configparser.c" break; - case 335: -#line 1100 "./util/configparser.y" + case 336: +#line 1101 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3733 "util/configparser.c" +#line 3742 "util/configparser.c" break; - case 336: -#line 1107 "./util/configparser.y" + case 337: +#line 1108 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3743 "util/configparser.c" +#line 3752 "util/configparser.c" break; - case 337: -#line 1114 "./util/configparser.y" + case 338: +#line 1115 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3753 "util/configparser.c" +#line 3762 "util/configparser.c" break; - case 338: -#line 1121 "./util/configparser.y" + case 339: +#line 1122 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3763 "util/configparser.c" +#line 3772 "util/configparser.c" break; - case 339: -#line 1128 "./util/configparser.y" + case 340: +#line 1129 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3774 "util/configparser.c" +#line 3783 "util/configparser.c" break; - case 340: -#line 1136 "./util/configparser.y" + case 341: +#line 1137 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3785 "util/configparser.c" +#line 3794 "util/configparser.c" break; - case 341: -#line 1144 "./util/configparser.y" + case 342: +#line 1145 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3796 "util/configparser.c" +#line 3805 "util/configparser.c" break; - case 342: -#line 1152 "./util/configparser.y" + case 343: +#line 1153 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3806 "util/configparser.c" +#line 3815 "util/configparser.c" break; - case 343: -#line 1159 "./util/configparser.y" + case 344: +#line 1160 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3816,11 +3825,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3820 "util/configparser.c" +#line 3829 "util/configparser.c" break; - case 344: -#line 1170 "./util/configparser.y" + case 345: +#line 1171 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3830,21 +3839,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3834 "util/configparser.c" +#line 3843 "util/configparser.c" break; - case 345: -#line 1181 "./util/configparser.y" + case 346: +#line 1182 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3844 "util/configparser.c" +#line 3853 "util/configparser.c" break; - case 346: -#line 1188 "./util/configparser.y" + case 347: +#line 1189 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3852,11 +3861,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3856 "util/configparser.c" +#line 3865 "util/configparser.c" break; - case 347: -#line 1197 "./util/configparser.y" + case 348: +#line 1198 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3864,11 +3873,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3868 "util/configparser.c" +#line 3877 "util/configparser.c" break; - case 348: -#line 1206 "./util/configparser.y" + case 349: +#line 1207 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3876,53 +3885,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3880 "util/configparser.c" +#line 3889 "util/configparser.c" break; - case 349: -#line 1215 "./util/configparser.y" + case 350: +#line 1216 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3890 "util/configparser.c" +#line 3899 "util/configparser.c" break; - case 350: -#line 1222 "./util/configparser.y" + case 351: +#line 1223 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3900 "util/configparser.c" +#line 3909 "util/configparser.c" break; - case 351: -#line 1229 "./util/configparser.y" + case 352: +#line 1230 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3911 "util/configparser.c" +#line 3920 "util/configparser.c" break; - case 352: -#line 1237 "./util/configparser.y" + case 353: +#line 1238 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3922 "util/configparser.c" +#line 3931 "util/configparser.c" break; - case 353: -#line 1245 "./util/configparser.y" + case 354: +#line 1246 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3931,11 +3940,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3935 "util/configparser.c" +#line 3944 "util/configparser.c" break; - case 354: -#line 1255 "./util/configparser.y" + case 355: +#line 1256 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3944,11 +3953,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3948 "util/configparser.c" +#line 3957 "util/configparser.c" break; - case 355: -#line 1265 "./util/configparser.y" + case 356: +#line 1266 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3957,11 +3966,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3961 "util/configparser.c" +#line 3970 "util/configparser.c" break; - case 356: -#line 1275 "./util/configparser.y" + case 357: +#line 1276 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3974,22 +3983,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3978 "util/configparser.c" +#line 3987 "util/configparser.c" break; - case 357: -#line 1289 "./util/configparser.y" + case 358: +#line 1290 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3989 "util/configparser.c" +#line 3998 "util/configparser.c" break; - case 358: -#line 1297 "./util/configparser.y" + case 359: +#line 1298 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4001,11 +4010,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4005 "util/configparser.c" +#line 4014 "util/configparser.c" break; - case 359: -#line 1310 "./util/configparser.y" + case 360: +#line 1311 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4015,22 +4024,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4019 "util/configparser.c" +#line 4028 "util/configparser.c" break; - case 360: -#line 1321 "./util/configparser.y" + case 361: +#line 1322 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4030 "util/configparser.c" +#line 4039 "util/configparser.c" break; - case 361: -#line 1329 "./util/configparser.y" + case 362: +#line 1330 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4042,11 +4051,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4046 "util/configparser.c" +#line 4055 "util/configparser.c" break; - case 362: -#line 1342 "./util/configparser.y" + case 363: +#line 1343 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4054,11 +4063,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4058 "util/configparser.c" +#line 4067 "util/configparser.c" break; - case 363: -#line 1351 "./util/configparser.y" + case 364: +#line 1352 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4066,11 +4075,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4070 "util/configparser.c" +#line 4079 "util/configparser.c" break; - case 364: -#line 1360 "./util/configparser.y" + case 365: +#line 1361 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4078,11 +4087,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4082 "util/configparser.c" +#line 4091 "util/configparser.c" break; - case 365: -#line 1369 "./util/configparser.y" + case 366: +#line 1370 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4091,11 +4100,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4095 "util/configparser.c" +#line 4104 "util/configparser.c" break; - case 366: -#line 1379 "./util/configparser.y" + case 367: +#line 1380 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4104,22 +4113,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4108 "util/configparser.c" +#line 4117 "util/configparser.c" break; - case 367: -#line 1389 "./util/configparser.y" + case 368: +#line 1390 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4119 "util/configparser.c" +#line 4128 "util/configparser.c" break; - case 368: -#line 1397 "./util/configparser.y" + case 369: +#line 1398 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4131,11 +4140,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4135 "util/configparser.c" +#line 4144 "util/configparser.c" break; - case 369: -#line 1410 "./util/configparser.y" + case 370: +#line 1411 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4143,22 +4152,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4147 "util/configparser.c" +#line 4156 "util/configparser.c" break; - case 370: -#line 1419 "./util/configparser.y" + case 371: +#line 1420 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4158 "util/configparser.c" +#line 4167 "util/configparser.c" break; - case 371: -#line 1427 "./util/configparser.y" + case 372: +#line 1428 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4166,22 +4175,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4170 "util/configparser.c" +#line 4179 "util/configparser.c" break; - case 372: -#line 1436 "./util/configparser.y" + case 373: +#line 1437 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4181 "util/configparser.c" +#line 4190 "util/configparser.c" break; - case 373: -#line 1444 "./util/configparser.y" + case 374: +#line 1445 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4193,11 +4202,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4197 "util/configparser.c" +#line 4206 "util/configparser.c" break; - case 374: -#line 1457 "./util/configparser.y" + case 375: +#line 1458 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4205,11 +4214,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4209 "util/configparser.c" +#line 4218 "util/configparser.c" break; - case 375: -#line 1466 "./util/configparser.y" + case 376: +#line 1467 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4218,21 +4227,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4222 "util/configparser.c" +#line 4231 "util/configparser.c" break; - case 376: -#line 1476 "./util/configparser.y" + case 377: +#line 1477 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4232 "util/configparser.c" +#line 4241 "util/configparser.c" break; - case 377: -#line 1483 "./util/configparser.y" + case 378: +#line 1484 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4241,11 +4250,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4245 "util/configparser.c" +#line 4254 "util/configparser.c" break; - case 378: -#line 1493 "./util/configparser.y" + case 379: +#line 1494 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4254,11 +4263,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4258 "util/configparser.c" +#line 4267 "util/configparser.c" break; - case 379: -#line 1503 "./util/configparser.y" + case 380: +#line 1504 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4267,11 +4276,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4271 "util/configparser.c" +#line 4280 "util/configparser.c" break; - case 380: -#line 1513 "./util/configparser.y" + case 381: +#line 1514 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4280,11 +4289,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4284 "util/configparser.c" +#line 4293 "util/configparser.c" break; - case 381: -#line 1523 "./util/configparser.y" + case 382: +#line 1524 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4293,11 +4302,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4297 "util/configparser.c" +#line 4306 "util/configparser.c" break; - case 382: -#line 1533 "./util/configparser.y" + case 383: +#line 1534 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4306,11 +4315,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4310 "util/configparser.c" +#line 4319 "util/configparser.c" break; - case 383: -#line 1543 "./util/configparser.y" + case 384: +#line 1544 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4319,11 +4328,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4323 "util/configparser.c" +#line 4332 "util/configparser.c" break; - case 384: -#line 1553 "./util/configparser.y" + case 385: +#line 1554 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4332,41 +4341,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4336 "util/configparser.c" +#line 4345 "util/configparser.c" break; - case 385: -#line 1563 "./util/configparser.y" + case 386: +#line 1564 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4346 "util/configparser.c" +#line 4355 "util/configparser.c" break; - case 386: -#line 1570 "./util/configparser.y" + case 387: +#line 1571 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4356 "util/configparser.c" +#line 4365 "util/configparser.c" break; - case 387: -#line 1577 "./util/configparser.y" + case 388: +#line 1578 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4366 "util/configparser.c" +#line 4375 "util/configparser.c" break; - case 388: -#line 1584 "./util/configparser.y" + case 389: +#line 1585 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4374,11 +4383,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4378 "util/configparser.c" +#line 4387 "util/configparser.c" break; - case 389: -#line 1593 "./util/configparser.y" + case 390: +#line 1594 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4386,11 +4395,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4390 "util/configparser.c" +#line 4399 "util/configparser.c" break; - case 390: -#line 1602 "./util/configparser.y" + case 391: +#line 1603 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4398,11 +4407,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4402 "util/configparser.c" +#line 4411 "util/configparser.c" break; - case 391: -#line 1611 "./util/configparser.y" + case 392: +#line 1612 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4410,21 +4419,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4414 "util/configparser.c" +#line 4423 "util/configparser.c" break; - case 392: -#line 1620 "./util/configparser.y" + case 393: +#line 1621 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4424 "util/configparser.c" +#line 4433 "util/configparser.c" break; - case 393: -#line 1627 "./util/configparser.y" + case 394: +#line 1628 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4433,11 +4442,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4437 "util/configparser.c" +#line 4446 "util/configparser.c" break; - case 394: -#line 1637 "./util/configparser.y" + case 395: +#line 1638 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4456,21 +4465,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4460 "util/configparser.c" +#line 4469 "util/configparser.c" break; - case 395: -#line 1657 "./util/configparser.y" + case 396: +#line 1658 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4470 "util/configparser.c" +#line 4479 "util/configparser.c" break; - case 396: -#line 1664 "./util/configparser.y" + case 397: +#line 1665 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4487,11 +4496,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4491 "util/configparser.c" +#line 4500 "util/configparser.c" break; - case 397: -#line 1682 "./util/configparser.y" + case 398: +#line 1683 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4503,11 +4512,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4507 "util/configparser.c" +#line 4516 "util/configparser.c" break; - case 398: -#line 1695 "./util/configparser.y" + case 399: +#line 1696 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4519,11 +4528,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4523 "util/configparser.c" +#line 4532 "util/configparser.c" break; - case 399: -#line 1708 "./util/configparser.y" + case 400: +#line 1709 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4531,11 +4540,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4535 "util/configparser.c" +#line 4544 "util/configparser.c" break; - case 400: -#line 1717 "./util/configparser.y" + case 401: +#line 1718 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4543,11 +4552,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4547 "util/configparser.c" +#line 4556 "util/configparser.c" break; - case 401: -#line 1726 "./util/configparser.y" + case 402: +#line 1727 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4555,11 +4564,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4559 "util/configparser.c" +#line 4568 "util/configparser.c" break; - case 402: -#line 1735 "./util/configparser.y" + case 403: +#line 1736 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4567,11 +4576,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4571 "util/configparser.c" +#line 4580 "util/configparser.c" break; - case 403: -#line 1744 "./util/configparser.y" + case 404: +#line 1745 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4580,11 +4589,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4584 "util/configparser.c" +#line 4593 "util/configparser.c" break; - case 404: -#line 1754 "./util/configparser.y" + case 405: +#line 1755 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4593,11 +4602,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4597 "util/configparser.c" +#line 4606 "util/configparser.c" break; - case 405: -#line 1764 "./util/configparser.y" + case 406: +#line 1765 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4607,11 +4616,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4611 "util/configparser.c" +#line 4620 "util/configparser.c" break; - case 406: -#line 1775 "./util/configparser.y" + case 407: +#line 1776 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4619,11 +4628,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4623 "util/configparser.c" +#line 4632 "util/configparser.c" break; - case 407: -#line 1784 "./util/configparser.y" + case 408: +#line 1785 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4631,11 +4640,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4635 "util/configparser.c" +#line 4644 "util/configparser.c" break; - case 408: -#line 1793 "./util/configparser.y" + case 409: +#line 1794 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4643,11 +4652,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4647 "util/configparser.c" +#line 4656 "util/configparser.c" break; - case 409: -#line 1802 "./util/configparser.y" + case 410: +#line 1803 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4655,11 +4664,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4659 "util/configparser.c" +#line 4668 "util/configparser.c" break; - case 410: -#line 1811 "./util/configparser.y" + case 411: +#line 1812 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4667,11 +4676,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4671 "util/configparser.c" +#line 4680 "util/configparser.c" break; - case 411: -#line 1820 "./util/configparser.y" + case 412: +#line 1821 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4679,11 +4688,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4683 "util/configparser.c" +#line 4692 "util/configparser.c" break; - case 412: -#line 1829 "./util/configparser.y" + case 413: +#line 1830 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4695,11 +4704,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4699 "util/configparser.c" +#line 4708 "util/configparser.c" break; - case 413: -#line 1842 "./util/configparser.y" + case 414: +#line 1843 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4711,11 +4720,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4715 "util/configparser.c" +#line 4724 "util/configparser.c" break; - case 414: -#line 1855 "./util/configparser.y" + case 415: +#line 1856 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4723,21 +4732,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4727 "util/configparser.c" +#line 4736 "util/configparser.c" break; - case 415: -#line 1864 "./util/configparser.y" + case 416: +#line 1865 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4737 "util/configparser.c" +#line 4746 "util/configparser.c" break; - case 416: -#line 1871 "./util/configparser.y" + case 417: +#line 1872 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4745,11 +4754,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4749 "util/configparser.c" +#line 4758 "util/configparser.c" break; - case 417: -#line 1880 "./util/configparser.y" + case 418: +#line 1881 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4757,11 +4766,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4761 "util/configparser.c" +#line 4770 "util/configparser.c" break; - case 418: -#line 1889 "./util/configparser.y" + case 419: +#line 1890 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4769,11 +4778,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4773 "util/configparser.c" +#line 4782 "util/configparser.c" break; - case 419: -#line 1898 "./util/configparser.y" + case 420: +#line 1899 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4782,22 +4791,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4786 "util/configparser.c" +#line 4795 "util/configparser.c" break; - case 420: -#line 1907 "./util/configparser.y" + case 421: +#line 1908 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4797 "util/configparser.c" +#line 4806 "util/configparser.c" break; - case 421: -#line 1915 "./util/configparser.y" + case 422: +#line 1916 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4809,22 +4818,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4813 "util/configparser.c" +#line 4822 "util/configparser.c" break; - case 422: -#line 1928 "./util/configparser.y" + case 423: +#line 1929 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4824 "util/configparser.c" +#line 4833 "util/configparser.c" break; - case 423: -#line 1936 "./util/configparser.y" + case 424: +#line 1937 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4864,21 +4873,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4868 "util/configparser.c" +#line 4877 "util/configparser.c" break; - case 424: -#line 1977 "./util/configparser.y" + case 425: +#line 1978 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4878 "util/configparser.c" +#line 4887 "util/configparser.c" break; - case 425: -#line 1984 "./util/configparser.y" + case 426: +#line 1985 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4892,11 +4901,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4896 "util/configparser.c" +#line 4905 "util/configparser.c" break; - case 426: -#line 1999 "./util/configparser.y" + case 427: +#line 2000 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4905,11 +4914,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4909 "util/configparser.c" +#line 4918 "util/configparser.c" break; - case 427: -#line 2009 "./util/configparser.y" + case 428: +#line 2010 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4918,41 +4927,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4922 "util/configparser.c" +#line 4931 "util/configparser.c" break; - case 428: -#line 2019 "./util/configparser.y" + case 429: +#line 2020 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4932 "util/configparser.c" +#line 4941 "util/configparser.c" break; - case 429: -#line 2026 "./util/configparser.y" + case 430: +#line 2027 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4942 "util/configparser.c" +#line 4951 "util/configparser.c" break; - case 430: -#line 2033 "./util/configparser.y" + case 431: +#line 2034 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4952 "util/configparser.c" +#line 4961 "util/configparser.c" break; - case 431: -#line 2040 "./util/configparser.y" + case 432: +#line 2041 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4960,22 +4969,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4964 "util/configparser.c" +#line 4973 "util/configparser.c" break; - case 432: -#line 2049 "./util/configparser.y" + case 433: +#line 2050 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 4975 "util/configparser.c" +#line 4984 "util/configparser.c" break; - case 433: -#line 2057 "./util/configparser.y" + case 434: +#line 2058 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4988,11 +4997,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4992 "util/configparser.c" +#line 5001 "util/configparser.c" break; - case 434: -#line 2071 "./util/configparser.y" + case 435: +#line 2072 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5012,11 +5021,11 @@ yyreduce: } } } -#line 5016 "util/configparser.c" +#line 5025 "util/configparser.c" break; - case 435: -#line 2092 "./util/configparser.y" + case 436: +#line 2093 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5036,11 +5045,11 @@ yyreduce: } } } -#line 5040 "util/configparser.c" +#line 5049 "util/configparser.c" break; - case 436: -#line 2113 "./util/configparser.y" + case 437: +#line 2114 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5051,11 +5060,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5055 "util/configparser.c" +#line 5064 "util/configparser.c" break; - case 437: -#line 2125 "./util/configparser.y" + case 438: +#line 2126 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5066,11 +5075,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5070 "util/configparser.c" +#line 5079 "util/configparser.c" break; - case 438: -#line 2137 "./util/configparser.y" + case 439: +#line 2138 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5081,11 +5090,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5085 "util/configparser.c" +#line 5094 "util/configparser.c" break; - case 439: -#line 2149 "./util/configparser.y" + case 440: +#line 2150 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5093,11 +5102,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5097 "util/configparser.c" +#line 5106 "util/configparser.c" break; - case 440: -#line 2158 "./util/configparser.y" + case 441: +#line 2159 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5117,11 +5126,11 @@ yyreduce: } } } -#line 5121 "util/configparser.c" +#line 5130 "util/configparser.c" break; - case 441: -#line 2179 "./util/configparser.y" + case 442: +#line 2180 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5129,11 +5138,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5133 "util/configparser.c" +#line 5142 "util/configparser.c" break; - case 442: -#line 2189 "./util/configparser.y" + case 443: +#line 2190 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5141,33 +5150,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5145 "util/configparser.c" +#line 5154 "util/configparser.c" break; - case 443: -#line 2198 "./util/configparser.y" + case 444: +#line 2199 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5156 "util/configparser.c" +#line 5165 "util/configparser.c" break; - case 444: -#line 2206 "./util/configparser.y" + case 445: +#line 2207 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5167 "util/configparser.c" +#line 5176 "util/configparser.c" break; - case 445: -#line 2214 "./util/configparser.y" + case 446: +#line 2215 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5179,11 +5188,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5183 "util/configparser.c" +#line 5192 "util/configparser.c" break; - case 446: -#line 2227 "./util/configparser.y" + case 447: +#line 2228 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5195,11 +5204,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5199 "util/configparser.c" +#line 5208 "util/configparser.c" break; - case 447: -#line 2240 "./util/configparser.y" + case 448: +#line 2241 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5213,11 +5222,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5217 "util/configparser.c" +#line 5226 "util/configparser.c" break; - case 448: -#line 2255 "./util/configparser.y" + case 449: +#line 2256 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5231,11 +5240,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5235 "util/configparser.c" +#line 5244 "util/configparser.c" break; - case 449: -#line 2270 "./util/configparser.y" + case 450: +#line 2271 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5243,11 +5252,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5247 "util/configparser.c" +#line 5256 "util/configparser.c" break; - case 450: -#line 2279 "./util/configparser.y" + case 451: +#line 2280 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5255,20 +5264,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5259 "util/configparser.c" - break; - - case 451: -#line 2288 "./util/configparser.y" - { - OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); - free((yyvsp[0].str)); - } #line 5268 "util/configparser.c" break; case 452: -#line 2294 "./util/configparser.y" +#line 2289 "./util/configparser.y" + { + OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); + free((yyvsp[0].str)); + } +#line 5277 "util/configparser.c" + break; + + case 453: +#line 2295 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5276,11 +5285,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5280 "util/configparser.c" +#line 5289 "util/configparser.c" break; - case 453: -#line 2303 "./util/configparser.y" + case 454: +#line 2304 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5288,11 +5297,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5292 "util/configparser.c" +#line 5301 "util/configparser.c" break; - case 454: -#line 2312 "./util/configparser.y" + case 455: +#line 2313 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5301,11 +5310,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5305 "util/configparser.c" +#line 5314 "util/configparser.c" break; - case 455: -#line 2322 "./util/configparser.y" + case 456: +#line 2323 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5314,11 +5323,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5318 "util/configparser.c" +#line 5327 "util/configparser.c" break; - case 456: -#line 2332 "./util/configparser.y" + case 457: +#line 2333 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5330,11 +5339,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5334 "util/configparser.c" +#line 5343 "util/configparser.c" break; - case 457: -#line 2345 "./util/configparser.y" + case 458: +#line 2346 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5346,11 +5355,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5350 "util/configparser.c" +#line 5359 "util/configparser.c" break; - case 458: -#line 2358 "./util/configparser.y" + case 459: +#line 2359 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5361,11 +5370,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5365 "util/configparser.c" +#line 5374 "util/configparser.c" break; - case 459: -#line 2370 "./util/configparser.y" + case 460: +#line 2371 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5378,11 +5387,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5382 "util/configparser.c" +#line 5391 "util/configparser.c" break; - case 460: -#line 2384 "./util/configparser.y" + case 461: +#line 2385 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5393,11 +5402,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5397 "util/configparser.c" +#line 5406 "util/configparser.c" break; - case 461: -#line 2396 "./util/configparser.y" + case 462: +#line 2397 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5410,11 +5419,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5414 "util/configparser.c" +#line 5423 "util/configparser.c" break; - case 462: -#line 2410 "./util/configparser.y" + case 463: +#line 2411 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5423,31 +5432,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5427 "util/configparser.c" +#line 5436 "util/configparser.c" break; - case 463: -#line 2420 "./util/configparser.y" + case 464: +#line 2421 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5437 "util/configparser.c" +#line 5446 "util/configparser.c" break; - case 464: -#line 2427 "./util/configparser.y" + case 465: +#line 2428 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5447 "util/configparser.c" +#line 5456 "util/configparser.c" break; - case 465: -#line 2434 "./util/configparser.y" + case 466: +#line 2435 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5455,11 +5464,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5459 "util/configparser.c" +#line 5468 "util/configparser.c" break; - case 466: -#line 2443 "./util/configparser.y" + case 467: +#line 2444 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5467,11 +5476,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5471 "util/configparser.c" +#line 5480 "util/configparser.c" break; - case 467: -#line 2452 "./util/configparser.y" + case 468: +#line 2453 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5480,11 +5489,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5484 "util/configparser.c" +#line 5493 "util/configparser.c" break; - case 468: -#line 2462 "./util/configparser.y" + case 469: +#line 2463 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5493,11 +5502,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5497 "util/configparser.c" +#line 5506 "util/configparser.c" break; - case 469: -#line 2472 "./util/configparser.y" + case 470: +#line 2473 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5506,31 +5515,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5510 "util/configparser.c" +#line 5519 "util/configparser.c" break; - case 470: -#line 2482 "./util/configparser.y" + case 471: +#line 2483 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5520 "util/configparser.c" +#line 5529 "util/configparser.c" break; - case 471: -#line 2489 "./util/configparser.y" + case 472: +#line 2490 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5530 "util/configparser.c" +#line 5539 "util/configparser.c" break; - case 472: -#line 2496 "./util/configparser.y" + case 473: +#line 2497 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5538,11 +5547,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5542 "util/configparser.c" +#line 5551 "util/configparser.c" break; - case 473: -#line 2505 "./util/configparser.y" + case 474: +#line 2506 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5550,11 +5559,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5554 "util/configparser.c" +#line 5563 "util/configparser.c" break; - case 474: -#line 2514 "./util/configparser.y" + case 475: +#line 2515 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5563,11 +5572,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5567 "util/configparser.c" +#line 5576 "util/configparser.c" break; - case 475: -#line 2524 "./util/configparser.y" + case 476: +#line 2525 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5576,52 +5585,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5580 "util/configparser.c" +#line 5589 "util/configparser.c" break; - case 476: -#line 2534 "./util/configparser.y" + case 477: +#line 2535 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5590 "util/configparser.c" +#line 5599 "util/configparser.c" break; - case 477: -#line 2541 "./util/configparser.y" + case 478: +#line 2542 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5600 "util/configparser.c" +#line 5609 "util/configparser.c" break; - case 478: -#line 2548 "./util/configparser.y" + case 479: +#line 2549 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5610 "util/configparser.c" +#line 5619 "util/configparser.c" break; - case 479: -#line 2555 "./util/configparser.y" + case 480: +#line 2556 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5621 "util/configparser.c" +#line 5630 "util/configparser.c" break; - case 480: -#line 2563 "./util/configparser.y" + case 481: +#line 2564 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5630,11 +5639,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5634 "util/configparser.c" +#line 5643 "util/configparser.c" break; - case 481: -#line 2573 "./util/configparser.y" + case 482: +#line 2574 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5643,11 +5652,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5647 "util/configparser.c" +#line 5656 "util/configparser.c" break; - case 482: -#line 2583 "./util/configparser.y" + case 483: +#line 2584 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5656,11 +5665,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5660 "util/configparser.c" +#line 5669 "util/configparser.c" break; - case 483: -#line 2593 "./util/configparser.y" + case 484: +#line 2594 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5669,11 +5678,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5673 "util/configparser.c" +#line 5682 "util/configparser.c" break; - case 484: -#line 2603 "./util/configparser.y" + case 485: +#line 2604 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5711,11 +5720,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5715 "util/configparser.c" +#line 5724 "util/configparser.c" break; - case 485: -#line 2642 "./util/configparser.y" + case 486: +#line 2643 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5724,33 +5733,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5728 "util/configparser.c" +#line 5737 "util/configparser.c" break; - case 486: -#line 2652 "./util/configparser.y" + case 487: +#line 2653 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5739 "util/configparser.c" +#line 5748 "util/configparser.c" break; - case 487: -#line 2660 "./util/configparser.y" + case 488: +#line 2661 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5750 "util/configparser.c" +#line 5759 "util/configparser.c" break; - case 488: -#line 2668 "./util/configparser.y" + case 489: +#line 2669 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5764,11 +5773,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5768 "util/configparser.c" +#line 5777 "util/configparser.c" break; - case 489: -#line 2683 "./util/configparser.y" + case 490: +#line 2684 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5776,19 +5785,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5780 "util/configparser.c" +#line 5789 "util/configparser.c" break; - case 490: -#line 2692 "./util/configparser.y" + case 491: +#line 2693 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5788 "util/configparser.c" +#line 5797 "util/configparser.c" break; - case 501: -#line 2703 "./util/configparser.y" + case 502: +#line 2704 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5797,11 +5806,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5801 "util/configparser.c" +#line 5810 "util/configparser.c" break; - case 502: -#line 2713 "./util/configparser.y" + case 503: +#line 2714 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5809,79 +5818,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5813 "util/configparser.c" +#line 5822 "util/configparser.c" break; - case 503: -#line 2722 "./util/configparser.y" + case 504: +#line 2723 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5823 "util/configparser.c" +#line 5832 "util/configparser.c" break; - case 504: -#line 2729 "./util/configparser.y" + case 505: +#line 2730 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5833 "util/configparser.c" +#line 5842 "util/configparser.c" break; - case 505: -#line 2736 "./util/configparser.y" + case 506: +#line 2737 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5843 "util/configparser.c" +#line 5852 "util/configparser.c" break; - case 506: -#line 2743 "./util/configparser.y" + case 507: +#line 2744 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5853 "util/configparser.c" +#line 5862 "util/configparser.c" break; - case 507: -#line 2750 "./util/configparser.y" + case 508: +#line 2751 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5863 "util/configparser.c" +#line 5872 "util/configparser.c" break; - case 508: -#line 2757 "./util/configparser.y" + case 509: +#line 2758 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5873 "util/configparser.c" +#line 5882 "util/configparser.c" break; - case 509: -#line 2764 "./util/configparser.y" + case 510: +#line 2765 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5881 "util/configparser.c" +#line 5890 "util/configparser.c" break; - case 530: -#line 2784 "./util/configparser.y" + case 531: +#line 2785 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5889,31 +5898,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5893 "util/configparser.c" +#line 5902 "util/configparser.c" break; - case 531: -#line 2793 "./util/configparser.y" + case 532: +#line 2794 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5903 "util/configparser.c" +#line 5912 "util/configparser.c" break; - case 532: -#line 2800 "./util/configparser.y" + case 533: +#line 2801 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 5913 "util/configparser.c" +#line 5922 "util/configparser.c" break; - case 533: -#line 2807 "./util/configparser.y" + case 534: +#line 2808 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5921,51 +5930,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5925 "util/configparser.c" +#line 5934 "util/configparser.c" break; - case 534: -#line 2816 "./util/configparser.y" + case 535: +#line 2817 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 5935 "util/configparser.c" +#line 5944 "util/configparser.c" break; - case 535: -#line 2823 "./util/configparser.y" + case 536: +#line 2824 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 5945 "util/configparser.c" +#line 5954 "util/configparser.c" break; - case 536: -#line 2830 "./util/configparser.y" + case 537: +#line 2831 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 5955 "util/configparser.c" +#line 5964 "util/configparser.c" break; - case 537: -#line 2837 "./util/configparser.y" + case 538: +#line 2838 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 5965 "util/configparser.c" +#line 5974 "util/configparser.c" break; - case 538: -#line 2844 "./util/configparser.y" + case 539: +#line 2845 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5973,11 +5982,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5977 "util/configparser.c" +#line 5986 "util/configparser.c" break; - case 539: -#line 2853 "./util/configparser.y" + case 540: +#line 2854 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5985,31 +5994,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5989 "util/configparser.c" +#line 5998 "util/configparser.c" break; - case 540: -#line 2862 "./util/configparser.y" + case 541: +#line 2863 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5999 "util/configparser.c" +#line 6008 "util/configparser.c" break; - case 541: -#line 2869 "./util/configparser.y" + case 542: +#line 2870 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6009 "util/configparser.c" +#line 6018 "util/configparser.c" break; - case 542: -#line 2876 "./util/configparser.y" + case 543: +#line 2877 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6018,11 +6027,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6022 "util/configparser.c" +#line 6031 "util/configparser.c" break; - case 543: -#line 2886 "./util/configparser.y" + case 544: +#line 2887 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6031,11 +6040,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6035 "util/configparser.c" +#line 6044 "util/configparser.c" break; - case 544: -#line 2896 "./util/configparser.y" + case 545: +#line 2897 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6044,11 +6053,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6048 "util/configparser.c" +#line 6057 "util/configparser.c" break; - case 545: -#line 2906 "./util/configparser.y" + case 546: +#line 2907 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6057,11 +6066,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6061 "util/configparser.c" +#line 6070 "util/configparser.c" break; - case 546: -#line 2916 "./util/configparser.y" + case 547: +#line 2917 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6070,11 +6079,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6074 "util/configparser.c" +#line 6083 "util/configparser.c" break; - case 547: -#line 2926 "./util/configparser.y" + case 548: +#line 2927 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6083,29 +6092,47 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6087 "util/configparser.c" +#line 6096 "util/configparser.c" break; - case 548: -#line 2936 "./util/configparser.y" + case 549: +#line 2937 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6095 "util/configparser.c" +#line 6104 "util/configparser.c" break; - case 552: -#line 2945 "./util/configparser.y" + case 553: +#line 2946 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6105 "util/configparser.c" +#line 6114 "util/configparser.c" break; - case 553: -#line 2951 "./util/configparser.y" + case 554: +#line 2952 "./util/configparser.y" + { + OUTYY(("\nP(dynlib:)\n")); + } +#line 6122 "util/configparser.c" + break; + + case 558: +#line 2961 "./util/configparser.y" + { + OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) + yyerror("out of memory"); + } +#line 6132 "util/configparser.c" + break; + + case 559: +#line 2967 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6114,21 +6141,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6118 "util/configparser.c" +#line 6145 "util/configparser.c" break; - case 554: -#line 2961 "./util/configparser.y" + case 560: +#line 2977 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6128 "util/configparser.c" +#line 6155 "util/configparser.c" break; - case 555: -#line 2968 "./util/configparser.y" + case 561: +#line 2984 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6136,30 +6163,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6140 "util/configparser.c" +#line 6167 "util/configparser.c" break; - case 556: -#line 2977 "./util/configparser.y" + case 562: +#line 2993 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6151 "util/configparser.c" +#line 6178 "util/configparser.c" break; - case 557: -#line 2985 "./util/configparser.y" + case 563: +#line 3001 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6159 "util/configparser.c" +#line 6186 "util/configparser.c" break; - case 570: -#line 3001 "./util/configparser.y" + case 576: +#line 3017 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6167,11 +6194,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6171 "util/configparser.c" +#line 6198 "util/configparser.c" break; - case 571: -#line 3011 "./util/configparser.y" + case 577: +#line 3027 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6179,21 +6206,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6183 "util/configparser.c" +#line 6210 "util/configparser.c" break; - case 572: -#line 3020 "./util/configparser.y" + case 578: +#line 3036 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6193 "util/configparser.c" +#line 6220 "util/configparser.c" break; - case 573: -#line 3027 "./util/configparser.y" + case 579: +#line 3043 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6201,21 +6228,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6205 "util/configparser.c" +#line 6232 "util/configparser.c" break; - case 574: -#line 3036 "./util/configparser.y" + case 580: +#line 3052 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6215 "util/configparser.c" +#line 6242 "util/configparser.c" break; - case 575: -#line 3043 "./util/configparser.y" + case 581: +#line 3059 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6223,22 +6250,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6227 "util/configparser.c" +#line 6254 "util/configparser.c" break; - case 576: -#line 3052 "./util/configparser.y" + case 582: +#line 3068 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6238 "util/configparser.c" +#line 6265 "util/configparser.c" break; - case 577: -#line 3060 "./util/configparser.y" + case 583: +#line 3076 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6250,22 +6277,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6254 "util/configparser.c" +#line 6281 "util/configparser.c" break; - case 578: -#line 3073 "./util/configparser.y" + case 584: +#line 3089 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6265 "util/configparser.c" +#line 6292 "util/configparser.c" break; - case 579: -#line 3081 "./util/configparser.y" + case 585: +#line 3097 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6277,19 +6304,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6281 "util/configparser.c" +#line 6308 "util/configparser.c" break; - case 580: -#line 3094 "./util/configparser.y" + case 586: +#line 3110 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6289 "util/configparser.c" +#line 6316 "util/configparser.c" break; - case 589: -#line 3105 "./util/configparser.y" + case 595: +#line 3121 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6300,11 +6327,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6304 "util/configparser.c" +#line 6331 "util/configparser.c" break; - case 590: -#line 3117 "./util/configparser.y" + case 596: +#line 3133 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6315,11 +6342,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6319 "util/configparser.c" +#line 6346 "util/configparser.c" break; - case 591: -#line 3129 "./util/configparser.y" + case 597: +#line 3145 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6330,11 +6357,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6334 "util/configparser.c" +#line 6361 "util/configparser.c" break; - case 592: -#line 3141 "./util/configparser.y" + case 598: +#line 3157 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6348,11 +6375,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6352 "util/configparser.c" +#line 6379 "util/configparser.c" break; - case 593: -#line 3156 "./util/configparser.y" + case 599: +#line 3172 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6364,11 +6391,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6368 "util/configparser.c" +#line 6395 "util/configparser.c" break; - case 594: -#line 3169 "./util/configparser.y" + case 600: +#line 3185 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6380,11 +6407,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6384 "util/configparser.c" +#line 6411 "util/configparser.c" break; - case 595: -#line 3182 "./util/configparser.y" + case 601: +#line 3198 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6394,19 +6421,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6398 "util/configparser.c" +#line 6425 "util/configparser.c" break; - case 596: -#line 3193 "./util/configparser.y" + case 602: +#line 3209 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6406 "util/configparser.c" +#line 6433 "util/configparser.c" break; - case 601: -#line 3202 "./util/configparser.y" + case 607: +#line 3218 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6420,11 +6447,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6424 "util/configparser.c" +#line 6451 "util/configparser.c" break; - case 602: -#line 3217 "./util/configparser.y" + case 608: +#line 3233 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6438,11 +6465,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6442 "util/configparser.c" +#line 6469 "util/configparser.c" break; -#line 6446 "util/configparser.c" +#line 6473 "util/configparser.c" default: break; } @@ -6674,7 +6701,7 @@ yyreturn: #endif return yyresult; } -#line 3231 "./util/configparser.y" +#line 3247 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 571c76c4e..915844890 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -334,7 +334,9 @@ extern int yydebug; VAR_RPZ_ACTION_OVERRIDE = 540, VAR_RPZ_CNAME_OVERRIDE = 541, VAR_RPZ_LOG = 542, - VAR_RPZ_LOG_NAME = 543 + VAR_RPZ_LOG_NAME = 543, + VAR_DYNLIB = 544, + VAR_DYNLIB_FILE = 545 }; #endif /* Tokens. */ @@ -624,6 +626,8 @@ extern int yydebug; #define VAR_RPZ_CNAME_OVERRIDE 541 #define VAR_RPZ_LOG 542 #define VAR_RPZ_LOG_NAME 543 +#define VAR_DYNLIB 544 +#define VAR_DYNLIB_FILE 545 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -633,7 +637,7 @@ union YYSTYPE char* str; -#line 637 "util/configparser.h" +#line 641 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index feb798a3e..12c55533a 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -174,6 +174,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME +%token VAR_DYNLIB VAR_DYNLIB_FILE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -182,7 +183,7 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | ipsetstart contents_ipset | authstart contents_auth | - rpzstart contents_rpz + rpzstart contents_rpz | dynlibstart contents_dl ; /* server: declaration */ @@ -2947,6 +2948,21 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2)) yyerror("out of memory"); } +dynlibstart: VAR_DYNLIB + { + OUTYY(("\nP(dynlib:)\n")); + } + ; +contents_dl: contents_dl content_dl + | ; +content_dl: dl_file + ; +dl_file: VAR_DYNLIB_FILE STRING_ARG + { + OUTYY(("P(dynlib-file:%s)\n", $2)); + if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, $2)) + yyerror("out of memory"); + } server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG { OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2)); diff --git a/util/data/dname.c b/util/data/dname.c index c8f09ddbc..76b2ec7d6 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -233,17 +233,28 @@ int dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2) { uint8_t len1, len2; + int count1 = 0, count2 = 0; log_assert(pkt && d1 && d2); len1 = *d1++; len2 = *d2++; while( len1 != 0 || len2 != 0 ) { /* resolve ptrs */ if(LABEL_IS_PTR(len1)) { + if((size_t)PTR_OFFSET(len1, *d1) + >= sldns_buffer_limit(pkt)) + return -1; + if(count1++ > MAX_COMPRESS_PTRS) + return -1; d1 = sldns_buffer_at(pkt, PTR_OFFSET(len1, *d1)); len1 = *d1++; continue; } if(LABEL_IS_PTR(len2)) { + if((size_t)PTR_OFFSET(len2, *d2) + >= sldns_buffer_limit(pkt)) + return 1; + if(count2++ > MAX_COMPRESS_PTRS) + return 1; d2 = sldns_buffer_at(pkt, PTR_OFFSET(len2, *d2)); len2 = *d2++; continue; @@ -302,12 +313,18 @@ dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_type h) uint8_t labuf[LDNS_MAX_LABELLEN+1]; uint8_t lablen; int i; + int count = 0; /* preserve case of query, make hash label by label */ lablen = *dname++; while(lablen) { if(LABEL_IS_PTR(lablen)) { /* follow pointer */ + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) + return h; + if(count++ > MAX_COMPRESS_PTRS) + return h; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; @@ -341,6 +358,9 @@ void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname) return; } /* follow pointer */ + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) + return; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; @@ -369,6 +389,7 @@ void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname) void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname) { uint8_t lablen; + int count = 0; if(!out) out = stdout; if(!dname) return; @@ -382,6 +403,15 @@ void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname) fputs("??compressionptr??", out); return; } + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) { + fputs("??compressionptr??", out); + return; + } + if(count++ > MAX_COMPRESS_PTRS) { + fputs("??compressionptr??", out); + return; + } dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; diff --git a/util/data/msgparse.c b/util/data/msgparse.c index fb3123703..7c32618a3 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -55,7 +55,11 @@ smart_compare(sldns_buffer* pkt, uint8_t* dnow, { if(LABEL_IS_PTR(*dnow)) { /* ptr points to a previous dname */ - uint8_t* p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); + uint8_t* p; + if((size_t)PTR_OFFSET(dnow[0], dnow[1]) + >= sldns_buffer_limit(pkt)) + return -1; + p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); if( p == dprfirst || p == dprlast ) return 0; /* prev dname is also a ptr, both ptrs are the same. */ diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index b124e7169..aa275ed53 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -81,6 +81,9 @@ #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif +#ifdef WITH_DYNLIBMODULE +#include "dynlibmod/dynlibmod.h" +#endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif @@ -392,6 +395,9 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_init) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_init) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_init) return 1; #endif @@ -417,6 +423,9 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_deinit) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_deinit) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_deinit) return 1; #endif @@ -443,6 +452,9 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_operate) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_operate) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_operate) return 1; #endif @@ -469,6 +481,9 @@ fptr_whitelist_mod_inform_super(void (*fptr)( #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_inform_super) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_inform_super) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_inform_super) return 1; #endif @@ -495,6 +510,9 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_clear) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_clear) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_clear) return 1; #endif @@ -520,6 +538,9 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_get_mem) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_get_mem) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_get_mem) return 1; #endif @@ -577,18 +598,30 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr, if(type == inplace_cb_reply) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_cache) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_local) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_servfail) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } return 0; @@ -603,6 +636,10 @@ int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr) #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_query_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_query_generic) + return 1; #endif (void)fptr; return 0; @@ -616,6 +653,10 @@ int fptr_whitelist_inplace_cb_edns_back_parsed( return 1; #else (void)fptr; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_edns_back_parsed) + return 1; #endif return 0; } @@ -628,6 +669,10 @@ int fptr_whitelist_inplace_cb_query_response( return 1; #else (void)fptr; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_query_response) + return 1; #endif return 0; } diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c index 46a71510f..af8c5bcf3 100644 --- a/util/shm_side/shm_main.c +++ b/util/shm_side/shm_main.c @@ -284,6 +284,10 @@ void shm_main_run(struct worker *worker) #ifdef USE_IPSECMOD shm_stat->mem.ipsecmod = (long long)mod_get_mem(&worker->env, "ipsecmod"); +#endif +#ifdef WITH_DYNLIBMODULE + shm_stat->mem.dynlib = (long long)mod_get_mem(&worker->env, + "dynlib"); #endif } diff --git a/util/ub_event.c b/util/ub_event.c index 9af476ad4..68f633bb0 100644 --- a/util/ub_event.c +++ b/util/ub_event.c @@ -148,7 +148,7 @@ const char* ub_event_get_version(void) return event_get_version(); } -#if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT) +#if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EV_FEATURE_BACKENDS) static const char* ub_ev_backend2str(int b) { switch(b) { @@ -184,7 +184,7 @@ ub_get_event_sys(struct ub_event_base* base, const char** n, const char** s, *n = "libev"; if (!b) b = (struct event_base*)ev_default_loop(EVFLAG_AUTO); -# ifdef EVBACKEND_SELECT +# ifdef EV_FEATURE_BACKENDS *m = ub_ev_backend2str(ev_backend((struct ev_loop*)b)); # else *m = "not obtainable";