From: Ralph Dolmans Date: Thu, 7 May 2020 14:36:26 +0000 (+0200) Subject: - Add DNS-over-HTTPS support X-Git-Tag: release-1.12.0rc1~22^2~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8dae5d9f81a179bdbb5fdcc730df4e8875f85cd2;p=thirdparty%2Funbound.git - Add DNS-over-HTTPS support --- diff --git a/Makefile.in b/Makefile.in index 51a13836b..3a63c97be 100644 --- a/Makefile.in +++ b/Makefile.in @@ -663,7 +663,7 @@ dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_de $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \ @@ -704,10 +704,11 @@ msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/d $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.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 -packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \ - $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h +packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ @@ -776,7 +777,7 @@ listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ @@ -799,10 +800,10 @@ mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(s $(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)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ - $(srcdir)/util/alloc.h $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h \ - $(srcdir)/services/listen_dnsport.h + $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h $(srcdir)/services/listen_dnsport.h modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ @@ -903,7 +904,7 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(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)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.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 \ @@ -914,15 +915,7 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(srcdir)/libunbound/worker.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h -mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/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 +mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h @@ -994,7 +987,7 @@ tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/u $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/util/tube.h ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ @@ -1004,7 +997,7 @@ ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c $(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)/libunbound/unbound.h $(srcdir)/respip/respip.h winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ @@ -1273,7 +1266,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h + $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/dnstap/dtstream.h testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \ @@ -1307,7 +1301,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h + $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/dnstap/dtstream.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ @@ -1470,6 +1465,12 @@ unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c confi unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h petal.lo petal.o: $(srcdir)/testcode/petal.c config.h +unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h \ + $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/dnstap/dnstap_fstrm.h \ + $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h pythonmod_utils.lo pythonmod_utils.o: $(srcdir)/pythonmod/pythonmod_utils.c config.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ diff --git a/config.h.in b/config.h.in index 3c46e3f3e..258352f3e 100644 --- a/config.h.in +++ b/config.h.in @@ -28,6 +28,9 @@ /* Whether daemon is deprecated */ #undef DEPRECATED_DAEMON +/* Define this to enable kernel based UDP source port randomization. */ +#undef DISABLE_EXPLICIT_PORT_RANDOMISATION + /* default dnstap socket path */ #undef DNSTAP_SOCKET_PATH @@ -110,6 +113,10 @@ don't. */ #undef HAVE_DECL_INET_PTON +/* Define to 1 if you have the declaration of `nghttp2_session_server_new', + and to 0 if you don't. */ +#undef HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW + /* Define to 1 if you have the declaration of `NID_ED25519', and to 0 if you don't. */ #undef HAVE_DECL_NID_ED25519 @@ -368,6 +375,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_NETTLE_EDDSA_H +/* Define this to use nghttp2 client. */ +#undef HAVE_NGHTTP2 + +/* Define to 1 if you have the header file. */ +#undef HAVE_NGHTTP2_NGHTTP2_H + /* Use libnss for crypto */ #undef HAVE_NSS @@ -491,6 +504,9 @@ /* Define if you have the SSL libraries installed. */ #undef HAVE_SSL +/* Define to 1 if you have the `SSL_CTX_set_alpn_select_cb' function. */ +#undef HAVE_SSL_CTX_SET_ALPN_SELECT_CB + /* Define to 1 if you have the `SSL_CTX_set_ciphersuites' function. */ #undef HAVE_SSL_CTX_SET_CIPHERSUITES @@ -811,9 +827,8 @@ /* Define to 1 to use ipset support */ #undef USE_IPSET -/* Define to 1 to disable explict UDP source port randomisation and rely on the - kernel to provide random source ports */ -#undef DISABLE_EXPLICIT_PORT_RANDOMISATION +/* Define if you enable libevent */ +#undef USE_LIBEVENT /* Define if you want to use internal select based events */ #undef USE_MINI_EVENT @@ -1349,6 +1364,8 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, #define UNBOUND_DNS_PORT 53 /** default port for DNS over TLS traffic. */ #define UNBOUND_DNS_OVER_TLS_PORT 853 +/** default port for DNS over HTTPS traffic. */ +#define UNBOUND_DNS_OVER_HTTPS_PORT 443 /** default port for unbound control traffic, registered port with IANA, ub-dns-control 8953/tcp unbound dns nameserver control */ #define UNBOUND_CONTROL_PORT 8953 diff --git a/configure b/configure index d9355009c..107eedc11 100755 --- a/configure +++ b/configure @@ -804,6 +804,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -877,6 +878,7 @@ enable_tfo_server with_libevent with_libexpat with_libhiredis +with_libnghttp2 enable_static_exe enable_fully_static enable_lock_checks @@ -951,6 +953,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1203,6 +1206,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1340,7 +1352,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1493,6 +1505,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1635,6 +1648,7 @@ Optional Packages: outgoing port ranges. --with-libexpat=path specify explicit path for libexpat. --with-libhiredis=path specify explicit path for libhiredis. + --with-libnghttp2=path specify explicit path for libnghttp2. --with-dnstap-socket-path=pathname set default dnstap socket path --with-protobuf-c=path Path where protobuf-c is installed, for dnstap @@ -15666,7 +15680,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15712,7 +15726,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15736,7 +15750,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15781,7 +15795,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15805,7 +15819,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -18306,7 +18320,7 @@ done # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" -for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites +for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_alpn_select_cb do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -19124,31 +19138,34 @@ esac if test "${with_libevent+set}" = set; then : withval=$with_libevent; else - withval="no" + with_libevent="no" fi -if test x_$withval = x_yes -o x_$withval != x_no; then +if test "x_$with_libevent" != x_no; then + +$as_echo "#define USE_LIBEVENT 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libevent" >&5 $as_echo_n "checking for libevent... " >&6; } - if test x_$withval = x_ -o x_$withval = x_yes; then - withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" + if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then + with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi - for dir in $withval; do + for dir in $with_libevent; do thedir="$dir" if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then found_libevent="yes" - if test "$thedir" != "/usr"; then - CPPFLAGS="$CPPFLAGS -I$thedir/include" - fi - break; - fi + if test "$thedir" != "/usr"; then + CPPFLAGS="$CPPFLAGS -I$thedir/include" + fi + break; + fi done if test x_$found_libevent != x_yes; then if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then # libevent source directory - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5 $as_echo "found in $thedir" >&6; } - CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" + CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" BAK_LDFLAGS_SET="1" BAK_LDFLAGS="$LDFLAGS" # remove evdns from linking @@ -19161,10 +19178,10 @@ $as_echo "found in $thedir" >&6; } cp $ev_files_o build/libevent cp $ev_files_lo build/libevent cp $ev_files_libso build/libevent/.libs - LATE_LDFLAGS="build/libevent/*.lo -lm" + LATE_LDFLAGS="build/libevent/*.lo -lm" LDFLAGS="build/libevent/*.o $LDFLAGS -lm" else - as_fn_error $? "Cannot find the libevent library in $withval + as_fn_error $? "Cannot find the libevent library in $with_libevent You can restart ./configure --with-libevent=no to use a builtin alternative. Please note that this alternative is not as capable as libevent when using large outgoing port ranges. " "$LINENO" 5 @@ -19615,6 +19632,70 @@ _ACEOF fi +# nghttp2 + +# Check whether --with-libnghttp2 was given. +if test "${with_libnghttp2+set}" = set; then : + withval=$with_libnghttp2; +else + withval="no" +fi + +found_libnghttp2="no" +if test x_$withval = x_yes -o x_$withval != x_no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnghttp2" >&5 +$as_echo_n "checking for libnghttp2... " >&6; } + if test x_$withval = x_ -o x_$withval = x_yes; then + withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" + fi + for dir in $withval ; do + if test -f "$dir/include/nghttp2/nghttp2.h"; then + found_libnghttp2="yes" + if test "$dir" != "/usr"; then + CPPFLAGS="$CPPFLAGS -I$dir/include" + LDFLAGS="$LDFLAGS -L$dir/lib" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5 +$as_echo "found in $dir" >&6; } + +$as_echo "#define HAVE_NGHTTP2 1" >>confdefs.h + + LIBS="$LIBS -lnghttp2" + break; + fi + done + if test x_$found_libnghttp2 != x_yes; then + as_fn_error $? "Could not find libnghttp2, nghttp2.h" "$LINENO" 5 + fi + for ac_header in nghttp2/nghttp2.h +do : + ac_fn_c_check_header_compile "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default +" +if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NGHTTP2_NGHTTP2_H 1 +_ACEOF + +fi + +done + + ac_fn_c_check_decl "$LINENO" "nghttp2_session_server_new" "ac_cv_have_decl_nghttp2_session_server_new" "$ac_includes_default + #include + +" +if test "x$ac_cv_have_decl_nghttp2_session_server_new" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW $ac_have_decl +_ACEOF + +fi + # set static linking for uninstalled libraries if requested staticexe="" diff --git a/configure.ac b/configure.ac index e71bc5888..6b761974a 100644 --- a/configure.ac +++ b/configure.ac @@ -830,7 +830,7 @@ AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_C # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" -AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites]) +AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_alpn_select_cb]) LIBS="$BAKLIBS" AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [ @@ -1369,6 +1369,39 @@ if test x_$withval = x_yes -o x_$withval != x_no; then ]) fi +# nghttp2 +AC_ARG_WITH(libnghttp2, AC_HELP_STRING([--with-libnghttp2=path], + [specify explicit path for libnghttp2.]), + [ ],[ withval="no" ]) +found_libnghttp2="no" +if test x_$withval = x_yes -o x_$withval != x_no; then + AC_MSG_CHECKING(for libnghttp2) + if test x_$withval = x_ -o x_$withval = x_yes; then + withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" + fi + for dir in $withval ; do + if test -f "$dir/include/nghttp2/nghttp2.h"; then + found_libnghttp2="yes" + dnl assume /usr is in default path. + if test "$dir" != "/usr"; then + CPPFLAGS="$CPPFLAGS -I$dir/include" + LDFLAGS="$LDFLAGS -L$dir/lib" + fi + AC_MSG_RESULT(found in $dir) + AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.]) + LIBS="$LIBS -lnghttp2" + break; + fi + done + if test x_$found_libnghttp2 != x_yes; then + AC_ERROR([Could not find libnghttp2, nghttp2.h]) + fi + AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT]) + AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT + #include + ]) +fi + # set static linking for uninstalled libraries if requested AC_SUBST(staticexe) staticexe="" @@ -2105,6 +2138,8 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, #define UNBOUND_DNS_PORT 53 /** default port for DNS over TLS traffic. */ #define UNBOUND_DNS_OVER_TLS_PORT 853 +/** default port for DNS over HTTPS traffic. */ +#define UNBOUND_DNS_OVER_HTTPS_PORT 443 /** default port for unbound control traffic, registered port with IANA, ub-dns-control 8953/tcp unbound dns nameserver control */ #define UNBOUND_CONTROL_PORT 8953 diff --git a/daemon/remote.c b/daemon/remote.c index f4b7298cb..5eb829859 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -329,7 +329,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, /* open fd */ fd = create_tcp_accept_sock(res, 1, &noproto, 0, - cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd); + cfg->ip_transparent, 0, 0, cfg->ip_freebind, cfg->use_systemd); freeaddrinfo(res); } diff --git a/daemon/worker.c b/daemon/worker.c index cec6bcd66..24fb3f30e 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1109,7 +1109,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, struct respip_client_info* cinfo = NULL, cinfo_tmp; memset(&qinfo, 0, sizeof(qinfo)); - if(error != NETEVENT_NOERROR || !repinfo) { + if((error != NETEVENT_NOERROR && error != NETEVENT_DONE)|| !repinfo) { /* some bad tcp query DNS formats give these error calls */ verbose(VERB_ALGO, "handle request called with err=%d", error); return 0; @@ -1797,7 +1797,8 @@ worker_init(struct worker* worker, struct config_file *cfg, cfg->do_tcp_keepalive ? cfg->tcp_keepalive_timeout : cfg->tcp_idle_timeout, - worker->daemon->tcl, + cfg->harden_large_queries, + worker->daemon->tcl, worker->daemon->listen_sslctx, dtenv, worker_handle_request, worker); if(!worker->front) { diff --git a/doc/example.conf.in b/doc/example.conf.in index dbc30a48c..dbcb97cec 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -729,12 +729,14 @@ server: # add a netblock specific override to a localzone, with zone type # local-zone-override: "example.com" 192.0.2.0/24 refuse - # service clients over TLS (on the TCP sockets), with plain DNS inside - # the TLS stream. Give the certificate to use and private key. + # service clients over TLS (on the TCP sockets) with plain DNS inside + # the TLS stream, and over HTTPS using HTTP/2 as specified in RFC8484. + # Give the certificate to use and private key. # default is "" (disabled). requires restart to take effect. # tls-service-key: "path/to/privatekeyfile.key" # tls-service-pem: "path/to/publiccertfile.pem" # tls-port: 853 + # https-port: 443 # cipher setting for TLSv1.2 # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256" diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 43159666d..3f14061c9 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -469,15 +469,16 @@ Alternate syntax for \fBtls\-upstream\fR. If both are present in the config file the last is used. .TP .B tls\-service\-key: \fI -If enabled, the server provides TLS service on the TCP ports marked -implicitly or explicitly for TLS service with tls\-port. The file must -contain the private key for the TLS session, the public certificate is in -the tls\-service\-pem file and it must also be specified if tls\-service\-key -is specified. The default is "", turned off. Enabling or disabling -this service requires a restart (a reload is not enough), because the -key is read while root permissions are held and before chroot (if any). -The ports enabled implicitly or explicitly via \fBtls\-port:\fR do not provide -normal DNS TCP service. +If enabled, the server provides DNS-over-TLS or DNS-over-HTTPS service on the +TCP ports marked implicitly or explicitly for these services with tls\-port or +https\-port. The file must contain the private key for the TLS session, the +public certificate is in the tls\-service\-pem file and it must also be +specified if tls\-service\-key is specified. The default is "", turned off. +Enabling or disabling this service requires a restart (a reload is not enough), +because the key is read while root permissions are held and before chroot (if any). +The ports enabled implicitly or explicitly via \fBtls\-port:\fR and +\fBhttps\-port:\fR do not provide normal DNS TCP service. Unbound needs to be +compiled with libnghttp2 in order to provide DNS-over-HTTPS. .TP .B ssl\-service\-key: \fI Alternate syntax for \fBtls\-service\-key\fR. @@ -493,6 +494,10 @@ Alternate syntax for \fBtls\-service\-pem\fR. The port number on which to provide TCP TLS service, default 853, only interfaces configured with that port number as @number get the TLS service. .TP +.B https\-port: \fI +The port number on which to provide DNS-over-HTTPS service, default 443, only +interfaces configured with that port number as @number get the HTTPS service. +.TP .B ssl\-port: \fI Alternate syntax for \fBtls\-port\fR. .TP diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 7e2afd843..fdfed0a40 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -53,6 +53,7 @@ #include "util/config_file.h" #include "util/net_help.h" #include "sldns/sbuffer.h" +#include "sldns/parseutil.h" #include "services/mesh.h" #include "util/fptr_wlist.h" #include "util/locks.h" @@ -638,7 +639,8 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, - int* reuseport, int transparent, int mss, int freebind, int use_systemd) + int* reuseport, int transparent, int mss, int nodelay, int freebind, + int use_systemd) { int s; #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined(SO_BINDANY) @@ -685,6 +687,36 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, #endif return -1; } + if(nodelay) { +#if defined(IPPROTO_TCP) && defined(TCP_NODELAY) + if(setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (void*)&on, + (socklen_t)sizeof(on)) < 0) { + #ifndef USE_WINSOCK + log_err(" setsockopt(.. TCP_NODELAY ..) failed: %s", + strerror(errno)); + #else + log_err(" setsockopt(.. TCP_NODELAY ..) failed: %s", + wsa_strerror(WSAGetLastError())); + #endif + } +#else + log_warn(" setsockopt(TCP_NODELAY) unsupported"); +#endif /* defined(IPPROTO_TCP) && defined(TCP_NODELAY) */ +#if defined(IPPROTO_TCP) && defined(TCP_QUICKACK) + if(setsockopt(s, IPPROTO_TCP, TCP_QUICKACK, (void*)&on, + (socklen_t)sizeof(on)) < 0) { + #ifndef USE_WINSOCK + log_err(" setsockopt(.. TCP_QUICKACK ..) failed: %s", + strerror(errno)); + #else + log_err(" setsockopt(.. TCP_QUICKACK ..) failed: %s", + wsa_strerror(WSAGetLastError())); + #endif + } +#else + log_warn(" setsockopt(TCP_QUICKACK) unsupported"); +#endif /* defined(IPPROTO_TCP) && defined(TCP_QUICKACK) */ + } if (mss > 0) { #if defined(IPPROTO_TCP) && defined(TCP_MAXSEG) if(setsockopt(s, IPPROTO_TCP, TCP_MAXSEG, (void*)&mss, @@ -952,7 +984,8 @@ err: static int make_sock(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, - int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd) + int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, + int use_systemd) { struct addrinfo *res = NULL; int r, s, inuse, noproto; @@ -988,7 +1021,7 @@ make_sock(int stype, const char* ifname, const char* port, } } else { s = create_tcp_accept_sock(res, v6only, &noproto, reuseport, - transparent, tcp_mss, freebind, use_systemd); + transparent, tcp_mss, nodelay, freebind, use_systemd); if(s == -1 && noproto && hints->ai_family == AF_INET6){ *noip6 = 1; } @@ -1001,7 +1034,8 @@ make_sock(int stype, const char* ifname, const char* port, static int make_sock_port(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, - int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd) + int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, + int use_systemd) { char* s = strchr(ifname, '@'); if(s) { @@ -1023,10 +1057,11 @@ make_sock_port(int stype, const char* ifname, const char* port, (void)strlcpy(p, s+1, sizeof(p)); p[strlen(s+1)]=0; return make_sock(stype, newif, p, hints, v6only, noip6, - rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd); + rcv, snd, reuseport, transparent, tcp_mss, nodelay, + freebind, use_systemd); } return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd, - reuseport, transparent, tcp_mss, freebind, use_systemd); + reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd); } /** @@ -1125,6 +1160,18 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, return 0; } +/** see if interface is https, its port number == the https port number */ +static int +if_is_https(const char* ifname, const char* port, int https_port) +{ + char* p = strchr(ifname, '@'); + if(!p && atoi(port) == https_port) + return 1; + if(p && atoi(p+1) == https_port) + return 1; + return 0; +} + /** * Helper for ports_open. Creates one interface (or NULL for default). * @param ifname: The interface ip address. @@ -1139,6 +1186,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, * @param snd: send buffer size for UDP * @param ssl_port: ssl service port number * @param tls_additional_port: list of additional ssl service port numbers. + * @param https_port: DoH service port number * @param reuseport: try to set SO_REUSEPORT if nonNULL and true. * set to false on exit if reuseport failed due to no kernel support. * @param transparent: set IP_TRANSPARENT socket option. @@ -1152,11 +1200,13 @@ static int ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, struct addrinfo *hints, const char* port, struct listen_port** list, size_t rcv, size_t snd, int ssl_port, - struct config_strlist* tls_additional_port, int* reuseport, - int transparent, int tcp_mss, int freebind, int use_systemd, - int dnscrypt_port) + struct config_strlist* tls_additional_port, int https_port, + int* reuseport, int transparent, int tcp_mss, int freebind, + int use_systemd, int dnscrypt_port) { int s, noip6=0; + int is_https = if_is_https(ifname, port, https_port); + int nodelay = is_https; /* TODO make config option */ #ifdef USE_DNSCRYPT int is_dnscrypt = ((strchr(ifname, '@') && atoi(strchr(ifname, '@')+1) == dnscrypt_port) || @@ -1171,7 +1221,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(do_auto) { if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, freebind, use_systemd)) == -1) { + tcp_mss, nodelay, freebind, use_systemd)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1200,7 +1250,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, /* regular udp socket */ if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, freebind, use_systemd)) == -1) { + tcp_mss, nodelay, freebind, use_systemd)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1220,8 +1270,17 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(do_tcp) { int is_ssl = if_is_ssl(ifname, port, ssl_port, tls_additional_port); + enum listen_type port_type; + if(is_ssl) + port_type = listen_type_ssl; + else if(is_https) + port_type = listen_type_http; + else if(is_dnscrypt) + port_type = listen_type_tcp_dnscrypt; + else + port_type = listen_type_tcp; if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, - &noip6, 0, 0, reuseport, transparent, tcp_mss, + &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd)) == -1) { if(noip6) { /*log_warn("IPv6 protocol not available");*/ @@ -1231,8 +1290,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, } if(is_ssl) verbose(VERB_ALGO, "setup TCP for SSL service"); - if(!port_insert(list, s, is_ssl?listen_type_ssl: - (is_dnscrypt?listen_type_tcp_dnscrypt:listen_type_tcp))) { + if(!port_insert(list, s, port_type)) { #ifndef USE_WINSOCK close(s); #else @@ -1266,7 +1324,7 @@ listen_cp_insert(struct comm_point* c, struct listen_dnsport* front) struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, size_t bufsize, int tcp_accept_count, int tcp_idle_timeout, - struct tcl_list* tcp_conn_limit, void* sslctx, + int harden_large_queries, struct tcl_list* tcp_conn_limit, void* sslctx, struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg) { struct listen_dnsport* front = (struct listen_dnsport*) @@ -1298,14 +1356,35 @@ listen_create(struct comm_base* base, struct listen_port* ports, ports->ftype == listen_type_tcp_dnscrypt) cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, + harden_large_queries, tcp_conn_limit, bufsize, front->udp_buff, - cb, cb_arg); - else if(ports->ftype == listen_type_ssl) { + ports->ftype, cb, cb_arg); + else if(ports->ftype == listen_type_ssl || + ports->ftype == listen_type_http) { cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, + harden_large_queries, tcp_conn_limit, bufsize, front->udp_buff, - cb, cb_arg); + ports->ftype, cb, cb_arg); cp->ssl = sslctx; + if(ports->ftype == listen_type_http) { + if(!sslctx) { + log_warn("HTTPS port configured, but no TLS " + "tls-service-key or tls-service-pem " + "set"); + } +#ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB + log_warn("Unbound is not compiled with an " + "OpenSSL version supporting ALPN " + " (OpenSSL >= 1.0.2). This is required " + "to use DNS-over-HTTPS"); +#endif +#ifndef HAVE_NGHTTP2_NGHTTP2_H + log_warn("Unbound is not compiled with " + "nghttp2. This is required to use " + "DNS-over-HTTPS."); +#endif + } } else if(ports->ftype == listen_type_udpancil || ports->ftype == listen_type_udpancil_dnscrypt) cp = comm_point_create_udp_ancil(base, ports->fd, @@ -1419,6 +1498,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, + cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1433,6 +1513,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, + cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1449,6 +1530,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, + cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1463,6 +1545,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, + cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1906,3 +1989,624 @@ size_t tcp_req_info_get_stream_buffer_size(void) lock_basic_unlock(&stream_wait_count_lock); return s; } + +#ifdef HAVE_NGHTTP2 +/** nghttp2 callback. Used to copy response from rbuffer to nghttp2 session */ +static ssize_t http2_submit_response_read_callback( + nghttp2_session* ATTR_UNUSED(session), + int32_t stream_id, uint8_t* buf, size_t length, uint32_t* data_flags, + nghttp2_data_source* source, void* ATTR_UNUSED(cb_arg)) +{ + struct http2_stream* h2_stream; + struct http2_session* h2_session = source->ptr; + size_t copylen = length; + if(!(h2_stream = nghttp2_session_get_stream_user_data( + h2_session->session, stream_id))) { + verbose(VERB_QUERY, "http2: cannot get stream data, closing " + "stream"); + return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; + } + if(!h2_stream->rbuffer || + sldns_buffer_remaining(h2_stream->rbuffer) == 0) { + verbose(VERB_QUERY, "http2: cannot submit buffer. No data " + "available in rbuffer"); + sldns_buffer_free(h2_stream->rbuffer); + h2_stream->rbuffer = NULL; + return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; + } + + if(copylen > sldns_buffer_remaining(h2_stream->rbuffer)) + copylen = sldns_buffer_remaining(h2_stream->rbuffer); + if(copylen > SSIZE_MAX) + copylen = SSIZE_MAX; /* will probably never happen */ + + memcpy(buf, sldns_buffer_current(h2_stream->rbuffer), copylen); + sldns_buffer_skip(h2_stream->rbuffer, copylen); + + if(sldns_buffer_remaining(h2_stream->rbuffer) == 0) { + *data_flags |= NGHTTP2_DATA_FLAG_EOF; + sldns_buffer_free(h2_stream->rbuffer); + h2_stream->rbuffer = NULL; + } + + return copylen; +} + +/** + * DNS response ready to be submitted to nghttp2, to be prepared for sending + * out. Response is stored in c->buffer. Copy to rbuffer because the c->buffer + * might be used before this will bne send out. + * @param h2_session: http2 session, containing c->buffer which contains answer + * @return 0 on error, 1 otherwise + */ +int http2_submit_dns_response(struct http2_session* h2_session) +{ + int ret; + nghttp2_data_provider data_prd; + char status[4]; + nghttp2_nv headers[2]; + struct http2_stream* h2_stream = h2_session->c->h2_stream; + + if(h2_stream->rbuffer) { + log_err("http2 submit response error: rbuffer already " + "exists"); + return 0; + } + if(sldns_buffer_remaining(h2_session->c->buffer) == 0) { + log_err("http2 submit response error: c->buffer not complete"); + return 0; + } + + if(!(h2_stream->rbuffer = sldns_buffer_new( + sldns_buffer_remaining(h2_session->c->buffer)))) { + log_err("http2 submit response error: malloc failure"); + return 0; + } + + if(snprintf(status, 4, "%d", h2_stream->status) != 3) { + verbose(VERB_QUERY, "http2: submit response error: " + "invalid status"); + return 0; + } + headers[0].name = (uint8_t*)":status"; + headers[0].namelen = 7; + headers[0].value = (uint8_t*)status; + headers[0].valuelen = 3; + headers[0].flags = NGHTTP2_NV_FLAG_NONE; + + headers[1].name = (uint8_t*)"content-type"; + headers[1].namelen = 12; + headers[1].value = (uint8_t*)"application/dns-message"; + headers[1].valuelen = 23; + headers[1].flags = NGHTTP2_NV_FLAG_NONE; + + /*TODO be nice and add the content-length header + headers[2].name = (uint8_t*)"content-length"; + headers[2].namelen = 14; + headers[2].value = + headers[2].valuelen = + headers[2].flags = NGHTTP2_NV_FLAG_NONE; + */ + + sldns_buffer_write(h2_stream->rbuffer, + sldns_buffer_current(h2_session->c->buffer), + sldns_buffer_remaining(h2_stream->rbuffer)); + sldns_buffer_flip(h2_stream->rbuffer); + + data_prd.source.ptr = h2_session; + data_prd.read_callback = http2_submit_response_read_callback; + ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id, + headers, 2, &data_prd); + if(ret) { + verbose(VERB_QUERY, "http2: set_stream_user_data failed, " + "error: %s", nghttp2_strerror(ret)); + return 0; + } + return 1; +} +#else +int http2_submit_dns_response(void* ATTR_UNUSED(v)) +{ + return 0; +} +#endif + +#ifdef HAVE_NGHTTP2 +/** HTTP status to descriptive string */ +static char* http_status_to_str(enum http_status s) +{ + switch(s) { + case HTTP_STATUS_OK: + return "OK"; + case HTTP_STATUS_BAD_REQUEST: + return "Bad Request"; + case HTTP_STATUS_NOT_FOUND: + return "Not Found"; + case HTTP_STATUS_PAYLOAD_TOO_LARGE: + return "Payload Too Large"; + case HTTP_STATUS_URI_TOO_LONG: + return "URI Too Long"; + case HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: + return "Unsupported Media Type"; + case HTTP_STATUS_NOT_IMPLEMENTED: + return "Not Implemented"; + } + return "Status Unknown"; +} + +/** nghttp2 callback. Used to copy error message to nghttp2 session */ +static ssize_t http2_submit_error_read_callback( + nghttp2_session* ATTR_UNUSED(session), + int32_t stream_id, uint8_t* buf, size_t length, uint32_t* data_flags, + nghttp2_data_source* source, void* ATTR_UNUSED(cb_arg)) +{ + struct http2_stream* h2_stream; + struct http2_session* h2_session = source->ptr; + char* msg; + if(!(h2_stream = nghttp2_session_get_stream_user_data( + h2_session->session, stream_id))) { + verbose(VERB_QUERY, "http2: cannot get stream data, closing " + "stream"); + return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; + } + *data_flags |= NGHTTP2_DATA_FLAG_EOF; + msg = http_status_to_str(h2_stream->status); + if(length < strlen(msg)) + return 0; /* not worth trying over multiple frames */ + memcpy(buf, msg, strlen(msg)); + return strlen(msg); + +} + +/** + * HTTP error response ready to be submitted to nghttp2, to be prepared for + * sending out. Message body will contain descriptive string for HTTP status. + * @param h2_session: http2 session to submit to + * @param h2_stream: http2 stream containing HTTP status to use for error + * @return 0 on error, 1 otherwise + */ +static int http2_submit_error(struct http2_session* h2_session, + struct http2_stream* h2_stream) +{ + int ret; + char status[4]; + nghttp2_data_provider data_prd; + nghttp2_nv headers[1]; /* will be copied by nghttp */ + if(snprintf(status, 4, "%d", h2_stream->status) != 3) { + verbose(VERB_QUERY, "http2: submit error failed, " + "invalid status"); + return 0; + } + headers[0].name = (uint8_t*)":status"; + headers[0].namelen = 7; + headers[0].value = (uint8_t*)status; + headers[0].valuelen = 3; + headers[0].flags = NGHTTP2_NV_FLAG_NONE; + + data_prd.source.ptr = h2_session; + data_prd.read_callback = http2_submit_error_read_callback; + + ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id, + headers, 1, &data_prd); + if(ret) { + verbose(VERB_QUERY, "http2: submit error failed, " + "error: %s", nghttp2_strerror(ret)); + return 0; + } + return 1; +} + +/** + * Start query handling. Query is stored in the stream, and will be free'd here. + * @param h2_session: http2 session, containing comm point + * @param h2_stream: stream containing buffered query + * @return: -1 on error, 1 if answer is stored in c->buffer, 0 if there is no + * reply available (yet). + */ +static int http2_query_read_done(struct http2_session* h2_session, + struct http2_stream* h2_stream) +{ + log_assert(h2_stream->qbuffer); + + if(h2_session->c->h2_stream) { + verbose(VERB_ALGO, "http2_query_read_done failure: shared " + "buffer already assigned to stream"); + return -1; + } + if(sldns_buffer_remaining(h2_session->c->buffer) < + sldns_buffer_remaining(h2_stream->qbuffer)) { + sldns_buffer_free(h2_stream->qbuffer); + h2_stream->qbuffer = NULL; + sldns_buffer_clear(h2_session->c->buffer); + verbose(VERB_ALGO, "http2_query_read_done failure: can't fit " + "qbuffer in c->buffer"); + return -1; + } + + sldns_buffer_write(h2_session->c->buffer, + sldns_buffer_current(h2_stream->qbuffer), + sldns_buffer_remaining(h2_stream->qbuffer)); + + sldns_buffer_free(h2_stream->qbuffer); + h2_stream->qbuffer = NULL; + + sldns_buffer_flip(h2_session->c->buffer); + h2_session->c->h2_stream = h2_stream; + fptr_ok(fptr_whitelist_comm_point(h2_session->c->callback)); + if((*h2_session->c->callback)(h2_session->c, h2_session->c->cb_arg, + NETEVENT_NOERROR, &h2_session->c->repinfo)) { + return 1; /* answer in c->buffer */ + } + sldns_buffer_clear(h2_session->c->buffer); + h2_session->c->h2_stream = NULL; + return 0; /* mesh state added, or dropped */ +} + +/** nghttp2 callback. Used to check if the received frame indicates the end of a + * stream. Gather collected request data and start query handling. */ +static int http2_req_frame_recv_cb(nghttp2_session* session, + const nghttp2_frame* frame, void* cb_arg) +{ + struct http2_session* h2_session = (struct http2_session*)cb_arg; + struct http2_stream* h2_stream; + int query_read_done; + + if((frame->hd.type != NGHTTP2_DATA && + frame->hd.type != NGHTTP2_HEADERS) || + !(frame->hd.flags & NGHTTP2_FLAG_END_STREAM)) { + return 0; + } + + if(!(h2_stream = nghttp2_session_get_stream_user_data( + session, frame->hd.stream_id))) + return 0; + + if(h2_stream->invalid_endpoint) { + h2_stream->status = HTTP_STATUS_NOT_FOUND; + goto submit_http_error; + } + + if(h2_stream->invalid_content_type) { + h2_stream->status = HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE; + goto submit_http_error; + } + + if(h2_stream->http_method != HTTP_METHOD_GET && + h2_stream->http_method != HTTP_METHOD_POST) { + h2_stream->status = HTTP_STATUS_NOT_IMPLEMENTED; + goto submit_http_error; + } + + if(h2_stream->query_too_large) { + if(h2_stream->http_method == HTTP_METHOD_POST) + h2_stream->status = HTTP_STATUS_PAYLOAD_TOO_LARGE; + else + h2_stream->status = HTTP_STATUS_URI_TOO_LONG; + goto submit_http_error; + } + + if(!h2_stream->qbuffer) { + h2_stream->status = HTTP_STATUS_BAD_REQUEST; + goto submit_http_error; + } + + if(h2_stream->status) { +submit_http_error: + verbose(VERB_QUERY, "http2 request invalid, returning :status=" + "%d", h2_stream->status); + if(!http2_submit_error(h2_session, h2_stream)) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return 0; + } + h2_stream->status = HTTP_STATUS_OK; + + sldns_buffer_flip(h2_stream->qbuffer); + h2_session->postpone_drop = 1; + query_read_done = http2_query_read_done(h2_session, h2_stream); + if(query_read_done < 0) + return NGHTTP2_ERR_CALLBACK_FAILURE; + else if(!query_read_done) { + if(h2_session->is_drop) { + /* connection needs to be closed. Return failure to make + * sure no other action are taken anymore on comm point. + * failure will result in reclaiming (and closing) + * of comm point. */ + verbose(VERB_QUERY, "http2 query dropped in worker cb"); + h2_session->postpone_drop = 0; + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + /* nothing to submit right now, query added to mesh. */ + h2_session->postpone_drop = 0; + return 0; + } + if(!http2_submit_dns_response(h2_session)) { + sldns_buffer_clear(h2_session->c->buffer); + h2_session->c->h2_stream = NULL; + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + verbose(VERB_QUERY, "http2 query submitted to session"); + sldns_buffer_clear(h2_session->c->buffer); + h2_session->c->h2_stream = NULL; + return 0; +} + +/** nghttp2 callback. Used to detect start of new streams. */ +static int http2_req_begin_headers_cb(nghttp2_session* session, + const nghttp2_frame* frame, void* cb_arg) +{ + struct http2_session* h2_session = (struct http2_session*)cb_arg; + struct http2_stream* h2_stream; + int ret; + if(frame->hd.type != NGHTTP2_HEADERS || + frame->headers.cat != NGHTTP2_HCAT_REQUEST) { + /* only interrested in request headers */ + return 0; + } + if(!(h2_stream = http2_stream_create(frame->hd.stream_id))) { + log_err("malloc failure while creating http2 stream"); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + http2_session_add_stream(h2_session, h2_stream); + ret = nghttp2_session_set_stream_user_data(session, + frame->hd.stream_id, h2_stream); + if(ret) { + /* stream does not exist */ + verbose(VERB_QUERY, "http2: set_stream_user_data failed, " + "error: %s", nghttp2_strerror(ret)); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + return 0; +} + +/** + * base64url decode, store in qbuffer + * @param h2_session: http2 session + * @param h2_stream: http2 stream + * @param start: start of the base64 string + * @param length: length of the base64 string + * @return: 0 on error, 1 otherwise. query will be stored in h2_stram->qbuffer, + * buffer will be NULL is unparseble. + */ +static int http2_buffer_uri_query(struct http2_session* h2_session, + struct http2_stream* h2_stream, const uint8_t* start, size_t length) +{ + size_t expectb64len; + int b64len; + if(h2_stream->http_method == HTTP_METHOD_POST) + return 1; + if(length == 0) + return 1; + if(h2_stream->qbuffer) { + verbose(VERB_ALGO, "http2_req_header fail, " + "qbuffer already set"); + return 0; + } + + /* calculate size, might be a bit bigger than the real + * decoded buffer size */ + expectb64len = sldns_b64_pton_calculate_size(length); + log_assert(expectb64len > 0); + if(expectb64len > + h2_session->c->http2_max_qbuffer_size) { + h2_stream->query_too_large = 1; + return 1; + } + + if(!(h2_stream->qbuffer = sldns_buffer_new(expectb64len))) { + log_err("http2_req_header fail, qbuffer " + "malloc failure"); + return 0; + } + + if(!(b64len = sldns_b64url_pton( + (char const *)start, length, + sldns_buffer_current(h2_stream->qbuffer), + expectb64len)) || b64len < 0) { + sldns_buffer_free(h2_stream->qbuffer); + h2_stream->qbuffer = NULL; + /* return without error, method can be an + * unknown POST */ + return 1; + } + sldns_buffer_skip(h2_stream->qbuffer, (size_t)b64len); + return 1; +} + +/** nghttp2 callback. Used to parse headers from HEADER frames. */ +static int http2_req_header_cb(nghttp2_session* session, + const nghttp2_frame* frame, const uint8_t* name, size_t namelen, + const uint8_t* value, size_t valuelen, uint8_t ATTR_UNUSED(flags), + void* cb_arg) +{ + struct http2_stream* h2_stream = NULL; + struct http2_session* h2_session = (struct http2_session*)cb_arg; + /* nghttp2 deals with CONTINUATION frames and provides them as part of + * the HEADER */ + if(frame->hd.type != NGHTTP2_HEADERS || + frame->headers.cat != NGHTTP2_HCAT_REQUEST) { + /* only interrested in request headers */ + return 0; + } + if(!(h2_stream = nghttp2_session_get_stream_user_data(session, + frame->hd.stream_id))) + return 0; + + /* earlier checks already indicate we can stop handling this query */ + if(h2_stream->http_method == HTTP_METHOD_UNSUPPORTED || + h2_stream->invalid_content_type || + h2_stream->invalid_endpoint) + return 0; + + + /* nghttp2 performs some sanity checks in the headers, including: + * name and value are guaranteed to be null terminated + * name is guaranteed to be lowercase + * content-length value is guaranteed to contain digits + */ + + if(!h2_stream->http_method && namelen == 7 && + memcmp(":method", name, namelen) == 0) { + /* Case insensitive check on :method value to be on the safe + * side. I failed to find text about case sentitivity in specs. + */ + if(valuelen == 3 && strcasecmp("GET", (const char*)value) == 0) + h2_stream->http_method = HTTP_METHOD_GET; + else if(valuelen == 4 && + strcasecmp("POST", (const char*)value) == 0) { + h2_stream->http_method = HTTP_METHOD_POST; + if(h2_stream->qbuffer) { + /* POST method uses query from DATA frames */ + sldns_buffer_free(h2_stream->qbuffer); + h2_stream->qbuffer = NULL; + } + } else + h2_stream->http_method = HTTP_METHOD_UNSUPPORTED; + return 0; + } + if(namelen == 5 && memcmp(":path", name, namelen) == 0) { + /* Hard coded /dns-query endpoint, might be nice to make + * configurable. + * :path may contain DNS query, depending on method. Method might + * not be known yet here, so check after finishing receiving + * stream. */ +#define HTTP_ENDPOINT "/dns-query" +#define HTTP_QUERY_PARAM "?dns=" + size_t el = sizeof(HTTP_ENDPOINT) - 1; + size_t qpl = sizeof(HTTP_QUERY_PARAM) - 1; + + if(valuelen < el || memcmp(HTTP_ENDPOINT, value, el) != 0) { + h2_stream->invalid_endpoint = 1; + return 0; + } + /* larger than endpoint only allowed if it is for the query + * parameter */ + if(valuelen <= el+qpl || + memcmp(HTTP_QUERY_PARAM, value+el, qpl) != 0) { + if(valuelen != el) + h2_stream->invalid_endpoint = 1; + return 0; + } + + if(!http2_buffer_uri_query(h2_session, h2_stream, + value+(el+qpl), valuelen-(el+qpl))) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return 0; + } + /* Content type is a SHOULD (rfc7231#section-3.1.1.5) when using POST, + * and not needed when using GET. Don't enfore. + * If set only allow lowercase "application/dns-message". + * + * Clients SHOULD (rfc8484#section-4.1) set an accept header, but MUST + * be able to handle "application/dns-message". Since that is the only + * content-type supported we can ignore the accept header. + */ + if((namelen == 12 && memcmp("content-type", name, namelen) == 0)) { + if(valuelen != 23 || memcmp("application/dns-message", value, + valuelen) != 0) { + h2_stream->invalid_content_type = 1; + } + } + + /* Only interested in content-lentg for POST (on not yet known) method. + */ + if((!h2_stream->http_method || + h2_stream->http_method == HTTP_METHOD_POST) && + !h2_stream->content_length && namelen == 14 && + memcmp("content-length", name, namelen) == 0) { + if(valuelen > 5) { + h2_stream->query_too_large = 1; + return 0; + } + /* guaranteed to only contian digits and be null terminated */ + h2_stream->content_length = atoi((const char*)value); + if(h2_stream->content_length > + h2_session->c->http2_max_qbuffer_size) { + h2_stream->query_too_large = 1; + return 0; + } + } + return 0; +} + +/** nghttp2 callback. Used to get data from DATA frames, which can contain + * queries in POST requests. */ +static int http2_req_data_chunk_recv_cb(nghttp2_session* ATTR_UNUSED(session), + uint8_t ATTR_UNUSED(flags), int32_t stream_id, const uint8_t* data, + size_t len, void* cb_arg) +{ + struct http2_session* h2_session = (struct http2_session*)cb_arg; + struct http2_stream* h2_stream; + + if(!(h2_stream = nghttp2_session_get_stream_user_data( + h2_session->session, stream_id))) { + return 0; + } + + if(h2_stream->query_too_large) + return 0; + + if(!h2_stream->qbuffer) { + if(h2_stream->content_length) { + if(h2_stream->content_length < len) + /* getting more data in DATA frame than + * advertised in content-length header. */ + return NGHTTP2_ERR_CALLBACK_FAILURE; + h2_stream->qbuffer = sldns_buffer_new( + h2_stream->content_length); + } else if(len <= h2_session->c->http2_max_qbuffer_size) { + /* setting this to msg-buffer-size can result in a lot + * of memory consuption. Most queries should fit in a + * single DATA frame, and most POST queries will + * containt content-length which does not impose this + * limit. */ + h2_stream->qbuffer = sldns_buffer_new(len); + } + } + + if(!h2_stream->qbuffer || + sldns_buffer_remaining(h2_stream->qbuffer) < len) { + verbose(VERB_ALGO, "http2 data_chunck_recv failed. Not enough " + "buffer space for POST query. Can happen on multi " + "frame requests without content-length header"); + h2_stream->query_too_large = 1; + return 0; + } + + sldns_buffer_write(h2_stream->qbuffer, data, len); + + return 0; +} + +nghttp2_session_callbacks* http2_req_callbacks_create() +{ + nghttp2_session_callbacks *callbacks; + if(nghttp2_session_callbacks_new(&callbacks) == NGHTTP2_ERR_NOMEM) { + log_err("failed to initialize nghttp2 callback"); + return NULL; + } + /* reception of header block started, used to create h2_stream */ + nghttp2_session_callbacks_set_on_begin_headers_callback(callbacks, + http2_req_begin_headers_cb); + /* complete frame received, used to get data from stream if frame + * has end stream flag, and start processing query */ + nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks, + http2_req_frame_recv_cb); + /* get request info from headers */ + nghttp2_session_callbacks_set_on_header_callback(callbacks, + http2_req_header_cb); + /* get data from DATA frames, containing POST query */ + nghttp2_session_callbacks_set_on_data_chunk_recv_callback(callbacks, + http2_req_data_chunk_recv_cb); + + /* generic HTTP2 callbacks */ + nghttp2_session_callbacks_set_recv_callback(callbacks, http2_recv_cb); + nghttp2_session_callbacks_set_send_callback(callbacks, http2_send_cb); + nghttp2_session_callbacks_set_on_stream_close_callback(callbacks, + http2_stream_close_cb); + + return callbacks; +} +#endif /* HAVE_NGHTTP2 */ diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index ad84d8322..6b5a85822 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -43,6 +43,9 @@ #define LISTEN_DNSPORT_H #include "util/netevent.h" +#ifdef HAVE_NGHTTP2_NGHTTP2_H +#include +#endif struct listen_list; struct config_file; struct addrinfo; @@ -94,8 +97,9 @@ enum listen_type { /** tcp type + dnscrypt */ listen_type_tcp_dnscrypt, /** udp ipv6 (v4mapped) for use with ancillary data + dnscrypt*/ - listen_type_udpancil_dnscrypt - + listen_type_udpancil_dnscrypt, + /** HTTP(2) over TLS over TCP */ + listen_type_http }; /** @@ -139,6 +143,7 @@ void listening_ports_free(struct listen_port* list); * @param tcp_accept_count: max number of simultaneous TCP connections * from clients. * @param tcp_idle_timeout: idle timeout for TCP connections in msec. + * @param harden_large_queries: whether query size should be limited. * @param tcp_conn_limit: TCP connection limit info. * @param sslctx: nonNULL if ssl context. * @param dtenv: nonNULL if dnstap enabled. @@ -149,7 +154,7 @@ void listening_ports_free(struct listen_port* list); */ struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, size_t bufsize, - int tcp_accept_count, int tcp_idle_timeout, + int tcp_accept_count, int tcp_idle_timeout, int harden_large_queries, struct tcl_list* tcp_conn_limit, void* sslctx, struct dt_env *dtenv, comm_point_callback_type* cb, void* cb_arg); @@ -220,12 +225,14 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr, * listening UDP port. Set to false on return if it failed to do so. * @param transparent: set IP_TRANSPARENT socket option. * @param mss: maximum segment size of the socket. if zero, leaves the default. + * @param nodelay: if true set TCP_NODELAY and TCP_QUICKACK socket options. * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. * @return: the socket. -1 on error. */ int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, - int* reuseport, int transparent, int mss, int freebind, int use_systemd); + int* reuseport, int transparent, int mss, int nodelay, int freebind, + int use_systemd); /** * Create and bind local listening socket @@ -367,4 +374,24 @@ int tcp_req_info_handle_read_close(struct tcp_req_info* req); /** get the size of currently used tcp stream wait buffers (in bytes) */ size_t tcp_req_info_get_stream_buffer_size(void); +#ifdef HAVE_NGHTTP2 +/** + * Create nghttp2 callbacks to handle HTTP2 requests. + * @return malloc'ed struct, NULL on failure + */ +nghttp2_session_callbacks* http2_req_callbacks_create(); + +/** + * DNS response ready to be submitted to nghttp2, to be prepared for sending + * out. Response is stored in c->buffer. Copy to rbuffer because the c->buffer + * might be used before this will be send out. + * @param h2_session: http2 session, containing c->buffer which contains answer + * @param h2_stream: http2 stream, containing buffer to store answer in + * @return 0 on error, 1 otherwise + */ +int http2_submit_dns_response(struct http2_session* h2_session); +#else +int http2_submit_dns_response(void* v); +#endif /* HAVE_NGHTTP2 */ + #endif /* LISTEN_DNSPORT_H */ diff --git a/services/mesh.c b/services/mesh.c index 09c51a2be..4234fd8af 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -551,6 +551,9 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, goto servfail_mem; } } + if(rep->c->alpn_h2) { + http2_stream_add_meshstate(rep->c->h2_stream, mesh, s); + } /* add serve expired timer if required and not already there */ if(timeout && !mesh_serve_expired_init(s, timeout)) { log_err("mesh_new_client: out of memory initializing serve expired"); @@ -1207,6 +1210,9 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, else secure = 0; if(!rep && rcode == LDNS_RCODE_NOERROR) rcode = LDNS_RCODE_SERVFAIL; + if(r->query_reply.c->alpn_h2) { + r->query_reply.c->h2_stream = r->h2_stream; + } /* send the reply */ /* We don't reuse the encoded answer if either the previous or current * response has a local alias. We could compare the alias records @@ -1488,6 +1494,8 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns, s->s.qinfo.qname_len); if(!r->qname) return 0; + if(rep->c->alpn_h2) + r->h2_stream = rep->c->h2_stream; /* Data related to local alias stored in 'qinfo' (if any) is ephemeral * and can be different for different original queries (even if the diff --git a/services/mesh.h b/services/mesh.h index df2972ac3..d0a4b5fb3 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -230,6 +230,8 @@ struct mesh_reply { uint8_t* qname; /** same as that in query_info. */ struct local_rrset* local_alias; + /** send query to this http2 stream, if set */ + struct http2_stream* h2_stream; }; /** diff --git a/sldns/parseutil.c b/sldns/parseutil.c index 82dbc0fe1..b51a0709d 100644 --- a/sldns/parseutil.c +++ b/sldns/parseutil.c @@ -674,14 +674,17 @@ size_t sldns_b64_pton_calculate_size(size_t srcsize) return (((((srcsize + 3) / 4) * 3)) + 1); } -int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize) +/* padding not required if srcsize is set */ +static int sldns_b64_pton_base(char const *src, size_t srcsize, uint8_t *target, + size_t targsize, int base64url) { const uint8_t pad64 = 64; /* is 64th in the b64 array */ const char* s = src; uint8_t in[4]; size_t o = 0, incount = 0; + int check_padding = (srcsize) ? 0 : 1; - while(*s) { + while(*s && (check_padding || srcsize)) { /* skip any character that is not base64 */ /* conceptually we do: const char* b64 = pad'=' is appended to array @@ -690,30 +693,40 @@ int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize) and use d-b64; */ char d = *s++; + srcsize--; if(d <= 'Z' && d >= 'A') d -= 'A'; else if(d <= 'z' && d >= 'a') d = d - 'a' + 26; else if(d <= '9' && d >= '0') d = d - '0' + 52; - else if(d == '+') + else if(!base64url && d == '+') + d = 62; + else if(base64url && d == '-') d = 62; - else if(d == '/') + else if(!base64url && d == '/') + d = 63; + else if(base64url && d == '_') d = 63; - else if(d == '=') + else if(!base64url && d == '=') d = 64; else continue; in[incount++] = (uint8_t)d; - if(incount != 4) + /* work on block of 4, unless padding is not used and there are + * less than 4 chars left */ + if(incount != 4 && (check_padding || srcsize)) continue; + assert(!check_padding || incount==4); /* process whole block of 4 characters into 3 output bytes */ - if(in[3] == pad64 && in[2] == pad64) { /* A B = = */ + if((incount == 2 || + (incount == 4 && in[3] == pad64 && in[2] == pad64))) { /* A B = = */ if(o+1 > targsize) return -1; target[o] = (in[0]<<2) | ((in[1]&0x30)>>4); o += 1; break; /* we are done */ - } else if(in[3] == pad64) { /* A B C = */ + } else if(incount == 3 || + (incount == 4 && in[3] == pad64)) { /* A B C = */ if(o+2 > targsize) return -1; target[o] = (in[0]<<2) | ((in[1]&0x30)>>4); @@ -721,7 +734,7 @@ int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize) o += 2; break; /* we are done */ } else { - if(o+3 > targsize) + if(incount != 4 || o+3 > targsize) return -1; /* write xxxxxxyy yyyyzzzz zzwwwwww */ target[o] = (in[0]<<2) | ((in[1]&0x30)>>4); @@ -733,3 +746,17 @@ int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize) } return (int)o; } + +int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize) +{ + return sldns_b64_pton_base(src, 0, target, targsize, 0); +} + +int sldns_b64url_pton(char const *src, size_t srcsize, uint8_t *target, + size_t targsize) +{ + if(!srcsize) { + return 0; + } + return sldns_b64_pton_base(src, srcsize, target, targsize, 1); +} diff --git a/sldns/parseutil.h b/sldns/parseutil.h index 10a2630a9..852ad3fb5 100644 --- a/sldns/parseutil.h +++ b/sldns/parseutil.h @@ -97,8 +97,9 @@ int sldns_b64_ntop(uint8_t const *src, size_t srclength, * calculates the size needed to store the result of sldns_b64_pton */ size_t sldns_b64_pton_calculate_size(size_t srcsize); - int sldns_b64_pton(char const *src, uint8_t *target, size_t targsize); +int sldns_b64url_pton(char const *src, size_t srcsize, uint8_t *target, + size_t targsize); /** * calculates the size needed to store the result of b32_ntop diff --git a/testcode/fake_event.c b/testcode/fake_event.c index d6e904a4d..6222003bc 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -868,6 +868,7 @@ struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ATTR_UNUSED(ports), size_t bufsize, int ATTR_UNUSED(tcp_accept_count), int ATTR_UNUSED(tcp_idle_timeout), + int ATTR_UNUSED(harden_large_queries), struct tcl_list* ATTR_UNUSED(tcp_conn_limit), void* ATTR_UNUSED(sslctx), struct dt_env* ATTR_UNUSED(dtenv), comm_point_callback_type* cb, void* cb_arg) @@ -1823,4 +1824,9 @@ tcp_req_info_get_stream_buffer_size(void) return 0; } +void http2_stream_add_meshstate(struct http2_stream* ATTR_UNUSED(h2_stream), + struct mesh_area* ATTR_UNUSED(mesh), struct mesh_state* ATTR_UNUSED(m)) +{ +} + /*********** End of Dummy routines ***********/ diff --git a/util/config_file.c b/util/config_file.c index 814d9f436..050db3175 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -116,6 +116,7 @@ config_create(void) cfg->ssl_upstream = 0; cfg->tls_cert_bundle = NULL; cfg->tls_win_cert = 0; + cfg->https_port = UNBOUND_DNS_OVER_HTTPS_PORT; cfg->use_syslog = 1; cfg->log_identity = NULL; /* changed later with argv[0] */ cfg->log_time_ascii = 0; @@ -505,6 +506,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STRLIST_APPEND("tls-session-ticket-keys:", tls_session_ticket_keys) else S_STR("tls-ciphers:", tls_ciphers) else S_STR("tls-ciphersuites:", tls_ciphersuites) + else S_NUMBER_NONZERO("https-port:", https_port) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -957,6 +959,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys.first) else O_STR(opt, "tls-ciphers", tls_ciphers) else O_STR(opt, "tls-ciphersuites", tls_ciphersuites) + else O_DEC(opt, "https-port", https_port) else O_YNO(opt, "use-systemd", use_systemd) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) diff --git a/util/config_file.h b/util/config_file.h index bd6e884eb..30e552803 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -128,6 +128,8 @@ struct config_file { char* tls_ciphers; /** TLS chiphersuites (TLSv1.3) */ char* tls_ciphersuites; + /** port on which to provide DNS over HTTPS service */ + int https_port; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; diff --git a/util/configlexer.c b/util/configlexer.c index 601cd78bf..abbc7198c 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -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 309 -#define YY_END_OF_BUFFER 310 +#define YY_NUM_RULES 310 +#define YY_END_OF_BUFFER 311 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,343 +363,344 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3044] = +static const flex_int16_t yy_accept[3054] = { 0, - 1, 1, 291, 291, 295, 295, 299, 299, 303, 303, - 1, 1, 310, 307, 1, 289, 289, 308, 2, 308, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 291, 292, 292, 293, 308, 295, 296, 296, - 297, 308, 302, 299, 300, 300, 301, 308, 303, 304, - 304, 305, 308, 306, 290, 2, 294, 308, 306, 307, - 0, 1, 2, 2, 2, 2, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 291, 0, 295, 0, 302, 0, 299, 303, 0, 306, - 0, 2, 2, 306, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 306, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 113, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 121, 307, 307, 307, 307, - 307, 307, 307, 306, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 97, 307, - 307, 307, 307, 307, 307, 8, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 114, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 126, 307, 306, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 284, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 306, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 55, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 223, 307, 14, 15, 307, 19, 18, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 120, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 207, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 3, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 306, 307, 307, 307, 307, 307, 307, - 307, 279, 307, 307, 278, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 298, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 58, 307, 253, 307, 307, 307, - 307, 307, 307, 307, 307, 285, 286, 307, 307, 307, - 307, 307, 59, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 117, 307, - 307, 307, 307, 307, 307, 307, 307, 196, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 21, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 145, 307, 307, 298, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 95, 307, 307, 307, 307, 307, 307, 307, 261, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 168, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 144, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 94, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 32, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 33, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 56, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 119, 307, - 307, 307, 307, 307, 112, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 57, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 226, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 169, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 46, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 244, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 50, 307, 51, 307, 307, 307, 307, 307, 98, 307, - 99, 307, 307, 307, 307, 96, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 7, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 216, 307, 307, 307, 307, 147, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 227, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 47, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 188, 307, 187, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 16, 17, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 60, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 195, 307, - 307, 307, 307, 307, 307, 101, 307, 100, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 179, 307, - 307, 307, 307, 307, 307, 307, 307, 127, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 79, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 83, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 54, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 182, 183, 307, 307, 307, 255, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 6, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 259, 307, 307, 307, 307, 307, 307, 280, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 42, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 44, 307, 307, 307, 307, 307, 307, 307, 307, - 175, 307, 307, 307, 122, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 200, 307, 176, 307, 307, - 307, 213, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 45, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 124, 106, 307, 107, 307, 307, 307, 105, 307, - 307, 307, 307, 307, 307, 307, 307, 142, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 243, - 307, 307, 307, 307, 307, 307, 307, 307, 177, 307, - 307, 307, 307, 307, 180, 307, 186, 307, 307, 307, - 307, 307, 212, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 93, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 118, 307, 307, 307, 307, - 307, 307, 52, 307, 307, 307, 26, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 20, 307, 307, 307, - 307, 307, 307, 27, 36, 307, 152, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 68, 70, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 263, 307, 307, 307, 224, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 108, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 141, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 274, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 146, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 206, 307, 307, 307, - 307, 307, 307, 307, 307, 283, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 163, 307, 307, - 307, 307, 307, 307, 307, 307, 102, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 158, 307, 170, 307, - 307, 307, 307, 307, 130, 307, 307, 307, 307, 307, - 89, 307, 307, 307, 307, 198, 307, 307, 307, 307, - 307, 307, 214, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 235, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 123, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 162, - 307, 307, 307, 307, 307, 71, 72, 307, 307, 307, - 307, 307, 53, 307, 307, 307, 307, 307, 78, 171, - 307, 189, 307, 217, 307, 307, 181, 256, 307, 307, - 307, 307, 307, 64, 307, 173, 307, 307, 307, 307, - 307, 9, 307, 307, 307, 92, 307, 307, 307, 307, - 248, 307, 307, 307, 197, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 161, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 148, 307, 262, 307, 307, - 307, 307, 234, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 208, 307, 307, 307, 307, 254, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 277, 307, 172, 307, 307, 307, - - 307, 307, 307, 307, 63, 65, 307, 307, 307, 307, - 307, 307, 307, 91, 307, 307, 307, 307, 246, 307, - 307, 307, 258, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 202, 34, 28, 30, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 35, 307, 29, - 31, 307, 307, 307, 307, 307, 307, 307, 307, 88, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 204, 201, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 62, 307, 307, 125, - - 307, 109, 307, 307, 307, 307, 307, 307, 307, 307, - 143, 13, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 272, 307, 275, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 12, 307, 307, 22, 307, 307, - 307, 252, 307, 307, 307, 260, 307, 307, 307, 66, - 307, 210, 307, 307, 307, 307, 203, 307, 307, 61, - 307, 307, 307, 307, 23, 307, 43, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 157, - 156, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 205, 199, 307, 215, 307, 307, 264, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 73, 307, 307, 307, 247, 307, - 307, 307, 307, 185, 307, 307, 307, 307, 209, 307, - 307, 307, 307, 307, 307, 307, 307, 281, 282, 154, - 307, 307, 67, 307, 307, 307, 307, 164, 307, 307, - 103, 104, 307, 307, 307, 307, 149, 307, 151, 307, - 190, 307, 307, 307, 307, 155, 307, 307, 218, 307, - 307, 307, 307, 307, 307, 307, 132, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 225, 307, - - 307, 307, 307, 307, 307, 307, 24, 307, 257, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 191, 307, 307, 245, 307, 276, 307, 184, 307, 307, - 307, 307, 48, 307, 307, 307, 307, 4, 307, 307, - 307, 116, 131, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 221, 37, 38, 307, 307, 307, 307, 307, 307, - 307, 265, 307, 307, 307, 307, 307, 307, 233, 307, - 307, 307, 307, 307, 307, 307, 194, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 76, 307, 49, 251, - - 307, 222, 307, 307, 307, 307, 11, 307, 307, 307, - 307, 307, 115, 307, 307, 307, 307, 192, 80, 307, - 40, 307, 307, 307, 307, 307, 307, 307, 307, 160, - 307, 307, 307, 307, 307, 134, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 232, 307, 307, 307, 307, - 128, 307, 307, 110, 111, 307, 307, 307, 82, 86, - 81, 307, 74, 307, 307, 307, 307, 307, 10, 307, - 307, 307, 249, 307, 307, 307, 307, 288, 39, 307, - 307, 307, 307, 307, 159, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 87, 85, 307, - 75, 273, 307, 307, 307, 307, 307, 307, 307, 178, - 307, 307, 307, 307, 307, 193, 307, 307, 307, 307, - 307, 307, 307, 307, 150, 69, 307, 307, 307, 307, - 307, 266, 307, 307, 307, 307, 307, 307, 307, 229, - 307, 307, 228, 129, 307, 84, 135, 136, 139, 140, - 137, 138, 77, 307, 250, 307, 307, 307, 307, 153, - 307, 307, 307, 307, 307, 220, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 166, 165, 41, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 90, 307, 219, 307, 242, 270, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 5, 307, - 307, 211, 307, 307, 271, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 230, 25, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 231, 307, - 307, 307, 133, 307, 307, 307, 307, 307, 307, 307, - 307, 167, 307, 174, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 267, 307, 307, 307, 307, 307, 307, - - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 287, 307, 307, 238, 307, 307, 307, 307, 307, - 268, 307, 307, 307, 307, 307, 307, 269, 307, 307, - 307, 236, 307, 239, 240, 307, 307, 307, 307, 307, - 237, 241, 0 + 1, 1, 292, 292, 296, 296, 300, 300, 304, 304, + 1, 1, 311, 308, 1, 290, 290, 309, 2, 309, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 292, 293, 293, 294, 309, 296, 297, 297, + 298, 309, 303, 300, 301, 301, 302, 309, 304, 305, + 305, 306, 309, 307, 291, 2, 295, 309, 307, 308, + 0, 1, 2, 2, 2, 2, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 292, 0, 296, 0, 303, 0, 300, 304, 0, + 307, 0, 2, 2, 307, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 307, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 114, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 122, 308, + 308, 308, 308, 308, 308, 308, 307, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 98, 308, 308, 308, 308, 308, 308, 8, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 115, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 127, 308, + + 307, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 285, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 307, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 56, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 224, 308, 14, 15, + 308, 19, 18, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 121, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 208, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 3, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 307, + 308, 308, 308, 308, 308, 308, 308, 280, 308, 308, + 279, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 299, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 59, 308, 254, 308, 308, 308, 308, 308, 308, + 308, 308, 286, 287, 308, 308, 308, 308, 308, 60, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 118, 308, 308, 308, 308, + 308, 308, 308, 308, 197, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 21, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 146, 308, 308, 299, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 96, 308, 308, + 308, 308, 308, 308, 308, 262, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 169, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 145, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 95, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 32, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 33, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 57, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 120, 308, 308, 308, + 308, 308, 113, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 58, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 227, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 170, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 47, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 245, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 51, + 308, 52, 308, 308, 308, 308, 308, 99, 308, 100, + 308, 308, 308, 308, 97, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 7, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 217, 308, 308, 308, 308, 148, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 228, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 44, 308, 308, 308, 308, 308, 308, 308, 48, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 189, 308, 188, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 16, 17, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 61, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 196, 308, + 308, 308, 308, 308, 308, 102, 308, 101, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 180, 308, + 308, 308, 308, 308, 308, 308, 308, 128, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 80, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 84, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 55, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 183, 184, 308, 308, 308, 256, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 6, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 260, 308, 308, 308, 308, 308, 308, 281, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 42, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 45, 308, 308, 308, 308, 308, 308, 308, 308, + 176, 308, 308, 308, 123, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 201, 308, 177, 308, 308, + 308, 214, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 46, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 125, 107, 308, 108, 308, 308, 308, 106, 308, + + 308, 308, 308, 308, 308, 308, 308, 143, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 244, + 308, 308, 308, 308, 308, 308, 308, 308, 178, 308, + 308, 308, 308, 308, 181, 308, 187, 308, 308, 308, + 308, 308, 213, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 94, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 119, 308, 308, 308, 308, + 308, 308, 53, 308, 308, 308, 26, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 20, 308, 308, 308, + + 308, 308, 308, 27, 36, 308, 153, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 69, 71, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 264, 308, 308, 308, 225, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 109, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 142, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 275, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 147, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 207, 308, 308, 308, + 308, 308, 308, 308, 308, 284, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 164, 308, 308, + 308, 308, 308, 308, 308, 308, 103, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 159, 308, 171, 308, + 308, 308, 308, 308, 131, 308, 308, 308, 308, 308, + 90, 308, 308, 308, 308, 199, 308, 308, 308, 308, + + 308, 308, 215, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 236, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 124, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 163, + 308, 308, 308, 308, 308, 72, 73, 308, 308, 308, + 308, 308, 54, 308, 308, 308, 308, 308, 79, 172, + 308, 190, 308, 218, 308, 308, 182, 257, 308, 308, + 308, 308, 308, 65, 308, 174, 308, 308, 308, 308, + 308, 9, 308, 308, 308, 93, 308, 308, 308, 308, + 249, 308, 308, 308, 198, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 162, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 149, 308, 263, 308, 308, + 308, 308, 235, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 209, 308, 308, 308, 308, 255, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 278, 308, 173, 308, 308, 308, + 308, 308, 308, 308, 64, 66, 308, 308, 308, 308, + 308, 308, 308, 92, 308, 308, 308, 308, 247, 308, + 308, 308, 259, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 203, 34, 28, 30, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 35, 308, 29, + 31, 308, 308, 308, 308, 308, 308, 308, 308, 89, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 205, 202, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 63, 308, 308, 126, + 308, 110, 308, 308, 308, 308, 308, 308, 308, 308, + 144, 13, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 273, 308, 276, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 12, 308, 308, 22, 308, 308, + 308, 253, 308, 308, 308, 261, 308, 308, 308, 67, + 308, 211, 308, 308, 308, 308, 204, 308, 308, 62, + 308, 308, 308, 308, 23, 308, 43, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 158, + 157, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 206, 200, 308, 216, 308, 308, 265, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 74, 308, 308, 308, 248, 308, + 308, 308, 308, 186, 308, 308, 308, 308, 210, 308, + 308, 308, 308, 308, 308, 308, 308, 282, 283, 155, + 308, 308, 68, 308, 308, 308, 308, 165, 308, 308, + 104, 105, 308, 308, 308, 308, 150, 308, 152, 308, + 191, 308, 308, 308, 308, 156, 308, 308, 219, 308, + 308, 308, 308, 308, 308, 308, 133, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 226, 308, + 308, 308, 308, 308, 308, 308, 24, 308, 258, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 192, 308, 308, 246, 308, 277, 308, 185, 308, 308, + 308, 308, 49, 308, 308, 308, 308, 4, 308, 308, + 308, 117, 132, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 222, 37, 38, 308, 308, 308, 308, 308, 308, + 308, 266, 308, 308, 308, 308, 308, 308, 234, 308, + 308, 308, 308, 308, 308, 308, 195, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 77, 308, 50, 252, + 308, 223, 308, 308, 308, 308, 11, 308, 308, 308, + 308, 308, 116, 308, 308, 308, 308, 193, 81, 308, + 40, 308, 308, 308, 308, 308, 308, 308, 308, 161, + 308, 308, 308, 308, 308, 135, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 233, 308, 308, 308, 308, + 129, 308, 308, 111, 112, 308, 308, 308, 83, 87, + 82, 308, 75, 308, 308, 308, 308, 308, 10, 308, + 308, 308, 250, 308, 308, 308, 308, 289, 39, 308, + 308, 308, 308, 308, 160, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 88, 86, 308, + 76, 274, 308, 308, 308, 308, 308, 308, 308, 179, + 308, 308, 308, 308, 308, 194, 308, 308, 308, 308, + 308, 308, 308, 308, 151, 70, 308, 308, 308, 308, + 308, 267, 308, 308, 308, 308, 308, 308, 308, 230, + 308, 308, 229, 130, 308, 85, 136, 137, 140, 141, + 138, 139, 78, 308, 251, 308, 308, 308, 308, 154, + 308, 308, 308, 308, 308, 221, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 167, 166, 41, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 91, 308, 220, 308, 243, 271, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 5, 308, + 308, 212, 308, 308, 272, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 231, 25, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 232, 308, + 308, 308, 134, 308, 308, 308, 308, 308, 308, 308, + 308, 168, 308, 175, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 268, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 288, 308, 308, 239, 308, 308, 308, 308, 308, + 269, 308, 308, 308, 308, 308, 308, 270, 308, 308, + 308, 237, 308, 240, 241, 308, 308, 308, 308, 308, + 238, 242, 0 } ; static const YY_CHAR yy_ec[256] = @@ -742,687 +743,689 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3058] = +static const flex_int16_t yy_base[3068] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 3212, 2720, 81, 5927, 5927, 5927, 96, 52, + 90, 112, 2338, 2174, 81, 5953, 5953, 5953, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, - 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 2544, 5927, 5927, 5927, 107, 2459, 5927, 5927, - 5927, 165, 2157, 2047, 5927, 5927, 5927, 211, 1913, 5927, - 5927, 5927, 180, 1568, 5927, 217, 5927, 221, 168, 1529, - 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, - - 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, - 1432, 379, 1075, 381, 915, 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, 463, 472, - 465, 473, 484, 479, 488, 492, 475, 493, 496, 491, - - 503, 499, 506, 507, 502, 498, 508, 510, 513, 515, - 516, 518, 517, 520, 521, 523, 525, 533, 535, 526, - 534, 528, 547, 542, 549, 546, 548, 552, 551, 555, - 563, 564, 556, 565, 567, 568, 571, 574, 583, 584, - 585, 569, 576, 586, 580, 588, 589, 590, 591, 600, - 603, 602, 605, 612, 593, 611, 613, 615, 616, 617, - 626, 618, 628, 622, 635, 619, 633, 638, 627, 636, - 641, 645, 646, 653, 640, 656, 657, 658, 660, 661, - 663, 671, 666, 667, 648, 670, 672, 674, 675, 676, - 678, 687, 679, 689, 682, 690, 695, 691, 710, 699, - - 700, 701, 702, 711, 704, 712, 713, 726, 731, 721, - 732, 733, 735, 737, 740, 748, 739, 746, 743, 750, - 752, 753, 762, 758, 5927, 757, 760, 773, 766, 774, - 775, 776, 781, 782, 763, 789, 787, 788, 792, 814, - 796, 798, 794, 803, 806, 5927, 804, 808, 838, 810, - 812, 832, 828, 824, 827, 829, 839, 836, 849, 842, - 847, 851, 862, 858, 859, 860, 861, 864, 863, 877, - 872, 870, 799, 874, 889, 875, 882, 886, 887, 892, - 893, 894, 897, 899, 902, 903, 895, 904, 905, 908, - 913, 914, 916, 917, 927, 929, 921, 940, 918, 935, - - 942, 943, 937, 944, 947, 950, 951, 952, 953, 961, - 958, 959, 963, 964, 966, 967, 970, 972, 973, 975, - 977, 979, 978, 985, 988, 981, 994, 989, 5927, 996, - 998, 999, 1000, 1001, 1003, 5927, 1004, 1005, 1006, 1014, - 1017, 1016, 1013, 1023, 1027, 1028, 1029, 1030, 1039, 1012, - 1041, 1040, 1036, 1042, 1046, 1048, 1049, 1051, 1052, 1054, - 1055, 1057, 1060, 1077, 5927, 1061, 1064, 1062, 1063, 1070, - 1080, 1089, 1072, 1090, 1088, 1065, 1105, 1092, 1106, 1100, - 1101, 1111, 1102, 1113, 1107, 1116, 1115, 1117, 1118, 1119, - 1120, 1125, 1126, 1131, 5927, 1133, 1134, 1145, 1135, 1143, - - 1132, 1146, 1148, 1149, 1150, 1152, 1153, 1156, 1162, 1172, - 1157, 1174, 1159, 1170, 1175, 1176, 1177, 1178, 1179, 1180, - 1193, 1184, 1186, 1200, 1207, 1203, 1205, 1212, 1190, 1210, - 1209, 1208, 1215, 1216, 1217, 1218, 1220, 1221, 1230, 1228, - 1226, 1229, 1231, 1242, 1233, 1235, 1240, 1237, 1245, 1247, - 1253, 1254, 1250, 1256, 5927, 1263, 1260, 1267, 1262, 1268, - 1272, 1274, 1261, 1276, 1278, 1280, 1281, 1282, 1284, 1287, - 1289, 1290, 1291, 1292, 1301, 1297, 1307, 1314, 1313, 1315, - 1299, 1305, 1324, 1321, 1328, 1327, 1329, 1337, 1325, 1332, - 1323, 1339, 1335, 1340, 1341, 1344, 1347, 1350, 1352, 1359, - - 1351, 1356, 1366, 1367, 1358, 1369, 1362, 1372, 1373, 1375, - 1376, 1377, 1378, 1385, 1380, 1386, 1382, 1387, 1388, 1389, - 1392, 1390, 1407, 1399, 1400, 1403, 1409, 1410, 1411, 1415, - 1416, 1417, 1418, 1419, 1420, 1423, 1424, 1183, 1425, 1440, - 1426, 1430, 1438, 1441, 1447, 1446, 1450, 1454, 1444, 1456, - 1457, 1458, 1460, 1461, 1465, 1464, 1471, 1468, 1474, 1476, - 1478, 1477, 1480, 1484, 1487, 1481, 5927, 1488, 1495, 1494, - 1496, 1497, 1499, 1501, 1508, 1503, 1505, 1504, 1506, 1510, - 1532, 5927, 1513, 5927, 5927, 1516, 5927, 5927, 1517, 1515, - 1518, 1523, 1535, 1538, 1298, 1525, 1542, 1520, 1553, 1557, - - 1545, 1546, 1548, 1549, 1560, 1571, 1555, 1572, 1565, 1577, - 1579, 1582, 1581, 1587, 1583, 1588, 1590, 1591, 1593, 1592, - 1596, 1598, 1601, 1602, 1599, 1604, 1605, 1614, 1618, 1610, - 1625, 5927, 1621, 1628, 1635, 1631, 1638, 1630, 1634, 1637, - 1642, 1644, 1639, 1646, 1648, 1649, 1650, 1652, 1654, 1657, - 1661, 1658, 5927, 1659, 1662, 1667, 1666, 1670, 1674, 1606, - 1660, 1678, 1676, 1692, 1680, 1682, 1683, 1684, 1688, 1695, - 5927, 1694, 1700, 1690, 1703, 1701, 1704, 1705, 1707, 1710, - 1709, 1713, 1715, 1714, 1716, 1723, 1728, 1721, 1720, 1726, - 1738, 1727, 1742, 1746, 1731, 1734, 1748, 1749, 1750, 1752, - - 1753, 1755, 1760, 1759, 1762, 1758, 1767, 1769, 1776, 1764, - 1765, 1766, 1779, 1781, 1790, 1786, 1787, 1788, 1797, 1792, - 1794, 1795, 1798, 1807, 1796, 1804, 1809, 1799, 1802, 1814, - 1815, 5927, 1816, 1817, 5927, 1818, 1820, 1842, 1823, 1825, - 1828, 1827, 1830, 1832, 1833, 1835, 1839, 1846, 1862, 1850, - 1865, 1837, 1867, 1854, 1868, 1857, 1859, 1870, 1877, 1885, - 1892, 1875, 1893, 1895, 1876, 1878, 1887, 1906, 1890, 1891, - 1894, 1899, 1900, 1904, 1910, 1903, 1915, 1916, 1922, 1919, - 5927, 1930, 1928, 1927, 1929, 1939, 1936, 1937, 1938, 1940, - 1943, 1950, 1945, 1948, 1952, 1951, 1955, 1953, 1958, 1963, - - 1965, 1960, 1961, 1968, 5927, 1964, 5927, 1975, 1976, 1979, - 1977, 1981, 1982, 1983, 1985, 5927, 5927, 1987, 1984, 1994, - 2006, 2001, 5927, 1986, 2009, 2011, 2004, 2005, 2010, 2013, - 2016, 2017, 2024, 2020, 2027, 2022, 2023, 2025, 5927, 2033, - 2026, 2038, 2041, 2034, 2044, 2048, 2042, 5927, 2045, 2052, - 2055, 2062, 2058, 2060, 2059, 2063, 2064, 2067, 2070, 2071, - 2072, 2073, 2080, 2082, 2078, 2079, 2087, 2094, 5927, 2081, - 2090, 2101, 2093, 2097, 2100, 2102, 2103, 2104, 2105, 2106, - 2112, 2113, 2114, 2122, 2124, 2119, 2115, 2127, 2123, 2129, - 2128, 2135, 2132, 2136, 2137, 2138, 5927, 2139, 2147, 124, - - 2141, 2144, 2148, 2149, 2152, 2165, 2151, 2168, 2172, 2169, - 2173, 2176, 2153, 2170, 2177, 2178, 2179, 2180, 2185, 2183, - 5927, 2189, 2190, 2191, 2186, 2197, 2192, 2194, 5927, 2195, - 2206, 2215, 2216, 2205, 2217, 2207, 2218, 2221, 2222, 2224, - 2228, 2229, 2225, 5927, 2232, 2234, 2237, 2235, 2241, 2245, - 2238, 2248, 2250, 2251, 2252, 2253, 2254, 2257, 2256, 2258, - 2259, 2260, 2267, 2271, 2272, 2274, 5927, 2284, 2262, 2273, - 2280, 2285, 2286, 2294, 2287, 2289, 2295, 2296, 2309, 2299, - 2301, 2311, 2315, 2302, 2304, 2325, 2321, 2324, 2330, 2320, - 2333, 2335, 2323, 2327, 2337, 2336, 2339, 2347, 2342, 2354, - - 2355, 2352, 2358, 2350, 2371, 2376, 2367, 5927, 2365, 2375, - 2363, 2377, 2385, 2380, 2382, 2383, 2389, 2388, 2391, 2392, - 2399, 2394, 2396, 2400, 2403, 2401, 2409, 2405, 2411, 2412, - 2420, 2413, 2422, 2351, 5927, 2424, 2425, 2416, 2429, 2432, - 2426, 2434, 2439, 2437, 2441, 2443, 2445, 2447, 2448, 2449, - 2450, 2452, 2454, 2453, 5927, 2457, 2458, 2463, 2465, 2466, - 2472, 2475, 2478, 2476, 2482, 2483, 2484, 2485, 5927, 2492, - 2493, 2490, 2494, 2496, 2497, 2499, 2502, 2503, 5927, 2504, - 2506, 2513, 2514, 2509, 5927, 2517, 2512, 2518, 2519, 2520, - 2521, 2527, 2522, 2525, 2530, 2535, 2537, 2533, 2541, 5927, - - 2543, 2553, 2545, 2549, 2551, 2554, 2555, 2557, 2561, 2565, - 2560, 5927, 2577, 2576, 2573, 2587, 2564, 2578, 2579, 2585, - 2582, 2588, 2589, 5927, 2591, 2592, 2594, 2595, 2598, 2599, - 2601, 2613, 2603, 2606, 2608, 2611, 2614, 2616, 2618, 2621, - 2619, 2627, 2630, 2631, 2633, 2634, 2636, 2637, 2644, 2647, - 2649, 2651, 5927, 2654, 2655, 2656, 2643, 2646, 2658, 2662, - 2663, 2666, 2667, 2671, 2668, 2670, 2678, 2680, 2681, 2683, - 2685, 2687, 2688, 2690, 2691, 2692, 2693, 2700, 2698, 2696, - 2705, 2702, 2707, 2714, 2709, 2715, 2716, 2717, 2718, 2719, - 2723, 2724, 2726, 2727, 2731, 2742, 2743, 2733, 2744, 2745, - - 2746, 2747, 5927, 2750, 2752, 2751, 2756, 2761, 2758, 2768, - 2764, 2765, 2769, 2773, 2776, 2770, 2775, 2781, 2788, 2784, - 5927, 2785, 5927, 2786, 2787, 2794, 2797, 2789, 5927, 2799, - 5927, 2802, 2811, 2796, 2800, 5927, 2814, 2804, 2806, 2818, - 2808, 2813, 2820, 2821, 2822, 2827, 2825, 2829, 2830, 2831, - 2833, 2835, 2837, 2841, 2846, 2848, 2838, 2849, 2840, 2854, - 2857, 2851, 2859, 5927, 2867, 2860, 2863, 2868, 2869, 2871, - 2872, 2874, 2875, 2880, 2876, 2881, 2882, 2889, 2892, 2890, - 2893, 2904, 5927, 2894, 2906, 2899, 2901, 5927, 2909, 2903, - 2910, 2915, 2912, 2917, 2919, 2920, 2921, 2924, 2925, 2937, - - 2938, 2928, 2939, 5927, 2941, 2944, 2929, 2948, 2952, 2956, - 2930, 2959, 2953, 2957, 2963, 2964, 2965, 2966, 2967, 2974, - 2975, 2972, 2979, 2971, 2978, 2981, 2985, 2987, 2988, 2989, - 2992, 2993, 2991, 2997, 3001, 2996, 2998, 2999, 3000, 5927, - 3012, 3002, 3014, 3023, 3015, 3017, 3004, 3020, 3025, 3026, - 3029, 3033, 3027, 5927, 3032, 5927, 3035, 3037, 3049, 3051, - 3044, 3039, 3055, 3054, 3046, 3061, 3062, 3063, 3064, 3065, - 3066, 3069, 3070, 3076, 3077, 3073, 3074, 3078, 3084, 3086, - 3087, 3089, 5927, 5927, 3090, 3092, 3095, 3093, 3097, 3099, - 3107, 3105, 3098, 3111, 3112, 3119, 5927, 3120, 3121, 3123, - - 3124, 3131, 3126, 3128, 3139, 3135, 3143, 3141, 5927, 3138, - 3142, 3152, 3148, 3150, 3155, 5927, 3154, 5927, 3151, 3157, - 3160, 3163, 3164, 3165, 3166, 3167, 3174, 3175, 3185, 3171, - 3182, 3183, 3186, 3187, 3194, 3189, 3190, 3191, 5927, 3193, - 3196, 3199, 3207, 3208, 3210, 3214, 3197, 5927, 3204, 3218, - 3221, 3222, 3224, 3226, 3227, 3228, 3230, 3232, 3229, 3231, - 3239, 3237, 3236, 3246, 3256, 3247, 3258, 5927, 3259, 3253, - 3266, 3268, 3261, 3263, 3269, 3270, 3271, 3274, 3276, 3275, - 3277, 3279, 3281, 3278, 3288, 3282, 3295, 3284, 3298, 3304, - 3305, 3285, 3301, 3308, 3309, 3312, 3311, 3315, 3318, 3322, - - 3319, 3331, 3332, 3323, 3326, 3335, 3336, 3343, 3338, 5927, - 3348, 3328, 3351, 3349, 3350, 3355, 3356, 3358, 3359, 3360, - 3361, 3368, 3363, 5927, 3370, 3365, 3375, 3376, 3367, 3390, - 3385, 3366, 3388, 3392, 3389, 3395, 3393, 3397, 3398, 3401, - 3402, 5927, 5927, 3404, 3405, 3407, 5927, 3408, 3406, 3418, - 3411, 3414, 3421, 3238, 3420, 3423, 3424, 3426, 3428, 5927, - 3432, 3439, 3431, 3434, 3446, 3448, 3454, 3438, 3447, 3445, - 3450, 3455, 3457, 3458, 3459, 3461, 3470, 3463, 3466, 3468, - 5927, 3471, 3473, 3474, 3478, 3475, 3482, 5927, 3480, 3486, - 3487, 3489, 3501, 3492, 3502, 3504, 3484, 3506, 3507, 3509, - - 3508, 3510, 3517, 3512, 3516, 3523, 3524, 3515, 5927, 3529, - 3531, 3532, 3534, 3536, 3545, 3543, 3546, 3541, 3548, 3549, - 3556, 5927, 3551, 3554, 3557, 3555, 3565, 3560, 3568, 3564, - 5927, 3566, 3570, 3572, 5927, 3571, 3583, 3586, 3588, 3573, - 3581, 3590, 3592, 3594, 3595, 5927, 3598, 5927, 3599, 3579, - 3605, 5927, 3601, 3607, 3609, 3611, 3608, 3615, 3616, 3623, - 3612, 3618, 3624, 3625, 3626, 3628, 3635, 3631, 3634, 3636, - 3637, 5927, 3638, 3640, 3646, 3647, 3652, 3641, 3645, 3657, - 3656, 5927, 5927, 3660, 5927, 3664, 3663, 3665, 5927, 3668, - 3670, 3677, 3672, 3673, 3676, 3686, 3680, 5927, 3675, 3687, - - 3690, 3692, 3693, 3694, 3696, 3697, 3695, 3698, 3699, 5927, - 3700, 3703, 3711, 3704, 3712, 3716, 3723, 3717, 5927, 3724, - 3725, 3726, 3730, 3731, 5927, 3733, 5927, 3734, 3736, 3739, - 3741, 3740, 5927, 3746, 3747, 3750, 3753, 3755, 3754, 3757, - 3758, 3764, 3765, 3772, 3768, 3767, 3769, 5927, 3770, 3774, - 3776, 3783, 3771, 3778, 3787, 3790, 3791, 3792, 3797, 3794, - 3801, 3803, 3805, 3807, 3799, 5927, 3809, 3811, 3810, 3825, - 3820, 3815, 5927, 3816, 3830, 3832, 5927, 3823, 3822, 3834, - 3839, 3826, 3833, 3840, 3841, 3845, 5927, 3846, 3847, 3848, - 3849, 3852, 3853, 5927, 5927, 3861, 5927, 3863, 3850, 3864, - - 3865, 3866, 3872, 3871, 3875, 3877, 3874, 3878, 3885, 3886, - 3895, 3898, 3902, 3897, 3901, 3887, 5927, 5927, 3904, 3905, - 3908, 3911, 3912, 3914, 3915, 3922, 3918, 3924, 3928, 3929, - 3936, 5927, 3935, 3921, 3938, 5927, 3919, 3932, 3940, 3943, - 3945, 3946, 3949, 3947, 3948, 3951, 3955, 3952, 3957, 3961, - 3959, 3962, 3960, 3970, 3968, 3969, 3977, 5927, 3978, 3971, - 3980, 3982, 3983, 3984, 3988, 3989, 3991, 5927, 3993, 3995, - 3997, 3998, 3992, 4002, 4013, 4017, 4019, 4010, 4020, 4021, - 4023, 4027, 4024, 5927, 4031, 4028, 4030, 4034, 4038, 4040, - 4041, 4043, 4044, 4052, 4049, 4053, 4055, 4057, 4045, 4061, - - 4063, 4047, 5927, 4067, 4069, 4065, 4074, 4071, 4075, 4076, - 4082, 4086, 4078, 4080, 4087, 4091, 5927, 4088, 4092, 4094, - 4096, 4102, 4093, 4099, 4103, 5927, 4105, 4107, 4110, 4111, - 4113, 4116, 4119, 4120, 4123, 4122, 4126, 5927, 4128, 4130, - 4133, 4136, 4137, 4139, 4142, 4141, 5927, 4143, 4149, 4151, - 4158, 4153, 4162, 4159, 4163, 4155, 4157, 4169, 4173, 4175, - 4176, 4177, 4165, 4187, 4189, 4188, 5927, 4171, 5927, 4190, - 4193, 4201, 4196, 4178, 5927, 4202, 4203, 4207, 4208, 4204, - 5927, 4209, 4210, 4212, 4216, 5927, 4211, 4215, 4217, 4222, - 4225, 4229, 5927, 4232, 4233, 4235, 4244, 4245, 4242, 4243, - - 4246, 4248, 4249, 4250, 4251, 4259, 4254, 4256, 5927, 4258, - 4264, 4266, 4270, 4271, 4272, 4273, 4279, 4274, 5927, 4276, - 4282, 4283, 4284, 4285, 4286, 4288, 4296, 4291, 4294, 5927, - 4295, 4299, 4307, 3996, 4308, 5927, 5927, 4300, 4315, 4317, - 4305, 4318, 5927, 4309, 4327, 4322, 4324, 4326, 5927, 5927, - 4329, 5927, 4325, 5927, 4330, 4332, 5927, 5927, 4333, 4336, - 4337, 4340, 4347, 5927, 4350, 5927, 4357, 4352, 4339, 4341, - 4354, 5927, 4356, 4358, 4361, 5927, 4364, 4371, 4366, 4367, - 5927, 4369, 4372, 4374, 5927, 4376, 4379, 4380, 4381, 4386, - 4383, 4387, 4390, 4393, 4394, 4396, 4397, 4398, 4409, 4411, - - 4413, 4415, 4416, 4400, 4419, 4420, 4422, 4425, 4426, 4427, - 4429, 4431, 4432, 4434, 4436, 4439, 4440, 4441, 4442, 4443, - 4444, 4446, 4453, 4456, 4458, 4457, 4459, 4461, 4460, 4462, - 4464, 4468, 4470, 4471, 5927, 4469, 4472, 4475, 4402, 4478, - 4488, 4490, 4481, 4497, 4499, 5927, 4501, 5927, 4503, 4489, - 4505, 4491, 5927, 4506, 4509, 4508, 4511, 4512, 4513, 4515, - 4514, 4518, 4519, 4522, 5927, 4525, 4520, 4529, 4540, 5927, - 4532, 4544, 4528, 4535, 4545, 4547, 4548, 4549, 4554, 4550, - 4556, 4558, 4565, 4560, 4561, 4563, 4568, 4551, 4564, 4572, - 4579, 4575, 4583, 4587, 5927, 4580, 5927, 4588, 4589, 4590, - - 4591, 4593, 4592, 4594, 5927, 5927, 4595, 4600, 4605, 4601, - 4596, 4607, 4617, 5927, 4609, 4618, 4620, 4610, 5927, 4625, - 4626, 4628, 5927, 4629, 4630, 4631, 4633, 4634, 4637, 4638, - 4640, 4642, 4644, 4648, 5927, 5927, 5927, 5927, 4650, 4652, - 4655, 4657, 4659, 4660, 4662, 4664, 4661, 5927, 4666, 5927, - 5927, 4668, 4675, 4667, 4677, 4678, 4679, 4683, 4685, 5927, - 4684, 4689, 4690, 4687, 4697, 4701, 4703, 4704, 4688, 4705, - 4713, 4711, 4714, 4712, 4717, 4719, 4721, 5927, 5927, 4724, - 4726, 4728, 4735, 4733, 4736, 4745, 4740, 4742, 4743, 4746, - 4748, 4730, 4755, 4759, 4757, 4754, 5927, 4758, 4764, 5927, - - 4760, 5927, 4765, 4768, 4732, 4769, 4771, 4774, 4775, 4777, - 5927, 5927, 4778, 4779, 4781, 4785, 4787, 4789, 4788, 4791, - 4792, 5927, 4793, 5927, 4794, 4801, 4796, 4802, 4810, 4813, - 4815, 4817, 4812, 4818, 5927, 4819, 4821, 5927, 4822, 4824, - 4825, 5927, 4829, 4832, 4836, 5927, 4842, 4833, 4839, 5927, - 4846, 5927, 4843, 4847, 4848, 4855, 5927, 4850, 4856, 5927, - 4859, 4862, 4864, 4853, 5927, 4851, 5927, 4865, 4872, 4873, - 4876, 4868, 4878, 4879, 4880, 4881, 4888, 4887, 4889, 5927, - 5927, 4897, 4884, 4890, 4894, 4899, 4906, 4901, 4904, 4903, - 5927, 5927, 4911, 5927, 4909, 4912, 5927, 4913, 4918, 4919, - - 4920, 4922, 4923, 4927, 4929, 4930, 4931, 4932, 4933, 4939, - 4951, 4935, 4949, 4955, 4957, 4959, 4961, 4953, 4963, 4964, - 4965, 4966, 4967, 4970, 5927, 4972, 4973, 4974, 5927, 4978, - 4979, 4981, 4983, 5927, 4994, 4989, 4995, 4996, 5927, 4982, - 5002, 4999, 4997, 5007, 5014, 5010, 5009, 5927, 5927, 5927, - 5011, 5020, 5927, 5025, 5012, 5015, 5017, 5927, 5021, 5027, - 5927, 5927, 5028, 5029, 5031, 5042, 5927, 5032, 5927, 5033, - 5927, 5041, 5043, 5049, 5047, 5927, 5052, 5058, 5927, 5061, - 5064, 5066, 5067, 5055, 5068, 5069, 5927, 5077, 5073, 5079, - 5081, 5070, 5072, 5085, 5082, 5089, 5086, 5092, 5927, 5094, - - 5096, 5097, 5103, 5095, 5105, 5099, 5927, 5107, 5927, 5108, - 5109, 5112, 5115, 5110, 5113, 5037, 5118, 5117, 5128, 5125, - 5927, 5130, 5134, 5927, 5131, 5927, 5136, 5927, 5137, 5138, - 5139, 5140, 5927, 5142, 5146, 5147, 5148, 5927, 5149, 5151, - 5157, 5927, 5927, 5158, 5168, 5159, 5160, 5172, 5174, 5161, - 5176, 5169, 5177, 5163, 5185, 5184, 5187, 5188, 5190, 5191, - 5192, 5927, 5927, 5927, 5197, 5196, 5204, 5201, 5202, 5212, - 5207, 5927, 5210, 5213, 5211, 5220, 5217, 5222, 5927, 5219, - 5223, 5224, 5226, 5228, 5229, 5233, 5927, 5237, 5244, 5240, - 5232, 5247, 5251, 5254, 5256, 5257, 5927, 5259, 5927, 5927, - - 5260, 5927, 5261, 5263, 5264, 5265, 5927, 5268, 5270, 5269, - 5271, 5273, 5927, 5281, 5274, 5276, 5277, 5927, 5927, 5288, - 5927, 5291, 5292, 5293, 5302, 5298, 5300, 5304, 5301, 5927, - 5299, 5305, 5309, 5311, 5312, 5927, 5313, 5315, 5316, 5317, - 5320, 5324, 5326, 5327, 5328, 5927, 5330, 5322, 5345, 5341, - 5927, 5329, 5347, 5927, 5927, 5332, 5351, 5352, 5927, 5927, - 5927, 5354, 5927, 5358, 5364, 5368, 5372, 5355, 5927, 5374, - 5363, 5371, 5927, 5367, 5375, 5377, 5379, 5927, 5927, 5376, - 5383, 5380, 5388, 5389, 5927, 5391, 5393, 5398, 5406, 5408, - 5396, 5410, 5412, 5419, 5392, 5400, 5414, 5416, 5417, 5423, - - 5420, 5427, 5436, 5432, 5434, 5441, 5442, 5927, 5927, 5444, - 5927, 5927, 5446, 5449, 5451, 5453, 5455, 5457, 5459, 5927, - 5394, 5461, 5462, 5463, 5464, 5927, 5466, 5468, 5465, 5469, - 5474, 5472, 5476, 5478, 5927, 5927, 5470, 5487, 5479, 5492, - 5481, 5927, 5494, 5489, 5495, 5496, 5498, 5500, 5503, 5927, - 5502, 5504, 5927, 5927, 5506, 5927, 5927, 5927, 5927, 5927, - 5927, 5927, 5927, 5507, 5927, 5511, 5515, 5523, 5526, 5927, - 5512, 5520, 5431, 5516, 5527, 5927, 5528, 5531, 5532, 5538, - 5530, 5533, 5539, 5543, 5546, 5544, 5547, 5548, 5549, 5553, - 5550, 5554, 5556, 5927, 5927, 5927, 5555, 5557, 5567, 5559, - - 5576, 5578, 5581, 5583, 5570, 5573, 5584, 5585, 5586, 5588, - 5592, 5600, 5595, 5596, 5597, 5598, 5604, 5599, 5601, 5606, - 5927, 5610, 5927, 5611, 5927, 5927, 5616, 5621, 5619, 5612, - 5623, 5630, 5626, 5628, 5632, 5633, 5635, 5637, 5927, 5639, - 5642, 5927, 5643, 5644, 5927, 5645, 5647, 5649, 5646, 5650, - 5653, 5656, 5664, 5655, 5927, 5927, 5658, 5666, 5667, 5671, - 5674, 5681, 5676, 5680, 5682, 5683, 5673, 5695, 5927, 5691, - 5693, 5697, 5927, 5699, 5694, 5700, 5701, 5702, 5710, 5705, - 5706, 5927, 5708, 5927, 5712, 5714, 5717, 5715, 5716, 5718, - 5727, 5725, 5729, 5927, 5732, 5736, 5733, 5738, 5740, 5743, - - 5744, 5745, 5747, 5749, 5753, 5757, 5759, 5760, 5750, 5763, - 5761, 5927, 5771, 5762, 5927, 5772, 5773, 5765, 5774, 5775, - 5927, 5783, 5779, 5785, 5786, 5789, 5790, 5927, 5792, 5795, - 5796, 5927, 5800, 5927, 5927, 5801, 5799, 5802, 5808, 5810, - 5927, 5927, 5927, 5835, 5842, 5849, 5856, 5863, 88, 5870, - 5877, 5884, 5891, 5898, 5905, 5912, 5919 + 76, 144, 141, 114, 151, 124, 167, 173, 186, 161, + 190, 117, 1854, 5953, 5953, 5953, 107, 1734, 5953, 5953, + 5953, 162, 1567, 1365, 5953, 5953, 5953, 212, 1315, 5953, + 5953, 5953, 167, 1197, 5953, 218, 5953, 222, 134, 1088, + 226, 182, 0, 233, 0, 0, 194, 227, 85, 184, + 220, 234, 235, 136, 230, 222, 241, 242, 207, 243, + 250, 245, 228, 246, 249, 252, 264, 254, 266, 269, + + 272, 279, 276, 277, 281, 286, 280, 285, 164, 287, + 290, 293, 296, 299, 303, 301, 309, 308, 311, 313, + 321, 315, 320, 322, 324, 323, 332, 331, 344, 348, + 335, 337, 329, 347, 357, 349, 353, 352, 354, 369, + 367, 947, 380, 811, 383, 784, 394, 734, 687, 387, + 339, 398, 402, 0, 394, 396, 404, 399, 360, 400, + 403, 410, 405, 406, 407, 409, 411, 422, 419, 425, + 426, 434, 433, 437, 438, 435, 440, 442, 443, 432, + 456, 379, 459, 449, 448, 460, 461, 463, 466, 467, + 468, 477, 470, 478, 489, 484, 493, 497, 480, 498, + + 501, 496, 508, 504, 511, 512, 507, 503, 513, 515, + 518, 520, 521, 523, 522, 525, 526, 528, 530, 538, + 540, 531, 539, 533, 552, 547, 554, 551, 553, 557, + 556, 560, 568, 569, 561, 570, 572, 573, 576, 579, + 588, 589, 590, 574, 581, 591, 585, 593, 594, 595, + 596, 605, 608, 607, 610, 617, 598, 616, 618, 620, + 621, 622, 631, 623, 633, 627, 640, 624, 638, 643, + 632, 641, 646, 650, 651, 658, 645, 661, 662, 663, + 665, 666, 668, 676, 653, 671, 674, 675, 677, 678, + 680, 681, 684, 682, 693, 685, 695, 689, 708, 704, + + 697, 716, 705, 706, 712, 718, 710, 719, 726, 727, + 743, 741, 731, 740, 711, 745, 747, 752, 749, 753, + 756, 758, 759, 760, 762, 769, 764, 5953, 766, 774, + 781, 782, 783, 790, 771, 789, 791, 772, 802, 798, + 799, 803, 825, 801, 809, 807, 814, 813, 5953, 815, + 817, 849, 820, 823, 839, 836, 819, 837, 843, 845, + 847, 859, 850, 855, 857, 873, 860, 862, 869, 870, + 874, 872, 884, 880, 886, 888, 890, 897, 892, 893, + 894, 898, 901, 902, 903, 908, 905, 910, 911, 912, + 916, 923, 920, 924, 926, 928, 933, 932, 929, 939, + + 944, 951, 931, 949, 954, 956, 946, 959, 957, 963, + 964, 965, 967, 977, 972, 973, 974, 975, 979, 981, + 985, 983, 986, 987, 989, 994, 993, 1000, 991, 1002, + 1006, 1008, 5953, 1009, 1011, 1012, 1013, 1014, 1015, 5953, + 1017, 1016, 1019, 1024, 1029, 1031, 1021, 1028, 1039, 1040, + 1041, 1044, 1051, 1046, 1049, 1054, 1053, 1056, 1057, 1060, + 1058, 1063, 1065, 1064, 1070, 1071, 1074, 1091, 5953, 1073, + 1083, 1078, 1075, 1084, 1085, 1103, 1101, 1104, 1102, 1106, + 1119, 1114, 1120, 1121, 1076, 1125, 1122, 1127, 1131, 1129, + 1133, 1132, 1134, 1135, 1136, 1138, 1137, 1143, 5953, 1150, + + 1154, 1161, 1153, 1160, 1162, 1163, 1164, 1077, 1166, 1167, + 1169, 1168, 1173, 1184, 1174, 1188, 1183, 1139, 1185, 1187, + 1189, 1190, 1191, 1192, 1204, 1196, 1206, 1212, 1219, 1215, + 1217, 1224, 1201, 1220, 1221, 1225, 1227, 1228, 1229, 1230, + 1232, 1233, 1242, 1239, 1238, 1240, 1241, 1246, 1254, 1247, + 1249, 1259, 1250, 1260, 1255, 1264, 1265, 1258, 1274, 5953, + 1281, 1276, 1277, 1278, 1279, 1283, 1287, 1290, 1291, 1288, + 1294, 1293, 1296, 1300, 1301, 1302, 1297, 1303, 1305, 1314, + 1318, 1319, 1328, 1320, 1327, 1311, 1330, 1337, 1333, 1340, + 1336, 1341, 1348, 1343, 1345, 1335, 1357, 1349, 1350, 1360, + + 1352, 1361, 1363, 1364, 1375, 1366, 1371, 1380, 1383, 1373, + 1385, 1377, 1386, 1381, 1389, 1390, 1391, 1392, 1400, 1393, + 1395, 1401, 1402, 1403, 1405, 1406, 1411, 1415, 1413, 1419, + 1414, 1420, 1425, 1422, 1428, 1423, 1430, 1432, 1436, 1434, + 1438, 1437, 1443, 1445, 1447, 1446, 1453, 1455, 1457, 1458, + 1460, 1461, 1465, 1469, 1471, 1473, 1474, 1475, 1477, 1476, + 1480, 1486, 1479, 1485, 1491, 1495, 1492, 1497, 1498, 1501, + 1502, 5953, 1503, 1510, 1505, 1508, 1514, 1515, 1516, 1523, + 1519, 1521, 1518, 1520, 1524, 1546, 5953, 1532, 5953, 5953, + 1531, 5953, 5953, 1529, 1533, 1537, 1550, 1541, 1556, 1549, + + 1543, 1559, 1552, 1569, 1574, 1530, 1562, 1564, 1570, 1571, + 1577, 1588, 1584, 1589, 1579, 1597, 1595, 1599, 1601, 1603, + 1604, 1607, 1608, 1609, 1611, 1610, 1613, 1617, 1619, 1620, + 1622, 1615, 1623, 1631, 1634, 1636, 1643, 5953, 1641, 1644, + 1653, 1649, 1656, 1648, 1652, 1655, 1660, 1662, 1657, 1664, + 1666, 1667, 1668, 1670, 1672, 1675, 1679, 1676, 5953, 1677, + 1680, 1685, 1684, 1688, 1692, 1694, 1678, 1696, 1698, 1707, + 1699, 1702, 1704, 1709, 177, 1710, 5953, 1712, 1716, 1719, + 1720, 1722, 1724, 1726, 1727, 1728, 1729, 1730, 1624, 1732, + 1733, 1737, 1736, 1735, 1739, 1741, 1751, 1742, 1754, 1761, + + 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1770, 1775, 1771, + 1780, 1776, 1783, 1794, 1791, 1778, 1781, 1798, 1779, 1804, + 1808, 1806, 1792, 1799, 1813, 1811, 1815, 1816, 1817, 1819, + 1820, 1821, 1823, 1826, 1827, 1828, 1830, 5953, 1829, 1832, + 5953, 1836, 1837, 1859, 1838, 1840, 1842, 1851, 1841, 1861, + 1845, 1855, 1867, 1863, 1879, 1871, 1882, 1874, 1876, 1883, + 1887, 1888, 1884, 1890, 1893, 1900, 1903, 1907, 1901, 1914, + 1909, 1910, 1912, 1932, 1911, 1913, 1920, 1915, 1916, 1919, + 1928, 1921, 1922, 1925, 1937, 1943, 1945, 5953, 1953, 1954, + 1948, 1926, 1956, 1959, 1960, 1843, 1961, 1962, 1969, 1965, + + 1966, 1968, 1971, 1972, 1975, 1976, 1980, 1981, 1977, 1982, + 1993, 5953, 1984, 5953, 1992, 1994, 1996, 1997, 1998, 2002, + 2003, 2004, 5953, 5953, 2005, 2012, 2018, 2007, 2013, 5953, + 2020, 2028, 2029, 2031, 2023, 2024, 2025, 2032, 2035, 2046, + 2038, 2047, 2039, 2048, 2042, 5953, 2049, 2051, 2055, 2057, + 2059, 2061, 2063, 2064, 5953, 2065, 2067, 2073, 2080, 2070, + 2077, 2078, 2081, 2087, 2082, 2085, 2089, 2090, 2092, 2097, + 2101, 2094, 2098, 2102, 2112, 5953, 2108, 2110, 2117, 2113, + 2115, 2116, 2119, 2120, 2121, 2129, 2122, 2123, 2127, 2131, + 2140, 2142, 2137, 2143, 2145, 2135, 2146, 2147, 2153, 2151, + + 2155, 2156, 2157, 5953, 2158, 2162, 256, 2165, 2163, 2168, + 2166, 2167, 2173, 2170, 2187, 2189, 2186, 2192, 2188, 2184, + 2185, 2195, 2196, 2197, 2201, 2202, 2203, 5953, 2205, 2206, + 2207, 2209, 2212, 2210, 2221, 5953, 2213, 2223, 2232, 2227, + 2215, 2233, 2219, 2239, 2241, 2242, 2243, 2244, 2245, 2246, + 5953, 2252, 2248, 2254, 2255, 2258, 2260, 2261, 2266, 2267, + 2268, 2271, 2269, 2272, 2273, 2274, 2276, 2277, 2280, 2288, + 2278, 2289, 2290, 2291, 5953, 2300, 2292, 2296, 2301, 2302, + 2305, 2314, 2310, 2312, 2315, 2318, 2330, 2320, 2316, 2337, + 2322, 2327, 2336, 2340, 2341, 2342, 2350, 2344, 2354, 2356, + + 2348, 2352, 2357, 2358, 2362, 2360, 2363, 2375, 2377, 2379, + 2372, 2373, 2385, 2397, 2388, 5953, 2392, 2383, 2390, 2400, + 2407, 2380, 2405, 2403, 2404, 2411, 2412, 2414, 2421, 2418, + 2416, 2420, 2422, 2423, 2426, 2425, 2429, 2433, 2440, 2432, + 2442, 2444, 5953, 2445, 2450, 2449, 2451, 2453, 2436, 2458, + 2461, 2459, 2463, 2465, 2467, 2469, 2470, 2471, 2472, 2474, + 2476, 2475, 5953, 2479, 2480, 2485, 2487, 2488, 2494, 2497, + 2500, 2498, 2504, 2505, 2506, 2507, 5953, 2514, 2515, 2512, + 2516, 2518, 2519, 2521, 2524, 2525, 5953, 2526, 2528, 2535, + 2536, 2531, 5953, 2539, 2534, 2540, 2541, 2542, 2543, 2549, + + 2544, 2547, 2552, 2557, 2559, 2555, 2563, 5953, 2565, 2575, + 2567, 2571, 2573, 2576, 2577, 2579, 2583, 2587, 2582, 5953, + 2599, 2598, 2595, 2609, 2586, 2600, 2601, 2607, 2604, 2610, + 2611, 5953, 2613, 2614, 2616, 2617, 2620, 2621, 2623, 2635, + 2625, 2628, 2630, 2633, 2636, 2638, 2640, 2643, 2641, 2649, + 2652, 2653, 2655, 2659, 2656, 2660, 2663, 2671, 2672, 2673, + 2675, 5953, 2678, 2679, 2680, 2664, 2684, 2685, 2686, 2687, + 2690, 2691, 2692, 2694, 2695, 2702, 2712, 2703, 2704, 2707, + 2709, 2713, 2715, 2716, 2717, 2718, 2725, 2724, 2721, 2733, + 2730, 2732, 2740, 2731, 2739, 2741, 2742, 2743, 2744, 2748, + + 2745, 2751, 2752, 2756, 2767, 2768, 2770, 2759, 2753, 2769, + 2775, 5953, 2771, 2778, 2779, 2780, 2784, 2785, 2792, 2787, + 2788, 2795, 2803, 2804, 2789, 2797, 2791, 2812, 2814, 5953, + 2798, 5953, 2805, 2817, 2818, 2827, 2810, 5953, 2824, 5953, + 2825, 2832, 2820, 2829, 5953, 2834, 2833, 2835, 2838, 2840, + 2841, 2842, 2843, 2846, 2849, 2847, 2851, 2852, 2856, 2854, + 2858, 2859, 2863, 2870, 2867, 2872, 2873, 2875, 2879, 2880, + 2881, 2882, 5953, 2886, 2883, 2888, 2889, 2891, 2893, 2894, + 2898, 2896, 2899, 2904, 2906, 2907, 2910, 2915, 2923, 2914, + 2928, 5953, 2921, 2925, 2926, 2930, 5953, 2932, 2929, 2938, + + 2940, 2933, 2931, 2942, 2943, 2950, 2944, 2948, 2952, 2960, + 2959, 2962, 5953, 2963, 2961, 2967, 2971, 2975, 2973, 2976, + 2979, 2988, 2984, 2983, 2985, 2986, 2987, 2990, 2997, 3000, + 2999, 3001, 2998, 3006, 3009, 3010, 3002, 3012, 3013, 3014, + 3016, 5953, 3017, 3018, 3025, 3022, 3023, 3024, 3026, 5953, + 3035, 3036, 3039, 3040, 3037, 3045, 3027, 3046, 3048, 3050, + 3053, 3049, 3054, 5953, 3062, 5953, 3055, 3063, 3068, 3072, + 3069, 3073, 3075, 3084, 3074, 3076, 3085, 3088, 3079, 3086, + 3092, 3089, 3094, 3096, 3110, 3100, 3097, 3107, 3109, 3111, + 3112, 3114, 5953, 5953, 3113, 3115, 3118, 3116, 3121, 3124, + + 3122, 3131, 3134, 3135, 3136, 3145, 5953, 3141, 3142, 3146, + 3148, 3164, 3147, 3150, 3166, 3162, 3169, 3170, 5953, 3151, + 3159, 3178, 3161, 3177, 3181, 5953, 3179, 5953, 3182, 3183, + 3184, 3185, 3190, 3191, 3193, 3195, 3189, 3205, 3206, 3198, + 3196, 3197, 3208, 3212, 3219, 3214, 3217, 3220, 5953, 3222, + 3223, 3224, 3226, 3229, 3230, 3232, 3237, 5953, 3239, 3245, + 3240, 3246, 3242, 3248, 3249, 3250, 3252, 3253, 3251, 3255, + 3262, 3266, 3267, 3268, 3272, 3273, 3280, 5953, 3277, 3281, + 3289, 3287, 3284, 3291, 3292, 3288, 3294, 3297, 3299, 3298, + 3300, 3301, 3304, 3302, 3305, 3306, 3318, 3320, 3321, 3311, + + 3328, 3312, 3324, 3329, 3331, 3332, 3338, 3339, 3342, 3347, + 3335, 3349, 3356, 3337, 3344, 3360, 3362, 3367, 3350, 5953, + 3369, 3364, 3374, 3370, 3372, 3377, 3378, 3386, 3371, 3373, + 3381, 3394, 3387, 5953, 3397, 3389, 3398, 3399, 3402, 3411, + 3404, 3392, 3406, 3409, 3414, 3415, 3418, 3419, 3420, 3423, + 3424, 5953, 5953, 3426, 3428, 3430, 5953, 3433, 3429, 3437, + 3435, 3436, 3432, 3445, 3446, 3443, 3448, 3451, 3454, 5953, + 3456, 3464, 3459, 3460, 3468, 3471, 3473, 3475, 3474, 3466, + 3463, 3476, 3478, 3484, 3485, 3489, 3493, 3492, 3491, 3494, + 5953, 3495, 3496, 3499, 3501, 3497, 3505, 5953, 3503, 3509, + + 3517, 3510, 3508, 3521, 3524, 3527, 3528, 3529, 3531, 3532, + 3533, 3534, 3536, 3541, 3539, 3546, 3547, 3538, 5953, 3551, + 3552, 3555, 3558, 3562, 3565, 3572, 3573, 3569, 3571, 3570, + 3580, 5953, 3577, 3579, 3578, 3581, 3591, 3586, 3593, 3584, + 5953, 3588, 3592, 3594, 5953, 3598, 3602, 3605, 3610, 3597, + 3613, 3612, 3614, 3615, 3616, 5953, 3622, 5953, 3620, 3624, + 3628, 5953, 3626, 3630, 3632, 3634, 3631, 3639, 3641, 3648, + 3635, 3643, 3645, 3649, 3650, 3651, 3659, 3657, 3658, 3660, + 3662, 5953, 3665, 3661, 3664, 3669, 3671, 3672, 3674, 3681, + 3683, 5953, 5953, 3688, 5953, 3682, 3689, 3690, 5953, 3692, + + 3694, 3697, 3693, 3698, 3700, 3704, 3701, 5953, 3711, 3712, + 3713, 3715, 3716, 3717, 3719, 3721, 3720, 3723, 3722, 5953, + 3725, 3727, 3735, 3726, 3730, 3740, 3742, 3736, 5953, 3748, + 3749, 3752, 3754, 3755, 5953, 3757, 5953, 3758, 3760, 3761, + 3763, 3764, 5953, 3772, 3767, 3778, 3768, 3775, 3782, 3785, + 3786, 3771, 3779, 3793, 3792, 3788, 3795, 5953, 3796, 3798, + 3805, 3806, 3802, 3800, 3814, 3811, 3819, 3810, 3823, 3813, + 3827, 3829, 3824, 3831, 3832, 5953, 3834, 3835, 3838, 3845, + 3840, 3841, 5953, 3842, 3847, 3851, 5953, 3848, 3855, 3857, + 3863, 3858, 3860, 3864, 3865, 3867, 5953, 3869, 3871, 3868, + + 3872, 3884, 3885, 5953, 5953, 3886, 5953, 3887, 3873, 3891, + 3890, 3870, 3898, 3900, 3901, 3903, 3897, 3909, 3912, 3911, + 3920, 3921, 3928, 3923, 3925, 3918, 5953, 5953, 3930, 3931, + 3927, 3935, 3939, 3937, 3941, 3948, 3945, 3943, 3952, 3953, + 3960, 5953, 3961, 3947, 3962, 5953, 3955, 3963, 3956, 3969, + 3970, 3964, 3971, 3972, 3973, 3974, 3977, 3981, 3983, 3986, + 3988, 3989, 3990, 3994, 3993, 3995, 4003, 5953, 3997, 4000, + 4004, 4007, 4008, 4010, 4012, 4015, 4016, 5953, 4011, 4018, + 4021, 4022, 4020, 4025, 4039, 4042, 4044, 4031, 4036, 4047, + 4045, 4051, 4053, 5953, 4055, 4052, 4056, 4059, 4062, 4064, + + 4065, 4067, 4068, 4070, 4073, 4074, 4078, 4081, 4075, 4082, + 4083, 4085, 5953, 4087, 4094, 4090, 4096, 4098, 4099, 4100, + 4101, 4107, 4108, 4110, 4111, 4113, 5953, 4114, 4115, 4118, + 4119, 4121, 4122, 4124, 4128, 5953, 4132, 4126, 4129, 4135, + 4137, 4140, 4142, 4144, 4147, 4148, 4151, 5953, 4152, 4157, + 4160, 4153, 4159, 4161, 4170, 4163, 5953, 4174, 4176, 4173, + 4183, 4166, 4186, 4185, 4191, 4167, 4184, 4195, 4193, 4194, + 4199, 4200, 4201, 4210, 4211, 4212, 5953, 4206, 5953, 4213, + 4217, 4220, 4223, 4207, 5953, 4219, 4221, 4231, 4225, 4233, + 5953, 4234, 4228, 4236, 4238, 5953, 4245, 4247, 4239, 4241, + + 4255, 4256, 5953, 4261, 4262, 4258, 4249, 4270, 4267, 4268, + 4271, 4269, 4273, 4274, 4275, 4283, 4278, 4279, 5953, 4285, + 4288, 4295, 4296, 4290, 4280, 4298, 4304, 4297, 5953, 4306, + 4305, 4307, 4308, 4309, 4312, 4314, 4321, 4317, 4316, 5953, + 4320, 4324, 4337, 4318, 4328, 5953, 5953, 4333, 4338, 4340, + 4335, 4341, 5953, 4344, 4351, 4346, 4350, 4353, 5953, 5953, + 4355, 5953, 4352, 5953, 4357, 4356, 5953, 5953, 4359, 4360, + 4363, 4369, 4366, 5953, 4376, 5953, 4373, 4377, 4379, 4380, + 4382, 5953, 4381, 4384, 4389, 5953, 4383, 4391, 4390, 4394, + 5953, 4398, 4393, 4399, 5953, 4403, 4406, 4410, 4401, 4407, + + 4413, 4420, 4411, 4414, 4421, 4424, 4423, 4426, 4435, 4437, + 4439, 4441, 4430, 4427, 4444, 4446, 4450, 4448, 4452, 4453, + 4454, 4456, 4457, 4459, 4462, 4463, 4465, 4468, 4466, 4467, + 4479, 4469, 4471, 4481, 4483, 4472, 4482, 4486, 4485, 4490, + 4493, 4488, 4495, 4496, 5953, 4500, 4501, 4503, 4505, 4506, + 4507, 4514, 4516, 4522, 4524, 5953, 4527, 5953, 4529, 4513, + 4532, 4517, 5953, 4533, 4534, 4535, 4538, 4537, 4539, 4540, + 4541, 4544, 4545, 4547, 5953, 4550, 4551, 4555, 4566, 5953, + 4560, 4568, 4554, 4556, 4570, 4571, 4575, 4576, 4579, 4578, + 4581, 4583, 4590, 4585, 4587, 4588, 4591, 4589, 4592, 4599, + + 4598, 4606, 4608, 4614, 5953, 4601, 5953, 4615, 4611, 4616, + 4617, 4618, 4619, 4621, 5953, 5953, 4622, 4626, 4632, 4633, + 4625, 4635, 4641, 5953, 4636, 4646, 4653, 4644, 5953, 4627, + 4638, 4655, 5953, 4649, 4656, 4659, 4667, 4660, 4669, 4670, + 4662, 4664, 4672, 4674, 5953, 5953, 5953, 5953, 4676, 4678, + 4682, 4683, 4685, 4686, 4688, 4690, 4687, 5953, 4692, 5953, + 5953, 4694, 4701, 4693, 4703, 4704, 4705, 4709, 4711, 5953, + 4710, 4715, 4716, 4713, 4723, 4727, 4729, 4730, 4714, 4731, + 4739, 4737, 4740, 4738, 4743, 4745, 4747, 5953, 5953, 4750, + 4752, 4754, 4761, 4759, 4762, 4771, 4766, 4768, 4769, 4772, + + 4774, 4756, 4781, 4785, 4783, 4780, 5953, 4784, 4790, 5953, + 4786, 5953, 4791, 4794, 4758, 4795, 4797, 4800, 4801, 4803, + 5953, 5953, 4804, 4805, 4807, 4811, 4813, 4815, 4814, 4817, + 4818, 5953, 4819, 5953, 4820, 4827, 4822, 4828, 4836, 4839, + 4841, 4843, 4838, 4844, 5953, 4845, 4847, 5953, 4848, 4850, + 4851, 5953, 4855, 4858, 4862, 5953, 4868, 4859, 4865, 5953, + 4872, 5953, 4869, 4873, 4874, 4881, 5953, 4876, 4882, 5953, + 4885, 4888, 4890, 4879, 5953, 4877, 5953, 4891, 4898, 4899, + 4902, 4894, 4904, 4905, 4906, 4907, 4914, 4913, 4915, 5953, + 5953, 4923, 4910, 4916, 4920, 4925, 4932, 4927, 4930, 4929, + + 5953, 5953, 4937, 5953, 4935, 4938, 5953, 4939, 4944, 4945, + 4946, 4948, 4949, 4953, 4955, 4956, 4957, 4958, 4959, 4965, + 4977, 4961, 4975, 4981, 4983, 4985, 4987, 4979, 4989, 4990, + 4991, 4992, 4993, 4996, 5953, 4998, 4999, 5000, 5953, 5004, + 5005, 5007, 5009, 5953, 5020, 5015, 5021, 5022, 5953, 5008, + 5028, 5025, 5023, 5033, 5040, 5036, 5035, 5953, 5953, 5953, + 5037, 5046, 5953, 5051, 5038, 5041, 5043, 5953, 5047, 5053, + 5953, 5953, 5054, 5055, 5057, 5068, 5953, 5058, 5953, 5059, + 5953, 5067, 5069, 5075, 5073, 5953, 5078, 5084, 5953, 5087, + 5090, 5092, 5093, 5081, 5094, 5095, 5953, 5103, 5099, 5105, + + 5107, 5096, 5098, 5111, 5108, 5115, 5112, 5118, 5953, 5120, + 5122, 5123, 5129, 5121, 5131, 5125, 5953, 5133, 5953, 5134, + 5135, 5138, 5141, 5136, 5139, 5063, 5144, 5143, 5154, 5151, + 5953, 5156, 5160, 5953, 5157, 5953, 5162, 5953, 5163, 5164, + 5165, 5166, 5953, 5168, 5172, 5173, 5174, 5953, 5175, 5177, + 5183, 5953, 5953, 5184, 5194, 5185, 5186, 5198, 5200, 5187, + 5202, 5195, 5203, 5189, 5211, 5210, 5213, 5214, 5216, 5217, + 5218, 5953, 5953, 5953, 5223, 5222, 5230, 5227, 5228, 5238, + 5233, 5953, 5236, 5239, 5237, 5246, 5243, 5248, 5953, 5245, + 5249, 5250, 5252, 5254, 5255, 5259, 5953, 5263, 5270, 5266, + + 5258, 5273, 5277, 5280, 5282, 5283, 5953, 5285, 5953, 5953, + 5286, 5953, 5287, 5289, 5290, 5291, 5953, 5294, 5296, 5295, + 5297, 5299, 5953, 5307, 5300, 5302, 5303, 5953, 5953, 5314, + 5953, 5317, 5318, 5319, 5328, 5324, 5326, 5330, 5327, 5953, + 5325, 5331, 5335, 5337, 5338, 5953, 5339, 5341, 5342, 5343, + 5346, 5350, 5352, 5353, 5354, 5953, 5356, 5348, 5371, 5367, + 5953, 5355, 5373, 5953, 5953, 5358, 5377, 5378, 5953, 5953, + 5953, 5380, 5953, 5384, 5390, 5394, 5398, 5381, 5953, 5400, + 5389, 5397, 5953, 5393, 5401, 5403, 5405, 5953, 5953, 5402, + 5409, 5406, 5414, 5415, 5953, 5417, 5419, 5424, 5432, 5434, + + 5422, 5436, 5438, 5445, 5418, 5426, 5440, 5442, 5443, 5449, + 5446, 5453, 5462, 5458, 5460, 5467, 5468, 5953, 5953, 5470, + 5953, 5953, 5472, 5475, 5477, 5479, 5481, 5483, 5485, 5953, + 5420, 5487, 5488, 5489, 5490, 5953, 5492, 5494, 5491, 5495, + 5500, 5498, 5502, 5504, 5953, 5953, 5496, 5513, 5505, 5518, + 5507, 5953, 5520, 5515, 5521, 5522, 5524, 5526, 5529, 5953, + 5528, 5530, 5953, 5953, 5532, 5953, 5953, 5953, 5953, 5953, + 5953, 5953, 5953, 5533, 5953, 5537, 5541, 5549, 5552, 5953, + 5538, 5546, 5457, 5542, 5553, 5953, 5554, 5557, 5558, 5564, + 5556, 5559, 5565, 5569, 5572, 5570, 5573, 5574, 5575, 5579, + + 5576, 5580, 5582, 5953, 5953, 5953, 5581, 5583, 5593, 5585, + 5602, 5604, 5607, 5609, 5596, 5599, 5610, 5611, 5612, 5614, + 5618, 5626, 5621, 5622, 5623, 5624, 5630, 5625, 5627, 5632, + 5953, 5636, 5953, 5637, 5953, 5953, 5642, 5647, 5645, 5638, + 5649, 5656, 5652, 5654, 5658, 5659, 5661, 5663, 5953, 5665, + 5668, 5953, 5669, 5670, 5953, 5671, 5673, 5675, 5672, 5676, + 5679, 5682, 5690, 5681, 5953, 5953, 5684, 5692, 5693, 5697, + 5700, 5707, 5702, 5706, 5708, 5709, 5699, 5721, 5953, 5717, + 5719, 5723, 5953, 5725, 5720, 5726, 5727, 5728, 5736, 5731, + 5732, 5953, 5734, 5953, 5738, 5740, 5743, 5741, 5742, 5744, + + 5753, 5751, 5755, 5953, 5758, 5762, 5759, 5764, 5766, 5769, + 5770, 5771, 5773, 5775, 5779, 5783, 5785, 5786, 5776, 5789, + 5787, 5953, 5797, 5788, 5953, 5798, 5799, 5791, 5800, 5801, + 5953, 5809, 5805, 5811, 5812, 5815, 5816, 5953, 5818, 5821, + 5822, 5953, 5826, 5953, 5953, 5827, 5825, 5828, 5834, 5836, + 5953, 5953, 5953, 5861, 5868, 5875, 5882, 5889, 88, 5896, + 5903, 5910, 5917, 5924, 5931, 5938, 5945 } ; -static const flex_int16_t yy_def[3058] = +static const flex_int16_t yy_def[3068] = { 0, - 3043, 1, 3044, 3044, 3045, 3045, 3046, 3046, 3047, 3047, - 3048, 3048, 3043, 3049, 3043, 3043, 3043, 3043, 3050, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3051, 3043, 3043, 3043, 3051, 3052, 3043, 3043, - 3043, 3052, 3053, 3043, 3043, 3043, 3043, 3053, 3054, 3043, - 3043, 3043, 3054, 3055, 3043, 3056, 3043, 3055, 3055, 3049, - 3049, 3043, 3057, 3050, 3057, 3050, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3051, 3051, 3052, 3052, 3053, 3053, 3043, 3054, 3054, 3055, - 3055, 3056, 3056, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3055, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3043, 3043, 3049, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3055, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3055, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3043, 3049, 3043, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3043, 3049, 3043, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3043, - 3049, 3043, 3049, 3043, 3049, 3049, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3043, 3043, 3043, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, - - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3043, - 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3043, 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3043, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3043, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, - 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3043, 3049, 3043, 3049, 3043, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3043, 3043, - - 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3043, 3043, - 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3043, 3049, - 3043, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3043, 3043, 3049, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3043, - 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3043, 3043, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3043, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3043, 3043, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, - 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, 3049, - - 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, 3049, - 3049, 3043, 3049, 3049, 3043, 3049, 3049, 3049, 3049, 3049, - 3043, 3049, 3049, 3049, 3049, 3049, 3049, 3043, 3049, 3049, - 3049, 3043, 3049, 3043, 3043, 3049, 3049, 3049, 3049, 3049, - 3043, 3043, 0, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043 + 3053, 1, 3054, 3054, 3055, 3055, 3056, 3056, 3057, 3057, + 3058, 3058, 3053, 3059, 3053, 3053, 3053, 3053, 3060, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3061, 3053, 3053, 3053, 3061, 3062, 3053, 3053, + 3053, 3062, 3063, 3053, 3053, 3053, 3053, 3063, 3064, 3053, + 3053, 3053, 3064, 3065, 3053, 3066, 3053, 3065, 3065, 3059, + 3059, 3053, 3067, 3060, 3067, 3060, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3061, 3061, 3062, 3062, 3063, 3063, 3053, 3064, 3064, + 3065, 3065, 3066, 3066, 3065, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3065, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3065, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + + 3065, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3065, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3053, + 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3065, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3053, 3059, 3059, 3065, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3053, 3059, 3053, 3059, 3059, 3059, 3053, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + + 3059, 3059, 3059, 3053, 3053, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3053, + 3059, 3053, 3059, 3053, 3059, 3059, 3053, 3053, 3059, 3059, + 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3053, 3053, 3053, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, + 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3053, + 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3053, 3053, 3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3053, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3053, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, + 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3053, 3059, 3053, 3059, 3053, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3053, + 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3053, 3059, + 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3053, 3053, + 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3053, 3059, + 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, + 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3053, 3053, 3059, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3053, + 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3053, 3053, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3053, 3059, 3053, 3059, 3053, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + + 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3059, 3053, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, + 3053, 3053, 0, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3053, 3053, 3053, 3053 } ; -static const flex_int16_t yy_nxt[5968] = +static const flex_int16_t yy_nxt[5994] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1432,657 +1435,661 @@ static const flex_int16_t yy_nxt[5968] = 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, 92, 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, + 75, 71, 75, 68, 105, 158, 104, 93, 75, 76, + 142, 142, 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, - - 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, - - 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, - - 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, 290, 71, 288, - 289, 285, 291, 284, 286, 71, 71, 280, 71, 287, - 294, 297, 71, 298, 292, 299, 293, 71, 295, 301, - - 303, 71, 296, 304, 71, 71, 71, 300, 302, 71, - 307, 71, 71, 309, 310, 71, 71, 308, 305, 71, - 71, 71, 311, 71, 312, 306, 71, 313, 71, 71, - 71, 71, 315, 71, 71, 319, 71, 317, 71, 71, - 324, 71, 320, 314, 318, 325, 71, 71, 71, 321, - 316, 328, 322, 326, 330, 71, 333, 327, 323, 71, - 71, 71, 71, 329, 71, 71, 335, 336, 71, 71, - 339, 340, 342, 331, 332, 338, 71, 71, 71, 334, - 71, 71, 71, 337, 71, 345, 346, 71, 341, 71, - 347, 349, 343, 71, 353, 344, 71, 71, 71, 151, - - 350, 71, 71, 71, 71, 352, 71, 360, 358, 356, - 361, 354, 355, 71, 348, 71, 71, 351, 71, 364, - 362, 365, 357, 363, 71, 71, 71, 359, 71, 71, - 71, 71, 71, 371, 372, 71, 374, 369, 366, 71, - 71, 71, 368, 373, 367, 375, 71, 377, 71, 71, - 376, 71, 378, 71, 71, 370, 379, 381, 71, 71, - 384, 71, 382, 386, 380, 388, 71, 385, 383, 71, - 71, 71, 387, 71, 71, 391, 71, 389, 393, 71, - 71, 392, 396, 71, 71, 71, 398, 71, 71, 71, - 399, 71, 71, 401, 390, 71, 397, 408, 395, 394, - - 71, 403, 71, 71, 71, 405, 400, 407, 71, 402, - 404, 409, 71, 71, 71, 71, 410, 71, 420, 419, - 421, 417, 406, 71, 71, 71, 71, 423, 426, 427, - 424, 418, 411, 428, 71, 412, 422, 425, 429, 71, - 413, 414, 415, 416, 71, 71, 71, 430, 71, 436, - 71, 431, 71, 71, 432, 434, 71, 435, 437, 71, - 433, 71, 438, 71, 440, 71, 71, 439, 441, 445, - 71, 71, 446, 71, 447, 71, 71, 463, 450, 71, - 451, 444, 442, 448, 452, 443, 71, 71, 71, 71, - 449, 455, 453, 456, 71, 71, 464, 458, 454, 465, - - 71, 71, 71, 457, 462, 71, 466, 71, 467, 71, - 459, 71, 71, 460, 468, 461, 71, 71, 469, 71, - 482, 71, 479, 71, 517, 71, 470, 71, 471, 477, - 472, 480, 478, 481, 493, 484, 483, 151, 492, 494, - 71, 71, 71, 473, 495, 71, 474, 496, 475, 71, - 476, 71, 71, 485, 486, 71, 502, 499, 497, 498, - 71, 500, 71, 487, 71, 488, 489, 490, 501, 506, - 491, 71, 71, 71, 71, 71, 71, 71, 505, 507, - 504, 503, 512, 71, 514, 71, 515, 71, 71, 511, - 71, 513, 509, 510, 508, 71, 519, 523, 524, 71, - - 71, 518, 71, 516, 522, 71, 71, 71, 71, 534, - 71, 521, 71, 520, 529, 71, 71, 71, 71, 531, - 532, 71, 526, 527, 528, 525, 71, 71, 146, 71, - 71, 71, 530, 536, 71, 533, 535, 537, 540, 543, - 71, 539, 71, 546, 538, 544, 545, 547, 71, 541, - 71, 542, 548, 71, 549, 71, 71, 71, 553, 550, - 71, 551, 555, 71, 71, 71, 71, 558, 559, 556, - 552, 71, 71, 554, 71, 560, 71, 71, 557, 71, - 71, 565, 563, 71, 564, 71, 71, 561, 71, 566, - 71, 71, 71, 571, 71, 567, 572, 562, 71, 574, - - 570, 71, 71, 573, 569, 568, 575, 71, 577, 71, - 579, 71, 71, 71, 71, 576, 71, 71, 71, 71, - 581, 589, 582, 591, 578, 71, 71, 71, 584, 71, - 71, 592, 580, 588, 583, 585, 71, 586, 587, 590, - 71, 71, 71, 71, 596, 600, 599, 602, 594, 71, - 593, 595, 71, 71, 71, 71, 597, 601, 598, 71, - 605, 71, 71, 604, 71, 71, 608, 71, 71, 609, - 71, 603, 611, 71, 71, 71, 71, 71, 71, 625, - 610, 606, 607, 71, 612, 71, 614, 634, 144, 613, - 71, 615, 624, 71, 623, 626, 616, 628, 617, 627, - - 631, 71, 71, 71, 618, 71, 619, 629, 632, 620, - 621, 630, 635, 71, 71, 71, 622, 633, 71, 71, - 71, 637, 638, 636, 71, 641, 71, 643, 71, 71, - 71, 71, 71, 71, 640, 644, 639, 649, 71, 71, - 642, 645, 650, 646, 71, 71, 71, 151, 71, 647, - 653, 655, 656, 648, 652, 654, 71, 651, 71, 71, - 657, 71, 71, 71, 659, 71, 71, 663, 665, 71, - 71, 658, 71, 660, 667, 71, 661, 666, 664, 668, - 662, 670, 669, 71, 671, 71, 672, 71, 71, 71, - 71, 71, 71, 71, 676, 675, 71, 71, 684, 71, - - 681, 677, 673, 71, 674, 682, 71, 807, 678, 680, - 683, 679, 685, 71, 686, 687, 71, 688, 71, 689, - 71, 71, 71, 71, 690, 71, 691, 692, 71, 71, - 71, 71, 695, 71, 71, 696, 694, 700, 699, 71, - 693, 71, 71, 71, 71, 701, 71, 703, 71, 705, - 71, 706, 698, 71, 697, 71, 708, 702, 71, 712, - 71, 709, 707, 71, 704, 710, 71, 71, 711, 71, - 718, 714, 715, 71, 71, 71, 71, 716, 713, 721, - 71, 71, 719, 720, 717, 71, 723, 71, 724, 71, - 726, 71, 725, 71, 71, 71, 732, 71, 728, 730, - - 71, 722, 71, 71, 71, 71, 729, 727, 738, 733, - 71, 71, 71, 736, 71, 731, 739, 737, 71, 735, - 71, 734, 864, 740, 741, 742, 71, 71, 71, 743, - 745, 747, 746, 744, 71, 749, 71, 71, 71, 748, - 71, 71, 71, 750, 752, 71, 758, 751, 71, 753, - 71, 754, 71, 71, 71, 756, 757, 71, 755, 761, - 71, 763, 760, 71, 71, 71, 767, 759, 765, 71, - 764, 71, 71, 770, 769, 71, 768, 762, 771, 71, - 71, 772, 71, 766, 774, 71, 71, 776, 71, 71, - 71, 71, 782, 71, 775, 71, 773, 783, 71, 71, - - 71, 71, 71, 71, 777, 71, 778, 779, 784, 780, - 785, 781, 71, 71, 791, 786, 71, 789, 790, 787, - 71, 788, 71, 71, 71, 793, 792, 796, 71, 71, - 71, 71, 71, 71, 804, 794, 71, 71, 71, 71, - 805, 795, 797, 71, 798, 142, 803, 799, 800, 801, - 802, 71, 808, 71, 71, 810, 806, 71, 809, 71, - 71, 813, 811, 71, 812, 814, 815, 71, 816, 71, - 71, 71, 817, 71, 71, 818, 819, 71, 151, 820, - 825, 71, 822, 824, 71, 821, 823, 71, 826, 71, - 71, 71, 832, 71, 71, 827, 828, 71, 833, 835, - - 71, 71, 838, 836, 829, 830, 834, 71, 71, 71, - 71, 831, 71, 840, 71, 844, 71, 71, 71, 71, - 837, 71, 841, 71, 845, 846, 71, 839, 71, 71, - 71, 71, 843, 71, 859, 847, 71, 842, 71, 858, - 861, 856, 71, 849, 848, 71, 857, 860, 71, 862, - 850, 71, 863, 867, 851, 71, 865, 852, 71, 71, - 868, 71, 71, 876, 853, 854, 71, 855, 71, 866, - 71, 869, 870, 71, 871, 882, 880, 872, 71, 878, - 877, 151, 873, 881, 71, 71, 883, 879, 874, 875, - 71, 885, 71, 884, 71, 71, 71, 886, 887, 888, - - 71, 71, 889, 71, 71, 71, 71, 892, 890, 71, - 896, 71, 71, 895, 71, 71, 899, 71, 71, 71, - 891, 903, 905, 71, 893, 894, 897, 71, 898, 901, - 900, 71, 906, 934, 71, 909, 904, 907, 71, 908, - 902, 71, 910, 71, 71, 912, 913, 71, 71, 911, - 71, 71, 71, 914, 916, 71, 917, 71, 915, 71, - 918, 71, 71, 71, 923, 71, 920, 71, 926, 921, - 71, 71, 71, 71, 71, 71, 924, 919, 925, 71, - 71, 928, 922, 71, 929, 930, 932, 71, 931, 71, - 927, 71, 933, 71, 940, 71, 71, 71, 935, 938, - - 936, 71, 937, 71, 939, 71, 943, 71, 71, 947, - 941, 945, 948, 71, 71, 942, 71, 71, 71, 946, - 71, 950, 71, 71, 949, 944, 71, 71, 71, 71, - 961, 956, 958, 71, 71, 951, 71, 952, 953, 71, - 71, 71, 954, 955, 71, 959, 963, 71, 960, 957, - 962, 71, 964, 965, 967, 71, 971, 966, 969, 71, - 968, 71, 71, 71, 970, 71, 71, 978, 71, 980, - 973, 71, 71, 71, 982, 71, 983, 71, 71, 71, - 71, 972, 71, 974, 988, 976, 979, 975, 977, 71, - 986, 981, 71, 984, 71, 990, 985, 991, 987, 71, - - 71, 71, 992, 71, 995, 71, 997, 71, 71, 71, - 71, 71, 71, 989, 994, 71, 999, 71, 993, 1000, - 151, 1002, 71, 1003, 1001, 996, 998, 71, 71, 71, - 71, 71, 1006, 71, 1004, 1005, 71, 1018, 71, 1021, - 71, 71, 1019, 71, 1009, 71, 71, 1007, 71, 1023, - 71, 1010, 71, 1008, 1011, 71, 1020, 1026, 1012, 71, - 1013, 1024, 1025, 71, 1014, 1033, 1015, 71, 1022, 1028, - 71, 1016, 71, 1027, 1029, 71, 1017, 1030, 71, 1036, - 71, 71, 1031, 71, 1038, 1034, 1037, 1044, 71, 71, - 71, 71, 1042, 1039, 1032, 1035, 1041, 1040, 71, 1043, - - 71, 1045, 1046, 71, 71, 71, 71, 71, 71, 1058, - 1048, 1047, 71, 71, 1061, 1057, 71, 71, 1049, 71, - 1050, 1059, 1062, 71, 1060, 1051, 149, 1052, 71, 71, - 1064, 1063, 71, 1053, 1067, 71, 1068, 1069, 1054, 1055, - 71, 71, 71, 71, 1070, 1056, 1073, 1065, 1066, 71, - 71, 71, 71, 71, 1074, 1072, 71, 1079, 71, 1071, - 1076, 71, 1077, 71, 71, 71, 71, 1080, 71, 1075, - 1082, 71, 1078, 71, 71, 1091, 71, 71, 71, 1089, - 1081, 71, 1084, 1086, 1083, 1087, 1085, 1088, 71, 71, - 71, 1090, 71, 1092, 71, 71, 71, 71, 71, 71, - - 71, 1099, 1093, 1100, 1096, 1101, 1102, 71, 1103, 1094, - 1098, 1095, 1097, 1104, 71, 1106, 1107, 71, 71, 71, - 1111, 1108, 71, 71, 71, 1109, 71, 1105, 1110, 71, - 71, 1117, 1112, 71, 1119, 71, 71, 71, 71, 71, - 71, 1121, 1115, 1113, 1114, 1116, 71, 71, 147, 1123, - 1120, 71, 1122, 1118, 71, 71, 1125, 71, 71, 1126, - 1124, 71, 1128, 1127, 1131, 71, 1129, 1130, 71, 1134, - 1135, 71, 71, 71, 1133, 71, 71, 71, 1139, 1138, - 71, 1132, 1136, 71, 71, 71, 71, 1145, 1143, 1146, - 1137, 71, 71, 71, 71, 71, 1147, 1148, 1140, 1144, - - 71, 1150, 1141, 71, 1142, 1149, 71, 71, 1153, 1155, - 71, 1154, 1151, 71, 71, 71, 71, 71, 71, 71, - 1159, 1160, 1156, 1152, 1157, 71, 71, 71, 71, 1165, - 1161, 1166, 71, 1168, 1158, 71, 71, 71, 1163, 1169, - 71, 71, 71, 1162, 1173, 71, 1164, 1167, 71, 71, - 71, 71, 71, 1172, 71, 1170, 1171, 71, 1175, 1179, - 71, 71, 71, 1174, 71, 71, 71, 1183, 1180, 1176, - 146, 1178, 1181, 1182, 1184, 1187, 1177, 1185, 71, 1188, - 1192, 71, 71, 71, 1186, 71, 71, 1189, 1190, 71, - 71, 71, 71, 71, 1191, 1194, 71, 1193, 71, 71, - - 1197, 1200, 71, 71, 71, 71, 1195, 71, 71, 1210, - 71, 1196, 1206, 1198, 1203, 1199, 1204, 1201, 71, 71, - 71, 1207, 1202, 1208, 1211, 1205, 1209, 1212, 71, 71, - 71, 71, 1214, 1215, 71, 71, 1213, 71, 71, 1216, - 1219, 71, 71, 1218, 1224, 71, 1221, 71, 71, 1217, - 71, 71, 1225, 1222, 71, 1226, 1220, 1223, 71, 1228, - 1230, 71, 1229, 71, 71, 71, 71, 71, 1227, 71, - 71, 71, 71, 71, 1236, 71, 1231, 1234, 1232, 1241, - 71, 1235, 1237, 1233, 71, 71, 71, 71, 1238, 1247, - 1240, 1246, 1239, 71, 1248, 1242, 1245, 71, 71, 71, - - 71, 1252, 71, 1250, 1243, 1244, 1253, 71, 71, 71, - 1257, 1251, 71, 1249, 71, 71, 1255, 71, 1266, 1254, - 1268, 1256, 71, 1265, 71, 1264, 1269, 1258, 71, 1267, - 1259, 1260, 1270, 71, 71, 1261, 71, 71, 71, 1271, - 71, 1262, 1272, 71, 1273, 1263, 71, 1275, 71, 71, - 71, 1276, 71, 1277, 1274, 71, 1278, 1282, 1279, 1280, - 71, 1285, 1286, 71, 71, 71, 1324, 71, 71, 1281, - 1287, 71, 1289, 1284, 1283, 1288, 71, 1290, 71, 1291, - 71, 1292, 1298, 1293, 71, 1294, 1295, 1296, 71, 71, - 71, 1297, 1302, 71, 1300, 71, 71, 1303, 71, 1301, - - 1305, 71, 71, 1299, 71, 71, 1311, 71, 1312, 71, - 1306, 1307, 71, 71, 71, 1304, 71, 1313, 71, 1310, - 1308, 1315, 71, 1309, 71, 71, 71, 1314, 1316, 71, - 1320, 1317, 1321, 71, 1323, 71, 1318, 71, 71, 71, - 1325, 1322, 71, 1326, 1329, 71, 1331, 71, 1327, 1319, - 71, 1328, 71, 1332, 71, 1333, 71, 1336, 71, 1330, - 71, 71, 71, 71, 1338, 71, 71, 71, 1340, 1342, - 71, 71, 144, 1344, 1341, 1334, 71, 1335, 71, 71, - 1337, 1346, 1339, 1347, 1343, 71, 1345, 1348, 71, 71, - 1349, 71, 1351, 1350, 1352, 71, 71, 71, 71, 1357, - - 1358, 1360, 1354, 71, 1355, 71, 71, 71, 1359, 71, - 71, 1356, 71, 1353, 1364, 71, 71, 71, 1361, 71, - 1368, 1369, 71, 1363, 1371, 71, 71, 71, 1370, 1362, - 71, 71, 71, 71, 71, 71, 1365, 1366, 71, 1372, - 71, 1378, 1367, 71, 1375, 1373, 71, 1376, 71, 1383, - 71, 1374, 1377, 1382, 71, 1379, 71, 142, 71, 1385, - 1387, 1381, 71, 1380, 71, 1388, 71, 71, 71, 1384, - 71, 1390, 1391, 71, 71, 1386, 1389, 71, 71, 1396, - 1398, 1392, 1397, 1393, 1400, 1394, 71, 1399, 1395, 71, - 71, 71, 71, 1401, 1403, 71, 1405, 1402, 71, 1404, - - 71, 71, 71, 1408, 71, 71, 1410, 71, 71, 1415, - 1407, 71, 71, 1409, 71, 1416, 71, 1406, 1412, 71, - 1419, 71, 1411, 1413, 71, 1414, 71, 71, 1420, 71, - 1417, 71, 71, 1418, 71, 1422, 1426, 1428, 1421, 1423, - 71, 1427, 1424, 71, 71, 1431, 71, 71, 1425, 71, - 71, 1436, 1430, 1433, 1437, 1435, 71, 71, 1429, 71, - 71, 1432, 71, 1438, 71, 1439, 1440, 71, 71, 71, - 1434, 71, 1441, 1444, 1443, 71, 71, 1447, 1442, 71, - 71, 71, 1446, 71, 71, 1453, 1445, 1455, 1449, 1450, - 1454, 71, 1456, 71, 71, 1451, 71, 1458, 71, 1448, - - 71, 71, 1452, 71, 71, 71, 71, 1466, 1462, 71, - 1461, 71, 1469, 71, 1457, 71, 1467, 1459, 71, 1460, - 71, 1472, 71, 1463, 1465, 1464, 1471, 71, 71, 71, - 71, 71, 71, 71, 1470, 1468, 71, 71, 1480, 71, - 71, 1473, 1481, 1483, 71, 1477, 71, 1474, 1475, 1476, - 1486, 1479, 1482, 1478, 1484, 71, 71, 71, 71, 71, - 71, 1485, 1490, 71, 71, 71, 1491, 1488, 1493, 71, - 1487, 71, 1489, 1497, 71, 1499, 1498, 71, 71, 1492, - 1494, 71, 71, 71, 1495, 1496, 71, 1502, 71, 71, - 1503, 1501, 1500, 1504, 71, 1508, 1509, 71, 71, 71, - - 71, 71, 71, 1505, 1514, 1512, 1506, 71, 1513, 71, - 71, 1516, 71, 71, 1507, 71, 1510, 71, 1517, 71, - 1511, 71, 1515, 1518, 71, 1519, 71, 71, 1523, 1520, - 1521, 71, 1524, 71, 71, 71, 1525, 1522, 71, 1528, - 71, 1530, 71, 71, 71, 1534, 71, 1526, 71, 1529, - 71, 71, 1527, 71, 71, 1537, 1531, 1532, 1539, 71, - 1535, 71, 71, 1542, 71, 1540, 1536, 71, 1533, 1538, - 71, 1541, 71, 71, 1545, 1543, 71, 1547, 1544, 1548, - 71, 71, 71, 1546, 71, 71, 1555, 71, 71, 71, - 1550, 1549, 1556, 71, 71, 71, 1553, 1564, 1559, 1560, - - 1551, 1552, 71, 71, 1562, 71, 71, 71, 1557, 1554, - 1563, 1566, 71, 1558, 71, 1561, 71, 71, 1568, 71, - 1570, 1567, 71, 71, 1573, 71, 1565, 1571, 71, 1574, - 71, 1569, 71, 71, 71, 1579, 1578, 71, 71, 1575, - 1572, 71, 71, 71, 1595, 1585, 1586, 1577, 1576, 1580, - 71, 71, 71, 1582, 71, 1587, 1583, 71, 1581, 1593, - 1597, 71, 1590, 1589, 1592, 71, 71, 1591, 1584, 71, - 71, 1588, 71, 1596, 1594, 1598, 71, 71, 71, 71, - 71, 1604, 1605, 1603, 71, 71, 1607, 71, 71, 1599, - 1606, 71, 71, 1610, 71, 1600, 1609, 1601, 71, 1602, - - 71, 71, 71, 1611, 71, 71, 71, 1608, 1619, 71, - 71, 71, 71, 71, 71, 71, 1617, 71, 1612, 1615, - 1616, 1613, 1614, 1618, 1624, 71, 1622, 71, 71, 1620, - 71, 1621, 1626, 71, 1623, 1625, 71, 1627, 71, 71, - 71, 1630, 71, 1628, 1629, 71, 71, 1632, 71, 1634, - 71, 1631, 71, 1641, 1633, 1635, 1637, 71, 1636, 71, - 1638, 1642, 71, 1643, 71, 1639, 1647, 71, 71, 1644, - 1645, 1646, 1648, 1640, 71, 71, 71, 71, 71, 71, - 1650, 1651, 71, 71, 1659, 1660, 71, 71, 1654, 71, - 71, 71, 1656, 1649, 1653, 1657, 1652, 71, 1658, 71, - - 71, 1655, 71, 71, 1662, 71, 71, 1661, 71, 1669, - 71, 71, 71, 1664, 1666, 1663, 1665, 1672, 71, 1671, - 71, 1673, 1670, 1668, 71, 71, 1680, 1675, 1667, 1677, - 1676, 1681, 71, 71, 71, 1674, 71, 71, 1686, 71, - 1688, 71, 1685, 1679, 71, 1678, 1689, 1682, 71, 1683, - 1691, 71, 71, 1690, 71, 71, 71, 1687, 1684, 1695, - 1692, 71, 1699, 71, 71, 71, 1697, 71, 71, 1694, - 71, 1693, 1698, 71, 1696, 1700, 71, 71, 71, 71, - 71, 1703, 1711, 1701, 71, 1704, 1709, 71, 71, 1702, - 1705, 1706, 1712, 1707, 1708, 71, 71, 1713, 71, 71, - - 71, 1718, 71, 71, 71, 1722, 71, 71, 1710, 71, - 71, 3043, 71, 1717, 1715, 1714, 1724, 71, 1716, 1720, - 71, 71, 1721, 71, 1719, 1725, 1726, 71, 1727, 1723, - 1731, 71, 1730, 1729, 71, 71, 1728, 71, 1735, 71, - 71, 71, 71, 71, 71, 71, 1742, 1733, 1737, 71, - 71, 71, 71, 1732, 1736, 1738, 1734, 1739, 1836, 71, - 71, 1740, 1743, 1747, 1741, 1745, 71, 1744, 1746, 71, - 1748, 71, 71, 1751, 71, 1750, 71, 1749, 1754, 71, - 1752, 71, 71, 71, 71, 1755, 1753, 71, 71, 71, - 71, 71, 71, 1760, 71, 71, 1764, 71, 71, 1761, - - 3043, 71, 1770, 1756, 1762, 1758, 1757, 1759, 71, 1763, - 1765, 71, 1773, 1768, 71, 1767, 1772, 71, 71, 1774, - 1769, 71, 71, 1766, 71, 71, 1771, 1778, 71, 1781, - 1782, 71, 71, 1775, 1783, 71, 71, 1776, 1779, 71, - 1780, 71, 1777, 1785, 71, 71, 1786, 1789, 71, 71, - 1791, 71, 1784, 1790, 1792, 1793, 71, 1787, 1795, 1794, - 1788, 71, 71, 71, 71, 1800, 1797, 1798, 71, 71, - 1799, 71, 71, 71, 71, 1807, 71, 1809, 71, 71, - 71, 71, 1810, 71, 1801, 1802, 1803, 1796, 71, 71, - 1812, 1804, 1811, 1805, 1806, 1814, 1808, 1815, 71, 1817, - - 1813, 71, 71, 71, 1819, 71, 71, 1816, 71, 1821, - 71, 71, 1824, 1825, 71, 71, 1827, 71, 71, 71, - 71, 71, 1818, 1833, 71, 1832, 1822, 71, 1820, 1829, - 1830, 71, 1823, 71, 71, 1826, 71, 71, 1839, 71, - 1831, 71, 1837, 1828, 71, 71, 1843, 71, 1834, 1835, - 1842, 71, 71, 1846, 1845, 1847, 1849, 1841, 71, 71, - 71, 71, 1838, 71, 1844, 1840, 1848, 71, 71, 1850, - 71, 71, 71, 1854, 71, 1857, 71, 1858, 1851, 71, - 1853, 71, 1852, 71, 71, 1861, 71, 71, 71, 1855, - 1866, 71, 1865, 71, 1860, 71, 1859, 71, 1856, 71, - - 71, 1862, 71, 1870, 1863, 71, 1871, 1867, 1864, 1874, - 1868, 1872, 1869, 1873, 71, 71, 1877, 71, 1878, 71, - 71, 71, 71, 71, 1884, 71, 1875, 1881, 71, 71, - 71, 1876, 1889, 1879, 1886, 1887, 71, 71, 1888, 1880, - 1885, 1882, 71, 1883, 71, 71, 1894, 71, 1895, 71, - 1898, 1890, 1896, 1899, 71, 1891, 71, 1897, 71, 71, - 1892, 71, 71, 1903, 71, 1893, 1901, 71, 71, 71, - 71, 1905, 1908, 71, 1902, 1910, 1904, 71, 71, 71, - 1900, 71, 1906, 71, 71, 71, 71, 1915, 1920, 1911, - 1914, 1912, 71, 1907, 71, 1909, 71, 1916, 1917, 71, - - 1918, 71, 1913, 71, 1927, 71, 1919, 71, 71, 1921, - 1922, 71, 71, 1923, 71, 1926, 1925, 1924, 71, 1928, - 71, 71, 71, 1932, 71, 71, 1929, 1931, 71, 71, - 1933, 71, 1930, 1934, 1935, 1936, 71, 71, 71, 71, - 1938, 71, 1943, 1941, 71, 1937, 1942, 71, 71, 71, - 71, 71, 1948, 71, 71, 1939, 1945, 1940, 71, 71, - 71, 1952, 1944, 1949, 1947, 71, 1954, 1946, 1951, 71, - 71, 1950, 1958, 71, 1953, 1956, 71, 71, 71, 1955, - 1959, 71, 1957, 71, 1964, 71, 71, 1966, 71, 71, - 71, 1967, 1960, 71, 1961, 1970, 1962, 1963, 1968, 71, - - 71, 1969, 1965, 71, 1972, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 1973, 3043, 71, 71, 1980, 1975, - 1971, 1976, 1977, 1984, 71, 71, 1979, 1974, 1983, 71, - 71, 1981, 1987, 1982, 1978, 1985, 71, 71, 71, 71, - 1991, 1988, 1990, 71, 71, 1986, 71, 71, 1993, 71, - 1989, 1994, 71, 71, 71, 1995, 1999, 1992, 1997, 71, - 71, 2001, 2003, 71, 1998, 1996, 71, 71, 71, 2006, - 71, 71, 2000, 2005, 2002, 2007, 2008, 71, 71, 2011, - 71, 71, 71, 71, 71, 71, 2012, 71, 2017, 71, - 2014, 71, 2004, 2013, 2021, 2009, 71, 2018, 2010, 2019, - - 71, 2016, 2015, 71, 71, 71, 2023, 71, 2022, 2026, - 71, 2020, 71, 2024, 71, 2028, 71, 2029, 71, 2027, - 71, 2025, 71, 71, 71, 2031, 2035, 2030, 71, 71, - 2032, 2033, 2037, 71, 2034, 71, 71, 2038, 71, 71, - 2040, 2041, 2039, 71, 2036, 71, 71, 71, 2042, 2044, - 2043, 2047, 71, 71, 71, 2045, 2046, 2048, 71, 71, - 71, 71, 71, 71, 2049, 71, 71, 2056, 2051, 2050, - 2057, 2053, 2054, 2052, 71, 2058, 71, 71, 71, 71, - 2059, 2055, 2061, 2067, 71, 71, 2062, 71, 71, 2069, - 71, 71, 2063, 2060, 2066, 2071, 2064, 2068, 71, 71, - - 71, 3043, 2074, 2072, 2065, 2076, 2070, 2075, 71, 2077, - 71, 71, 2073, 2078, 71, 71, 2081, 71, 71, 2082, - 2080, 71, 2079, 2086, 71, 71, 2087, 71, 71, 2090, - 2085, 71, 71, 2083, 71, 71, 2091, 71, 2092, 2088, - 2093, 71, 71, 2095, 2084, 71, 2089, 2094, 71, 71, - 2100, 71, 2096, 71, 2097, 2098, 71, 2099, 71, 71, - 71, 71, 71, 2103, 71, 71, 2107, 2109, 71, 2110, - 71, 2102, 71, 71, 71, 71, 2101, 2104, 2105, 2112, - 2106, 71, 71, 71, 71, 2111, 2108, 2114, 2116, 2119, - 71, 71, 2115, 71, 2117, 71, 71, 71, 2113, 2120, - - 2118, 71, 71, 2121, 71, 71, 71, 2130, 71, 71, - 71, 71, 2122, 2131, 2127, 71, 2125, 2285, 2123, 2133, - 2124, 2129, 2126, 71, 2132, 2128, 71, 2135, 2134, 2136, - 71, 2137, 71, 71, 71, 2140, 71, 71, 2138, 2143, - 71, 71, 2144, 71, 71, 2141, 2139, 71, 2142, 2145, - 2149, 71, 2150, 71, 71, 2152, 71, 71, 71, 2148, - 71, 2146, 71, 2147, 2154, 71, 71, 2157, 71, 2158, - 71, 2156, 2159, 2151, 71, 2153, 71, 2155, 71, 2162, - 71, 2164, 71, 2160, 71, 2163, 2166, 71, 71, 71, - 2161, 71, 2169, 71, 2168, 71, 2170, 2165, 2172, 71, - - 71, 71, 2167, 2176, 71, 71, 71, 71, 2174, 71, - 2173, 2171, 71, 2180, 2181, 71, 71, 2185, 71, 2175, - 71, 2177, 2179, 71, 71, 2182, 71, 2183, 2178, 71, - 2187, 2184, 71, 71, 2192, 71, 71, 2194, 2188, 71, - 2186, 71, 2195, 71, 2189, 2193, 71, 2190, 2199, 71, - 71, 2200, 71, 2198, 71, 71, 71, 2196, 2191, 2197, - 2204, 2206, 71, 2202, 71, 2209, 71, 2207, 71, 2211, - 71, 71, 71, 2203, 2201, 71, 71, 2212, 71, 2208, - 2205, 2213, 71, 2215, 71, 2216, 71, 2210, 71, 71, - 71, 71, 2221, 2214, 2222, 2217, 2223, 2218, 2219, 2220, - - 71, 71, 71, 71, 2225, 2224, 71, 2227, 2228, 71, - 2229, 2231, 2226, 2232, 71, 71, 71, 71, 2230, 2235, - 71, 71, 71, 71, 71, 71, 2237, 2242, 71, 71, - 71, 2233, 2234, 2243, 2238, 71, 2236, 2246, 71, 2239, - 2240, 2241, 71, 2247, 2248, 71, 71, 2245, 71, 2249, - 2244, 2251, 2252, 2250, 2253, 71, 71, 71, 71, 71, - 2255, 71, 71, 71, 71, 2259, 2260, 71, 3043, 71, - 2254, 71, 71, 2256, 2262, 2263, 2257, 71, 2265, 71, - 2264, 2261, 2258, 71, 71, 71, 71, 71, 2266, 71, - 2269, 2270, 71, 2267, 2272, 71, 71, 71, 71, 71, - - 2271, 71, 2276, 2279, 71, 2268, 2278, 71, 71, 71, - 2280, 2275, 71, 71, 2284, 2273, 2274, 2283, 71, 2277, - 71, 71, 71, 2286, 2282, 2281, 2292, 2287, 71, 2288, - 71, 71, 2291, 2289, 2293, 71, 2295, 71, 71, 71, - 71, 2297, 71, 71, 2290, 71, 71, 2294, 2296, 71, - 71, 2301, 71, 71, 71, 2303, 2298, 2299, 2304, 2305, - 71, 2300, 2306, 71, 2307, 71, 2308, 71, 2309, 71, - 71, 71, 2311, 2314, 71, 2302, 2310, 71, 2316, 71, - 71, 2319, 71, 2313, 71, 71, 2315, 71, 2312, 71, - 2322, 2323, 71, 71, 71, 2318, 71, 2317, 2324, 71, - - 71, 2327, 2328, 71, 2320, 2321, 71, 71, 2326, 71, - 71, 71, 2325, 71, 2332, 71, 2334, 2329, 2374, 2331, - 2330, 2335, 71, 2336, 71, 2337, 71, 2338, 71, 71, - 2333, 2340, 71, 71, 2342, 71, 2343, 2341, 71, 71, - 71, 2339, 71, 2348, 71, 71, 2350, 71, 2351, 71, - 2344, 2345, 71, 71, 71, 71, 71, 71, 2347, 71, - 2346, 2354, 2357, 2352, 2349, 2353, 71, 2355, 2360, 71, - 71, 71, 71, 71, 71, 71, 2356, 71, 2367, 2358, - 2361, 71, 71, 71, 71, 71, 2359, 2364, 71, 2366, - 2368, 71, 2363, 2378, 71, 3043, 2362, 2365, 2369, 2370, - - 2371, 71, 71, 71, 71, 2375, 2376, 2372, 2377, 2379, - 71, 2373, 71, 2380, 71, 2381, 71, 2382, 71, 71, - 2383, 71, 71, 2385, 71, 71, 71, 71, 71, 2384, - 2392, 71, 71, 71, 2390, 71, 2396, 2397, 71, 2386, - 2387, 71, 71, 2388, 2389, 71, 2391, 2393, 71, 2394, - 2395, 2399, 2400, 71, 2401, 2398, 2402, 71, 71, 2403, - 71, 71, 71, 71, 71, 2405, 2404, 71, 2411, 71, - 2412, 71, 2413, 71, 71, 2406, 71, 71, 71, 2407, - 2408, 71, 2410, 2409, 2418, 71, 2417, 2422, 71, 2415, - 2420, 2414, 71, 71, 2421, 2416, 71, 2419, 2423, 2424, - - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 2426, 2430, 2425, 71, 71, 2428, 2434, 2435, 71, 2438, - 71, 2427, 71, 71, 2429, 2431, 2432, 2437, 2433, 2436, - 71, 71, 2442, 71, 2439, 2441, 2443, 2440, 71, 71, - 2446, 71, 71, 71, 71, 2450, 71, 71, 2449, 2452, - 71, 71, 2448, 71, 2447, 71, 2453, 71, 2444, 2445, - 2457, 71, 2454, 71, 2458, 71, 2451, 2460, 71, 2456, - 71, 2455, 71, 71, 71, 71, 2465, 71, 2467, 71, - 71, 71, 2463, 2461, 2464, 2462, 2468, 2459, 71, 2466, - 71, 71, 71, 2469, 2470, 2471, 71, 71, 71, 2472, - - 71, 71, 71, 71, 3043, 2474, 2475, 2477, 2478, 2480, - 71, 2473, 2476, 2481, 71, 2479, 71, 71, 71, 2484, - 2486, 3043, 2483, 2482, 71, 71, 71, 71, 2488, 2487, - 71, 2491, 71, 2492, 71, 2490, 2485, 71, 2494, 71, - 2489, 71, 2496, 71, 2495, 71, 71, 2497, 71, 71, - 2493, 2498, 2500, 71, 2499, 71, 71, 2501, 71, 71, - 2502, 71, 2507, 2516, 2506, 2503, 2508, 71, 71, 2505, - 71, 71, 71, 71, 2504, 2509, 2511, 71, 71, 2510, - 2512, 71, 71, 2514, 71, 2513, 2515, 71, 71, 2520, - 71, 71, 71, 2518, 71, 2517, 2519, 2525, 71, 2521, - - 71, 71, 71, 2529, 71, 71, 71, 71, 2534, 71, - 2522, 2527, 2523, 2524, 71, 71, 2528, 2536, 2533, 2526, - 2537, 2531, 2538, 71, 2530, 71, 71, 2532, 71, 2539, - 71, 71, 71, 2540, 71, 71, 2541, 71, 71, 2544, - 2535, 2542, 71, 2547, 2548, 71, 71, 2543, 2549, 71, - 2551, 2545, 71, 2546, 2550, 71, 71, 2552, 2553, 71, - 71, 71, 2557, 71, 71, 2555, 71, 2558, 71, 71, - 2560, 2561, 71, 2556, 2562, 71, 2554, 71, 71, 2564, - 2563, 71, 2565, 2559, 2567, 71, 71, 2568, 2569, 71, - 2571, 71, 71, 71, 71, 2575, 2570, 71, 2566, 2576, - - 71, 71, 71, 71, 2578, 2572, 2577, 71, 2574, 2579, - 71, 2573, 71, 2584, 71, 2587, 71, 71, 2583, 71, - 2580, 2586, 71, 2581, 71, 71, 71, 2582, 2590, 2588, - 2589, 71, 71, 71, 2592, 71, 71, 3043, 2595, 2585, - 71, 2599, 71, 71, 71, 71, 71, 2601, 71, 2593, - 2594, 2591, 71, 2596, 2598, 2602, 2597, 2600, 2606, 2603, - 2605, 2609, 71, 2607, 71, 2604, 71, 2608, 71, 2610, - 71, 2611, 71, 2612, 71, 2613, 71, 71, 71, 71, - 71, 2615, 2614, 71, 2621, 71, 71, 71, 2618, 2622, - 2624, 71, 71, 2626, 71, 71, 71, 2616, 3043, 2625, - - 2619, 2627, 71, 2620, 2617, 2623, 2628, 71, 71, 71, - 71, 2629, 71, 2632, 2633, 71, 2634, 2630, 2631, 2635, - 71, 2637, 71, 71, 71, 71, 2638, 71, 71, 2641, - 71, 2640, 2642, 71, 71, 2636, 2639, 2643, 71, 2644, - 71, 71, 71, 2647, 71, 71, 71, 3043, 2646, 2652, - 71, 2650, 2648, 2645, 71, 71, 71, 2653, 2694, 2655, - 71, 2656, 71, 2657, 2651, 71, 2649, 2654, 71, 2658, - 2659, 71, 2660, 2662, 71, 2661, 2663, 71, 2664, 71, - 71, 71, 71, 71, 2669, 71, 71, 2668, 2666, 2665, - 71, 2670, 71, 2672, 71, 71, 2677, 2671, 71, 71, - - 2667, 2673, 71, 2675, 2679, 71, 2674, 71, 71, 71, - 71, 2680, 71, 2676, 2681, 2682, 71, 2683, 71, 2687, - 71, 71, 71, 71, 2678, 71, 71, 2684, 71, 2690, - 71, 71, 2686, 2685, 2688, 2689, 2695, 2691, 71, 2692, - 2697, 71, 2699, 71, 71, 2693, 2700, 71, 2702, 71, - 71, 71, 71, 71, 2707, 71, 2696, 2698, 2706, 71, - 71, 71, 71, 2711, 71, 2701, 2703, 2704, 2705, 2713, - 71, 71, 71, 71, 71, 2715, 71, 2716, 2712, 2708, - 2710, 71, 71, 2709, 2718, 71, 2719, 71, 2721, 71, - 71, 2714, 2726, 2723, 2720, 2717, 2725, 71, 71, 2724, - - 71, 71, 2730, 71, 71, 71, 2732, 2731, 2722, 71, - 71, 2735, 2728, 2736, 71, 71, 2727, 71, 2737, 2738, - 71, 2729, 2733, 71, 71, 71, 71, 2743, 2740, 2734, - 71, 2741, 71, 71, 2746, 71, 71, 71, 2739, 71, - 2751, 71, 71, 2742, 2747, 71, 71, 2744, 2745, 2754, - 71, 3043, 2750, 71, 2748, 2753, 2755, 71, 2756, 2757, - 71, 2752, 2749, 2759, 71, 2758, 2760, 71, 2761, 71, - 71, 2763, 71, 71, 71, 2762, 71, 71, 71, 2768, - 2769, 71, 71, 71, 71, 2773, 71, 71, 2774, 71, - 71, 3043, 2764, 2772, 71, 2777, 2765, 2770, 2766, 2767, - - 2778, 71, 2771, 2779, 71, 71, 71, 2775, 2776, 2782, - 2780, 71, 71, 71, 71, 71, 2785, 71, 71, 2786, - 2781, 2784, 71, 2783, 71, 71, 71, 2789, 71, 71, - 71, 2791, 2787, 71, 2792, 71, 2790, 71, 2788, 71, - 71, 71, 71, 71, 2808, 71, 2801, 2793, 2802, 2794, - 2795, 2796, 2804, 2797, 71, 2803, 2798, 2799, 71, 2805, - 71, 2800, 2806, 2809, 71, 71, 2811, 71, 71, 2810, - 2812, 71, 2819, 2807, 2813, 2814, 71, 71, 2815, 2816, - 71, 71, 2817, 2818, 71, 71, 2820, 71, 71, 71, - 71, 2826, 71, 71, 2821, 2825, 71, 2829, 2822, 2843, - - 2823, 71, 71, 2828, 71, 71, 71, 71, 2824, 71, - 2830, 71, 2834, 71, 2827, 2833, 2864, 2831, 2835, 71, - 2836, 71, 2832, 71, 2837, 71, 2841, 71, 2838, 71, - 71, 2842, 71, 71, 2839, 2847, 71, 2840, 2844, 2850, - 71, 2848, 2845, 2851, 71, 71, 2853, 71, 2899, 71, - 2846, 2852, 2849, 2854, 71, 71, 2856, 71, 2857, 71, - 2855, 2858, 71, 2859, 71, 2860, 71, 2861, 71, 2862, - 71, 2863, 71, 2865, 71, 71, 71, 71, 71, 71, - 2870, 71, 71, 71, 2866, 71, 2874, 71, 2867, 71, - 2876, 71, 71, 2871, 71, 2872, 2883, 2868, 2869, 2873, - - 71, 2877, 71, 2878, 2875, 71, 2880, 71, 71, 71, - 2882, 71, 2881, 71, 2885, 71, 71, 71, 2879, 71, - 71, 2889, 2884, 2892, 71, 71, 2890, 2894, 71, 71, - 2886, 2887, 2888, 71, 2891, 2895, 71, 2893, 2896, 71, - 71, 71, 2898, 71, 71, 71, 71, 2907, 2897, 2900, - 2904, 71, 71, 2905, 2901, 2903, 71, 71, 2906, 71, - 71, 71, 71, 71, 2902, 2908, 71, 71, 71, 71, - 71, 2914, 71, 2911, 2918, 2909, 2913, 2910, 2915, 2921, - 71, 2922, 2919, 71, 2916, 2912, 71, 2917, 2923, 71, - 2920, 71, 2924, 2925, 71, 2926, 71, 71, 71, 71, - - 2929, 71, 2927, 2930, 2931, 71, 2928, 2934, 71, 71, - 71, 71, 71, 71, 71, 2937, 2939, 71, 2942, 71, - 2933, 2936, 2935, 71, 71, 71, 2932, 2940, 2945, 71, - 2949, 2938, 71, 2941, 71, 2946, 71, 2950, 2943, 71, - 2947, 71, 2944, 71, 2948, 71, 71, 2955, 71, 2956, - 71, 2954, 71, 2951, 2952, 71, 71, 71, 71, 71, - 71, 2960, 71, 71, 2953, 2962, 71, 2969, 71, 71, - 2959, 71, 2964, 2957, 2967, 2958, 2965, 71, 2961, 71, - 71, 2963, 2968, 2973, 71, 2966, 71, 71, 2975, 71, - 2976, 2970, 2974, 71, 71, 71, 71, 2971, 2977, 2972, - - 2978, 2979, 2981, 2982, 71, 2980, 71, 71, 71, 2984, - 71, 2983, 71, 71, 71, 71, 2985, 2990, 71, 71, - 2987, 71, 2993, 71, 2994, 71, 2986, 71, 71, 71, - 71, 71, 2992, 2988, 2989, 2997, 2995, 2991, 71, 2996, - 71, 3001, 71, 3002, 3000, 71, 71, 2998, 2999, 71, - 3005, 71, 3007, 71, 3008, 3003, 71, 71, 71, 3012, - 71, 3009, 71, 71, 3010, 3006, 71, 3013, 3014, 3015, - 71, 3004, 71, 71, 71, 71, 71, 3011, 71, 3016, - 3017, 3019, 3018, 3021, 71, 71, 71, 71, 71, 3027, - 3023, 3024, 71, 3020, 3022, 3028, 71, 3025, 71, 71, - - 3031, 3032, 71, 71, 3034, 71, 3026, 3035, 71, 71, - 3033, 3029, 71, 71, 71, 71, 3036, 3030, 3037, 3038, - 3041, 71, 3042, 71, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3039, 3043, 3043, 3040, 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, 3043, 74, 74, 74, 74, 141, 141, 3043, - 3043, 3043, 141, 141, 143, 143, 3043, 3043, 143, 3043, - 143, 145, 3043, 3043, 3043, 3043, 3043, 145, 148, 148, - - 3043, 3043, 3043, 148, 148, 150, 3043, 3043, 3043, 3043, - 3043, 150, 152, 152, 3043, 152, 152, 152, 152, 75, - 75, 3043, 75, 75, 75, 75, 13, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043 + 71, 80, 85, 88, 69, 86, 89, 71, 90, 91, + 81, 71, 94, 71, 96, 141, 71, 152, 113, 71, + 99, 119, 97, 100, 71, 110, 95, 71, 106, 111, + 101, 155, 102, 98, 71, 144, 107, 164, 144, 114, + 149, 149, 108, 115, 71, 112, 109, 71, 134, 116, + 71, 120, 117, 72, 203, 121, 71, 73, 135, 118, + 71, 125, 136, 137, 126, 122, 123, 71, 124, 71, + + 130, 127, 131, 71, 138, 128, 129, 71, 139, 159, + 156, 132, 140, 146, 951, 146, 146, 133, 146, 75, + 71, 75, 75, 151, 75, 151, 151, 70, 151, 70, + 70, 154, 70, 71, 75, 71, 75, 75, 70, 75, + 71, 71, 172, 71, 157, 75, 76, 71, 71, 166, + 161, 162, 165, 160, 71, 71, 71, 174, 71, 71, + 167, 177, 71, 71, 163, 71, 168, 71, 169, 152, + 178, 179, 176, 170, 171, 173, 175, 71, 180, 71, + 181, 183, 71, 182, 185, 71, 191, 184, 187, 71, + 71, 188, 71, 71, 71, 194, 186, 196, 71, 71, + + 71, 197, 202, 71, 189, 190, 71, 201, 193, 71, + 205, 192, 71, 204, 71, 195, 71, 198, 199, 206, + 209, 71, 71, 200, 71, 214, 71, 211, 71, 207, + 208, 212, 210, 71, 71, 71, 71, 71, 216, 226, + 222, 213, 71, 219, 71, 71, 215, 217, 71, 225, + 71, 223, 152, 218, 221, 224, 227, 71, 228, 220, + 71, 71, 71, 235, 233, 71, 71, 71, 231, 234, + 71, 241, 237, 71, 240, 229, 236, 242, 230, 232, + 71, 238, 71, 142, 142, 243, 144, 244, 251, 144, + 149, 149, 71, 239, 245, 146, 283, 146, 146, 151, + + 146, 151, 151, 75, 151, 75, 75, 152, 75, 71, + 246, 248, 71, 71, 247, 154, 71, 71, 71, 71, + 71, 252, 71, 71, 71, 258, 249, 254, 253, 261, + 250, 255, 71, 260, 257, 71, 262, 256, 71, 71, + 265, 266, 259, 264, 267, 71, 71, 71, 71, 268, + 71, 71, 275, 71, 270, 71, 71, 263, 277, 271, + 278, 71, 71, 281, 272, 280, 269, 276, 279, 71, + 273, 274, 71, 71, 71, 286, 71, 284, 285, 71, + 71, 71, 293, 71, 291, 292, 288, 294, 287, 289, + 71, 71, 282, 71, 290, 297, 300, 71, 301, 295, + + 302, 296, 71, 298, 304, 306, 71, 299, 307, 71, + 71, 71, 303, 305, 71, 310, 71, 71, 312, 313, + 71, 71, 311, 308, 71, 71, 71, 314, 71, 315, + 309, 71, 316, 71, 71, 71, 71, 318, 71, 71, + 322, 71, 320, 71, 71, 327, 71, 323, 317, 321, + 328, 71, 71, 71, 324, 319, 331, 325, 329, 333, + 71, 336, 330, 326, 71, 71, 71, 71, 332, 71, + 71, 338, 339, 71, 71, 342, 343, 345, 334, 335, + 341, 71, 71, 71, 337, 71, 71, 71, 340, 71, + 348, 349, 71, 344, 71, 350, 352, 346, 71, 356, + + 347, 71, 71, 71, 152, 353, 71, 71, 71, 71, + 355, 71, 363, 361, 359, 364, 357, 358, 71, 351, + 71, 71, 354, 71, 367, 365, 368, 360, 366, 71, + 71, 71, 362, 71, 71, 71, 71, 71, 374, 375, + 71, 377, 372, 369, 71, 71, 71, 371, 376, 370, + 378, 71, 380, 71, 71, 379, 71, 381, 71, 71, + 373, 382, 384, 71, 71, 387, 71, 385, 389, 383, + 391, 71, 388, 386, 71, 71, 71, 390, 71, 71, + 394, 71, 392, 396, 71, 397, 395, 71, 71, 71, + 71, 71, 402, 71, 71, 71, 403, 71, 71, 393, + + 150, 405, 71, 401, 398, 399, 71, 407, 71, 400, + 71, 409, 404, 406, 411, 412, 408, 71, 71, 71, + 413, 71, 414, 71, 71, 71, 427, 421, 410, 71, + 423, 71, 71, 438, 424, 148, 425, 422, 415, 71, + 71, 416, 430, 431, 71, 428, 417, 418, 419, 420, + 432, 429, 426, 71, 71, 433, 71, 434, 71, 440, + 71, 435, 71, 442, 436, 71, 71, 439, 437, 71, + 441, 71, 71, 71, 444, 71, 449, 71, 450, 71, + 451, 443, 71, 445, 71, 71, 467, 71, 455, 452, + 448, 446, 454, 447, 71, 71, 71, 147, 461, 453, + + 456, 457, 71, 71, 71, 462, 459, 458, 460, 468, + 469, 71, 71, 466, 71, 71, 71, 470, 463, 471, + 71, 464, 71, 465, 145, 472, 71, 71, 71, 473, + 71, 486, 152, 71, 481, 483, 71, 474, 71, 475, + 485, 476, 484, 482, 488, 497, 498, 487, 496, 71, + 71, 499, 71, 501, 477, 500, 71, 478, 71, 479, + 71, 480, 71, 71, 489, 490, 506, 504, 71, 502, + 71, 503, 71, 71, 491, 71, 492, 493, 494, 505, + 510, 495, 71, 71, 509, 71, 71, 71, 508, 507, + 511, 518, 516, 71, 519, 513, 512, 71, 515, 71, + + 517, 71, 514, 71, 523, 71, 71, 71, 527, 528, + 71, 71, 526, 521, 71, 71, 71, 522, 71, 520, + 533, 71, 525, 71, 71, 71, 538, 535, 536, 71, + 524, 530, 531, 71, 529, 532, 71, 71, 534, 71, + 547, 71, 71, 537, 71, 71, 71, 549, 539, 541, + 544, 540, 71, 543, 548, 542, 550, 71, 552, 71, + 143, 545, 71, 546, 71, 553, 551, 71, 554, 71, + 71, 555, 71, 558, 556, 560, 71, 71, 71, 557, + 71, 563, 561, 559, 564, 71, 71, 71, 71, 565, + 71, 562, 71, 568, 71, 570, 71, 569, 71, 71, + + 71, 566, 71, 571, 71, 576, 71, 71, 567, 580, + 572, 577, 575, 71, 579, 71, 573, 574, 578, 71, + 582, 71, 71, 584, 71, 71, 71, 71, 71, 71, + 71, 594, 71, 586, 71, 587, 581, 71, 596, 597, + 589, 71, 71, 583, 71, 585, 593, 588, 590, 592, + 591, 595, 71, 71, 71, 598, 601, 71, 604, 71, + 599, 607, 71, 600, 71, 606, 71, 71, 602, 71, + 71, 71, 603, 71, 610, 613, 71, 71, 71, 605, + 609, 614, 616, 71, 71, 608, 71, 71, 71, 71, + 71, 71, 611, 615, 612, 630, 71, 71, 71, 617, + + 619, 71, 633, 618, 71, 620, 628, 631, 667, 645, + 621, 629, 622, 632, 71, 71, 71, 71, 623, 71, + 624, 634, 637, 625, 626, 635, 640, 71, 639, 636, + 627, 638, 71, 71, 71, 71, 643, 641, 71, 646, + 71, 648, 71, 642, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 654, 650, 677, 71, 644, 655, 649, + 647, 651, 658, 71, 652, 657, 71, 152, 661, 653, + 656, 660, 659, 71, 71, 71, 71, 71, 662, 71, + 71, 71, 71, 668, 670, 672, 71, 71, 663, 671, + 665, 673, 666, 669, 664, 675, 71, 71, 71, 674, + + 71, 71, 71, 71, 71, 71, 681, 680, 676, 71, + 152, 686, 678, 682, 71, 679, 687, 71, 689, 71, + 683, 685, 688, 684, 690, 71, 691, 692, 71, 693, + 71, 694, 71, 71, 71, 695, 696, 71, 71, 697, + 71, 71, 71, 71, 700, 71, 71, 701, 699, 705, + 704, 71, 71, 71, 71, 71, 706, 698, 708, 71, + 71, 711, 71, 71, 703, 712, 702, 71, 71, 707, + 709, 71, 71, 71, 718, 714, 713, 71, 71, 710, + 715, 717, 720, 721, 716, 722, 719, 71, 724, 71, + 71, 71, 71, 726, 71, 727, 71, 729, 725, 730, + + 71, 71, 723, 71, 71, 731, 71, 71, 734, 71, + 71, 736, 738, 71, 71, 71, 71, 728, 71, 732, + 735, 744, 733, 739, 71, 742, 741, 71, 150, 737, + 743, 71, 71, 71, 740, 746, 749, 745, 747, 748, + 71, 71, 751, 71, 753, 750, 71, 755, 71, 71, + 71, 754, 756, 71, 71, 758, 71, 752, 71, 757, + 759, 71, 71, 71, 764, 71, 148, 762, 763, 760, + 71, 761, 766, 71, 71, 769, 71, 71, 767, 71, + 771, 765, 773, 770, 71, 768, 71, 776, 71, 775, + 71, 774, 777, 71, 71, 772, 71, 778, 71, 71, + + 780, 782, 71, 71, 71, 71, 71, 788, 71, 781, + 789, 779, 783, 71, 71, 71, 71, 790, 71, 71, + 784, 785, 797, 786, 71, 787, 71, 71, 71, 791, + 792, 795, 71, 71, 793, 71, 71, 794, 71, 796, + 798, 71, 802, 71, 799, 71, 800, 71, 810, 71, + 71, 71, 801, 803, 805, 811, 71, 804, 71, 71, + 71, 806, 807, 809, 808, 815, 71, 813, 71, 812, + 71, 71, 814, 71, 71, 816, 820, 819, 71, 822, + 821, 818, 71, 823, 71, 817, 71, 71, 71, 152, + 71, 825, 71, 71, 830, 826, 831, 828, 71, 71, + + 824, 827, 829, 832, 71, 71, 833, 834, 71, 838, + 71, 71, 839, 841, 71, 71, 71, 844, 71, 835, + 840, 71, 836, 71, 842, 846, 837, 71, 71, 71, + 850, 71, 71, 71, 71, 843, 71, 71, 845, 847, + 851, 852, 71, 71, 71, 71, 71, 849, 882, 853, + 71, 864, 865, 848, 71, 868, 71, 855, 854, 71, + 862, 863, 71, 71, 856, 71, 866, 867, 857, 71, + 869, 858, 71, 870, 871, 71, 874, 71, 859, 860, + 147, 861, 71, 71, 71, 873, 872, 71, 875, 876, + 71, 877, 71, 887, 878, 884, 883, 71, 885, 879, + + 888, 71, 71, 890, 889, 880, 881, 891, 71, 886, + 71, 892, 71, 893, 71, 894, 71, 71, 896, 895, + 71, 71, 71, 71, 71, 899, 71, 903, 71, 897, + 71, 902, 71, 71, 906, 71, 71, 71, 910, 898, + 908, 965, 900, 901, 71, 904, 905, 71, 912, 71, + 913, 916, 911, 907, 71, 914, 71, 71, 909, 915, + 917, 71, 71, 919, 920, 71, 71, 918, 71, 71, + 71, 921, 923, 71, 924, 71, 922, 71, 925, 71, + 71, 71, 930, 71, 927, 71, 933, 928, 71, 71, + 71, 71, 71, 71, 931, 926, 932, 71, 71, 935, + + 929, 71, 936, 937, 939, 71, 938, 71, 934, 71, + 940, 71, 71, 947, 945, 71, 942, 71, 943, 946, + 71, 941, 71, 71, 944, 71, 952, 954, 955, 71, + 948, 950, 71, 71, 953, 71, 949, 71, 957, 71, + 71, 71, 71, 71, 968, 71, 71, 145, 71, 71, + 71, 963, 71, 956, 71, 71, 958, 959, 969, 960, + 970, 962, 961, 966, 71, 967, 964, 71, 972, 974, + 973, 971, 975, 976, 71, 71, 71, 71, 71, 71, + 71, 71, 985, 71, 71, 978, 980, 987, 71, 71, + 989, 71, 71, 71, 71, 977, 71, 979, 986, 981, + + 983, 990, 982, 984, 71, 71, 993, 71, 991, 988, + 992, 71, 71, 996, 994, 998, 995, 71, 997, 71, + 1002, 71, 999, 1000, 71, 1001, 71, 1004, 71, 71, + 71, 1007, 152, 71, 71, 1006, 71, 1010, 1009, 71, + 71, 71, 71, 71, 1003, 71, 1013, 1005, 1008, 71, + 71, 71, 1025, 71, 71, 71, 71, 1026, 71, 1016, + 1012, 1011, 1014, 1028, 71, 1084, 1015, 143, 71, 1017, + 1027, 1018, 71, 1031, 71, 1019, 71, 1020, 1030, 1029, + 71, 1021, 1032, 1022, 71, 1033, 1035, 71, 1023, 71, + 1034, 1036, 71, 1024, 1041, 71, 71, 71, 1037, 1038, + + 71, 71, 1040, 71, 1042, 1044, 71, 1049, 1043, 1052, + 1050, 1039, 1048, 71, 71, 1045, 71, 1047, 1046, 1051, + 71, 1053, 71, 71, 71, 71, 71, 71, 71, 71, + 1068, 1065, 71, 71, 71, 71, 1064, 1069, 71, 71, + 1067, 71, 1055, 1056, 1054, 71, 1057, 1066, 1071, 1070, + 71, 1058, 1080, 1059, 1072, 1075, 71, 1073, 71, 1060, + 1077, 71, 1076, 1081, 1061, 1062, 71, 71, 1074, 71, + 1078, 1063, 71, 71, 71, 71, 1087, 1082, 71, 71, + 1079, 71, 71, 1085, 71, 71, 1090, 1088, 71, 71, + 71, 1086, 1083, 71, 71, 71, 1097, 71, 1089, 1092, + + 1099, 1094, 1095, 1096, 1091, 71, 71, 71, 1093, 71, + 71, 71, 1098, 1100, 1112, 71, 71, 71, 71, 1101, + 71, 1107, 1108, 1109, 1104, 71, 71, 1102, 1103, 1105, + 1106, 71, 1111, 71, 1110, 1115, 71, 71, 71, 1113, + 1116, 71, 71, 1117, 71, 71, 1118, 1119, 71, 1114, + 1120, 71, 71, 1125, 1127, 71, 1122, 1121, 1123, 71, + 71, 71, 71, 1124, 71, 1131, 1129, 1128, 71, 1130, + 71, 1126, 71, 1133, 71, 1134, 71, 71, 71, 1136, + 71, 1137, 1143, 71, 1139, 1132, 71, 1142, 1135, 1138, + 71, 71, 1141, 71, 71, 71, 1140, 1146, 71, 1144, + + 71, 1147, 71, 71, 1153, 71, 1151, 71, 1154, 1145, + 71, 71, 1155, 1148, 71, 71, 1156, 1149, 1152, 1158, + 1157, 71, 1150, 71, 1161, 71, 71, 1163, 71, 71, + 71, 1162, 71, 71, 71, 71, 71, 1167, 1164, 1159, + 71, 1165, 71, 1160, 71, 1168, 1169, 1173, 71, 1174, + 71, 1166, 1171, 71, 1170, 71, 71, 1177, 71, 71, + 71, 1176, 1181, 1172, 71, 1175, 71, 1178, 71, 71, + 71, 71, 1180, 1179, 1187, 71, 71, 1183, 71, 71, + 71, 71, 1182, 71, 1191, 1193, 71, 71, 1184, 1192, + 1186, 1189, 1188, 1190, 1195, 1185, 1196, 71, 71, 71, + + 71, 71, 71, 1194, 1197, 71, 1199, 1198, 71, 71, + 71, 1200, 1201, 1202, 71, 71, 71, 1208, 71, 71, + 71, 1205, 71, 71, 1203, 71, 71, 1218, 71, 1204, + 1206, 1212, 71, 1209, 71, 1207, 71, 1211, 1210, 1214, + 71, 1219, 1222, 1213, 1220, 71, 71, 1221, 1215, 1223, + 1216, 1224, 71, 1217, 71, 71, 71, 71, 71, 71, + 1227, 71, 1229, 1226, 1232, 71, 1233, 71, 71, 1230, + 1225, 71, 1234, 71, 71, 1228, 1236, 1237, 1231, 71, + 71, 71, 71, 1238, 71, 71, 71, 71, 1235, 71, + 71, 71, 1244, 71, 1239, 1240, 1242, 1243, 1245, 1249, + + 1241, 71, 71, 71, 71, 71, 1246, 1255, 1248, 71, + 1247, 1251, 1253, 71, 71, 71, 1250, 1257, 71, 1256, + 1259, 1261, 1252, 71, 1254, 71, 1262, 71, 71, 71, + 1260, 71, 1266, 71, 1258, 71, 1276, 3053, 1274, 1264, + 71, 1265, 1263, 71, 1275, 1277, 1273, 1279, 1267, 71, + 71, 1268, 1269, 71, 71, 71, 1270, 71, 1278, 1280, + 1281, 71, 1271, 71, 1282, 71, 1272, 71, 1284, 71, + 71, 71, 1285, 71, 1286, 71, 71, 3053, 1283, 1289, + 1291, 1287, 1294, 1288, 1295, 71, 71, 1292, 71, 1297, + 71, 1290, 71, 71, 1293, 1298, 71, 1296, 71, 1303, + + 1299, 71, 1300, 71, 1301, 71, 1302, 1304, 1305, 1307, + 71, 1308, 1306, 71, 1311, 1313, 71, 71, 71, 1312, + 71, 1309, 1310, 1314, 71, 71, 1316, 71, 1320, 71, + 1315, 71, 1321, 71, 71, 71, 71, 1322, 71, 71, + 1324, 1319, 71, 1317, 1318, 71, 71, 1323, 1326, 71, + 1325, 1329, 1330, 71, 1332, 71, 1327, 71, 71, 1333, + 1331, 1334, 71, 71, 71, 1338, 71, 1328, 1335, 1339, + 1340, 71, 71, 1337, 71, 1341, 71, 1342, 71, 1345, + 71, 1336, 71, 71, 71, 71, 1347, 71, 71, 71, + 1349, 1351, 71, 71, 3053, 1353, 1350, 1343, 71, 1344, + + 71, 71, 1346, 1355, 1348, 1356, 1352, 71, 1354, 1357, + 71, 71, 1358, 71, 1360, 1359, 1361, 71, 71, 71, + 71, 1366, 1367, 1369, 1363, 71, 1364, 71, 71, 71, + 1368, 71, 71, 1365, 71, 1362, 1373, 71, 71, 71, + 1370, 71, 1377, 1378, 71, 1372, 1380, 71, 71, 71, + 1379, 1371, 71, 71, 71, 71, 71, 71, 1374, 1375, + 71, 1381, 71, 1387, 1376, 71, 1384, 1382, 71, 1385, + 71, 1392, 71, 1383, 1386, 1391, 71, 1388, 71, 3053, + 71, 1394, 1396, 1390, 71, 1389, 71, 1397, 71, 71, + 71, 1393, 71, 1399, 1400, 71, 71, 1395, 1398, 71, + + 71, 1405, 1407, 1401, 1406, 1402, 1409, 1403, 71, 1408, + 1404, 71, 71, 71, 71, 1410, 1412, 71, 1414, 1411, + 71, 1413, 71, 71, 71, 1417, 71, 71, 1419, 71, + 71, 1424, 1416, 71, 71, 1418, 71, 1425, 71, 1415, + 1421, 71, 1428, 71, 1420, 1422, 71, 1423, 71, 71, + 1429, 71, 1426, 71, 71, 1427, 71, 1431, 1435, 1437, + 1430, 1432, 71, 1436, 1433, 71, 71, 1440, 71, 71, + 1434, 1442, 71, 71, 1439, 1443, 71, 71, 1446, 1447, + 1438, 1445, 3053, 1441, 71, 71, 71, 1448, 71, 1449, + 1450, 71, 71, 71, 1444, 1453, 1451, 71, 71, 71, + + 71, 1457, 1452, 71, 71, 71, 1456, 71, 71, 1463, + 1460, 1454, 1459, 1455, 1464, 71, 71, 71, 1468, 1465, + 71, 1461, 71, 1458, 1466, 71, 71, 1462, 71, 71, + 71, 71, 1476, 1472, 71, 1471, 1467, 71, 71, 1469, + 1479, 1470, 1477, 71, 71, 71, 71, 1482, 1473, 1475, + 1474, 1481, 71, 71, 71, 71, 71, 71, 71, 1490, + 1478, 71, 1480, 1483, 71, 71, 71, 1491, 1493, 71, + 1487, 1484, 71, 1485, 1486, 1498, 1489, 1492, 1488, 1494, + 71, 71, 71, 71, 71, 1497, 1495, 1496, 71, 1503, + 1500, 71, 71, 71, 1501, 1499, 1507, 71, 71, 1509, + + 71, 71, 71, 1508, 71, 71, 1504, 1502, 71, 1506, + 71, 71, 1505, 1512, 1511, 1510, 71, 71, 71, 1518, + 1513, 1514, 1515, 71, 1517, 71, 1519, 71, 1516, 1520, + 71, 71, 1523, 71, 1524, 1522, 1526, 71, 71, 1521, + 71, 1527, 71, 1525, 1528, 71, 71, 71, 71, 1529, + 1531, 71, 1534, 71, 71, 71, 71, 1533, 1530, 71, + 71, 1538, 71, 1540, 71, 71, 1532, 71, 1535, 71, + 1544, 71, 71, 1539, 1537, 1536, 71, 1547, 1541, 1542, + 71, 1545, 1549, 71, 1550, 71, 71, 1552, 71, 1546, + 1543, 1548, 71, 71, 71, 71, 71, 1555, 1558, 71, + + 1557, 71, 71, 1554, 71, 1551, 71, 71, 1565, 71, + 1553, 71, 71, 1556, 1559, 1560, 1566, 71, 1563, 71, + 71, 1561, 1562, 71, 1570, 1572, 1569, 71, 71, 1567, + 1574, 1564, 1568, 1573, 71, 1576, 71, 1578, 71, 71, + 1571, 71, 71, 71, 71, 71, 71, 1575, 1577, 1580, + 1581, 71, 1583, 71, 1584, 71, 71, 71, 1579, 1588, + 1585, 71, 1586, 71, 1589, 71, 1582, 1595, 1592, 1590, + 1587, 1593, 71, 71, 71, 71, 71, 1596, 1597, 1600, + 71, 1591, 1603, 1594, 71, 1599, 71, 1602, 71, 71, + 1605, 1604, 71, 1606, 1598, 1607, 71, 71, 71, 71, + + 71, 71, 1608, 71, 1614, 1601, 1613, 1615, 1617, 1609, + 71, 71, 71, 71, 71, 71, 1610, 1616, 1611, 71, + 1612, 1620, 71, 71, 1619, 71, 71, 71, 1621, 71, + 71, 71, 1629, 1622, 1618, 71, 71, 71, 71, 71, + 71, 1625, 1627, 1626, 1628, 1623, 1624, 1634, 71, 71, + 71, 1632, 71, 71, 1637, 1630, 1631, 1636, 71, 71, + 1633, 71, 71, 71, 1640, 1638, 71, 71, 71, 1635, + 1642, 1645, 1639, 1644, 1646, 71, 71, 1641, 1643, 1651, + 1652, 71, 71, 1647, 1653, 71, 71, 71, 71, 71, + 1648, 1656, 71, 1650, 1654, 1649, 1657, 71, 71, 71, + + 1658, 71, 71, 1660, 1655, 71, 1661, 71, 1659, 71, + 71, 1662, 1670, 71, 1664, 1663, 1666, 1669, 1668, 1667, + 71, 1665, 71, 71, 71, 71, 71, 71, 71, 71, + 1671, 71, 1679, 1672, 71, 71, 1683, 71, 1674, 1676, + 1673, 1675, 1682, 1681, 71, 1680, 1678, 71, 71, 71, + 1684, 1677, 1690, 1685, 71, 71, 1686, 1691, 71, 71, + 71, 71, 1698, 71, 71, 1687, 1695, 1689, 1692, 1688, + 1693, 1696, 71, 1699, 71, 71, 1701, 71, 1697, 71, + 1700, 1694, 71, 71, 1703, 1705, 1704, 1706, 1709, 1702, + 71, 71, 71, 1707, 71, 71, 71, 71, 71, 1708, + + 1710, 1719, 71, 71, 71, 1713, 71, 1714, 71, 71, + 71, 71, 1721, 1722, 1711, 1712, 1715, 1716, 71, 71, + 1717, 71, 1718, 1720, 1723, 71, 1728, 71, 1725, 1724, + 71, 3053, 71, 71, 1732, 71, 71, 71, 1727, 71, + 1726, 1734, 71, 71, 1735, 71, 1730, 1736, 1737, 1729, + 71, 1731, 71, 71, 1738, 71, 1733, 1741, 71, 71, + 1745, 71, 71, 71, 71, 71, 71, 1740, 71, 1752, + 1747, 1743, 1742, 1739, 1744, 71, 1746, 1748, 1749, 71, + 71, 71, 3053, 1750, 1756, 71, 71, 1755, 1751, 1757, + 71, 1753, 1758, 71, 71, 1759, 1761, 71, 1754, 1762, + + 71, 71, 71, 1760, 71, 71, 1764, 71, 1765, 1763, + 71, 71, 71, 71, 71, 71, 1770, 71, 71, 71, + 1774, 1766, 1771, 1782, 71, 71, 1772, 1775, 1768, 1767, + 1769, 71, 1773, 71, 71, 1783, 1778, 71, 1780, 1777, + 1776, 71, 71, 1779, 71, 71, 1784, 1788, 71, 1781, + 71, 71, 71, 1791, 1792, 71, 1785, 71, 1786, 1793, + 71, 1795, 71, 71, 1787, 1789, 1802, 1790, 1794, 71, + 1796, 1797, 1799, 71, 1801, 71, 1803, 71, 1798, 1800, + 71, 1805, 71, 71, 71, 71, 71, 71, 1807, 1808, + 71, 71, 1809, 1810, 71, 1804, 1811, 1812, 1813, 71, + + 71, 1817, 71, 1814, 1819, 71, 1815, 71, 1806, 1820, + 71, 71, 71, 1822, 1816, 71, 1821, 71, 1825, 71, + 1818, 1829, 71, 1823, 71, 1827, 1826, 71, 71, 1831, + 1824, 71, 71, 71, 1834, 1835, 71, 71, 1837, 71, + 1828, 71, 71, 71, 1842, 71, 71, 1843, 71, 71, + 71, 1832, 1839, 1830, 1833, 1840, 71, 1836, 71, 71, + 1845, 71, 1849, 1841, 71, 1846, 1838, 71, 1847, 71, + 1844, 1853, 71, 71, 1852, 1856, 71, 71, 1857, 71, + 1855, 71, 1848, 1851, 71, 1858, 71, 71, 71, 71, + 1850, 71, 1854, 1859, 1864, 1862, 1860, 71, 71, 1861, + + 1868, 1863, 71, 1867, 71, 71, 71, 71, 71, 71, + 71, 1871, 71, 1876, 71, 1865, 71, 1875, 71, 1870, + 1883, 71, 71, 71, 1866, 1869, 1880, 1872, 1873, 1877, + 71, 1874, 1882, 1878, 71, 1879, 1881, 71, 1884, 1887, + 71, 71, 71, 1894, 71, 71, 71, 71, 1885, 71, + 1891, 71, 71, 1886, 71, 1899, 1889, 1896, 1897, 71, + 71, 1898, 1888, 1890, 71, 71, 1892, 1893, 71, 1895, + 1904, 71, 1906, 1900, 1905, 71, 1901, 1907, 71, 1908, + 1909, 1902, 71, 71, 71, 71, 71, 1913, 1903, 1911, + 71, 71, 71, 71, 71, 1912, 1915, 71, 1918, 71, + + 1920, 71, 1914, 1916, 71, 71, 71, 71, 1910, 1921, + 71, 71, 1924, 1922, 1925, 71, 1926, 1927, 71, 1917, + 1930, 1919, 1928, 71, 1923, 71, 71, 71, 71, 71, + 1929, 1931, 1932, 71, 1933, 71, 1936, 71, 1934, 71, + 1935, 71, 1938, 71, 71, 71, 1942, 71, 71, 1937, + 1941, 1939, 71, 1943, 71, 1940, 71, 1944, 71, 1945, + 1946, 71, 71, 71, 71, 1948, 1953, 1951, 1947, 1952, + 71, 71, 71, 71, 71, 71, 1949, 71, 71, 1958, + 1955, 1950, 71, 1962, 71, 71, 1961, 71, 1954, 1957, + 1959, 1956, 1960, 1963, 71, 71, 71, 1964, 1969, 1966, + + 1968, 71, 71, 71, 1974, 71, 71, 71, 1965, 1967, + 71, 71, 1976, 71, 71, 1977, 1978, 71, 1970, 1971, + 1972, 1973, 1979, 1975, 71, 71, 71, 1982, 71, 71, + 71, 1980, 71, 71, 71, 71, 71, 1983, 71, 71, + 71, 1990, 1985, 71, 1986, 1981, 1987, 1994, 71, 71, + 1984, 1989, 1993, 71, 1991, 71, 1997, 1995, 1992, 1988, + 1998, 71, 71, 1996, 2001, 71, 2000, 71, 71, 1999, + 71, 71, 2003, 71, 71, 2004, 71, 71, 2009, 2005, + 71, 71, 2007, 2002, 71, 71, 2008, 2011, 71, 2006, + 2013, 71, 71, 2015, 2012, 71, 2010, 2016, 71, 71, + + 2021, 71, 2019, 2017, 2018, 71, 71, 2014, 71, 71, + 2022, 71, 2020, 71, 2023, 71, 2024, 2027, 71, 71, + 2028, 2031, 3053, 71, 71, 2026, 71, 71, 2025, 2032, + 2029, 2034, 71, 2030, 2033, 2036, 71, 71, 2037, 2035, + 71, 2038, 71, 2039, 71, 71, 2040, 71, 71, 2041, + 2045, 71, 2047, 71, 71, 71, 2043, 2048, 71, 2044, + 71, 71, 2049, 2042, 71, 2052, 2050, 2051, 71, 2053, + 71, 71, 2046, 71, 2054, 2057, 71, 71, 71, 2056, + 71, 71, 71, 71, 71, 71, 71, 3053, 2055, 2058, + 2066, 2059, 2061, 2060, 2063, 2062, 2064, 71, 71, 71, + + 71, 2065, 2067, 71, 71, 2069, 2071, 2068, 2075, 2072, + 71, 71, 2077, 71, 71, 2079, 71, 3053, 2070, 2073, + 2076, 2074, 71, 2078, 71, 71, 2081, 2084, 2086, 2080, + 2082, 71, 2085, 71, 71, 2087, 71, 2083, 71, 2088, + 71, 71, 2091, 71, 71, 2092, 2089, 2096, 71, 2095, + 71, 2090, 71, 2097, 71, 2100, 71, 2102, 71, 2093, + 71, 71, 2098, 2101, 2103, 71, 71, 2105, 71, 71, + 2094, 2104, 2099, 71, 71, 71, 71, 71, 2106, 2108, + 2107, 2110, 71, 71, 71, 71, 71, 71, 2113, 2119, + 71, 2117, 2111, 2109, 71, 2114, 71, 2112, 2120, 71, + + 2115, 71, 71, 71, 2122, 2116, 71, 71, 71, 2118, + 71, 2121, 2126, 71, 2124, 2129, 71, 71, 2130, 2127, + 71, 71, 2125, 71, 71, 71, 2128, 2123, 71, 71, + 2140, 71, 2131, 71, 71, 71, 2132, 2141, 71, 2139, + 2137, 3053, 2135, 2133, 71, 2134, 2136, 2143, 2142, 71, + 2138, 2144, 71, 2145, 2146, 71, 2147, 71, 71, 2148, + 71, 2150, 2149, 2153, 71, 71, 71, 2151, 71, 71, + 2152, 2154, 71, 2155, 2159, 71, 2160, 71, 71, 2162, + 71, 71, 2164, 71, 2158, 2156, 71, 71, 71, 2157, + 2167, 71, 2166, 2168, 71, 71, 71, 2161, 71, 2163, + + 71, 2165, 2169, 71, 2170, 2173, 2174, 71, 2176, 71, + 2171, 71, 71, 71, 71, 2180, 2179, 2172, 2178, 2182, + 71, 71, 2175, 71, 71, 2186, 71, 71, 71, 2177, + 2181, 71, 71, 2191, 71, 71, 2190, 71, 2184, 71, + 2183, 71, 71, 2185, 2195, 71, 2189, 2187, 71, 2197, + 71, 2188, 2193, 71, 2192, 71, 2194, 71, 2202, 2196, + 71, 71, 2198, 2204, 71, 71, 71, 2205, 2199, 2203, + 71, 2200, 71, 71, 71, 2209, 71, 2208, 2210, 71, + 71, 2201, 2206, 71, 2207, 2212, 71, 71, 2214, 71, + 2219, 2211, 2216, 2221, 2217, 2213, 71, 71, 71, 71, + + 2220, 2218, 2215, 2222, 71, 2224, 71, 71, 71, 2223, + 2225, 2226, 71, 71, 71, 2227, 2228, 2232, 2233, 71, + 71, 2229, 2230, 71, 71, 71, 71, 2238, 2231, 2234, + 71, 2237, 71, 71, 71, 2236, 71, 2239, 71, 2235, + 2241, 71, 2242, 2245, 71, 2240, 71, 71, 2243, 71, + 2244, 71, 71, 2246, 71, 2247, 2261, 2249, 71, 2248, + 71, 2252, 71, 2251, 2250, 2253, 2255, 2256, 71, 71, + 2257, 71, 2254, 2258, 71, 71, 2260, 2262, 2259, 2263, + 71, 71, 71, 71, 71, 2265, 71, 71, 71, 2269, + 2270, 71, 71, 71, 2266, 2264, 71, 2272, 71, 3053, + + 2267, 71, 2273, 71, 2274, 2271, 2268, 2275, 71, 71, + 71, 71, 2277, 2278, 2276, 2279, 2280, 71, 71, 71, + 71, 71, 71, 2281, 2282, 71, 2286, 71, 2289, 71, + 71, 71, 2288, 71, 71, 2285, 2290, 71, 2283, 2295, + 2284, 71, 2293, 2296, 2294, 2287, 71, 2291, 71, 2292, + 71, 71, 2298, 71, 71, 2301, 2299, 71, 2303, 71, + 2297, 2302, 2305, 71, 71, 71, 71, 2307, 71, 71, + 71, 2304, 71, 71, 2300, 2306, 71, 2311, 2315, 71, + 2317, 2313, 71, 2308, 2309, 2310, 71, 2314, 2316, 71, + 71, 2318, 71, 71, 71, 71, 71, 71, 2326, 2312, + + 2321, 2324, 71, 71, 71, 2325, 71, 71, 2319, 2323, + 2329, 71, 71, 2322, 71, 2320, 71, 2332, 2333, 71, + 71, 2327, 2328, 71, 71, 2330, 71, 71, 2334, 2336, + 2331, 2337, 2335, 71, 71, 2338, 71, 71, 2339, 71, + 71, 2340, 2342, 71, 2344, 3053, 2341, 2345, 71, 2346, + 71, 2347, 71, 2348, 71, 2349, 2343, 71, 2350, 71, + 2352, 71, 2351, 71, 2353, 71, 71, 71, 2358, 71, + 71, 2360, 71, 2354, 2361, 71, 71, 2355, 71, 71, + 71, 71, 71, 2357, 71, 71, 2356, 2362, 2364, 2359, + 2363, 2365, 71, 2370, 71, 71, 71, 2367, 71, 71, + + 2366, 71, 2368, 71, 2369, 2371, 71, 2377, 71, 71, + 2378, 2372, 2374, 71, 71, 2373, 71, 2376, 71, 71, + 71, 2384, 2375, 2379, 2380, 2386, 71, 71, 2388, 71, + 71, 2381, 2387, 2385, 2389, 71, 2382, 71, 2390, 2383, + 71, 2391, 71, 2392, 2393, 71, 71, 71, 71, 2395, + 71, 71, 71, 71, 71, 2402, 2394, 71, 71, 2400, + 71, 2406, 2407, 71, 71, 2397, 2396, 71, 71, 71, + 2398, 2399, 2401, 71, 2403, 2404, 2405, 2409, 2410, 71, + 2412, 71, 2411, 71, 71, 2413, 2408, 2414, 71, 71, + 2415, 71, 71, 2421, 71, 2422, 71, 2423, 71, 2416, + + 71, 71, 71, 71, 71, 71, 2417, 2418, 2419, 2427, + 2420, 71, 71, 2431, 71, 2425, 2424, 2430, 2432, 71, + 2426, 71, 2428, 2433, 71, 2429, 2434, 71, 71, 71, + 71, 71, 71, 2435, 71, 71, 2440, 2436, 71, 71, + 71, 2438, 2444, 2437, 2445, 71, 71, 2448, 71, 71, + 2439, 71, 2441, 2442, 71, 2443, 2447, 71, 2449, 71, + 2454, 2446, 71, 2451, 2450, 2452, 71, 2456, 71, 71, + 2453, 2455, 71, 71, 2457, 71, 2459, 71, 2458, 2460, + 71, 2462, 71, 71, 2464, 71, 2467, 71, 2463, 71, + 2468, 71, 2461, 2465, 2470, 71, 71, 2466, 71, 71, + + 71, 71, 2475, 71, 2477, 71, 71, 71, 2473, 2471, + 2474, 2472, 2478, 2469, 71, 2476, 71, 71, 71, 2479, + 2480, 2481, 71, 71, 71, 2482, 71, 71, 71, 71, + 3053, 2484, 2485, 2487, 2488, 2490, 71, 2483, 2486, 2491, + 71, 2489, 71, 71, 71, 2494, 2496, 3053, 2493, 2492, + 71, 71, 71, 71, 2498, 2497, 71, 2501, 71, 2502, + 71, 2500, 2495, 71, 2504, 71, 2499, 71, 2506, 71, + 2505, 71, 71, 2507, 71, 71, 2503, 2508, 2510, 71, + 2509, 71, 71, 2511, 71, 71, 2512, 71, 2517, 2526, + 2516, 2513, 2518, 71, 71, 2515, 71, 71, 71, 71, + + 2514, 2519, 2521, 71, 71, 2520, 2522, 71, 71, 2524, + 71, 2523, 2525, 71, 71, 2530, 71, 71, 71, 2528, + 71, 2527, 2529, 2535, 71, 2531, 71, 71, 71, 2539, + 71, 71, 71, 71, 2544, 71, 2532, 2537, 2533, 2534, + 71, 71, 2538, 2546, 2543, 2536, 2547, 2541, 2548, 71, + 2540, 71, 71, 2542, 71, 2549, 71, 71, 71, 2550, + 71, 71, 2551, 71, 71, 2554, 2545, 2552, 71, 2557, + 2558, 71, 71, 2553, 2559, 71, 2561, 2555, 71, 2556, + 2560, 71, 71, 2562, 2563, 71, 71, 71, 2567, 71, + 71, 2565, 71, 2568, 71, 71, 2570, 2571, 71, 2566, + + 2572, 71, 2564, 71, 71, 2574, 2573, 71, 2575, 2569, + 2577, 71, 71, 2578, 2579, 71, 2581, 71, 71, 71, + 71, 2585, 2580, 71, 2576, 2586, 71, 71, 71, 71, + 2588, 2582, 2587, 71, 2584, 2589, 71, 2583, 71, 2594, + 71, 2597, 71, 71, 2593, 71, 2590, 2596, 71, 2591, + 71, 71, 71, 2592, 2600, 2598, 2599, 71, 71, 71, + 2602, 71, 71, 3053, 2605, 2595, 71, 2609, 71, 71, + 71, 71, 71, 2611, 71, 2603, 2604, 2601, 71, 2606, + 2608, 2612, 2607, 2610, 2616, 2613, 2615, 2619, 71, 2617, + 71, 2614, 71, 2618, 71, 2620, 71, 2621, 71, 2622, + + 71, 2623, 71, 71, 71, 71, 71, 2625, 2624, 71, + 2631, 71, 71, 71, 2628, 2632, 2634, 71, 71, 2636, + 71, 71, 71, 2626, 3053, 2635, 2629, 2637, 71, 2630, + 2627, 2633, 2638, 71, 71, 71, 71, 2639, 71, 2642, + 2643, 71, 2644, 2640, 2641, 2645, 71, 2647, 71, 71, + 71, 71, 2648, 71, 71, 2651, 71, 2650, 2652, 71, + 71, 2646, 2649, 2653, 71, 2654, 71, 71, 71, 2657, + 71, 71, 71, 3053, 2656, 2662, 71, 2660, 2658, 2655, + 71, 71, 71, 2663, 2704, 2665, 71, 2666, 71, 2667, + 2661, 71, 2659, 2664, 71, 2668, 2669, 71, 2670, 2672, + + 71, 2671, 2673, 71, 2674, 71, 71, 71, 71, 71, + 2679, 71, 71, 2678, 2676, 2675, 71, 2680, 71, 2682, + 71, 71, 2687, 2681, 71, 71, 2677, 2683, 71, 2685, + 2689, 71, 2684, 71, 71, 71, 71, 2690, 71, 2686, + 2691, 2692, 71, 2693, 71, 2697, 71, 71, 71, 71, + 2688, 71, 71, 2694, 71, 2700, 71, 71, 2696, 2695, + 2698, 2699, 2705, 2701, 71, 2702, 2707, 71, 2709, 71, + 71, 2703, 2710, 71, 2712, 71, 71, 71, 71, 71, + 2717, 71, 2706, 2708, 2716, 71, 71, 71, 71, 2721, + 71, 2711, 2713, 2714, 2715, 2723, 71, 71, 71, 71, + + 71, 2725, 71, 2726, 2722, 2718, 2720, 71, 71, 2719, + 2728, 71, 2729, 71, 2731, 71, 71, 2724, 2736, 2733, + 2730, 2727, 2735, 71, 71, 2734, 71, 71, 2740, 71, + 71, 71, 2742, 2741, 2732, 71, 71, 2745, 2738, 2746, + 71, 71, 2737, 71, 2747, 2748, 71, 2739, 2743, 71, + 71, 71, 71, 2753, 2750, 2744, 71, 2751, 71, 71, + 2756, 71, 71, 71, 2749, 71, 2761, 71, 71, 2752, + 2757, 71, 71, 2754, 2755, 2764, 71, 3053, 2760, 71, + 2758, 2763, 2765, 71, 2766, 2767, 71, 2762, 2759, 2769, + 71, 2768, 2770, 71, 2771, 71, 71, 2773, 71, 71, + + 71, 2772, 71, 71, 71, 2778, 2779, 71, 71, 71, + 71, 2783, 71, 71, 2784, 71, 71, 3053, 2774, 2782, + 71, 2787, 2775, 2780, 2776, 2777, 2788, 71, 2781, 2789, + 71, 71, 71, 2785, 2786, 2792, 2790, 71, 71, 71, + 71, 71, 2795, 71, 71, 2796, 2791, 2794, 71, 2793, + 71, 71, 71, 2799, 71, 71, 71, 2801, 2797, 71, + 2802, 71, 2800, 71, 2798, 71, 71, 71, 71, 71, + 2818, 71, 2811, 2803, 2812, 2804, 2805, 2806, 2814, 2807, + 71, 2813, 2808, 2809, 71, 2815, 71, 2810, 2816, 2819, + 71, 71, 2821, 71, 71, 2820, 2822, 71, 2829, 2817, + + 2823, 2824, 71, 71, 2825, 2826, 71, 71, 2827, 2828, + 71, 71, 2830, 71, 71, 71, 71, 2836, 71, 71, + 2831, 2835, 71, 2839, 2832, 2853, 2833, 71, 71, 2838, + 71, 71, 71, 71, 2834, 71, 2840, 71, 2844, 71, + 2837, 2843, 2874, 2841, 2845, 71, 2846, 71, 2842, 71, + 2847, 71, 2851, 71, 2848, 71, 71, 2852, 71, 71, + 2849, 2857, 71, 2850, 2854, 2860, 71, 2858, 2855, 2861, + 71, 71, 2863, 71, 2909, 71, 2856, 2862, 2859, 2864, + 71, 71, 2866, 71, 2867, 71, 2865, 2868, 71, 2869, + 71, 2870, 71, 2871, 71, 2872, 71, 2873, 71, 2875, + + 71, 71, 71, 71, 71, 71, 2880, 71, 71, 71, + 2876, 71, 2884, 71, 2877, 71, 2886, 71, 71, 2881, + 71, 2882, 2893, 2878, 2879, 2883, 71, 2887, 71, 2888, + 2885, 71, 2890, 71, 71, 71, 2892, 71, 2891, 71, + 2895, 71, 71, 71, 2889, 71, 71, 2899, 2894, 2902, + 71, 71, 2900, 2904, 71, 71, 2896, 2897, 2898, 71, + 2901, 2905, 71, 2903, 2906, 71, 71, 71, 2908, 71, + 71, 71, 71, 2917, 2907, 2910, 2914, 71, 71, 2915, + 2911, 2913, 71, 71, 2916, 71, 71, 71, 71, 71, + 2912, 2918, 71, 71, 71, 71, 71, 2924, 71, 2921, + + 2928, 2919, 2923, 2920, 2925, 2931, 71, 2932, 2929, 71, + 2926, 2922, 71, 2927, 2933, 71, 2930, 71, 2934, 2935, + 71, 2936, 71, 71, 71, 71, 2939, 71, 2937, 2940, + 2941, 71, 2938, 2944, 71, 71, 71, 71, 71, 71, + 71, 2947, 2949, 71, 2952, 71, 2943, 2946, 2945, 71, + 71, 71, 2942, 2950, 2955, 71, 2959, 2948, 71, 2951, + 71, 2956, 71, 2960, 2953, 71, 2957, 71, 2954, 71, + 2958, 71, 71, 2965, 71, 2966, 71, 2964, 71, 2961, + 2962, 71, 71, 71, 71, 71, 71, 2970, 71, 71, + 2963, 2972, 71, 2979, 71, 71, 2969, 71, 2974, 2967, + + 2977, 2968, 2975, 71, 2971, 71, 71, 2973, 2978, 2983, + 71, 2976, 71, 71, 2985, 71, 2986, 2980, 2984, 71, + 71, 71, 71, 2981, 2987, 2982, 2988, 2989, 2991, 2992, + 71, 2990, 71, 71, 71, 2994, 71, 2993, 71, 71, + 71, 71, 2995, 3000, 71, 71, 2997, 71, 3003, 71, + 3004, 71, 2996, 71, 71, 71, 71, 71, 3002, 2998, + 2999, 3007, 3005, 3001, 71, 3006, 71, 3011, 71, 3012, + 3010, 71, 71, 3008, 3009, 71, 3015, 71, 3017, 71, + 3018, 3013, 71, 71, 71, 3022, 71, 3019, 71, 71, + 3020, 3016, 71, 3023, 3024, 3025, 71, 3014, 71, 71, + + 71, 71, 71, 3021, 71, 3026, 3027, 3029, 3028, 3031, + 71, 71, 71, 71, 71, 3037, 3033, 3034, 71, 3030, + 3032, 3038, 71, 3035, 71, 71, 3041, 3042, 71, 71, + 3044, 71, 3036, 3045, 71, 71, 3043, 3039, 71, 71, + 71, 71, 3046, 3040, 3047, 3048, 3051, 71, 3052, 71, + 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3049, 3053, 3053, + 3050, 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, 3053, 74, + + 74, 74, 74, 142, 142, 3053, 3053, 3053, 142, 142, + 144, 144, 3053, 3053, 144, 3053, 144, 146, 3053, 3053, + 3053, 3053, 3053, 146, 149, 149, 3053, 3053, 3053, 149, + 149, 151, 3053, 3053, 3053, 3053, 3053, 151, 153, 153, + 3053, 153, 153, 153, 153, 75, 75, 3053, 75, 75, + 75, 75, 13, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053 + } ; -static const flex_int16_t yy_chk[5968] = +static const flex_int16_t yy_chk[5994] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2092,654 +2099,658 @@ static const flex_int16_t yy_chk[5968] = 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, 3049, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3059, 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, 1000, 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, - - 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, - - 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, - - 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, 189, 189, 191, 187, - 188, 185, 189, 184, 185, 190, 192, 180, 197, 186, - 190, 193, 194, 194, 189, 195, 189, 193, 191, 196, - - 198, 195, 192, 199, 200, 196, 198, 195, 197, 199, - 201, 206, 202, 203, 204, 205, 201, 202, 199, 203, - 204, 207, 205, 208, 206, 200, 209, 207, 210, 211, - 213, 212, 209, 214, 215, 213, 216, 211, 217, 220, - 218, 222, 214, 208, 212, 218, 218, 221, 219, 215, - 210, 221, 216, 219, 223, 224, 225, 220, 217, 226, - 223, 227, 225, 222, 229, 228, 227, 228, 230, 233, - 231, 232, 234, 224, 224, 230, 231, 232, 234, 226, - 235, 236, 242, 229, 237, 237, 238, 238, 233, 243, - 239, 240, 235, 245, 243, 236, 239, 240, 241, 244, - - 241, 246, 247, 248, 249, 242, 255, 250, 248, 246, - 251, 244, 245, 250, 239, 252, 251, 241, 253, 254, - 252, 255, 247, 253, 256, 254, 257, 249, 258, 259, - 260, 262, 266, 261, 262, 264, 264, 259, 256, 261, - 269, 263, 258, 263, 257, 265, 267, 267, 265, 270, - 266, 268, 268, 275, 271, 260, 269, 271, 272, 273, - 274, 285, 272, 276, 270, 278, 274, 275, 273, 276, - 277, 278, 277, 279, 280, 280, 281, 279, 282, 283, - 284, 281, 285, 286, 282, 287, 287, 288, 289, 290, - 288, 291, 293, 290, 279, 295, 286, 296, 284, 283, - - 292, 292, 294, 296, 298, 294, 289, 295, 297, 291, - 293, 297, 300, 301, 302, 303, 298, 305, 303, 302, - 303, 300, 294, 299, 304, 306, 307, 304, 307, 307, - 305, 301, 299, 308, 310, 299, 303, 306, 308, 308, - 299, 299, 299, 299, 309, 311, 312, 309, 313, 314, - 314, 310, 317, 315, 310, 312, 319, 313, 315, 318, - 311, 316, 316, 320, 318, 321, 322, 317, 319, 323, - 326, 324, 324, 327, 324, 323, 335, 335, 327, 329, - 328, 322, 320, 324, 329, 321, 328, 330, 331, 332, - 326, 331, 330, 331, 333, 334, 336, 333, 330, 337, - - 337, 338, 336, 332, 334, 339, 338, 343, 339, 341, - 333, 342, 373, 333, 339, 333, 344, 347, 339, 345, - 347, 348, 343, 350, 373, 351, 339, 340, 340, 341, - 340, 344, 342, 345, 351, 348, 347, 354, 350, 352, - 355, 353, 356, 340, 352, 352, 340, 353, 340, 358, - 340, 349, 357, 349, 349, 360, 359, 356, 354, 355, - 361, 357, 359, 349, 362, 349, 349, 349, 358, 363, - 349, 364, 365, 366, 367, 363, 369, 368, 362, 363, - 361, 360, 368, 372, 370, 371, 371, 374, 376, 367, - 370, 369, 365, 366, 364, 377, 375, 379, 379, 378, - - 379, 374, 375, 372, 378, 380, 381, 382, 387, 387, - 383, 377, 384, 376, 384, 385, 386, 388, 389, 385, - 386, 390, 381, 382, 383, 380, 391, 392, 145, 393, - 394, 399, 384, 389, 397, 386, 388, 390, 393, 394, - 395, 392, 396, 397, 391, 395, 396, 398, 400, 393, - 403, 393, 399, 398, 400, 401, 402, 404, 404, 401, - 405, 402, 406, 406, 407, 408, 409, 409, 410, 407, - 403, 411, 412, 405, 410, 411, 413, 414, 408, 415, - 416, 416, 414, 417, 415, 418, 419, 412, 420, 416, - 421, 423, 422, 421, 426, 417, 422, 413, 424, 424, - - 420, 425, 428, 423, 419, 418, 425, 427, 427, 430, - 430, 431, 432, 433, 434, 426, 435, 437, 438, 439, - 432, 440, 433, 442, 428, 450, 443, 440, 435, 442, - 441, 443, 431, 439, 434, 437, 444, 437, 438, 441, - 445, 446, 447, 448, 446, 450, 449, 452, 445, 453, - 444, 445, 449, 452, 451, 454, 447, 451, 448, 455, - 454, 456, 457, 453, 458, 459, 457, 460, 461, 458, - 462, 452, 460, 463, 466, 468, 469, 467, 476, 468, - 459, 455, 456, 470, 461, 473, 463, 476, 143, 462, - 464, 464, 467, 471, 466, 469, 464, 471, 464, 470, - - 473, 475, 472, 474, 464, 478, 464, 472, 474, 464, - 464, 472, 477, 480, 481, 483, 464, 475, 477, 479, - 485, 478, 479, 477, 482, 482, 484, 484, 487, 486, - 488, 489, 490, 491, 481, 485, 480, 490, 492, 493, - 483, 486, 491, 487, 494, 501, 496, 497, 499, 488, - 494, 497, 498, 489, 493, 496, 500, 492, 498, 502, - 499, 503, 504, 505, 501, 506, 507, 505, 507, 508, - 511, 500, 513, 502, 509, 509, 503, 508, 506, 510, - 504, 512, 511, 514, 513, 510, 514, 512, 515, 516, - 517, 518, 519, 520, 518, 517, 638, 522, 523, 523, - - 521, 519, 515, 529, 516, 521, 521, 638, 519, 520, - 522, 519, 524, 524, 525, 526, 526, 527, 527, 528, - 525, 532, 531, 530, 529, 528, 530, 531, 533, 534, - 535, 536, 534, 537, 538, 535, 533, 539, 538, 541, - 532, 540, 542, 539, 543, 540, 545, 542, 546, 544, - 548, 545, 537, 547, 536, 544, 547, 541, 549, 549, - 550, 547, 546, 553, 543, 547, 551, 552, 548, 554, - 556, 551, 552, 557, 563, 559, 556, 553, 550, 559, - 558, 560, 557, 558, 554, 561, 560, 562, 561, 564, - 563, 565, 562, 566, 567, 568, 569, 569, 565, 567, - - 570, 559, 571, 572, 573, 574, 566, 564, 575, 570, - 576, 695, 581, 573, 575, 568, 576, 574, 582, 572, - 577, 571, 695, 577, 578, 578, 579, 578, 580, 579, - 581, 583, 582, 580, 584, 585, 591, 583, 589, 584, - 586, 585, 587, 586, 588, 590, 592, 587, 593, 588, - 588, 589, 592, 594, 595, 591, 591, 596, 590, 595, - 597, 597, 594, 598, 601, 599, 600, 593, 599, 602, - 598, 605, 600, 603, 602, 607, 601, 596, 603, 603, - 604, 604, 606, 599, 606, 608, 609, 608, 610, 611, - 612, 613, 614, 615, 607, 617, 605, 615, 614, 616, - - 618, 619, 620, 622, 609, 621, 610, 611, 616, 612, - 617, 613, 624, 625, 623, 618, 626, 621, 622, 619, - 623, 620, 627, 628, 629, 625, 624, 628, 630, 631, - 632, 633, 634, 635, 635, 626, 636, 637, 639, 641, - 636, 627, 629, 642, 630, 141, 634, 631, 632, 632, - 633, 643, 639, 640, 644, 641, 637, 649, 640, 646, - 645, 644, 642, 647, 643, 645, 646, 648, 647, 650, - 651, 652, 648, 653, 654, 649, 650, 656, 655, 651, - 656, 658, 653, 655, 657, 652, 654, 659, 657, 660, - 662, 661, 663, 663, 666, 658, 659, 664, 664, 665, - - 665, 668, 669, 666, 660, 661, 664, 670, 669, 671, - 672, 662, 673, 671, 674, 675, 676, 678, 677, 679, - 668, 675, 672, 680, 676, 677, 683, 670, 690, 686, - 689, 691, 674, 698, 690, 678, 692, 673, 696, 689, - 692, 683, 70, 680, 679, 681, 686, 691, 693, 693, - 681, 694, 694, 698, 681, 697, 696, 681, 701, 702, - 699, 703, 704, 701, 681, 681, 699, 681, 707, 697, - 700, 700, 700, 705, 700, 707, 705, 700, 709, 703, - 702, 64, 700, 706, 706, 708, 708, 704, 700, 700, - 710, 710, 711, 709, 713, 712, 715, 711, 712, 713, - - 714, 716, 714, 717, 718, 720, 719, 717, 715, 721, - 721, 722, 725, 720, 723, 724, 724, 726, 727, 760, - 716, 728, 730, 730, 718, 719, 722, 728, 723, 726, - 725, 729, 731, 760, 733, 734, 729, 731, 731, 733, - 727, 734, 735, 738, 736, 737, 738, 739, 735, 736, - 740, 737, 743, 739, 741, 741, 742, 742, 740, 744, - 743, 745, 746, 747, 748, 748, 745, 749, 751, 746, - 750, 752, 754, 761, 751, 755, 749, 744, 750, 757, - 756, 754, 747, 758, 755, 756, 758, 759, 757, 763, - 752, 762, 759, 765, 765, 766, 767, 768, 761, 764, - - 762, 769, 763, 774, 764, 764, 768, 772, 770, 772, - 766, 770, 773, 773, 776, 767, 775, 777, 778, 770, - 779, 775, 781, 780, 774, 769, 782, 784, 783, 785, - 786, 781, 783, 789, 788, 776, 786, 777, 778, 790, - 792, 787, 779, 780, 795, 784, 788, 796, 785, 782, - 787, 791, 789, 790, 792, 793, 796, 791, 794, 794, - 793, 797, 798, 799, 795, 800, 801, 803, 802, 805, - 798, 806, 804, 803, 807, 805, 808, 810, 811, 812, - 807, 797, 808, 799, 812, 801, 804, 800, 802, 809, - 811, 806, 813, 809, 814, 814, 810, 815, 811, 816, - - 817, 818, 816, 815, 819, 820, 821, 821, 822, 825, - 819, 823, 828, 813, 818, 829, 823, 826, 817, 824, - 824, 826, 827, 827, 825, 820, 822, 830, 831, 833, - 834, 836, 830, 837, 828, 829, 839, 839, 840, 842, - 842, 841, 840, 843, 834, 844, 845, 831, 846, 844, - 852, 836, 847, 833, 837, 838, 841, 847, 838, 848, - 838, 845, 846, 850, 838, 852, 838, 854, 843, 849, - 856, 838, 857, 848, 849, 849, 838, 850, 851, 854, - 853, 855, 851, 858, 856, 853, 855, 862, 862, 865, - 859, 866, 860, 857, 851, 853, 859, 858, 860, 861, - - 867, 863, 864, 869, 870, 861, 863, 871, 864, 870, - 866, 865, 872, 873, 873, 869, 876, 874, 867, 868, - 868, 871, 874, 875, 872, 868, 59, 868, 877, 878, - 876, 875, 880, 868, 879, 879, 880, 882, 868, 868, - 884, 883, 885, 882, 883, 868, 886, 877, 878, 887, - 888, 889, 886, 890, 887, 885, 891, 892, 893, 884, - 889, 894, 890, 892, 896, 895, 898, 893, 897, 888, - 895, 899, 891, 902, 903, 904, 900, 906, 901, 902, - 894, 904, 897, 899, 896, 900, 898, 901, 908, 909, - 911, 903, 910, 906, 912, 913, 914, 919, 915, 924, - - 918, 914, 908, 915, 911, 918, 919, 920, 920, 909, - 913, 910, 912, 921, 922, 924, 925, 927, 928, 921, - 927, 925, 925, 929, 926, 926, 930, 922, 926, 931, - 932, 933, 928, 934, 935, 936, 937, 933, 938, 941, - 935, 937, 931, 929, 930, 932, 940, 944, 54, 940, - 936, 942, 938, 934, 943, 947, 942, 945, 949, 943, - 941, 946, 945, 944, 949, 950, 946, 947, 951, 952, - 953, 953, 955, 954, 951, 952, 956, 957, 957, 956, - 958, 950, 954, 959, 960, 961, 962, 963, 961, 964, - 955, 965, 966, 963, 970, 964, 965, 966, 958, 962, - - 967, 968, 959, 971, 960, 967, 973, 968, 972, 974, - 974, 973, 970, 975, 972, 976, 977, 978, 979, 980, - 978, 979, 975, 971, 976, 981, 982, 983, 987, 984, - 980, 985, 986, 987, 977, 984, 989, 985, 982, 988, - 988, 991, 990, 981, 992, 993, 983, 986, 992, 994, - 995, 996, 998, 991, 1001, 989, 990, 1002, 994, 999, - 999, 1003, 1004, 993, 1007, 1005, 1013, 1004, 1001, 995, - 53, 998, 1002, 1003, 1005, 1008, 996, 1006, 1006, 1009, - 1013, 1008, 1010, 1014, 1007, 1009, 1011, 1010, 1011, 1012, - 1015, 1016, 1017, 1018, 1012, 1015, 1020, 1014, 1019, 1025, - - 1018, 1022, 1022, 1023, 1024, 1027, 1016, 1028, 1030, 1030, - 1026, 1017, 1028, 1019, 1025, 1020, 1026, 1023, 1034, 1031, - 1036, 1028, 1024, 1028, 1031, 1027, 1028, 1032, 1032, 1033, - 1035, 1037, 1034, 1035, 1038, 1039, 1033, 1040, 1043, 1036, - 1039, 1041, 1042, 1038, 1045, 1045, 1041, 1046, 1048, 1037, - 1047, 1051, 1046, 1042, 1049, 1047, 1040, 1043, 1050, 1049, - 1051, 1052, 1050, 1053, 1054, 1055, 1056, 1057, 1048, 1059, - 1058, 1060, 1061, 1062, 1057, 1069, 1052, 1055, 1053, 1062, - 1063, 1056, 1058, 1054, 1064, 1065, 1070, 1066, 1059, 1069, - 1061, 1068, 1060, 1071, 1070, 1063, 1066, 1068, 1072, 1073, - - 1075, 1074, 1076, 1072, 1064, 1065, 1074, 1074, 1077, 1078, - 1078, 1073, 1080, 1071, 1081, 1084, 1076, 1085, 1082, 1075, - 1084, 1077, 1079, 1081, 1082, 1080, 1085, 1079, 1083, 1083, - 1079, 1079, 1086, 1090, 1087, 1079, 1093, 1088, 1086, 1087, - 1094, 1079, 1088, 1089, 1089, 1079, 1091, 1091, 1092, 1096, - 1095, 1092, 1097, 1092, 1090, 1099, 1093, 1097, 1094, 1095, - 1098, 1100, 1101, 1104, 1134, 1102, 1134, 1100, 1101, 1096, - 1102, 1103, 1104, 1099, 1098, 1103, 1111, 1104, 1109, 1104, - 1107, 1104, 1109, 1104, 1105, 1105, 1106, 1106, 1110, 1106, - 1112, 1107, 1113, 1114, 1111, 1115, 1116, 1113, 1113, 1112, - - 1115, 1118, 1117, 1110, 1119, 1120, 1121, 1122, 1122, 1123, - 1116, 1117, 1121, 1124, 1126, 1114, 1125, 1123, 1128, 1120, - 1118, 1125, 1127, 1119, 1129, 1130, 1132, 1124, 1126, 1138, - 1130, 1127, 1131, 1131, 1133, 1133, 1128, 1136, 1137, 1141, - 1136, 1132, 1139, 1137, 1140, 1140, 1142, 1142, 1138, 1129, - 1144, 1139, 1143, 1143, 1145, 1144, 1146, 1147, 1147, 1141, - 1148, 1149, 1150, 1151, 1149, 1152, 1154, 1153, 1151, 1153, - 1156, 1157, 48, 1156, 1152, 1145, 1158, 1146, 1159, 1160, - 1148, 1158, 1150, 1159, 1154, 1161, 1157, 1160, 1162, 1164, - 1161, 1163, 1163, 1162, 1164, 1165, 1166, 1167, 1168, 1170, - - 1171, 1173, 1166, 1172, 1167, 1170, 1171, 1173, 1172, 1174, - 1175, 1168, 1176, 1165, 1177, 1177, 1178, 1180, 1174, 1181, - 1182, 1183, 1184, 1176, 1186, 1187, 1182, 1183, 1184, 1175, - 1186, 1188, 1189, 1190, 1191, 1193, 1178, 1180, 1194, 1187, - 1192, 1192, 1181, 1195, 1189, 1187, 1198, 1190, 1196, 1197, - 1197, 1188, 1191, 1196, 1199, 1193, 1201, 43, 1203, 1199, - 1202, 1195, 1204, 1194, 1205, 1202, 1202, 1206, 1207, 1198, - 1208, 1204, 1205, 1211, 1209, 1201, 1203, 1217, 1210, 1209, - 1210, 1206, 1209, 1207, 1213, 1208, 1215, 1211, 1208, 1214, - 1213, 1218, 1219, 1214, 1216, 1221, 1217, 1215, 1220, 1216, - - 1216, 1222, 1223, 1220, 1225, 1226, 1222, 1227, 1228, 1228, - 1219, 1229, 1230, 1221, 1231, 1229, 1233, 1218, 1225, 1234, - 1232, 1235, 1223, 1226, 1236, 1227, 1232, 1237, 1233, 1238, - 1230, 1239, 1241, 1231, 1240, 1235, 1239, 1241, 1234, 1236, - 1242, 1240, 1237, 1243, 1244, 1244, 1245, 1246, 1238, 1247, - 1248, 1249, 1243, 1246, 1250, 1248, 1257, 1249, 1242, 1258, - 1250, 1245, 1251, 1251, 1252, 1252, 1254, 1254, 1255, 1256, - 1247, 1259, 1255, 1258, 1257, 1260, 1261, 1261, 1256, 1262, - 1263, 1265, 1260, 1266, 1264, 1267, 1259, 1268, 1263, 1264, - 1267, 1267, 1268, 1268, 1269, 1265, 1270, 1270, 1271, 1262, - - 1272, 1273, 1266, 1274, 1275, 1276, 1277, 1278, 1274, 1280, - 1273, 1279, 1281, 1278, 1269, 1282, 1279, 1271, 1281, 1272, - 1283, 1284, 1285, 1275, 1277, 1276, 1283, 1284, 1286, 1287, - 1288, 1289, 1290, 14, 1282, 1280, 1291, 1292, 1292, 1293, - 1294, 1285, 1293, 1295, 1295, 1289, 1298, 1286, 1287, 1288, - 1298, 1291, 1294, 1290, 1296, 1296, 1297, 1299, 1300, 1301, - 1302, 1297, 1302, 1304, 1306, 1305, 1302, 1300, 1304, 1307, - 1299, 1309, 1301, 1308, 1308, 1310, 1309, 1311, 1312, 1302, - 1305, 1310, 1313, 1316, 1306, 1307, 1314, 1313, 1317, 1315, - 1314, 1312, 1311, 1315, 1318, 1319, 1320, 1320, 1322, 1324, - - 1325, 1319, 1328, 1316, 1327, 1325, 1317, 1326, 1326, 1334, - 1327, 1330, 1330, 1335, 1318, 1332, 1322, 1338, 1332, 1339, - 1324, 1341, 1328, 1333, 1333, 1334, 1342, 1337, 1339, 1335, - 1337, 1340, 1340, 1343, 1344, 1345, 1341, 1338, 1347, 1344, - 1346, 1346, 1348, 1349, 1350, 1350, 1351, 1342, 1352, 1345, - 1353, 1357, 1343, 1359, 1354, 1353, 1347, 1348, 1355, 1355, - 1351, 1356, 1358, 1358, 1362, 1356, 1352, 1360, 1349, 1354, - 1361, 1357, 1363, 1366, 1361, 1359, 1367, 1363, 1360, 1365, - 1365, 1368, 1369, 1362, 1370, 1371, 1371, 1372, 1373, 1375, - 1367, 1366, 1372, 1374, 1376, 1377, 1369, 1380, 1375, 1376, - - 1368, 1368, 1378, 1380, 1378, 1379, 1381, 1384, 1373, 1370, - 1379, 1382, 1386, 1374, 1387, 1377, 1390, 1382, 1385, 1385, - 1387, 1384, 1389, 1391, 1391, 1393, 1381, 1389, 1392, 1392, - 1394, 1386, 1395, 1396, 1397, 1397, 1396, 1398, 1399, 1393, - 1390, 1402, 1407, 1411, 1411, 1401, 1402, 1395, 1394, 1398, - 1400, 1401, 1403, 1400, 1405, 1403, 1400, 1406, 1399, 1409, - 1413, 1408, 1406, 1405, 1408, 1409, 1413, 1407, 1400, 1410, - 1414, 1403, 1412, 1412, 1410, 1414, 1415, 1416, 1417, 1418, - 1419, 1420, 1421, 1419, 1424, 1422, 1423, 1420, 1421, 1415, - 1422, 1425, 1423, 1426, 1426, 1416, 1425, 1417, 1427, 1418, - - 1428, 1429, 1430, 1427, 1433, 1431, 1432, 1424, 1435, 1436, - 1434, 1437, 1438, 1439, 1435, 1442, 1433, 1447, 1428, 1431, - 1432, 1429, 1430, 1434, 1441, 1441, 1438, 1443, 1445, 1436, - 1446, 1437, 1443, 1448, 1439, 1442, 1444, 1444, 1449, 1450, - 1453, 1447, 1451, 1445, 1446, 1455, 1452, 1449, 1457, 1451, - 1458, 1448, 1462, 1458, 1450, 1452, 1453, 1461, 1452, 1465, - 1455, 1459, 1459, 1460, 1460, 1455, 1464, 1464, 1463, 1461, - 1462, 1463, 1465, 1457, 1466, 1467, 1468, 1469, 1470, 1471, - 1467, 1468, 1472, 1473, 1475, 1476, 1476, 1477, 1471, 1474, - 1475, 1478, 1473, 1466, 1470, 1473, 1469, 1479, 1474, 1480, - - 1481, 1472, 1482, 1485, 1478, 1486, 1488, 1477, 1487, 1487, - 1489, 1493, 1490, 1480, 1482, 1479, 1481, 1490, 1492, 1489, - 1491, 1491, 1488, 1486, 1494, 1495, 1496, 1492, 1485, 1493, - 1492, 1496, 1496, 1498, 1499, 1491, 1500, 1501, 1502, 1503, - 1504, 1504, 1501, 1495, 1502, 1494, 1505, 1498, 1506, 1499, - 1507, 1510, 1505, 1506, 1508, 1511, 1507, 1503, 1500, 1512, - 1508, 1513, 1515, 1514, 1519, 1512, 1514, 1517, 1515, 1511, - 1520, 1510, 1514, 1521, 1513, 1517, 1522, 1523, 1524, 1525, - 1526, 1521, 1528, 1519, 1530, 1522, 1527, 1527, 1528, 1520, - 1523, 1524, 1529, 1525, 1526, 1531, 1532, 1530, 1529, 1533, - - 1534, 1535, 1536, 1537, 1538, 1540, 1540, 1535, 1527, 1541, - 1547, 13, 1542, 1534, 1532, 1531, 1542, 1549, 1533, 1537, - 1543, 1544, 1538, 1545, 1536, 1543, 1544, 1546, 1545, 1541, - 1550, 1550, 1549, 1547, 1551, 1552, 1546, 1553, 1554, 1554, - 1555, 1556, 1559, 1557, 1560, 1558, 1561, 1552, 1556, 1563, - 1562, 1654, 1561, 1551, 1555, 1557, 1553, 1558, 1654, 1564, - 1566, 1559, 1562, 1566, 1560, 1564, 1570, 1563, 1565, 1565, - 1567, 1567, 1569, 1571, 1573, 1570, 1574, 1569, 1574, 1571, - 1572, 1572, 1575, 1576, 1577, 1575, 1573, 1578, 1580, 1579, - 1581, 1584, 1582, 1580, 1583, 1586, 1584, 1588, 1592, 1581, - - 0, 1585, 1588, 1576, 1582, 1578, 1577, 1579, 1587, 1583, - 1585, 1589, 1591, 1587, 1593, 1586, 1590, 1590, 1591, 1592, - 1587, 1594, 1595, 1585, 1597, 1596, 1589, 1596, 1598, 1598, - 1599, 1599, 1601, 1593, 1600, 1600, 1604, 1594, 1597, 1605, - 1597, 1612, 1595, 1602, 1602, 1603, 1603, 1606, 1606, 1607, - 1608, 1609, 1601, 1607, 1609, 1611, 1608, 1604, 1613, 1612, - 1605, 1611, 1614, 1615, 1613, 1618, 1615, 1616, 1616, 1617, - 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1625, 1626, 1632, - 1629, 1622, 1625, 1625, 1619, 1619, 1619, 1614, 1627, 1628, - 1627, 1619, 1626, 1620, 1621, 1629, 1623, 1630, 1631, 1632, - - 1628, 1633, 1635, 1630, 1634, 1634, 1637, 1631, 1636, 1636, - 1638, 1639, 1639, 1640, 1640, 1641, 1644, 1644, 1645, 1649, - 1646, 1648, 1633, 1651, 1651, 1650, 1637, 1652, 1635, 1646, - 1648, 1650, 1638, 1655, 1653, 1641, 1656, 1657, 1657, 1658, - 1649, 1659, 1655, 1645, 1663, 1661, 1662, 1664, 1652, 1653, - 1661, 1668, 1662, 1665, 1664, 1666, 1668, 1659, 1670, 1665, - 1669, 1666, 1656, 1671, 1663, 1658, 1667, 1667, 1672, 1669, - 1673, 1674, 1675, 1673, 1676, 1676, 1678, 1677, 1670, 1679, - 1672, 1680, 1671, 1677, 1682, 1680, 1683, 1684, 1686, 1674, - 1685, 1685, 1684, 1689, 1679, 1687, 1678, 1697, 1675, 1690, - - 1691, 1680, 1692, 1690, 1682, 1694, 1691, 1686, 1683, 1694, - 1687, 1692, 1689, 1693, 1693, 1695, 1696, 1696, 1697, 1698, - 1699, 1701, 1700, 1702, 1703, 1704, 1695, 1700, 1708, 1705, - 1703, 1695, 1708, 1698, 1705, 1706, 1706, 1707, 1707, 1699, - 1704, 1701, 1710, 1702, 1711, 1712, 1713, 1713, 1714, 1714, - 1716, 1710, 1715, 1717, 1718, 1711, 1716, 1715, 1715, 1717, - 1711, 1719, 1720, 1721, 1723, 1712, 1719, 1724, 1726, 1721, - 1725, 1724, 1727, 1728, 1720, 1729, 1723, 1730, 1727, 1732, - 1718, 1729, 1725, 1733, 1736, 1734, 1740, 1736, 1741, 1730, - 1734, 1732, 1750, 1726, 1741, 1728, 1737, 1737, 1738, 1738, - - 1739, 1739, 1733, 1742, 1750, 1743, 1740, 1744, 1745, 1742, - 1743, 1747, 1749, 1744, 1753, 1749, 1747, 1745, 1751, 1751, - 1754, 1757, 1755, 1756, 1756, 1761, 1753, 1755, 1758, 1759, - 1757, 1762, 1754, 1758, 1759, 1760, 1760, 1763, 1764, 1765, - 1762, 1766, 1767, 1765, 1768, 1761, 1766, 1769, 1767, 1770, - 1771, 1773, 1773, 1774, 1778, 1763, 1769, 1764, 1779, 1775, - 1776, 1776, 1768, 1773, 1771, 1777, 1778, 1770, 1775, 1781, - 1780, 1774, 1784, 1784, 1777, 1780, 1787, 1786, 1788, 1779, - 1786, 1790, 1781, 1791, 1792, 1793, 1794, 1794, 1799, 1795, - 1792, 1795, 1787, 1797, 1788, 1799, 1790, 1791, 1796, 1796, - - 1800, 1797, 1793, 1801, 1801, 1802, 1803, 1804, 1807, 1805, - 1806, 1808, 1809, 1811, 1802, 0, 1812, 1814, 1809, 1804, - 1800, 1805, 1806, 1813, 1813, 1815, 1808, 1803, 1812, 1816, - 1818, 1809, 1816, 1811, 1807, 1814, 1817, 1820, 1821, 1822, - 1821, 1817, 1820, 1823, 1824, 1815, 1826, 1828, 1823, 1829, - 1818, 1824, 1830, 1832, 1831, 1826, 1831, 1822, 1829, 1834, - 1835, 1834, 1836, 1836, 1830, 1828, 1837, 1839, 1838, 1839, - 1840, 1841, 1832, 1838, 1835, 1840, 1841, 1842, 1843, 1844, - 1846, 1845, 1847, 1849, 1853, 1844, 1845, 1850, 1851, 1851, - 1847, 1854, 1837, 1846, 1855, 1842, 1852, 1852, 1843, 1853, - - 1855, 1850, 1849, 1856, 1857, 1858, 1857, 1860, 1856, 1859, - 1859, 1854, 1865, 1858, 1861, 1861, 1862, 1862, 1863, 1860, - 1864, 1858, 1867, 1869, 1868, 1864, 1868, 1863, 1872, 1874, - 1865, 1867, 1870, 1871, 1867, 1879, 1878, 1870, 1870, 1882, - 1872, 1874, 1871, 1875, 1869, 1876, 1883, 1880, 1875, 1878, - 1876, 1881, 1881, 1884, 1885, 1879, 1880, 1882, 1886, 1888, - 1889, 1890, 1891, 1899, 1883, 1892, 1893, 1891, 1885, 1884, - 1892, 1888, 1889, 1886, 1896, 1893, 1898, 1900, 1901, 1902, - 1896, 1890, 1898, 1904, 1904, 1903, 1899, 1907, 1905, 1906, - 1906, 1908, 1900, 1896, 1903, 1908, 1901, 1905, 1909, 1910, - - 1916, 0, 1911, 1909, 1902, 1912, 1907, 1911, 1911, 1913, - 1914, 1912, 1910, 1914, 1915, 1913, 1919, 1919, 1920, 1920, - 1916, 1921, 1915, 1922, 1922, 1923, 1923, 1924, 1925, 1926, - 1921, 1927, 1937, 1920, 1934, 1926, 1927, 1928, 1928, 1924, - 1929, 1929, 1930, 1931, 1920, 1938, 1925, 1930, 1933, 1931, - 1938, 1935, 1933, 1939, 1934, 1935, 1940, 1937, 1941, 1942, - 1944, 1945, 1943, 1941, 1946, 1948, 1945, 1947, 1947, 1948, - 1949, 1940, 1951, 1953, 1950, 1952, 1939, 1942, 1943, 1950, - 1944, 1955, 1956, 1954, 1960, 1949, 1946, 1952, 1954, 1957, - 1957, 1959, 1953, 1961, 1955, 1962, 1963, 1964, 1951, 1959, - - 1956, 1965, 1966, 1960, 1967, 1973, 1969, 1970, 1970, 2134, - 1971, 1972, 1961, 1971, 1966, 1974, 1964, 2134, 1962, 1973, - 1963, 1969, 1965, 1978, 1972, 1967, 1975, 1975, 1974, 1976, - 1976, 1977, 1977, 1979, 1980, 1980, 1981, 1983, 1978, 1982, - 1982, 1986, 1983, 1987, 1985, 1981, 1979, 1988, 1981, 1985, - 1989, 1989, 1990, 1990, 1991, 1992, 1992, 1993, 1999, 1988, - 2002, 1986, 1995, 1987, 1994, 1994, 1996, 1997, 1997, 1998, - 1998, 1996, 1999, 1991, 2000, 1993, 2001, 1995, 2006, 2002, - 2004, 2005, 2005, 2000, 2008, 2004, 2007, 2007, 2009, 2010, - 2001, 2013, 2010, 2014, 2009, 2011, 2011, 2006, 2012, 2012, - - 2015, 2018, 2008, 2016, 2016, 2019, 2023, 2020, 2014, 2021, - 2013, 2011, 2024, 2021, 2022, 2022, 2025, 2027, 2027, 2015, - 2028, 2018, 2020, 2029, 2030, 2023, 2031, 2024, 2019, 2032, - 2029, 2025, 2033, 2034, 2034, 2036, 2035, 2036, 2030, 2037, - 2028, 2039, 2037, 2040, 2031, 2035, 2041, 2032, 2040, 2042, - 2043, 2041, 2044, 2039, 2046, 2045, 2048, 2037, 2033, 2037, - 2045, 2048, 2049, 2043, 2050, 2051, 2052, 2049, 2056, 2053, - 2057, 2051, 2054, 2044, 2042, 2053, 2055, 2054, 2063, 2050, - 2046, 2055, 2058, 2057, 2068, 2058, 2059, 2052, 2060, 2061, - 2062, 2074, 2063, 2056, 2064, 2059, 2065, 2060, 2061, 2062, - - 2064, 2066, 2065, 2070, 2068, 2066, 2071, 2071, 2072, 2073, - 2073, 2074, 2070, 2074, 2072, 2076, 2077, 2080, 2073, 2078, - 2078, 2079, 2082, 2083, 2087, 2084, 2080, 2087, 2088, 2085, - 2089, 2076, 2077, 2088, 2082, 2090, 2079, 2091, 2091, 2083, - 2084, 2085, 2092, 2092, 2094, 2094, 2095, 2090, 2096, 2095, - 2089, 2097, 2098, 2096, 2099, 2099, 2100, 2097, 2098, 2101, - 2101, 2102, 2103, 2104, 2105, 2105, 2106, 2107, 0, 2108, - 2100, 2110, 2106, 2102, 2108, 2110, 2103, 2111, 2112, 2112, - 2111, 2107, 2104, 2113, 2114, 2115, 2116, 2118, 2113, 2120, - 2116, 2117, 2117, 2114, 2120, 2121, 2122, 2123, 2124, 2125, - - 2118, 2126, 2124, 2127, 2128, 2115, 2126, 2129, 2131, 2127, - 2128, 2123, 2132, 2138, 2133, 2121, 2122, 2132, 2141, 2125, - 2133, 2135, 2144, 2135, 2131, 2129, 2144, 2138, 2139, 2139, - 2140, 2142, 2142, 2140, 2145, 2146, 2147, 2147, 2153, 2148, - 2145, 2151, 2151, 2155, 2141, 2156, 2159, 2146, 2148, 2160, - 2161, 2159, 2169, 2162, 2170, 2161, 2153, 2155, 2162, 2163, - 2163, 2156, 2165, 2165, 2167, 2168, 2168, 2171, 2169, 2173, - 2167, 2174, 2171, 2175, 2175, 2160, 2170, 2177, 2178, 2179, - 2180, 2182, 2182, 2174, 2178, 2183, 2177, 2184, 2173, 2186, - 2186, 2187, 2187, 2188, 2189, 2180, 2191, 2179, 2188, 2190, - - 2192, 2191, 2192, 2193, 2183, 2184, 2194, 2195, 2190, 2196, - 2197, 2198, 2189, 2204, 2196, 2239, 2198, 2193, 2239, 2195, - 2194, 2199, 2199, 2200, 2200, 2201, 2201, 2202, 2202, 2203, - 2197, 2204, 2205, 2206, 2206, 2207, 2207, 2205, 2208, 2209, - 2210, 2203, 2211, 2212, 2212, 2213, 2214, 2214, 2215, 2215, - 2208, 2209, 2216, 2217, 2218, 2219, 2220, 2221, 2211, 2222, - 2210, 2218, 2221, 2216, 2213, 2217, 2223, 2219, 2224, 2224, - 2226, 2225, 2227, 2229, 2228, 2230, 2220, 2231, 2231, 2222, - 2225, 2232, 2236, 2233, 2234, 2237, 2223, 2228, 2238, 2230, - 2232, 2240, 2227, 2243, 2243, 0, 2226, 2229, 2233, 2234, - - 2236, 2241, 2250, 2242, 2252, 2240, 2241, 2237, 2242, 2244, - 2244, 2238, 2245, 2245, 2247, 2247, 2249, 2249, 2251, 2254, - 2250, 2256, 2255, 2252, 2257, 2258, 2259, 2261, 2260, 2251, - 2260, 2262, 2263, 2267, 2258, 2264, 2264, 2266, 2266, 2254, - 2255, 2273, 2268, 2256, 2257, 2271, 2259, 2261, 2274, 2262, - 2263, 2268, 2269, 2269, 2271, 2267, 2272, 2272, 2275, 2273, - 2276, 2277, 2278, 2280, 2288, 2275, 2274, 2279, 2281, 2281, - 2282, 2282, 2283, 2284, 2285, 2276, 2286, 2289, 2283, 2277, - 2278, 2287, 2280, 2279, 2288, 2290, 2287, 2292, 2292, 2285, - 2290, 2284, 2291, 2296, 2291, 2286, 2293, 2289, 2293, 2294, - - 2294, 2298, 2299, 2300, 2301, 2303, 2302, 2304, 2307, 2311, - 2298, 2302, 2296, 2308, 2310, 2300, 2308, 2309, 2309, 2312, - 2312, 2299, 2315, 2318, 2301, 2303, 2304, 2311, 2307, 2310, - 2313, 2316, 2317, 2317, 2313, 2316, 2318, 2315, 2320, 2321, - 2322, 2322, 2324, 2325, 2326, 2327, 2327, 2328, 2326, 2329, - 2329, 2330, 2325, 2331, 2324, 2332, 2330, 2333, 2320, 2321, - 2334, 2334, 2331, 2339, 2339, 2340, 2328, 2341, 2341, 2333, - 2342, 2332, 2343, 2344, 2347, 2345, 2346, 2346, 2349, 2349, - 2354, 2352, 2344, 2342, 2345, 2343, 2352, 2340, 2353, 2347, - 2355, 2356, 2357, 2353, 2354, 2355, 2358, 2361, 2359, 2356, - - 2364, 2369, 2362, 2363, 0, 2358, 2359, 2362, 2363, 2365, - 2365, 2357, 2361, 2366, 2366, 2364, 2367, 2368, 2370, 2369, - 2371, 0, 2368, 2367, 2372, 2374, 2371, 2373, 2373, 2372, - 2375, 2376, 2376, 2377, 2377, 2375, 2370, 2380, 2381, 2381, - 2374, 2382, 2383, 2392, 2382, 2405, 2384, 2383, 2383, 2385, - 2380, 2384, 2386, 2387, 2385, 2388, 2389, 2387, 2386, 2390, - 2388, 2391, 2393, 2405, 2392, 2389, 2394, 2396, 2393, 2391, - 2395, 2398, 2394, 2401, 2390, 2395, 2398, 2399, 2403, 2396, - 2399, 2404, 2406, 2403, 2407, 2401, 2404, 2408, 2409, 2409, - 2410, 2413, 2414, 2407, 2415, 2406, 2408, 2416, 2416, 2410, - - 2417, 2419, 2418, 2420, 2420, 2421, 2423, 2425, 2427, 2427, - 2413, 2418, 2414, 2415, 2426, 2428, 2419, 2429, 2426, 2417, - 2430, 2423, 2431, 2429, 2421, 2433, 2430, 2425, 2431, 2432, - 2432, 2434, 2436, 2433, 2437, 2439, 2434, 2440, 2441, 2439, - 2428, 2436, 2443, 2443, 2444, 2444, 2448, 2437, 2445, 2445, - 2448, 2440, 2449, 2441, 2447, 2447, 2453, 2449, 2451, 2451, - 2454, 2455, 2456, 2458, 2466, 2454, 2464, 2456, 2456, 2459, - 2459, 2461, 2461, 2455, 2462, 2462, 2453, 2463, 2468, 2464, - 2463, 2472, 2466, 2458, 2469, 2469, 2470, 2470, 2471, 2471, - 2473, 2473, 2474, 2475, 2476, 2477, 2472, 2483, 2468, 2478, - - 2478, 2477, 2479, 2484, 2482, 2474, 2479, 2485, 2476, 2482, - 2482, 2475, 2486, 2487, 2488, 2490, 2490, 2489, 2486, 2487, - 2483, 2489, 2495, 2484, 2493, 2496, 2498, 2485, 2496, 2493, - 2495, 2499, 2500, 2501, 2499, 2502, 2503, 0, 2501, 2488, - 2504, 2505, 2505, 2506, 2507, 2508, 2509, 2507, 2512, 2500, - 2500, 2498, 2510, 2502, 2504, 2507, 2503, 2506, 2511, 2508, - 2510, 2513, 2513, 2511, 2511, 2509, 2518, 2512, 2514, 2514, - 2515, 2515, 2516, 2516, 2517, 2517, 2519, 2520, 2521, 2522, - 2523, 2519, 2518, 2524, 2526, 2526, 2527, 2528, 2522, 2527, - 2530, 2530, 2531, 2532, 2532, 2540, 2533, 2520, 0, 2531, - - 2523, 2533, 2536, 2524, 2521, 2528, 2535, 2535, 2537, 2538, - 2543, 2536, 2542, 2540, 2541, 2541, 2542, 2537, 2538, 2543, - 2544, 2545, 2547, 2546, 2551, 2555, 2545, 2545, 2556, 2551, - 2557, 2547, 2552, 2552, 2559, 2544, 2546, 2554, 2554, 2555, - 2560, 2563, 2564, 2559, 2565, 2568, 2570, 0, 2557, 2566, - 2616, 2564, 2560, 2556, 2572, 2566, 2573, 2568, 2616, 2572, - 2575, 2573, 2574, 2574, 2565, 2577, 2563, 2570, 2584, 2575, - 2577, 2578, 2578, 2580, 2580, 2578, 2581, 2581, 2582, 2582, - 2583, 2585, 2586, 2592, 2588, 2593, 2589, 2586, 2584, 2583, - 2588, 2589, 2590, 2591, 2591, 2595, 2596, 2590, 2594, 2597, - - 2585, 2592, 2596, 2594, 2598, 2598, 2593, 2600, 2604, 2601, - 2602, 2600, 2606, 2595, 2601, 2602, 2603, 2603, 2605, 2608, - 2608, 2610, 2611, 2614, 2597, 2612, 2615, 2604, 2613, 2612, - 2618, 2617, 2606, 2605, 2610, 2611, 2617, 2613, 2620, 2614, - 2619, 2619, 2622, 2622, 2625, 2615, 2623, 2623, 2627, 2627, - 2629, 2630, 2631, 2632, 2634, 2634, 2618, 2620, 2632, 2635, - 2636, 2637, 2639, 2639, 2640, 2625, 2629, 2630, 2631, 2641, - 2641, 2644, 2646, 2647, 2650, 2645, 2654, 2646, 2640, 2635, - 2637, 2645, 2652, 2636, 2648, 2648, 2649, 2649, 2651, 2651, - 2653, 2644, 2655, 2652, 2650, 2647, 2654, 2656, 2655, 2653, - - 2657, 2658, 2659, 2659, 2660, 2661, 2661, 2660, 2651, 2666, - 2665, 2667, 2657, 2668, 2668, 2669, 2656, 2667, 2669, 2670, - 2671, 2658, 2665, 2673, 2675, 2670, 2674, 2676, 2673, 2666, - 2677, 2674, 2680, 2676, 2678, 2678, 2681, 2682, 2671, 2683, - 2684, 2684, 2685, 2675, 2680, 2691, 2686, 2677, 2677, 2688, - 2688, 0, 2683, 2690, 2681, 2686, 2689, 2689, 2690, 2691, - 2692, 2685, 2682, 2693, 2693, 2692, 2694, 2694, 2695, 2695, - 2696, 2698, 2698, 2701, 2703, 2696, 2704, 2705, 2706, 2706, - 2708, 2708, 2710, 2709, 2711, 2712, 2712, 2715, 2714, 2716, - 2717, 0, 2701, 2711, 2714, 2717, 2703, 2709, 2704, 2705, - - 2720, 2720, 2710, 2722, 2722, 2723, 2724, 2715, 2716, 2725, - 2723, 2726, 2731, 2727, 2729, 2725, 2728, 2728, 2732, 2729, - 2724, 2727, 2733, 2726, 2734, 2735, 2737, 2733, 2738, 2739, - 2740, 2735, 2731, 2741, 2737, 2748, 2734, 2742, 2732, 2743, - 2744, 2745, 2752, 2747, 2756, 2756, 2745, 2738, 2747, 2739, - 2740, 2741, 2749, 2742, 2750, 2748, 2743, 2743, 2749, 2750, - 2753, 2744, 2752, 2757, 2757, 2758, 2762, 2762, 2768, 2758, - 2764, 2764, 2768, 2753, 2765, 2765, 2771, 2765, 2766, 2766, - 2774, 2766, 2767, 2767, 2772, 2767, 2770, 2770, 2775, 2780, - 2776, 2777, 2777, 2782, 2771, 2776, 2781, 2782, 2772, 2795, - - 2774, 2783, 2784, 2781, 2786, 2795, 2787, 2821, 2775, 2791, - 2783, 2788, 2788, 2796, 2780, 2787, 2821, 2784, 2789, 2789, - 2790, 2790, 2786, 2792, 2791, 2793, 2794, 2797, 2792, 2798, - 2799, 2794, 2794, 2801, 2793, 2799, 2800, 2793, 2796, 2802, - 2802, 2800, 2797, 2803, 2873, 2804, 2805, 2805, 2873, 2803, - 2798, 2804, 2801, 2806, 2806, 2807, 2810, 2810, 2813, 2813, - 2807, 2814, 2814, 2815, 2815, 2816, 2816, 2817, 2817, 2818, - 2818, 2819, 2819, 2822, 2822, 2823, 2824, 2825, 2829, 2827, - 2828, 2828, 2830, 2837, 2823, 2832, 2832, 2831, 2824, 2833, - 2834, 2834, 2839, 2829, 2841, 2830, 2844, 2825, 2827, 2831, - - 2838, 2837, 2844, 2838, 2833, 2840, 2840, 2843, 2845, 2846, - 2843, 2847, 2841, 2848, 2846, 2851, 2849, 2852, 2839, 2855, - 2864, 2851, 2845, 2864, 2866, 2871, 2852, 2867, 2867, 2874, - 2847, 2848, 2849, 2872, 2855, 2868, 2868, 2866, 2869, 2869, - 2875, 2877, 2872, 2881, 2878, 2879, 2882, 2882, 2871, 2874, - 2879, 2880, 2883, 2880, 2875, 2878, 2884, 2886, 2881, 2885, - 2887, 2888, 2889, 2891, 2877, 2883, 2890, 2892, 2897, 2893, - 2898, 2889, 2900, 2886, 2893, 2884, 2888, 2885, 2890, 2899, - 2899, 2900, 2897, 2905, 2891, 2887, 2906, 2892, 2901, 2901, - 2898, 2902, 2902, 2903, 2903, 2904, 2904, 2907, 2908, 2909, - - 2907, 2910, 2905, 2908, 2909, 2911, 2906, 2912, 2913, 2914, - 2915, 2916, 2918, 2912, 2919, 2915, 2917, 2917, 2920, 2920, - 2911, 2914, 2913, 2922, 2924, 2930, 2910, 2918, 2927, 2927, - 2931, 2916, 2929, 2919, 2928, 2928, 2931, 2932, 2922, 2933, - 2929, 2934, 2924, 2932, 2930, 2935, 2936, 2937, 2937, 2938, - 2938, 2936, 2940, 2933, 2934, 2941, 2943, 2944, 2946, 2949, - 2947, 2944, 2948, 2950, 2935, 2947, 2951, 2954, 2954, 2952, - 2943, 2957, 2949, 2940, 2952, 2941, 2950, 2953, 2946, 2958, - 2959, 2948, 2953, 2960, 2960, 2951, 2967, 2961, 2962, 2963, - 2963, 2957, 2961, 2964, 2962, 2965, 2966, 2958, 2964, 2959, - - 2965, 2966, 2968, 2970, 2970, 2967, 2971, 2975, 2968, 2972, - 2972, 2971, 2974, 2976, 2977, 2978, 2974, 2979, 2980, 2981, - 2976, 2983, 2983, 2979, 2985, 2985, 2975, 2986, 2988, 2989, - 2987, 2990, 2981, 2977, 2978, 2987, 2986, 2980, 2992, 2986, - 2991, 2991, 2993, 2992, 2990, 2995, 2997, 2988, 2989, 2996, - 2996, 2998, 2998, 2999, 2999, 2993, 3000, 3001, 3002, 3003, - 3003, 3000, 3004, 3009, 3001, 2997, 3005, 3004, 3005, 3006, - 3006, 2995, 3007, 3008, 3011, 3014, 3010, 3002, 3018, 3007, - 3008, 3010, 3009, 3013, 3013, 3016, 3017, 3019, 3020, 3020, - 3016, 3017, 3023, 3011, 3014, 3022, 3022, 3018, 3024, 3025, - - 3025, 3026, 3026, 3027, 3029, 3029, 3019, 3030, 3030, 3031, - 3027, 3023, 3037, 3033, 3036, 3038, 3031, 3024, 3033, 3036, - 3039, 3039, 3040, 3040, 0, 0, 0, 0, 0, 0, - 0, 3037, 0, 0, 3038, 3044, 3044, 3044, 3044, 3044, - 3044, 3044, 3045, 3045, 3045, 3045, 3045, 3045, 3045, 3046, - 3046, 3046, 3046, 3046, 3046, 3046, 3047, 3047, 3047, 3047, - 3047, 3047, 3047, 3048, 3048, 3048, 3048, 3048, 3048, 3048, - 3050, 3050, 0, 3050, 3050, 3050, 3050, 3051, 3051, 0, - 0, 0, 3051, 3051, 3052, 3052, 0, 0, 3052, 0, - 3052, 3053, 0, 0, 0, 0, 0, 3053, 3054, 3054, - - 0, 0, 0, 3054, 3054, 3055, 0, 0, 0, 0, - 0, 3055, 3056, 3056, 0, 3056, 3056, 3056, 3056, 3057, - 3057, 0, 3057, 3057, 3057, 3057, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, - 3043, 3043, 3043, 3043, 3043, 3043, 3043 + 23, 23, 21, 21, 24, 12, 21, 34, 23, 24, + 42, 21, 23, 24, 12, 23, 24, 36, 24, 24, + 21, 26, 26, 27, 27, 42, 28, 69, 34, 84, + 28, 36, 27, 28, 33, 33, 26, 32, 32, 33, + 28, 69, 28, 27, 35, 52, 32, 84, 52, 35, + 63, 63, 32, 35, 40, 33, 32, 109, 40, 35, + 37, 37, 35, 72, 109, 37, 38, 72, 40, 35, + 775, 38, 40, 40, 38, 37, 37, 80, 37, 39, + + 39, 38, 39, 41, 41, 38, 38, 77, 41, 80, + 77, 39, 41, 58, 775, 58, 58, 39, 58, 66, + 89, 66, 66, 68, 66, 68, 68, 71, 68, 71, + 71, 66, 71, 81, 74, 86, 74, 74, 71, 74, + 78, 93, 89, 85, 78, 74, 74, 82, 83, 86, + 82, 83, 85, 81, 87, 88, 90, 91, 92, 94, + 87, 93, 95, 91, 83, 96, 87, 98, 87, 1007, + 94, 94, 92, 88, 88, 90, 91, 97, 94, 99, + 95, 97, 100, 96, 99, 101, 102, 98, 101, 103, + 104, 101, 102, 107, 105, 104, 100, 105, 108, 106, + + 110, 105, 108, 111, 101, 101, 112, 107, 103, 113, + 111, 102, 114, 110, 116, 104, 115, 105, 106, 112, + 115, 118, 117, 106, 119, 119, 120, 117, 122, 113, + 114, 117, 116, 123, 121, 124, 126, 125, 121, 127, + 125, 118, 133, 122, 128, 127, 120, 121, 131, 126, + 132, 125, 151, 121, 124, 125, 128, 129, 129, 123, + 134, 130, 136, 133, 131, 138, 137, 139, 130, 132, + 135, 137, 135, 159, 136, 129, 134, 138, 129, 130, + 141, 135, 140, 143, 143, 139, 145, 140, 159, 145, + 150, 150, 182, 135, 141, 147, 182, 147, 147, 152, + + 147, 152, 152, 153, 152, 153, 153, 155, 153, 156, + 155, 157, 158, 160, 156, 153, 161, 157, 163, 164, + 165, 160, 166, 162, 167, 165, 157, 161, 160, 168, + 158, 162, 169, 167, 164, 168, 168, 163, 170, 171, + 171, 172, 166, 170, 173, 180, 173, 172, 176, 173, + 174, 175, 175, 177, 174, 178, 179, 169, 177, 174, + 178, 185, 184, 181, 174, 180, 173, 176, 179, 181, + 174, 174, 183, 186, 187, 185, 188, 183, 184, 189, + 190, 191, 191, 193, 189, 190, 187, 191, 186, 187, + 192, 194, 181, 199, 188, 192, 195, 196, 196, 191, + + 197, 191, 195, 193, 198, 200, 197, 194, 201, 202, + 198, 200, 197, 199, 201, 203, 208, 204, 205, 206, + 207, 203, 204, 201, 205, 206, 209, 207, 210, 208, + 202, 211, 209, 212, 213, 215, 214, 211, 216, 217, + 215, 218, 213, 219, 222, 220, 224, 216, 210, 214, + 220, 220, 223, 221, 217, 212, 223, 218, 221, 225, + 226, 227, 222, 219, 228, 225, 229, 227, 224, 231, + 230, 229, 230, 232, 235, 233, 234, 236, 226, 226, + 232, 233, 234, 236, 228, 237, 238, 244, 231, 239, + 239, 240, 240, 235, 245, 241, 242, 237, 247, 245, + + 238, 241, 242, 243, 246, 243, 248, 249, 250, 251, + 244, 257, 252, 250, 248, 253, 246, 247, 252, 241, + 254, 253, 243, 255, 256, 254, 257, 249, 255, 258, + 256, 259, 251, 260, 261, 262, 264, 268, 263, 264, + 266, 266, 261, 258, 263, 271, 265, 260, 265, 259, + 267, 269, 269, 267, 272, 268, 270, 270, 277, 273, + 262, 271, 273, 274, 275, 276, 285, 274, 278, 272, + 280, 276, 277, 275, 278, 279, 280, 279, 281, 282, + 282, 283, 281, 284, 286, 285, 283, 287, 288, 284, + 289, 290, 290, 291, 292, 294, 291, 293, 296, 281, + + 149, 293, 298, 289, 286, 287, 295, 295, 297, 288, + 301, 297, 292, 294, 298, 299, 296, 300, 303, 304, + 300, 299, 301, 307, 315, 305, 307, 303, 297, 302, + 305, 306, 308, 315, 306, 148, 306, 304, 302, 309, + 310, 302, 310, 310, 313, 308, 302, 302, 302, 302, + 311, 309, 306, 314, 312, 311, 311, 312, 316, 317, + 317, 313, 319, 319, 313, 318, 320, 316, 314, 321, + 318, 322, 323, 324, 321, 325, 326, 327, 327, 329, + 327, 320, 326, 322, 335, 338, 338, 330, 331, 327, + 325, 323, 330, 324, 331, 332, 333, 146, 335, 329, + + 332, 333, 336, 334, 337, 336, 334, 333, 334, 339, + 340, 340, 341, 337, 344, 339, 342, 341, 336, 342, + 346, 336, 345, 336, 144, 342, 348, 347, 350, 342, + 351, 350, 357, 353, 344, 346, 354, 342, 343, 343, + 348, 343, 347, 345, 351, 354, 355, 350, 353, 356, + 358, 355, 355, 357, 343, 356, 359, 343, 360, 343, + 361, 343, 352, 363, 352, 352, 362, 360, 364, 358, + 365, 359, 362, 367, 352, 368, 352, 352, 352, 361, + 366, 352, 369, 370, 365, 372, 366, 371, 364, 363, + 366, 373, 371, 374, 374, 368, 367, 373, 370, 375, + + 372, 376, 369, 377, 378, 379, 380, 381, 382, 382, + 378, 382, 381, 376, 383, 384, 385, 377, 387, 375, + 387, 386, 380, 388, 389, 390, 390, 388, 389, 391, + 379, 384, 385, 393, 383, 386, 392, 394, 387, 395, + 397, 396, 399, 389, 403, 398, 397, 399, 391, 393, + 396, 392, 400, 395, 398, 394, 400, 401, 402, 407, + 142, 396, 404, 396, 402, 403, 401, 405, 404, 406, + 409, 405, 408, 408, 406, 410, 410, 411, 412, 407, + 413, 413, 411, 409, 414, 415, 416, 417, 418, 415, + 414, 412, 419, 418, 420, 420, 422, 419, 421, 423, + + 424, 416, 425, 420, 429, 425, 427, 426, 417, 429, + 421, 426, 424, 428, 428, 430, 422, 423, 427, 431, + 431, 432, 434, 434, 435, 436, 437, 438, 439, 442, + 441, 444, 443, 436, 447, 437, 430, 444, 446, 447, + 439, 448, 445, 432, 446, 435, 443, 438, 441, 442, + 441, 445, 449, 450, 451, 448, 450, 452, 453, 454, + 449, 456, 455, 449, 453, 455, 457, 456, 451, 458, + 459, 461, 452, 460, 458, 461, 462, 464, 463, 454, + 457, 462, 464, 465, 466, 456, 470, 467, 473, 485, + 508, 472, 459, 463, 460, 472, 471, 474, 475, 465, + + 467, 70, 475, 466, 468, 468, 470, 473, 508, 485, + 468, 471, 468, 474, 477, 479, 476, 478, 468, 480, + 468, 476, 478, 468, 468, 476, 481, 482, 480, 477, + 468, 479, 481, 483, 484, 487, 483, 481, 486, 486, + 488, 488, 490, 482, 489, 492, 491, 493, 494, 495, + 497, 496, 518, 494, 490, 518, 498, 484, 495, 489, + 487, 491, 498, 500, 492, 497, 503, 501, 502, 493, + 496, 501, 500, 504, 502, 505, 506, 507, 503, 509, + 510, 512, 511, 509, 511, 513, 513, 515, 504, 512, + 506, 514, 507, 510, 505, 516, 517, 514, 519, 515, + + 520, 516, 521, 522, 523, 524, 522, 521, 517, 526, + 64, 525, 519, 523, 533, 520, 525, 525, 527, 527, + 523, 524, 526, 523, 528, 528, 529, 530, 530, 531, + 531, 532, 529, 534, 535, 533, 534, 532, 536, 535, + 537, 538, 539, 540, 538, 541, 542, 539, 537, 543, + 542, 545, 544, 546, 547, 543, 544, 536, 546, 548, + 550, 549, 551, 553, 541, 550, 540, 549, 555, 545, + 547, 558, 552, 554, 554, 552, 551, 556, 557, 548, + 552, 553, 556, 557, 552, 558, 555, 559, 561, 562, + 563, 564, 565, 563, 561, 564, 566, 565, 562, 566, + + 567, 570, 559, 568, 569, 567, 572, 571, 570, 573, + 577, 572, 574, 574, 575, 576, 578, 564, 579, 568, + 571, 580, 569, 575, 586, 578, 577, 580, 59, 573, + 579, 581, 582, 584, 576, 582, 584, 581, 583, 583, + 585, 583, 586, 587, 588, 585, 589, 590, 596, 591, + 588, 589, 591, 590, 592, 593, 594, 587, 595, 592, + 593, 593, 598, 599, 597, 601, 54, 596, 596, 594, + 597, 595, 599, 600, 602, 602, 603, 604, 600, 606, + 604, 598, 605, 603, 607, 601, 610, 608, 605, 607, + 612, 606, 608, 608, 614, 604, 609, 609, 611, 613, + + 611, 613, 615, 616, 617, 618, 620, 619, 621, 612, + 620, 610, 614, 619, 622, 623, 624, 621, 625, 626, + 615, 616, 628, 617, 627, 618, 629, 631, 628, 622, + 623, 626, 630, 632, 624, 634, 636, 625, 633, 627, + 629, 635, 633, 637, 630, 638, 631, 640, 640, 639, + 642, 641, 632, 634, 636, 641, 643, 635, 644, 646, + 645, 637, 637, 639, 638, 645, 647, 643, 648, 642, + 649, 650, 644, 651, 652, 646, 650, 649, 653, 652, + 651, 648, 654, 653, 655, 647, 656, 657, 658, 660, + 659, 655, 663, 661, 660, 656, 661, 658, 664, 662, + + 654, 657, 659, 662, 665, 667, 663, 664, 666, 668, + 668, 669, 669, 670, 670, 671, 673, 674, 675, 665, + 669, 676, 666, 674, 671, 676, 667, 677, 678, 679, + 680, 683, 681, 684, 682, 673, 680, 685, 675, 677, + 681, 682, 694, 706, 691, 688, 695, 679, 706, 683, + 696, 694, 695, 678, 698, 698, 701, 685, 684, 686, + 688, 691, 700, 697, 686, 703, 696, 697, 686, 699, + 699, 686, 702, 700, 701, 707, 704, 708, 686, 686, + 53, 686, 704, 709, 710, 703, 702, 705, 705, 705, + 711, 705, 715, 711, 705, 708, 707, 713, 709, 705, + + 712, 712, 714, 714, 713, 705, 705, 715, 717, 710, + 716, 716, 718, 717, 719, 718, 720, 721, 720, 719, + 722, 723, 724, 726, 725, 723, 727, 727, 732, 721, + 728, 726, 729, 730, 730, 731, 733, 789, 734, 722, + 732, 789, 724, 725, 734, 728, 729, 735, 736, 736, + 737, 740, 735, 731, 739, 737, 737, 740, 733, 739, + 741, 744, 742, 743, 744, 745, 741, 742, 746, 743, + 749, 745, 747, 747, 748, 748, 746, 750, 749, 751, + 752, 753, 754, 754, 751, 755, 757, 752, 756, 758, + 760, 767, 757, 761, 755, 750, 756, 763, 762, 760, + + 753, 764, 761, 762, 764, 765, 763, 766, 758, 768, + 765, 769, 771, 771, 770, 772, 767, 773, 768, 770, + 770, 766, 774, 776, 769, 778, 776, 778, 779, 779, + 772, 774, 780, 781, 776, 782, 773, 783, 781, 784, + 785, 786, 787, 788, 792, 790, 791, 48, 794, 793, + 792, 787, 795, 780, 796, 798, 782, 783, 793, 784, + 794, 786, 785, 790, 797, 791, 788, 799, 796, 798, + 797, 795, 799, 800, 800, 801, 802, 803, 804, 805, + 806, 807, 809, 808, 810, 802, 804, 811, 809, 812, + 813, 816, 819, 811, 817, 801, 813, 803, 810, 805, + + 807, 814, 806, 808, 815, 823, 817, 814, 815, 812, + 816, 818, 824, 819, 817, 821, 818, 820, 820, 822, + 825, 821, 822, 823, 826, 824, 825, 827, 827, 828, + 829, 830, 830, 831, 832, 829, 833, 833, 832, 834, + 835, 836, 839, 837, 826, 840, 836, 828, 831, 842, + 843, 845, 845, 846, 849, 847, 896, 846, 851, 840, + 835, 834, 837, 848, 848, 896, 839, 43, 852, 842, + 847, 843, 844, 851, 850, 844, 854, 844, 850, 849, + 853, 844, 852, 844, 856, 853, 855, 858, 844, 859, + 854, 855, 855, 844, 859, 857, 860, 863, 856, 857, + + 861, 862, 858, 864, 859, 861, 865, 866, 860, 869, + 867, 857, 865, 866, 869, 862, 867, 864, 863, 868, + 868, 870, 871, 872, 875, 873, 876, 870, 878, 879, + 879, 876, 880, 877, 882, 883, 875, 880, 884, 892, + 878, 881, 872, 873, 871, 874, 874, 877, 882, 881, + 885, 874, 892, 874, 883, 886, 886, 884, 887, 874, + 889, 891, 887, 893, 874, 874, 889, 890, 885, 893, + 890, 874, 894, 895, 897, 898, 899, 894, 900, 901, + 891, 902, 899, 897, 903, 904, 902, 900, 905, 906, + 909, 898, 895, 907, 908, 910, 909, 913, 901, 904, + + 911, 906, 907, 908, 903, 915, 911, 916, 905, 917, + 918, 919, 910, 913, 928, 920, 921, 922, 925, 915, + 928, 921, 922, 925, 918, 926, 929, 916, 917, 919, + 920, 927, 927, 931, 926, 932, 935, 936, 937, 929, + 932, 932, 933, 933, 934, 938, 933, 934, 939, 931, + 935, 941, 943, 940, 942, 945, 937, 936, 938, 940, + 942, 944, 947, 939, 948, 947, 944, 943, 949, 945, + 950, 941, 951, 949, 952, 950, 953, 954, 956, 952, + 957, 953, 960, 960, 956, 948, 958, 959, 951, 954, + 961, 962, 958, 959, 963, 965, 957, 963, 966, 961, + + 964, 964, 967, 968, 970, 969, 968, 972, 971, 962, + 970, 973, 972, 965, 971, 974, 973, 966, 969, 975, + 974, 977, 967, 978, 979, 975, 980, 981, 981, 982, + 979, 980, 983, 984, 985, 987, 988, 985, 982, 977, + 989, 983, 986, 978, 990, 986, 987, 991, 996, 992, + 993, 984, 989, 991, 988, 992, 994, 995, 995, 997, + 998, 994, 999, 990, 1000, 993, 999, 996, 1001, 1002, + 1003, 1005, 998, 997, 1006, 1006, 1009, 1001, 1008, 1011, + 1012, 1010, 1000, 1014, 1011, 1013, 1013, 14, 1002, 1012, + 1005, 1009, 1008, 1010, 1015, 1003, 1016, 1020, 1021, 1017, + + 1015, 1019, 1016, 1014, 1017, 1018, 1019, 1018, 1022, 1023, + 1024, 1020, 1021, 1022, 1025, 1026, 1027, 1029, 1029, 1030, + 1031, 1025, 1032, 1034, 1023, 1033, 1037, 1037, 1041, 1024, + 1026, 1033, 1043, 1030, 1035, 1027, 1038, 1032, 1031, 1035, + 1040, 1038, 1041, 1034, 1039, 1039, 1042, 1040, 1035, 1042, + 1035, 1043, 1044, 1035, 1045, 1046, 1047, 1048, 1049, 1050, + 1046, 1053, 1048, 1045, 1052, 1052, 1053, 1054, 1055, 1049, + 1044, 1056, 1054, 1057, 1058, 1047, 1056, 1057, 1050, 1059, + 1060, 1061, 1063, 1058, 1062, 1064, 1065, 1066, 1055, 1067, + 1068, 1071, 1064, 1069, 1059, 1060, 1062, 1063, 1065, 1069, + + 1061, 1070, 1072, 1073, 1074, 1077, 1066, 1076, 1068, 1078, + 1067, 1071, 1073, 1076, 1079, 1080, 1070, 1078, 1081, 1077, + 1080, 1082, 1072, 1083, 1074, 1084, 1082, 1082, 1085, 1089, + 1081, 1086, 1086, 1088, 1079, 1091, 1091, 13, 1089, 1084, + 1092, 1085, 1083, 1087, 1090, 1092, 1088, 1094, 1087, 1093, + 1090, 1087, 1087, 1094, 1095, 1096, 1087, 1098, 1093, 1095, + 1096, 1101, 1087, 1097, 1097, 1102, 1087, 1099, 1099, 1100, + 1103, 1104, 1100, 1106, 1100, 1105, 1107, 0, 1098, 1103, + 1105, 1101, 1108, 1102, 1109, 1111, 1112, 1106, 1108, 1111, + 1109, 1104, 1110, 1122, 1107, 1112, 1118, 1110, 1113, 1113, + + 1112, 1115, 1112, 1119, 1112, 1117, 1112, 1114, 1114, 1117, + 1114, 1118, 1115, 1120, 1121, 1122, 1124, 1125, 1123, 1121, + 1121, 1119, 1120, 1123, 1126, 1127, 1125, 1128, 1129, 1131, + 1124, 1130, 1130, 1132, 1129, 1133, 1134, 1131, 1136, 1135, + 1133, 1128, 1137, 1126, 1127, 1140, 1138, 1132, 1135, 1149, + 1134, 1138, 1139, 1139, 1141, 1141, 1136, 1142, 1144, 1142, + 1140, 1144, 1146, 1145, 1147, 1148, 1148, 1137, 1145, 1149, + 1150, 1150, 1152, 1147, 1151, 1151, 1153, 1152, 1154, 1155, + 1155, 1146, 1156, 1157, 1158, 1159, 1157, 1160, 1162, 1161, + 1159, 1161, 1164, 1165, 0, 1164, 1160, 1153, 1166, 1154, + + 1167, 1168, 1156, 1166, 1158, 1167, 1162, 1169, 1165, 1168, + 1170, 1172, 1169, 1171, 1171, 1170, 1172, 1173, 1174, 1175, + 1176, 1178, 1179, 1181, 1174, 1180, 1175, 1178, 1179, 1181, + 1180, 1182, 1183, 1176, 1184, 1173, 1185, 1185, 1186, 1188, + 1182, 1189, 1190, 1191, 1192, 1184, 1194, 1195, 1190, 1191, + 1192, 1183, 1194, 1196, 1197, 1198, 1199, 1201, 1186, 1188, + 1202, 1195, 1200, 1200, 1189, 1203, 1197, 1195, 1206, 1198, + 1204, 1205, 1205, 1196, 1199, 1204, 1207, 1201, 1209, 0, + 1211, 1207, 1210, 1203, 1212, 1202, 1213, 1210, 1210, 1214, + 1215, 1206, 1216, 1212, 1213, 1219, 1217, 1209, 1211, 1225, + + 1218, 1217, 1218, 1214, 1217, 1215, 1221, 1216, 1223, 1219, + 1216, 1222, 1221, 1226, 1227, 1222, 1224, 1229, 1225, 1223, + 1228, 1224, 1224, 1230, 1231, 1228, 1233, 1234, 1230, 1235, + 1236, 1236, 1227, 1237, 1238, 1229, 1239, 1237, 1241, 1226, + 1233, 1242, 1240, 1243, 1231, 1234, 1244, 1235, 1240, 1245, + 1241, 1246, 1238, 1247, 1249, 1239, 1248, 1243, 1247, 1249, + 1242, 1244, 1250, 1248, 1245, 1251, 1252, 1252, 1253, 1255, + 1246, 1254, 1254, 1256, 1251, 1255, 1257, 1266, 1258, 1259, + 1250, 1257, 0, 1253, 1258, 1259, 1260, 1260, 1261, 1261, + 1263, 1263, 1264, 1265, 1256, 1266, 1264, 1267, 1268, 1269, + + 1270, 1270, 1265, 1271, 1272, 1273, 1269, 1274, 1275, 1276, + 1273, 1267, 1272, 1268, 1276, 1276, 1278, 1279, 1279, 1277, + 1280, 1274, 1281, 1271, 1277, 1277, 1282, 1275, 1283, 1284, + 1285, 1286, 1287, 1283, 1289, 1282, 1278, 1288, 1287, 1280, + 1290, 1281, 1288, 1291, 1294, 1292, 1290, 1293, 1284, 1286, + 1285, 1292, 1295, 1293, 1296, 1297, 1298, 1299, 1301, 1301, + 1289, 1300, 1291, 1294, 1302, 1303, 1309, 1302, 1304, 1304, + 1298, 1295, 1308, 1296, 1297, 1309, 1300, 1303, 1299, 1305, + 1305, 1306, 1310, 1307, 1313, 1308, 1306, 1307, 1311, 1313, + 1311, 1314, 1315, 1316, 1311, 1310, 1317, 1317, 1318, 1319, + + 1320, 1321, 1325, 1318, 1327, 1319, 1314, 1311, 1322, 1316, + 1326, 1331, 1315, 1322, 1321, 1320, 1323, 1324, 1333, 1328, + 1323, 1324, 1325, 1337, 1327, 1328, 1329, 1329, 1326, 1331, + 1334, 1335, 1335, 1343, 1336, 1334, 1339, 1339, 1341, 1333, + 1336, 1341, 1344, 1337, 1342, 1342, 1347, 1346, 1348, 1343, + 1346, 1349, 1349, 1350, 1351, 1352, 1353, 1348, 1344, 1354, + 1356, 1353, 1355, 1355, 1357, 1358, 1347, 1360, 1350, 1359, + 1359, 1361, 1362, 1354, 1352, 1351, 1363, 1362, 1356, 1357, + 1365, 1360, 1364, 1364, 1365, 1366, 1367, 1367, 1368, 1361, + 1358, 1363, 1369, 1370, 1371, 1372, 1375, 1370, 1374, 1374, + + 1372, 1376, 1377, 1369, 1378, 1366, 1379, 1380, 1380, 1382, + 1368, 1381, 1383, 1371, 1375, 1376, 1381, 1384, 1378, 1385, + 1386, 1377, 1377, 1387, 1385, 1387, 1384, 1390, 1388, 1382, + 1389, 1379, 1383, 1388, 1393, 1391, 1389, 1394, 1394, 1395, + 1386, 1391, 1399, 1396, 1403, 1398, 1402, 1390, 1393, 1396, + 1398, 1400, 1400, 1401, 1401, 1404, 1405, 1407, 1395, 1405, + 1402, 1408, 1403, 1406, 1406, 1409, 1399, 1410, 1409, 1407, + 1404, 1409, 1411, 1410, 1415, 1412, 1414, 1411, 1412, 1415, + 1416, 1408, 1418, 1409, 1417, 1414, 1419, 1417, 1418, 1420, + 1420, 1419, 1421, 1421, 1412, 1422, 1424, 1423, 1425, 1426, + + 1427, 1422, 1423, 1428, 1429, 1416, 1428, 1430, 1432, 1424, + 1429, 1433, 1431, 1430, 1432, 1437, 1425, 1431, 1426, 1434, + 1427, 1435, 1435, 1436, 1434, 1438, 1439, 1440, 1436, 1441, + 1443, 1444, 1445, 1437, 1433, 1446, 1447, 1448, 1445, 1449, + 1457, 1440, 1443, 1441, 1444, 1438, 1439, 1451, 1451, 1452, + 1455, 1448, 1453, 1454, 1454, 1446, 1447, 1453, 1456, 1458, + 1449, 1459, 1462, 1460, 1457, 1455, 1461, 1463, 1467, 1452, + 1459, 1462, 1456, 1461, 1462, 1465, 1468, 1458, 1460, 1468, + 1469, 1469, 1471, 1463, 1470, 1470, 1472, 1475, 1473, 1476, + 1465, 1473, 1479, 1467, 1471, 1465, 1474, 1474, 1477, 1480, + + 1475, 1478, 1482, 1477, 1472, 1481, 1478, 1483, 1476, 1484, + 1487, 1479, 1486, 1486, 1481, 1480, 1483, 1485, 1484, 1483, + 1488, 1482, 1489, 1485, 1490, 1491, 1495, 1492, 1496, 1498, + 1487, 1497, 1497, 1488, 1499, 1501, 1501, 1500, 1490, 1492, + 1489, 1491, 1500, 1499, 1502, 1498, 1496, 1503, 1504, 1505, + 1501, 1495, 1506, 1502, 1508, 1509, 1502, 1506, 1506, 1510, + 1513, 1511, 1514, 1514, 1520, 1503, 1511, 1505, 1508, 1504, + 1509, 1512, 1521, 1515, 1523, 1516, 1517, 1512, 1513, 1515, + 1516, 1510, 1517, 1518, 1520, 1522, 1521, 1523, 1525, 1518, + 1524, 1522, 1527, 1524, 1525, 1529, 1530, 1531, 1532, 1524, + + 1527, 1537, 1537, 1533, 1534, 1531, 1535, 1532, 1536, 1541, + 1542, 1540, 1538, 1539, 1529, 1530, 1533, 1534, 1538, 1539, + 1535, 1543, 1536, 1537, 1540, 1544, 1545, 1546, 1542, 1541, + 1547, 0, 1545, 1548, 1550, 1550, 1551, 1552, 1544, 1553, + 1543, 1552, 1554, 1555, 1553, 1556, 1547, 1554, 1555, 1546, + 1557, 1548, 1559, 1561, 1556, 1563, 1551, 1560, 1560, 1562, + 1564, 1564, 1565, 1566, 1569, 1567, 1568, 1559, 1570, 1571, + 1566, 1562, 1561, 1557, 1563, 1571, 1565, 1567, 1568, 1572, + 1573, 1574, 0, 1569, 1575, 1575, 1576, 1574, 1570, 1576, + 1579, 1572, 1577, 1577, 1580, 1579, 1581, 1583, 1573, 1582, + + 1582, 1586, 1581, 1580, 1584, 1585, 1584, 1587, 1585, 1583, + 1588, 1590, 1589, 1591, 1592, 1594, 1590, 1593, 1595, 1596, + 1594, 1586, 1591, 1600, 1600, 1602, 1592, 1595, 1588, 1587, + 1589, 1597, 1593, 1598, 1599, 1601, 1597, 1603, 1598, 1596, + 1595, 1601, 1604, 1597, 1605, 1606, 1602, 1606, 1611, 1599, + 1614, 1607, 1608, 1608, 1609, 1609, 1603, 1615, 1604, 1610, + 1610, 1612, 1612, 1619, 1605, 1607, 1619, 1607, 1611, 1613, + 1613, 1614, 1616, 1616, 1618, 1617, 1621, 1622, 1615, 1617, + 1618, 1623, 1621, 1624, 1629, 1625, 1630, 1623, 1625, 1626, + 1626, 1627, 1627, 1628, 1631, 1622, 1629, 1629, 1629, 1628, + + 1633, 1632, 1636, 1629, 1635, 1642, 1630, 1632, 1624, 1635, + 1635, 1637, 1638, 1637, 1631, 1639, 1636, 1641, 1640, 1643, + 1633, 1644, 1644, 1638, 1640, 1642, 1641, 1645, 1646, 1646, + 1639, 1647, 1648, 1649, 1649, 1650, 1650, 1651, 1654, 1654, + 1643, 1655, 1659, 1656, 1660, 1663, 1658, 1661, 1661, 1662, + 1660, 1647, 1656, 1645, 1648, 1658, 1666, 1651, 1664, 1665, + 1663, 1667, 1667, 1659, 1668, 1664, 1655, 1669, 1665, 1671, + 1662, 1672, 1673, 1674, 1671, 1675, 1681, 1672, 1676, 1680, + 1674, 1675, 1666, 1669, 1676, 1677, 1677, 1679, 1678, 1682, + 1668, 1683, 1673, 1678, 1683, 1681, 1679, 1684, 1685, 1680, + + 1687, 1682, 1686, 1686, 1689, 1688, 1687, 1690, 1692, 1693, + 1696, 1690, 1694, 1695, 1695, 1684, 1699, 1694, 1697, 1689, + 1703, 1703, 1700, 1702, 1685, 1688, 1700, 1690, 1692, 1696, + 1701, 1693, 1702, 1697, 1704, 1699, 1701, 1705, 1704, 1706, + 1706, 1707, 1708, 1713, 1709, 1710, 1711, 1712, 1705, 1713, + 1710, 1718, 1715, 1705, 1714, 1718, 1708, 1715, 1716, 1716, + 1717, 1717, 1707, 1709, 1720, 1721, 1711, 1712, 1722, 1714, + 1723, 1723, 1725, 1720, 1724, 1724, 1721, 1725, 1725, 1726, + 1727, 1721, 1728, 1730, 1729, 1726, 1727, 1731, 1722, 1729, + 1733, 1735, 1734, 1731, 1736, 1730, 1734, 1740, 1737, 1738, + + 1739, 1742, 1733, 1735, 1737, 1743, 1739, 1744, 1728, 1740, + 1750, 1746, 1744, 1742, 1746, 1747, 1747, 1748, 1748, 1736, + 1751, 1738, 1749, 1749, 1743, 1752, 1751, 1753, 1754, 1755, + 1750, 1752, 1753, 1759, 1754, 1757, 1759, 1760, 1755, 1763, + 1757, 1761, 1761, 1764, 1767, 1765, 1766, 1766, 1771, 1760, + 1765, 1763, 1768, 1767, 1769, 1764, 1772, 1768, 1773, 1769, + 1770, 1770, 1774, 1775, 1776, 1772, 1777, 1775, 1771, 1776, + 1778, 1779, 1777, 1780, 1784, 1781, 1773, 1785, 1783, 1783, + 1779, 1774, 1786, 1786, 1787, 1788, 1785, 1789, 1778, 1781, + 1783, 1780, 1784, 1787, 1790, 1796, 1791, 1788, 1796, 1790, + + 1794, 1794, 1797, 1798, 1802, 1800, 1803, 1801, 1789, 1791, + 1802, 1804, 1804, 1805, 1807, 1805, 1806, 1806, 1797, 1798, + 1800, 1801, 1807, 1803, 1809, 1810, 1811, 1811, 1812, 1813, + 1814, 1809, 1815, 1817, 1816, 1819, 1818, 1812, 1821, 1824, + 1822, 1819, 1814, 1825, 1815, 1810, 1816, 1823, 1823, 1828, + 1813, 1818, 1822, 1826, 1819, 1827, 1826, 1824, 1821, 1817, + 1827, 1830, 1831, 1825, 1831, 1832, 1830, 1833, 1834, 1828, + 1836, 1838, 1833, 1839, 1840, 1834, 1841, 1842, 1841, 1836, + 1845, 1847, 1839, 1832, 1852, 1844, 1840, 1844, 1848, 1838, + 1846, 1846, 1853, 1848, 1845, 1849, 1842, 1849, 1850, 1851, + + 1854, 1856, 1852, 1850, 1851, 1855, 1854, 1847, 1857, 1859, + 1855, 1860, 1853, 1864, 1856, 1863, 1857, 1861, 1861, 1862, + 1862, 1865, 0, 1868, 1866, 1860, 1870, 1865, 1859, 1866, + 1863, 1868, 1867, 1864, 1867, 1869, 1869, 1873, 1870, 1868, + 1871, 1871, 1872, 1872, 1874, 1875, 1873, 1877, 1878, 1874, + 1878, 1879, 1880, 1881, 1882, 1884, 1877, 1880, 1880, 1877, + 1885, 1888, 1881, 1875, 1886, 1885, 1882, 1884, 1889, 1886, + 1890, 1892, 1879, 1893, 1888, 1891, 1891, 1894, 1895, 1890, + 1896, 1900, 1898, 1912, 1899, 1901, 1909, 0, 1889, 1892, + 1901, 1893, 1895, 1894, 1898, 1896, 1899, 1902, 1903, 1906, + + 1908, 1900, 1902, 1911, 1910, 1906, 1908, 1903, 1912, 1909, + 1917, 1913, 1914, 1914, 1915, 1916, 1916, 0, 1906, 1910, + 1913, 1911, 1918, 1915, 1920, 1919, 1918, 1921, 1922, 1917, + 1919, 1926, 1921, 1921, 1922, 1923, 1924, 1920, 1925, 1924, + 1931, 1923, 1929, 1929, 1930, 1930, 1925, 1932, 1932, 1931, + 1934, 1926, 1933, 1933, 1935, 1936, 1938, 1938, 1937, 1930, + 1944, 1936, 1934, 1937, 1939, 1939, 1940, 1941, 1947, 1949, + 1930, 1940, 1935, 1941, 1943, 1945, 1948, 1952, 1943, 1945, + 1944, 1948, 1950, 1951, 1953, 1954, 1955, 1956, 1951, 1957, + 1957, 1955, 1949, 1947, 1958, 1952, 1959, 1950, 1958, 1960, + + 1953, 1961, 1962, 1963, 1960, 1954, 1965, 1964, 1966, 1956, + 1969, 1959, 1964, 1970, 1962, 1967, 1967, 1971, 1969, 1965, + 1972, 1973, 1963, 1974, 1979, 1975, 1966, 1961, 1976, 1977, + 1980, 1980, 1970, 1983, 1981, 1982, 1971, 1981, 1984, 1979, + 1976, 0, 1974, 1972, 1988, 1973, 1975, 1983, 1982, 1989, + 1977, 1984, 1985, 1985, 1986, 1986, 1987, 1987, 1991, 1988, + 1990, 1990, 1989, 1992, 1992, 1996, 1993, 1991, 1995, 1997, + 1991, 1993, 1998, 1995, 1999, 1999, 2000, 2000, 2001, 2002, + 2002, 2003, 2004, 2004, 1998, 1996, 2005, 2006, 2009, 1997, + 2007, 2007, 2006, 2008, 2008, 2010, 2011, 2001, 2012, 2003, + + 2014, 2005, 2009, 2016, 2010, 2014, 2015, 2015, 2017, 2017, + 2011, 2018, 2019, 2020, 2021, 2021, 2020, 2012, 2019, 2022, + 2022, 2023, 2016, 2024, 2025, 2026, 2026, 2028, 2029, 2018, + 2021, 2030, 2031, 2032, 2032, 2033, 2031, 2034, 2024, 2038, + 2023, 2035, 2039, 2025, 2037, 2037, 2030, 2028, 2040, 2039, + 2041, 2029, 2034, 2042, 2033, 2043, 2035, 2044, 2044, 2038, + 2045, 2046, 2040, 2046, 2047, 2049, 2052, 2047, 2041, 2045, + 2050, 2042, 2053, 2051, 2054, 2050, 2056, 2049, 2051, 2062, + 2066, 2043, 2047, 2055, 2047, 2053, 2060, 2058, 2055, 2059, + 2061, 2052, 2058, 2063, 2059, 2054, 2061, 2067, 2064, 2063, + + 2062, 2060, 2056, 2064, 2065, 2066, 2069, 2070, 2068, 2065, + 2067, 2068, 2071, 2072, 2073, 2069, 2070, 2074, 2075, 2078, + 2084, 2071, 2072, 2074, 2075, 2076, 2080, 2082, 2073, 2076, + 2081, 2081, 2086, 2082, 2087, 2080, 2083, 2083, 2089, 2078, + 2084, 2093, 2084, 2088, 2088, 2083, 2090, 2092, 2086, 2094, + 2087, 2095, 2099, 2089, 2100, 2090, 2107, 2093, 2097, 2092, + 2098, 2097, 2107, 2095, 2094, 2098, 2100, 2101, 2101, 2102, + 2102, 2106, 2099, 2104, 2104, 2105, 2106, 2108, 2105, 2109, + 2109, 2110, 2112, 2108, 2111, 2111, 2113, 2114, 2115, 2115, + 2116, 2117, 2118, 2125, 2112, 2110, 2116, 2118, 2120, 0, + + 2113, 2121, 2120, 2124, 2121, 2117, 2114, 2122, 2122, 2123, + 2128, 2126, 2124, 2125, 2123, 2126, 2127, 2127, 2131, 2130, + 2132, 2133, 2134, 2128, 2130, 2135, 2134, 2136, 2137, 2139, + 2138, 2144, 2136, 2141, 2137, 2133, 2138, 2142, 2131, 2144, + 2132, 2145, 2142, 2145, 2143, 2135, 2148, 2139, 2151, 2141, + 2143, 2149, 2149, 2150, 2152, 2152, 2150, 2154, 2155, 2156, + 2148, 2154, 2157, 2157, 2155, 2163, 2158, 2161, 2161, 2166, + 2165, 2156, 2169, 2170, 2151, 2158, 2171, 2169, 2173, 2173, + 2177, 2171, 2172, 2163, 2165, 2166, 2177, 2172, 2175, 2175, + 2178, 2178, 2179, 2180, 2183, 2181, 2187, 2184, 2188, 2170, + + 2181, 2185, 2185, 2189, 2188, 2187, 2193, 2190, 2179, 2184, + 2192, 2192, 2194, 2183, 2199, 2180, 2196, 2196, 2197, 2197, + 2200, 2189, 2190, 2198, 2203, 2193, 2201, 2204, 2198, 2200, + 2194, 2201, 2199, 2202, 2205, 2202, 2207, 2206, 2203, 2208, + 2214, 2204, 2206, 2213, 2208, 0, 2205, 2209, 2209, 2210, + 2210, 2211, 2211, 2212, 2212, 2213, 2207, 2215, 2214, 2216, + 2216, 2218, 2215, 2217, 2217, 2219, 2220, 2221, 2222, 2222, + 2223, 2224, 2224, 2218, 2225, 2225, 2226, 2219, 2227, 2229, + 2230, 2228, 2232, 2221, 2233, 2236, 2220, 2226, 2228, 2223, + 2227, 2229, 2231, 2234, 2234, 2237, 2235, 2231, 2239, 2238, + + 2230, 2242, 2232, 2240, 2233, 2235, 2241, 2241, 2243, 2244, + 2242, 2236, 2238, 2246, 2247, 2237, 2248, 2240, 2249, 2250, + 2251, 2249, 2239, 2243, 2244, 2251, 2260, 2252, 2253, 2253, + 2262, 2246, 2252, 2250, 2254, 2254, 2247, 2255, 2255, 2248, + 2257, 2257, 2259, 2259, 2260, 2261, 2264, 2265, 2266, 2262, + 2268, 2267, 2269, 2270, 2271, 2270, 2261, 2272, 2273, 2268, + 2274, 2274, 2276, 2276, 2277, 2265, 2264, 2283, 2278, 2284, + 2266, 2267, 2269, 2281, 2271, 2272, 2273, 2278, 2279, 2279, + 2282, 2282, 2281, 2285, 2286, 2283, 2277, 2284, 2287, 2288, + 2285, 2290, 2289, 2291, 2291, 2292, 2292, 2293, 2294, 2286, + + 2295, 2296, 2298, 2293, 2297, 2299, 2287, 2288, 2289, 2297, + 2290, 2301, 2300, 2301, 2306, 2295, 2294, 2300, 2302, 2302, + 2296, 2303, 2298, 2303, 2309, 2299, 2304, 2304, 2308, 2310, + 2311, 2312, 2313, 2306, 2314, 2317, 2312, 2308, 2321, 2318, + 2330, 2310, 2318, 2309, 2319, 2319, 2320, 2322, 2322, 2325, + 2311, 2331, 2313, 2314, 2323, 2317, 2321, 2328, 2323, 2326, + 2330, 2320, 2334, 2326, 2325, 2327, 2327, 2332, 2332, 2335, + 2328, 2331, 2336, 2338, 2334, 2341, 2336, 2342, 2335, 2337, + 2337, 2339, 2339, 2340, 2341, 2343, 2344, 2344, 2340, 2349, + 2349, 2350, 2338, 2342, 2351, 2351, 2352, 2343, 2353, 2354, + + 2357, 2355, 2356, 2356, 2359, 2359, 2364, 2362, 2354, 2352, + 2355, 2353, 2362, 2350, 2363, 2357, 2365, 2366, 2367, 2363, + 2364, 2365, 2368, 2371, 2369, 2366, 2374, 2379, 2372, 2373, + 0, 2368, 2369, 2372, 2373, 2375, 2375, 2367, 2371, 2376, + 2376, 2374, 2377, 2378, 2380, 2379, 2381, 0, 2378, 2377, + 2382, 2384, 2381, 2383, 2383, 2382, 2385, 2386, 2386, 2387, + 2387, 2385, 2380, 2390, 2391, 2391, 2384, 2392, 2393, 2402, + 2392, 2415, 2394, 2393, 2393, 2395, 2390, 2394, 2396, 2397, + 2395, 2398, 2399, 2397, 2396, 2400, 2398, 2401, 2403, 2415, + 2402, 2399, 2404, 2406, 2403, 2401, 2405, 2408, 2404, 2411, + + 2400, 2405, 2408, 2409, 2413, 2406, 2409, 2414, 2416, 2413, + 2417, 2411, 2414, 2418, 2419, 2419, 2420, 2423, 2424, 2417, + 2425, 2416, 2418, 2426, 2426, 2420, 2427, 2429, 2428, 2430, + 2430, 2431, 2433, 2435, 2437, 2437, 2423, 2428, 2424, 2425, + 2436, 2438, 2429, 2439, 2436, 2427, 2440, 2433, 2441, 2439, + 2431, 2443, 2440, 2435, 2441, 2442, 2442, 2444, 2446, 2443, + 2447, 2449, 2444, 2450, 2451, 2449, 2438, 2446, 2453, 2453, + 2454, 2454, 2458, 2447, 2455, 2455, 2458, 2450, 2459, 2451, + 2457, 2457, 2463, 2459, 2461, 2461, 2464, 2465, 2466, 2468, + 2476, 2464, 2474, 2466, 2466, 2469, 2469, 2471, 2471, 2465, + + 2472, 2472, 2463, 2473, 2478, 2474, 2473, 2482, 2476, 2468, + 2479, 2479, 2480, 2480, 2481, 2481, 2483, 2483, 2484, 2485, + 2486, 2487, 2482, 2493, 2478, 2488, 2488, 2487, 2489, 2494, + 2492, 2484, 2489, 2495, 2486, 2492, 2492, 2485, 2496, 2497, + 2498, 2500, 2500, 2499, 2496, 2497, 2493, 2499, 2505, 2494, + 2503, 2506, 2508, 2495, 2506, 2503, 2505, 2509, 2510, 2511, + 2509, 2512, 2513, 0, 2511, 2498, 2514, 2515, 2515, 2516, + 2517, 2518, 2519, 2517, 2522, 2510, 2510, 2508, 2520, 2512, + 2514, 2517, 2513, 2516, 2521, 2518, 2520, 2523, 2523, 2521, + 2521, 2519, 2528, 2522, 2524, 2524, 2525, 2525, 2526, 2526, + + 2527, 2527, 2529, 2530, 2531, 2532, 2533, 2529, 2528, 2534, + 2536, 2536, 2537, 2538, 2532, 2537, 2540, 2540, 2541, 2542, + 2542, 2550, 2543, 2530, 0, 2541, 2533, 2543, 2546, 2534, + 2531, 2538, 2545, 2545, 2547, 2548, 2553, 2546, 2552, 2550, + 2551, 2551, 2552, 2547, 2548, 2553, 2554, 2555, 2557, 2556, + 2561, 2565, 2555, 2555, 2566, 2561, 2567, 2557, 2562, 2562, + 2569, 2554, 2556, 2564, 2564, 2565, 2570, 2573, 2574, 2569, + 2575, 2578, 2580, 0, 2567, 2576, 2626, 2574, 2570, 2566, + 2582, 2576, 2583, 2578, 2626, 2582, 2585, 2583, 2584, 2584, + 2575, 2587, 2573, 2580, 2594, 2585, 2587, 2588, 2588, 2590, + + 2590, 2588, 2591, 2591, 2592, 2592, 2593, 2595, 2596, 2602, + 2598, 2603, 2599, 2596, 2594, 2593, 2598, 2599, 2600, 2601, + 2601, 2605, 2606, 2600, 2604, 2607, 2595, 2602, 2606, 2604, + 2608, 2608, 2603, 2610, 2614, 2611, 2612, 2610, 2616, 2605, + 2611, 2612, 2613, 2613, 2615, 2618, 2618, 2620, 2621, 2624, + 2607, 2622, 2625, 2614, 2623, 2622, 2628, 2627, 2616, 2615, + 2620, 2621, 2627, 2623, 2630, 2624, 2629, 2629, 2632, 2632, + 2635, 2625, 2633, 2633, 2637, 2637, 2639, 2640, 2641, 2642, + 2644, 2644, 2628, 2630, 2642, 2645, 2646, 2647, 2649, 2649, + 2650, 2635, 2639, 2640, 2641, 2651, 2651, 2654, 2656, 2657, + + 2660, 2655, 2664, 2656, 2650, 2645, 2647, 2655, 2662, 2646, + 2658, 2658, 2659, 2659, 2661, 2661, 2663, 2654, 2665, 2662, + 2660, 2657, 2664, 2666, 2665, 2663, 2667, 2668, 2669, 2669, + 2670, 2671, 2671, 2670, 2661, 2676, 2675, 2677, 2667, 2678, + 2678, 2679, 2666, 2677, 2679, 2680, 2681, 2668, 2675, 2683, + 2685, 2680, 2684, 2686, 2683, 2676, 2687, 2684, 2690, 2686, + 2688, 2688, 2691, 2692, 2681, 2693, 2694, 2694, 2695, 2685, + 2690, 2701, 2696, 2687, 2687, 2698, 2698, 0, 2693, 2700, + 2691, 2696, 2699, 2699, 2700, 2701, 2702, 2695, 2692, 2703, + 2703, 2702, 2704, 2704, 2705, 2705, 2706, 2708, 2708, 2711, + + 2713, 2706, 2714, 2715, 2716, 2716, 2718, 2718, 2720, 2719, + 2721, 2722, 2722, 2725, 2724, 2726, 2727, 0, 2711, 2721, + 2724, 2727, 2713, 2719, 2714, 2715, 2730, 2730, 2720, 2732, + 2732, 2733, 2734, 2725, 2726, 2735, 2733, 2736, 2741, 2737, + 2739, 2735, 2738, 2738, 2742, 2739, 2734, 2737, 2743, 2736, + 2744, 2745, 2747, 2743, 2748, 2749, 2750, 2745, 2741, 2751, + 2747, 2758, 2744, 2752, 2742, 2753, 2754, 2755, 2762, 2757, + 2766, 2766, 2755, 2748, 2757, 2749, 2750, 2751, 2759, 2752, + 2760, 2758, 2753, 2753, 2759, 2760, 2763, 2754, 2762, 2767, + 2767, 2768, 2772, 2772, 2778, 2768, 2774, 2774, 2778, 2763, + + 2775, 2775, 2781, 2775, 2776, 2776, 2784, 2776, 2777, 2777, + 2782, 2777, 2780, 2780, 2785, 2790, 2786, 2787, 2787, 2792, + 2781, 2786, 2791, 2792, 2782, 2805, 2784, 2793, 2794, 2791, + 2796, 2805, 2797, 2831, 2785, 2801, 2793, 2798, 2798, 2806, + 2790, 2797, 2831, 2794, 2799, 2799, 2800, 2800, 2796, 2802, + 2801, 2803, 2804, 2807, 2802, 2808, 2809, 2804, 2804, 2811, + 2803, 2809, 2810, 2803, 2806, 2812, 2812, 2810, 2807, 2813, + 2883, 2814, 2815, 2815, 2883, 2813, 2808, 2814, 2811, 2816, + 2816, 2817, 2820, 2820, 2823, 2823, 2817, 2824, 2824, 2825, + 2825, 2826, 2826, 2827, 2827, 2828, 2828, 2829, 2829, 2832, + + 2832, 2833, 2834, 2835, 2839, 2837, 2838, 2838, 2840, 2847, + 2833, 2842, 2842, 2841, 2834, 2843, 2844, 2844, 2849, 2839, + 2851, 2840, 2854, 2835, 2837, 2841, 2848, 2847, 2854, 2848, + 2843, 2850, 2850, 2853, 2855, 2856, 2853, 2857, 2851, 2858, + 2856, 2861, 2859, 2862, 2849, 2865, 2874, 2861, 2855, 2874, + 2876, 2881, 2862, 2877, 2877, 2884, 2857, 2858, 2859, 2882, + 2865, 2878, 2878, 2876, 2879, 2879, 2885, 2887, 2882, 2891, + 2888, 2889, 2892, 2892, 2881, 2884, 2889, 2890, 2893, 2890, + 2885, 2888, 2894, 2896, 2891, 2895, 2897, 2898, 2899, 2901, + 2887, 2893, 2900, 2902, 2907, 2903, 2908, 2899, 2910, 2896, + + 2903, 2894, 2898, 2895, 2900, 2909, 2909, 2910, 2907, 2915, + 2901, 2897, 2916, 2902, 2911, 2911, 2908, 2912, 2912, 2913, + 2913, 2914, 2914, 2917, 2918, 2919, 2917, 2920, 2915, 2918, + 2919, 2921, 2916, 2922, 2923, 2924, 2925, 2926, 2928, 2922, + 2929, 2925, 2927, 2927, 2930, 2930, 2921, 2924, 2923, 2932, + 2934, 2940, 2920, 2928, 2937, 2937, 2941, 2926, 2939, 2929, + 2938, 2938, 2941, 2942, 2932, 2943, 2939, 2944, 2934, 2942, + 2940, 2945, 2946, 2947, 2947, 2948, 2948, 2946, 2950, 2943, + 2944, 2951, 2953, 2954, 2956, 2959, 2957, 2954, 2958, 2960, + 2945, 2957, 2961, 2964, 2964, 2962, 2953, 2967, 2959, 2950, + + 2962, 2951, 2960, 2963, 2956, 2968, 2969, 2958, 2963, 2970, + 2970, 2961, 2977, 2971, 2972, 2973, 2973, 2967, 2971, 2974, + 2972, 2975, 2976, 2968, 2974, 2969, 2975, 2976, 2978, 2980, + 2980, 2977, 2981, 2985, 2978, 2982, 2982, 2981, 2984, 2986, + 2987, 2988, 2984, 2989, 2990, 2991, 2986, 2993, 2993, 2989, + 2995, 2995, 2985, 2996, 2998, 2999, 2997, 3000, 2991, 2987, + 2988, 2997, 2996, 2990, 3002, 2996, 3001, 3001, 3003, 3002, + 3000, 3005, 3007, 2998, 2999, 3006, 3006, 3008, 3008, 3009, + 3009, 3003, 3010, 3011, 3012, 3013, 3013, 3010, 3014, 3019, + 3011, 3007, 3015, 3014, 3015, 3016, 3016, 3005, 3017, 3018, + + 3021, 3024, 3020, 3012, 3028, 3017, 3018, 3020, 3019, 3023, + 3023, 3026, 3027, 3029, 3030, 3030, 3026, 3027, 3033, 3021, + 3024, 3032, 3032, 3028, 3034, 3035, 3035, 3036, 3036, 3037, + 3039, 3039, 3029, 3040, 3040, 3041, 3037, 3033, 3047, 3043, + 3046, 3048, 3041, 3034, 3043, 3046, 3049, 3049, 3050, 3050, + 0, 0, 0, 0, 0, 0, 0, 3047, 0, 0, + 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3055, 3055, + 3055, 3055, 3055, 3055, 3055, 3056, 3056, 3056, 3056, 3056, + 3056, 3056, 3057, 3057, 3057, 3057, 3057, 3057, 3057, 3058, + 3058, 3058, 3058, 3058, 3058, 3058, 3060, 3060, 0, 3060, + + 3060, 3060, 3060, 3061, 3061, 0, 0, 0, 3061, 3061, + 3062, 3062, 0, 0, 3062, 0, 3062, 3063, 0, 0, + 0, 0, 0, 3063, 3064, 3064, 0, 0, 0, 3064, + 3064, 3065, 0, 0, 0, 0, 0, 3065, 3066, 3066, + 0, 3066, 3066, 3066, 3066, 3067, 3067, 0, 3067, 3067, + 3067, 3067, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, + 3053, 3053, 3053 + } ; static yy_state_type yy_last_accepting_state; @@ -2938,7 +2949,7 @@ static void config_end_include(void) } #endif -#line 2939 "" +#line 2951 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2947,9 +2958,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2948 "" +#line 2960 "" -#line 2950 "" +#line 2962 "" #define INITIAL 0 #define quotedstring 1 @@ -3171,7 +3182,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3172 "" +#line 3184 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3204,13 +3215,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 >= 3044 ) + if ( yy_current_state >= 3054 ) 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] != 5927 ); + while ( yy_base[yy_current_state] != 5953 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3455,17 +3466,17 @@ YY_RULE_SETUP case 44: YY_RULE_SETUP #line 251 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_HTTPS_PORT) } YY_BREAK case 45: YY_RULE_SETUP #line 252 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 46: YY_RULE_SETUP #line 253 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 47: YY_RULE_SETUP @@ -3475,282 +3486,282 @@ YY_RULE_SETUP case 48: YY_RULE_SETUP #line 255 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 49: YY_RULE_SETUP #line 256 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 50: YY_RULE_SETUP #line 257 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 51: YY_RULE_SETUP #line 258 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 52: YY_RULE_SETUP #line 259 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 53: YY_RULE_SETUP #line 260 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 54: YY_RULE_SETUP #line 261 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 55: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 56: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 57: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 58: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 59: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 60: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 61: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 62: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 63: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 64: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 65: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 66: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 67: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 68: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 69: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 70: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 71: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 72: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 73: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 74: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 75: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 76: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 77: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 78: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 79: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 80: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 81: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 82: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 83: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 84: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 85: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 86: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 87: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 88: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 89: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 90: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 91: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 92: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 93: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 94: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 95: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 96: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 97: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 98: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 99: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 100: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 101: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 102: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 103: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 104: YY_RULE_SETUP @@ -3760,32 +3771,32 @@ YY_RULE_SETUP case 105: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 106: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 107: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 108: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 109: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 110: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 111: YY_RULE_SETUP @@ -3795,731 +3806,731 @@ YY_RULE_SETUP case 112: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 113: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 114: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 115: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 116: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 117: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 118: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 119: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 120: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 121: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 122: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 123: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 124: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 125: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 126: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 127: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 128: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 129: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 130: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 131: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 132: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 133: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 134: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 135: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 136: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 137: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 138: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 139: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 140: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 141: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 142: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 143: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 144: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 145: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 146: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 147: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 148: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 149: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 150: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 151: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 152: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 153: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 154: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 155: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 156: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 157: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 158: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 159: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 160: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 161: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 162: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 163: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 164: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 165: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 166: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 167: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 168: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 169: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 170: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 171: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 172: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 173: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 174: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 175: YY_RULE_SETUP -#line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 382 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 176: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 177: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 178: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 179: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 180: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 181: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 182: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 183: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 184: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 185: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 186: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 187: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 188: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 189: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 190: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 191: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 192: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 193: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 194: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 195: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 196: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 197: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 198: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 199: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 200: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 201: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 202: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 203: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 204: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 205: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 206: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 207: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 208: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 209: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 231: YY_RULE_SETUP -#line 440 "./util/configlexer.lex" +#line 439 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 232: YY_RULE_SETUP -#line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 441 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 233: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 234: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 235: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 236: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 237: YY_RULE_SETUP -#line 448 "./util/configlexer.lex" +#line 447 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 238: YY_RULE_SETUP -#line 450 "./util/configlexer.lex" +#line 449 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 239: YY_RULE_SETUP -#line 452 "./util/configlexer.lex" +#line 451 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 240: YY_RULE_SETUP -#line 454 "./util/configlexer.lex" +#line 453 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 241: YY_RULE_SETUP -#line 456 "./util/configlexer.lex" +#line 455 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 457 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 244: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 245: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 246: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 256: YY_RULE_SETUP @@ -4534,195 +4545,200 @@ YY_RULE_SETUP case 258: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 259: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 260: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 269: YY_RULE_SETUP -#line 486 "./util/configlexer.lex" +#line 485 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 270: YY_RULE_SETUP -#line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 487 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 271: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 272: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 273: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 274: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 289: -/* rule 289 can match eol */ YY_RULE_SETUP #line 507 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 290: +/* rule 290 can match eol */ +YY_RULE_SETUP +#line 508 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 290: +case 291: YY_RULE_SETUP -#line 510 "./util/configlexer.lex" +#line 511 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 511 "./util/configlexer.lex" +#line 512 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 291: +case 292: YY_RULE_SETUP -#line 516 "./util/configlexer.lex" +#line 517 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 292: -/* rule 292 can match eol */ +case 293: +/* rule 293 can match eol */ YY_RULE_SETUP -#line 517 "./util/configlexer.lex" +#line 518 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 293: +case 294: YY_RULE_SETUP -#line 519 "./util/configlexer.lex" +#line 520 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4735,34 +4751,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 294: +case 295: YY_RULE_SETUP -#line 531 "./util/configlexer.lex" +#line 532 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 532 "./util/configlexer.lex" +#line 533 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 295: +case 296: YY_RULE_SETUP -#line 537 "./util/configlexer.lex" +#line 538 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 296: -/* rule 296 can match eol */ +case 297: +/* rule 297 can match eol */ YY_RULE_SETUP -#line 538 "./util/configlexer.lex" +#line 539 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 297: +case 298: YY_RULE_SETUP -#line 540 "./util/configlexer.lex" +#line 541 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4775,38 +4791,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 298: +case 299: YY_RULE_SETUP -#line 552 "./util/configlexer.lex" +#line 553 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 554 "./util/configlexer.lex" +#line 555 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 299: -YY_RULE_SETUP -#line 558 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 300: -/* rule 300 can match eol */ YY_RULE_SETUP #line 559 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 301: +/* rule 301 can match eol */ YY_RULE_SETUP #line 560 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 302: YY_RULE_SETUP #line 561 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 303: +YY_RULE_SETUP +#line 562 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4814,27 +4830,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 566 "./util/configlexer.lex" +#line 567 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 303: +case 304: YY_RULE_SETUP -#line 570 "./util/configlexer.lex" +#line 571 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 304: -/* rule 304 can match eol */ +case 305: +/* rule 305 can match eol */ YY_RULE_SETUP -#line 571 "./util/configlexer.lex" +#line 572 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 305: +case 306: YY_RULE_SETUP -#line 573 "./util/configlexer.lex" +#line 574 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4844,7 +4860,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 579 "./util/configlexer.lex" +#line 580 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4856,33 +4872,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 306: +case 307: YY_RULE_SETUP -#line 590 "./util/configlexer.lex" +#line 591 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 307: +case 308: YY_RULE_SETUP -#line 594 "./util/configlexer.lex" +#line 595 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 308: +case 309: YY_RULE_SETUP -#line 598 "./util/configlexer.lex" +#line 599 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 309: +case 310: YY_RULE_SETUP -#line 602 "./util/configlexer.lex" +#line 603 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4883 "" +#line 4900 "" case YY_END_OF_BUFFER: { @@ -5177,7 +5193,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 >= 3044 ) + if ( yy_current_state >= 3054 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5205,11 +5221,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 >= 3044 ) + if ( yy_current_state >= 3054 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3043); + yy_is_jam = (yy_current_state == 3053); return yy_is_jam ? 0 : yy_current_state; } @@ -5848,6 +5864,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 602 "./util/configlexer.lex" +#line 603 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 1d7a38681..c445c433b 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -248,6 +248,7 @@ tls-additional-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-session-ticket-keys{COLON} { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } tls-ciphers{COLON} { YDVAR(1, VAR_TLS_CIPHERS) } tls-ciphersuites{COLON} { YDVAR(1, VAR_TLS_CIPHERSUITES) } +https-port{COLON} { YDVAR(1, VAR_HTTPS_PORT) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } diff --git a/util/configparser.c b/util/configparser.c index 6d792c698..830b79915 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,9 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,14 +40,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.4.1" +#define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -65,8 +61,8 @@ -/* First part of user prologue. */ -#line 38 "./util/configparser.y" +/* Copy the first part of user declarations. */ +#line 38 "./util/configparser.y" /* yacc.c:339 */ #include "config.h" @@ -95,17 +91,13 @@ extern struct config_parser_state* cfg_parser; #endif -#line 99 "util/configparser.c" +#line 95 "util/configparser.c" /* yacc.c:339 */ # ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr # else -# define YY_NULLPTR ((void*)0) +# define YY_NULLPTR 0 # endif # endif @@ -117,8 +109,8 @@ extern struct config_parser_state* cfg_parser; # define YYERROR_VERBOSE 0 #endif -/* Use api.header.include to #include this header - instead of duplicating it here. */ +/* In a future release of Bison, this section will be replaced + by #include "configparser.h". */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -272,150 +264,151 @@ extern int yydebug; VAR_STUB_SSL_UPSTREAM = 393, VAR_FORWARD_SSL_UPSTREAM = 394, VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_DISABLE_DNSSEC_LAME_CHECK = 431, - VAR_IP_RATELIMIT = 432, - VAR_IP_RATELIMIT_SLABS = 433, - VAR_IP_RATELIMIT_SIZE = 434, - VAR_RATELIMIT = 435, - VAR_RATELIMIT_SLABS = 436, - VAR_RATELIMIT_SIZE = 437, - VAR_RATELIMIT_FOR_DOMAIN = 438, - VAR_RATELIMIT_BELOW_DOMAIN = 439, - VAR_IP_RATELIMIT_FACTOR = 440, - VAR_RATELIMIT_FACTOR = 441, - VAR_SEND_CLIENT_SUBNET = 442, - VAR_CLIENT_SUBNET_ZONE = 443, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 444, - VAR_CLIENT_SUBNET_OPCODE = 445, - VAR_MAX_CLIENT_SUBNET_IPV4 = 446, - VAR_MAX_CLIENT_SUBNET_IPV6 = 447, - VAR_MIN_CLIENT_SUBNET_IPV4 = 448, - VAR_MIN_CLIENT_SUBNET_IPV6 = 449, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 451, - VAR_CAPS_WHITELIST = 452, - VAR_CACHE_MAX_NEGATIVE_TTL = 453, - VAR_PERMIT_SMALL_HOLDDOWN = 454, - VAR_QNAME_MINIMISATION = 455, - VAR_QNAME_MINIMISATION_STRICT = 456, - VAR_IP_FREEBIND = 457, - VAR_DEFINE_TAG = 458, - VAR_LOCAL_ZONE_TAG = 459, - VAR_ACCESS_CONTROL_TAG = 460, - VAR_LOCAL_ZONE_OVERRIDE = 461, - VAR_ACCESS_CONTROL_TAG_ACTION = 462, - VAR_ACCESS_CONTROL_TAG_DATA = 463, - VAR_VIEW = 464, - VAR_ACCESS_CONTROL_VIEW = 465, - VAR_VIEW_FIRST = 466, - VAR_SERVE_EXPIRED = 467, - VAR_SERVE_EXPIRED_TTL = 468, - VAR_SERVE_EXPIRED_TTL_RESET = 469, - VAR_SERVE_EXPIRED_REPLY_TTL = 470, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 471, - VAR_FAKE_DSA = 472, - VAR_FAKE_SHA1 = 473, - VAR_LOG_IDENTITY = 474, - VAR_HIDE_TRUSTANCHOR = 475, - VAR_TRUST_ANCHOR_SIGNALING = 476, - VAR_AGGRESSIVE_NSEC = 477, - VAR_USE_SYSTEMD = 478, - VAR_SHM_ENABLE = 479, - VAR_SHM_KEY = 480, - VAR_ROOT_KEY_SENTINEL = 481, - VAR_DNSCRYPT = 482, - VAR_DNSCRYPT_ENABLE = 483, - VAR_DNSCRYPT_PORT = 484, - VAR_DNSCRYPT_PROVIDER = 485, - VAR_DNSCRYPT_SECRET_KEY = 486, - VAR_DNSCRYPT_PROVIDER_CERT = 487, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 488, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 490, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 491, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 492, - VAR_IPSECMOD_ENABLED = 493, - VAR_IPSECMOD_HOOK = 494, - VAR_IPSECMOD_IGNORE_BOGUS = 495, - VAR_IPSECMOD_MAX_TTL = 496, - VAR_IPSECMOD_WHITELIST = 497, - VAR_IPSECMOD_STRICT = 498, - VAR_CACHEDB = 499, - VAR_CACHEDB_BACKEND = 500, - VAR_CACHEDB_SECRETSEED = 501, - VAR_CACHEDB_REDISHOST = 502, - VAR_CACHEDB_REDISPORT = 503, - VAR_CACHEDB_REDISTIMEOUT = 504, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 505, - VAR_FOR_UPSTREAM = 506, - VAR_AUTH_ZONE = 507, - VAR_ZONEFILE = 508, - VAR_MASTER = 509, - VAR_URL = 510, - VAR_FOR_DOWNSTREAM = 511, - VAR_FALLBACK_ENABLED = 512, - VAR_TLS_ADDITIONAL_PORT = 513, - VAR_LOW_RTT = 514, - VAR_LOW_RTT_PERMIL = 515, - VAR_FAST_SERVER_PERMIL = 516, - VAR_FAST_SERVER_NUM = 517, - VAR_ALLOW_NOTIFY = 518, - VAR_TLS_WIN_CERT = 519, - VAR_TCP_CONNECTION_LIMIT = 520, - VAR_FORWARD_NO_CACHE = 521, - VAR_STUB_NO_CACHE = 522, - VAR_LOG_SERVFAIL = 523, - VAR_DENY_ANY = 524, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 525, - VAR_LOG_TAG_QUERYREPLY = 526, - VAR_STREAM_WAIT_SIZE = 527, - VAR_TLS_CIPHERS = 528, - VAR_TLS_CIPHERSUITES = 529, - VAR_IPSET = 530, - VAR_IPSET_NAME_V4 = 531, - VAR_IPSET_NAME_V6 = 532, - VAR_TLS_SESSION_TICKET_KEYS = 533, - VAR_RPZ = 534, - VAR_TAGS = 535, - VAR_RPZ_ACTION_OVERRIDE = 536, - VAR_RPZ_CNAME_OVERRIDE = 537, - VAR_RPZ_LOG = 538, - VAR_RPZ_LOG_NAME = 539 + VAR_HTTPS_PORT = 396, + VAR_STUB_FIRST = 397, + VAR_MINIMAL_RESPONSES = 398, + VAR_RRSET_ROUNDROBIN = 399, + VAR_MAX_UDP_SIZE = 400, + VAR_DELAY_CLOSE = 401, + VAR_UNBLOCK_LAN_ZONES = 402, + VAR_INSECURE_LAN_ZONES = 403, + VAR_INFRA_CACHE_MIN_RTT = 404, + VAR_DNS64_PREFIX = 405, + VAR_DNS64_SYNTHALL = 406, + VAR_DNS64_IGNORE_AAAA = 407, + VAR_DNSTAP = 408, + VAR_DNSTAP_ENABLE = 409, + VAR_DNSTAP_SOCKET_PATH = 410, + VAR_DNSTAP_IP = 411, + VAR_DNSTAP_TLS = 412, + VAR_DNSTAP_TLS_SERVER_NAME = 413, + VAR_DNSTAP_TLS_CERT_BUNDLE = 414, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 415, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 416, + VAR_DNSTAP_SEND_IDENTITY = 417, + VAR_DNSTAP_SEND_VERSION = 418, + VAR_DNSTAP_IDENTITY = 419, + VAR_DNSTAP_VERSION = 420, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 421, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 422, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 423, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 424, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 425, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 426, + VAR_RESPONSE_IP_TAG = 427, + VAR_RESPONSE_IP = 428, + VAR_RESPONSE_IP_DATA = 429, + VAR_HARDEN_ALGO_DOWNGRADE = 430, + VAR_IP_TRANSPARENT = 431, + VAR_DISABLE_DNSSEC_LAME_CHECK = 432, + VAR_IP_RATELIMIT = 433, + VAR_IP_RATELIMIT_SLABS = 434, + VAR_IP_RATELIMIT_SIZE = 435, + VAR_RATELIMIT = 436, + VAR_RATELIMIT_SLABS = 437, + VAR_RATELIMIT_SIZE = 438, + VAR_RATELIMIT_FOR_DOMAIN = 439, + VAR_RATELIMIT_BELOW_DOMAIN = 440, + VAR_IP_RATELIMIT_FACTOR = 441, + VAR_RATELIMIT_FACTOR = 442, + VAR_SEND_CLIENT_SUBNET = 443, + VAR_CLIENT_SUBNET_ZONE = 444, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, + VAR_CLIENT_SUBNET_OPCODE = 446, + VAR_MAX_CLIENT_SUBNET_IPV4 = 447, + VAR_MAX_CLIENT_SUBNET_IPV6 = 448, + VAR_MIN_CLIENT_SUBNET_IPV4 = 449, + VAR_MIN_CLIENT_SUBNET_IPV6 = 450, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, + VAR_CAPS_WHITELIST = 453, + VAR_CACHE_MAX_NEGATIVE_TTL = 454, + VAR_PERMIT_SMALL_HOLDDOWN = 455, + VAR_QNAME_MINIMISATION = 456, + VAR_QNAME_MINIMISATION_STRICT = 457, + VAR_IP_FREEBIND = 458, + VAR_DEFINE_TAG = 459, + VAR_LOCAL_ZONE_TAG = 460, + VAR_ACCESS_CONTROL_TAG = 461, + VAR_LOCAL_ZONE_OVERRIDE = 462, + VAR_ACCESS_CONTROL_TAG_ACTION = 463, + VAR_ACCESS_CONTROL_TAG_DATA = 464, + VAR_VIEW = 465, + VAR_ACCESS_CONTROL_VIEW = 466, + VAR_VIEW_FIRST = 467, + VAR_SERVE_EXPIRED = 468, + VAR_SERVE_EXPIRED_TTL = 469, + VAR_SERVE_EXPIRED_TTL_RESET = 470, + VAR_SERVE_EXPIRED_REPLY_TTL = 471, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, + VAR_FAKE_DSA = 473, + VAR_FAKE_SHA1 = 474, + VAR_LOG_IDENTITY = 475, + VAR_HIDE_TRUSTANCHOR = 476, + VAR_TRUST_ANCHOR_SIGNALING = 477, + VAR_AGGRESSIVE_NSEC = 478, + VAR_USE_SYSTEMD = 479, + VAR_SHM_ENABLE = 480, + VAR_SHM_KEY = 481, + VAR_ROOT_KEY_SENTINEL = 482, + VAR_DNSCRYPT = 483, + VAR_DNSCRYPT_ENABLE = 484, + VAR_DNSCRYPT_PORT = 485, + VAR_DNSCRYPT_PROVIDER = 486, + VAR_DNSCRYPT_SECRET_KEY = 487, + VAR_DNSCRYPT_PROVIDER_CERT = 488, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, + VAR_IPSECMOD_ENABLED = 494, + VAR_IPSECMOD_HOOK = 495, + VAR_IPSECMOD_IGNORE_BOGUS = 496, + VAR_IPSECMOD_MAX_TTL = 497, + VAR_IPSECMOD_WHITELIST = 498, + VAR_IPSECMOD_STRICT = 499, + VAR_CACHEDB = 500, + VAR_CACHEDB_BACKEND = 501, + VAR_CACHEDB_SECRETSEED = 502, + VAR_CACHEDB_REDISHOST = 503, + VAR_CACHEDB_REDISPORT = 504, + VAR_CACHEDB_REDISTIMEOUT = 505, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, + VAR_FOR_UPSTREAM = 507, + VAR_AUTH_ZONE = 508, + VAR_ZONEFILE = 509, + VAR_MASTER = 510, + VAR_URL = 511, + VAR_FOR_DOWNSTREAM = 512, + VAR_FALLBACK_ENABLED = 513, + VAR_TLS_ADDITIONAL_PORT = 514, + VAR_LOW_RTT = 515, + VAR_LOW_RTT_PERMIL = 516, + VAR_FAST_SERVER_PERMIL = 517, + VAR_FAST_SERVER_NUM = 518, + VAR_ALLOW_NOTIFY = 519, + VAR_TLS_WIN_CERT = 520, + VAR_TCP_CONNECTION_LIMIT = 521, + VAR_FORWARD_NO_CACHE = 522, + VAR_STUB_NO_CACHE = 523, + VAR_LOG_SERVFAIL = 524, + VAR_DENY_ANY = 525, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, + VAR_LOG_TAG_QUERYREPLY = 527, + VAR_STREAM_WAIT_SIZE = 528, + VAR_TLS_CIPHERS = 529, + VAR_TLS_CIPHERSUITES = 530, + VAR_IPSET = 531, + VAR_IPSET_NAME_V4 = 532, + VAR_IPSET_NAME_V6 = 533, + VAR_TLS_SESSION_TICKET_KEYS = 534, + VAR_RPZ = 535, + VAR_TAGS = 536, + VAR_RPZ_ACTION_OVERRIDE = 537, + VAR_RPZ_CNAME_OVERRIDE = 538, + VAR_RPZ_LOG = 539, + VAR_RPZ_LOG_NAME = 540 }; #endif /* Tokens. */ @@ -557,162 +550,164 @@ extern int yydebug; #define VAR_STUB_SSL_UPSTREAM 393 #define VAR_FORWARD_SSL_UPSTREAM 394 #define VAR_TLS_CERT_BUNDLE 395 -#define VAR_STUB_FIRST 396 -#define VAR_MINIMAL_RESPONSES 397 -#define VAR_RRSET_ROUNDROBIN 398 -#define VAR_MAX_UDP_SIZE 399 -#define VAR_DELAY_CLOSE 400 -#define VAR_UNBLOCK_LAN_ZONES 401 -#define VAR_INSECURE_LAN_ZONES 402 -#define VAR_INFRA_CACHE_MIN_RTT 403 -#define VAR_DNS64_PREFIX 404 -#define VAR_DNS64_SYNTHALL 405 -#define VAR_DNS64_IGNORE_AAAA 406 -#define VAR_DNSTAP 407 -#define VAR_DNSTAP_ENABLE 408 -#define VAR_DNSTAP_SOCKET_PATH 409 -#define VAR_DNSTAP_IP 410 -#define VAR_DNSTAP_TLS 411 -#define VAR_DNSTAP_TLS_SERVER_NAME 412 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 413 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 414 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 415 -#define VAR_DNSTAP_SEND_IDENTITY 416 -#define VAR_DNSTAP_SEND_VERSION 417 -#define VAR_DNSTAP_IDENTITY 418 -#define VAR_DNSTAP_VERSION 419 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 420 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 421 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 422 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 423 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 424 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 425 -#define VAR_RESPONSE_IP_TAG 426 -#define VAR_RESPONSE_IP 427 -#define VAR_RESPONSE_IP_DATA 428 -#define VAR_HARDEN_ALGO_DOWNGRADE 429 -#define VAR_IP_TRANSPARENT 430 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 431 -#define VAR_IP_RATELIMIT 432 -#define VAR_IP_RATELIMIT_SLABS 433 -#define VAR_IP_RATELIMIT_SIZE 434 -#define VAR_RATELIMIT 435 -#define VAR_RATELIMIT_SLABS 436 -#define VAR_RATELIMIT_SIZE 437 -#define VAR_RATELIMIT_FOR_DOMAIN 438 -#define VAR_RATELIMIT_BELOW_DOMAIN 439 -#define VAR_IP_RATELIMIT_FACTOR 440 -#define VAR_RATELIMIT_FACTOR 441 -#define VAR_SEND_CLIENT_SUBNET 442 -#define VAR_CLIENT_SUBNET_ZONE 443 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444 -#define VAR_CLIENT_SUBNET_OPCODE 445 -#define VAR_MAX_CLIENT_SUBNET_IPV4 446 -#define VAR_MAX_CLIENT_SUBNET_IPV6 447 -#define VAR_MIN_CLIENT_SUBNET_IPV4 448 -#define VAR_MIN_CLIENT_SUBNET_IPV6 449 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 451 -#define VAR_CAPS_WHITELIST 452 -#define VAR_CACHE_MAX_NEGATIVE_TTL 453 -#define VAR_PERMIT_SMALL_HOLDDOWN 454 -#define VAR_QNAME_MINIMISATION 455 -#define VAR_QNAME_MINIMISATION_STRICT 456 -#define VAR_IP_FREEBIND 457 -#define VAR_DEFINE_TAG 458 -#define VAR_LOCAL_ZONE_TAG 459 -#define VAR_ACCESS_CONTROL_TAG 460 -#define VAR_LOCAL_ZONE_OVERRIDE 461 -#define VAR_ACCESS_CONTROL_TAG_ACTION 462 -#define VAR_ACCESS_CONTROL_TAG_DATA 463 -#define VAR_VIEW 464 -#define VAR_ACCESS_CONTROL_VIEW 465 -#define VAR_VIEW_FIRST 466 -#define VAR_SERVE_EXPIRED 467 -#define VAR_SERVE_EXPIRED_TTL 468 -#define VAR_SERVE_EXPIRED_TTL_RESET 469 -#define VAR_SERVE_EXPIRED_REPLY_TTL 470 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471 -#define VAR_FAKE_DSA 472 -#define VAR_FAKE_SHA1 473 -#define VAR_LOG_IDENTITY 474 -#define VAR_HIDE_TRUSTANCHOR 475 -#define VAR_TRUST_ANCHOR_SIGNALING 476 -#define VAR_AGGRESSIVE_NSEC 477 -#define VAR_USE_SYSTEMD 478 -#define VAR_SHM_ENABLE 479 -#define VAR_SHM_KEY 480 -#define VAR_ROOT_KEY_SENTINEL 481 -#define VAR_DNSCRYPT 482 -#define VAR_DNSCRYPT_ENABLE 483 -#define VAR_DNSCRYPT_PORT 484 -#define VAR_DNSCRYPT_PROVIDER 485 -#define VAR_DNSCRYPT_SECRET_KEY 486 -#define VAR_DNSCRYPT_PROVIDER_CERT 487 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492 -#define VAR_IPSECMOD_ENABLED 493 -#define VAR_IPSECMOD_HOOK 494 -#define VAR_IPSECMOD_IGNORE_BOGUS 495 -#define VAR_IPSECMOD_MAX_TTL 496 -#define VAR_IPSECMOD_WHITELIST 497 -#define VAR_IPSECMOD_STRICT 498 -#define VAR_CACHEDB 499 -#define VAR_CACHEDB_BACKEND 500 -#define VAR_CACHEDB_SECRETSEED 501 -#define VAR_CACHEDB_REDISHOST 502 -#define VAR_CACHEDB_REDISPORT 503 -#define VAR_CACHEDB_REDISTIMEOUT 504 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 505 -#define VAR_FOR_UPSTREAM 506 -#define VAR_AUTH_ZONE 507 -#define VAR_ZONEFILE 508 -#define VAR_MASTER 509 -#define VAR_URL 510 -#define VAR_FOR_DOWNSTREAM 511 -#define VAR_FALLBACK_ENABLED 512 -#define VAR_TLS_ADDITIONAL_PORT 513 -#define VAR_LOW_RTT 514 -#define VAR_LOW_RTT_PERMIL 515 -#define VAR_FAST_SERVER_PERMIL 516 -#define VAR_FAST_SERVER_NUM 517 -#define VAR_ALLOW_NOTIFY 518 -#define VAR_TLS_WIN_CERT 519 -#define VAR_TCP_CONNECTION_LIMIT 520 -#define VAR_FORWARD_NO_CACHE 521 -#define VAR_STUB_NO_CACHE 522 -#define VAR_LOG_SERVFAIL 523 -#define VAR_DENY_ANY 524 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 525 -#define VAR_LOG_TAG_QUERYREPLY 526 -#define VAR_STREAM_WAIT_SIZE 527 -#define VAR_TLS_CIPHERS 528 -#define VAR_TLS_CIPHERSUITES 529 -#define VAR_IPSET 530 -#define VAR_IPSET_NAME_V4 531 -#define VAR_IPSET_NAME_V6 532 -#define VAR_TLS_SESSION_TICKET_KEYS 533 -#define VAR_RPZ 534 -#define VAR_TAGS 535 -#define VAR_RPZ_ACTION_OVERRIDE 536 -#define VAR_RPZ_CNAME_OVERRIDE 537 -#define VAR_RPZ_LOG 538 -#define VAR_RPZ_LOG_NAME 539 +#define VAR_HTTPS_PORT 396 +#define VAR_STUB_FIRST 397 +#define VAR_MINIMAL_RESPONSES 398 +#define VAR_RRSET_ROUNDROBIN 399 +#define VAR_MAX_UDP_SIZE 400 +#define VAR_DELAY_CLOSE 401 +#define VAR_UNBLOCK_LAN_ZONES 402 +#define VAR_INSECURE_LAN_ZONES 403 +#define VAR_INFRA_CACHE_MIN_RTT 404 +#define VAR_DNS64_PREFIX 405 +#define VAR_DNS64_SYNTHALL 406 +#define VAR_DNS64_IGNORE_AAAA 407 +#define VAR_DNSTAP 408 +#define VAR_DNSTAP_ENABLE 409 +#define VAR_DNSTAP_SOCKET_PATH 410 +#define VAR_DNSTAP_IP 411 +#define VAR_DNSTAP_TLS 412 +#define VAR_DNSTAP_TLS_SERVER_NAME 413 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 414 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 415 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 416 +#define VAR_DNSTAP_SEND_IDENTITY 417 +#define VAR_DNSTAP_SEND_VERSION 418 +#define VAR_DNSTAP_IDENTITY 419 +#define VAR_DNSTAP_VERSION 420 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 421 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 422 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 423 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 424 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 425 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 426 +#define VAR_RESPONSE_IP_TAG 427 +#define VAR_RESPONSE_IP 428 +#define VAR_RESPONSE_IP_DATA 429 +#define VAR_HARDEN_ALGO_DOWNGRADE 430 +#define VAR_IP_TRANSPARENT 431 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 +#define VAR_IP_RATELIMIT 433 +#define VAR_IP_RATELIMIT_SLABS 434 +#define VAR_IP_RATELIMIT_SIZE 435 +#define VAR_RATELIMIT 436 +#define VAR_RATELIMIT_SLABS 437 +#define VAR_RATELIMIT_SIZE 438 +#define VAR_RATELIMIT_FOR_DOMAIN 439 +#define VAR_RATELIMIT_BELOW_DOMAIN 440 +#define VAR_IP_RATELIMIT_FACTOR 441 +#define VAR_RATELIMIT_FACTOR 442 +#define VAR_SEND_CLIENT_SUBNET 443 +#define VAR_CLIENT_SUBNET_ZONE 444 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 +#define VAR_CLIENT_SUBNET_OPCODE 446 +#define VAR_MAX_CLIENT_SUBNET_IPV4 447 +#define VAR_MAX_CLIENT_SUBNET_IPV6 448 +#define VAR_MIN_CLIENT_SUBNET_IPV4 449 +#define VAR_MIN_CLIENT_SUBNET_IPV6 450 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 +#define VAR_CAPS_WHITELIST 453 +#define VAR_CACHE_MAX_NEGATIVE_TTL 454 +#define VAR_PERMIT_SMALL_HOLDDOWN 455 +#define VAR_QNAME_MINIMISATION 456 +#define VAR_QNAME_MINIMISATION_STRICT 457 +#define VAR_IP_FREEBIND 458 +#define VAR_DEFINE_TAG 459 +#define VAR_LOCAL_ZONE_TAG 460 +#define VAR_ACCESS_CONTROL_TAG 461 +#define VAR_LOCAL_ZONE_OVERRIDE 462 +#define VAR_ACCESS_CONTROL_TAG_ACTION 463 +#define VAR_ACCESS_CONTROL_TAG_DATA 464 +#define VAR_VIEW 465 +#define VAR_ACCESS_CONTROL_VIEW 466 +#define VAR_VIEW_FIRST 467 +#define VAR_SERVE_EXPIRED 468 +#define VAR_SERVE_EXPIRED_TTL 469 +#define VAR_SERVE_EXPIRED_TTL_RESET 470 +#define VAR_SERVE_EXPIRED_REPLY_TTL 471 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 +#define VAR_FAKE_DSA 473 +#define VAR_FAKE_SHA1 474 +#define VAR_LOG_IDENTITY 475 +#define VAR_HIDE_TRUSTANCHOR 476 +#define VAR_TRUST_ANCHOR_SIGNALING 477 +#define VAR_AGGRESSIVE_NSEC 478 +#define VAR_USE_SYSTEMD 479 +#define VAR_SHM_ENABLE 480 +#define VAR_SHM_KEY 481 +#define VAR_ROOT_KEY_SENTINEL 482 +#define VAR_DNSCRYPT 483 +#define VAR_DNSCRYPT_ENABLE 484 +#define VAR_DNSCRYPT_PORT 485 +#define VAR_DNSCRYPT_PROVIDER 486 +#define VAR_DNSCRYPT_SECRET_KEY 487 +#define VAR_DNSCRYPT_PROVIDER_CERT 488 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 +#define VAR_IPSECMOD_ENABLED 494 +#define VAR_IPSECMOD_HOOK 495 +#define VAR_IPSECMOD_IGNORE_BOGUS 496 +#define VAR_IPSECMOD_MAX_TTL 497 +#define VAR_IPSECMOD_WHITELIST 498 +#define VAR_IPSECMOD_STRICT 499 +#define VAR_CACHEDB 500 +#define VAR_CACHEDB_BACKEND 501 +#define VAR_CACHEDB_SECRETSEED 502 +#define VAR_CACHEDB_REDISHOST 503 +#define VAR_CACHEDB_REDISPORT 504 +#define VAR_CACHEDB_REDISTIMEOUT 505 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 +#define VAR_FOR_UPSTREAM 507 +#define VAR_AUTH_ZONE 508 +#define VAR_ZONEFILE 509 +#define VAR_MASTER 510 +#define VAR_URL 511 +#define VAR_FOR_DOWNSTREAM 512 +#define VAR_FALLBACK_ENABLED 513 +#define VAR_TLS_ADDITIONAL_PORT 514 +#define VAR_LOW_RTT 515 +#define VAR_LOW_RTT_PERMIL 516 +#define VAR_FAST_SERVER_PERMIL 517 +#define VAR_FAST_SERVER_NUM 518 +#define VAR_ALLOW_NOTIFY 519 +#define VAR_TLS_WIN_CERT 520 +#define VAR_TCP_CONNECTION_LIMIT 521 +#define VAR_FORWARD_NO_CACHE 522 +#define VAR_STUB_NO_CACHE 523 +#define VAR_LOG_SERVFAIL 524 +#define VAR_DENY_ANY 525 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 +#define VAR_LOG_TAG_QUERYREPLY 527 +#define VAR_STREAM_WAIT_SIZE 528 +#define VAR_TLS_CIPHERS 529 +#define VAR_TLS_CIPHERSUITES 530 +#define VAR_IPSET 531 +#define VAR_IPSET_NAME_V4 532 +#define VAR_IPSET_NAME_V6 533 +#define VAR_TLS_SESSION_TICKET_KEYS 534 +#define VAR_RPZ 535 +#define VAR_TAGS 536 +#define VAR_RPZ_ACTION_OVERRIDE 537 +#define VAR_RPZ_CNAME_OVERRIDE 538 +#define VAR_RPZ_LOG 539 +#define VAR_RPZ_LOG_NAME 540 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:355 */ char* str; -#line 714 "util/configparser.c" - +#line 709 "util/configparser.c" /* yacc.c:355 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -725,7 +720,9 @@ int yyparse (void); #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ +/* Copy the second part of user declarations. */ +#line 726 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -746,13 +743,13 @@ typedef signed char yytype_int8; #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else -typedef unsigned short yytype_uint16; +typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else -typedef short yytype_int16; +typedef short int yytype_int16; #endif #ifndef YYSIZE_T @@ -764,7 +761,7 @@ typedef short yytype_int16; # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned +# define YYSIZE_T unsigned int # endif #endif @@ -800,6 +797,15 @@ typedef short yytype_int16; # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) @@ -807,7 +813,7 @@ typedef short yytype_int16; # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ @@ -827,8 +833,6 @@ typedef short yytype_int16; #endif -#define YY_ASSERT(E) ((void) (0 && (E))) - #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -960,27 +964,27 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 604 +#define YYLAST 606 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 285 +#define YYNTOKENS 286 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 308 +#define YYNNTS 309 /* YYNRULES -- Number of rules. */ -#define YYNRULES 594 +#define YYNRULES 596 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 884 +#define YYNSTATES 887 +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 539 +#define YYMAXUTOK 540 -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ + as returned by yylex, without out-of-bounds checking. */ static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1036,73 +1040,74 @@ static const yytype_uint16 yytranslate[] = 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 + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 177, 177, 177, 178, 178, 179, 179, 180, 180, - 180, 181, 181, 182, 182, 183, 187, 192, 193, 194, - 194, 194, 195, 195, 196, 196, 196, 197, 197, 198, - 198, 198, 199, 199, 200, 200, 200, 201, 201, 201, - 202, 202, 203, 203, 204, 204, 205, 205, 206, 206, - 207, 207, 208, 208, 209, 209, 210, 210, 210, 211, - 211, 211, 212, 212, 212, 213, 213, 214, 214, 215, - 215, 216, 216, 217, 217, 217, 218, 218, 219, 219, - 220, 220, 220, 221, 221, 222, 222, 223, 223, 224, - 224, 224, 225, 225, 226, 226, 227, 227, 228, 228, - 229, 229, 230, 230, 230, 231, 231, 232, 232, 232, - 233, 233, 233, 234, 234, 234, 235, 235, 235, 235, - 236, 237, 237, 237, 238, 238, 238, 239, 239, 240, - 240, 241, 241, 241, 242, 242, 243, 243, 243, 244, - 244, 245, 245, 246, 247, 247, 248, 248, 249, 249, - 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, - 255, 256, 256, 256, 257, 257, 258, 258, 259, 259, - 260, 260, 261, 261, 262, 262, 263, 263, 263, 264, - 264, 264, 265, 265, 265, 266, 266, 267, 268, 268, - 269, 269, 270, 270, 271, 271, 272, 272, 272, 273, - 273, 273, 274, 274, 274, 275, 275, 276, 276, 277, - 277, 279, 291, 292, 293, 293, 293, 293, 293, 294, - 294, 296, 308, 309, 310, 310, 310, 310, 311, 311, - 313, 327, 328, 329, 329, 329, 329, 330, 330, 330, - 332, 349, 350, 351, 351, 351, 351, 352, 352, 352, - 353, 356, 375, 392, 400, 410, 418, 435, 436, 437, - 437, 437, 437, 437, 438, 438, 438, 439, 439, 441, - 450, 459, 470, 479, 488, 497, 508, 517, 529, 543, - 558, 569, 586, 603, 620, 637, 652, 667, 680, 695, - 704, 713, 722, 731, 740, 749, 758, 767, 776, 785, - 794, 803, 812, 821, 834, 843, 856, 865, 874, 883, - 890, 897, 906, 913, 922, 930, 937, 944, 952, 961, - 970, 984, 993, 1002, 1011, 1020, 1029, 1038, 1045, 1052, - 1078, 1086, 1093, 1100, 1107, 1114, 1122, 1130, 1138, 1145, - 1156, 1167, 1174, 1183, 1192, 1201, 1208, 1215, 1223, 1231, - 1241, 1251, 1261, 1269, 1282, 1293, 1301, 1314, 1323, 1332, - 1341, 1351, 1361, 1369, 1382, 1391, 1399, 1408, 1416, 1429, - 1438, 1445, 1455, 1465, 1475, 1485, 1495, 1505, 1515, 1525, - 1532, 1539, 1546, 1555, 1564, 1573, 1582, 1589, 1599, 1619, - 1626, 1644, 1657, 1670, 1679, 1688, 1697, 1706, 1716, 1726, - 1737, 1746, 1755, 1764, 1773, 1782, 1791, 1804, 1817, 1826, - 1833, 1842, 1851, 1860, 1869, 1877, 1890, 1898, 1939, 1946, - 1961, 1971, 1981, 1988, 1995, 2002, 2011, 2019, 2033, 2054, - 2075, 2087, 2099, 2111, 2120, 2141, 2151, 2160, 2168, 2176, - 2189, 2202, 2217, 2232, 2241, 2250, 2256, 2265, 2274, 2284, - 2294, 2307, 2320, 2332, 2346, 2358, 2372, 2382, 2389, 2396, - 2405, 2414, 2424, 2434, 2444, 2451, 2458, 2467, 2476, 2486, - 2496, 2503, 2510, 2517, 2525, 2535, 2545, 2555, 2565, 2604, - 2614, 2622, 2630, 2645, 2654, 2659, 2660, 2661, 2661, 2661, - 2662, 2662, 2662, 2663, 2663, 2665, 2675, 2684, 2691, 2698, - 2705, 2712, 2719, 2726, 2731, 2732, 2733, 2733, 2734, 2734, - 2734, 2735, 2736, 2736, 2737, 2737, 2738, 2738, 2739, 2740, - 2741, 2742, 2743, 2744, 2746, 2755, 2762, 2769, 2778, 2785, - 2792, 2799, 2806, 2815, 2824, 2831, 2838, 2848, 2858, 2868, - 2878, 2888, 2898, 2903, 2904, 2905, 2907, 2913, 2923, 2930, - 2939, 2947, 2952, 2953, 2955, 2955, 2955, 2956, 2956, 2957, - 2958, 2959, 2960, 2961, 2963, 2973, 2982, 2989, 2998, 3005, - 3014, 3022, 3035, 3043, 3056, 3061, 3062, 3063, 3063, 3064, - 3064, 3064, 3066, 3078, 3090, 3102, 3117, 3130, 3141, 3146, - 3147, 3148, 3148, 3150, 3165 + 0, 178, 178, 178, 179, 179, 180, 180, 181, 181, + 181, 182, 182, 183, 183, 184, 188, 193, 194, 195, + 195, 195, 196, 196, 197, 197, 197, 198, 198, 199, + 199, 199, 200, 200, 201, 201, 201, 202, 202, 202, + 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, + 208, 208, 209, 209, 210, 210, 211, 211, 211, 212, + 212, 212, 213, 213, 213, 214, 214, 215, 215, 216, + 216, 217, 217, 218, 218, 218, 219, 219, 220, 220, + 221, 221, 221, 222, 222, 223, 223, 224, 224, 225, + 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, + 230, 230, 231, 231, 231, 232, 232, 233, 233, 233, + 234, 234, 234, 235, 235, 235, 236, 236, 236, 236, + 237, 238, 238, 238, 239, 240, 240, 240, 241, 241, + 242, 242, 243, 243, 243, 244, 244, 245, 245, 245, + 246, 246, 247, 247, 248, 249, 249, 250, 250, 251, + 251, 252, 253, 253, 254, 254, 255, 255, 256, 256, + 257, 257, 258, 258, 258, 259, 259, 260, 260, 261, + 261, 262, 262, 263, 263, 264, 264, 265, 265, 265, + 266, 266, 266, 267, 267, 267, 268, 268, 269, 270, + 270, 271, 271, 272, 272, 273, 273, 274, 274, 274, + 275, 275, 275, 276, 276, 276, 277, 277, 278, 278, + 279, 279, 281, 293, 294, 295, 295, 295, 295, 295, + 296, 296, 298, 310, 311, 312, 312, 312, 312, 313, + 313, 315, 329, 330, 331, 331, 331, 331, 332, 332, + 332, 334, 351, 352, 353, 353, 353, 353, 354, 354, + 354, 355, 358, 377, 394, 402, 412, 420, 437, 438, + 439, 439, 439, 439, 439, 440, 440, 440, 441, 441, + 443, 452, 461, 472, 481, 490, 499, 510, 519, 531, + 545, 560, 571, 588, 605, 622, 639, 654, 669, 682, + 697, 706, 715, 724, 733, 742, 751, 760, 769, 778, + 787, 796, 805, 814, 823, 836, 845, 858, 867, 876, + 885, 892, 899, 908, 915, 924, 932, 939, 946, 954, + 963, 972, 981, 995, 1004, 1013, 1022, 1031, 1040, 1049, + 1056, 1063, 1089, 1097, 1104, 1111, 1118, 1125, 1133, 1141, + 1149, 1156, 1167, 1178, 1185, 1194, 1203, 1212, 1219, 1226, + 1234, 1242, 1252, 1262, 1272, 1280, 1293, 1304, 1312, 1325, + 1334, 1343, 1352, 1362, 1372, 1380, 1393, 1402, 1410, 1419, + 1427, 1440, 1449, 1456, 1466, 1476, 1486, 1496, 1506, 1516, + 1526, 1536, 1543, 1550, 1557, 1566, 1575, 1584, 1593, 1600, + 1610, 1630, 1637, 1655, 1668, 1681, 1690, 1699, 1708, 1717, + 1727, 1737, 1748, 1757, 1766, 1775, 1784, 1793, 1802, 1815, + 1828, 1837, 1844, 1853, 1862, 1871, 1880, 1888, 1901, 1909, + 1950, 1957, 1972, 1982, 1992, 1999, 2006, 2013, 2022, 2030, + 2044, 2065, 2086, 2098, 2110, 2122, 2131, 2152, 2162, 2171, + 2179, 2187, 2200, 2213, 2228, 2243, 2252, 2261, 2267, 2276, + 2285, 2295, 2305, 2318, 2331, 2343, 2357, 2369, 2383, 2393, + 2400, 2407, 2416, 2425, 2435, 2445, 2455, 2462, 2469, 2478, + 2487, 2497, 2507, 2514, 2521, 2528, 2536, 2546, 2556, 2566, + 2576, 2615, 2625, 2633, 2641, 2656, 2665, 2670, 2671, 2672, + 2672, 2672, 2673, 2673, 2673, 2674, 2674, 2676, 2686, 2695, + 2702, 2709, 2716, 2723, 2730, 2737, 2742, 2743, 2744, 2744, + 2745, 2745, 2745, 2746, 2747, 2747, 2748, 2748, 2749, 2749, + 2750, 2751, 2752, 2753, 2754, 2755, 2757, 2766, 2773, 2780, + 2789, 2796, 2803, 2810, 2817, 2826, 2835, 2842, 2849, 2859, + 2869, 2879, 2889, 2899, 2909, 2914, 2915, 2916, 2918, 2924, + 2934, 2941, 2950, 2958, 2963, 2964, 2966, 2966, 2966, 2967, + 2967, 2968, 2969, 2970, 2971, 2972, 2974, 2984, 2993, 3000, + 3009, 3016, 3025, 3033, 3046, 3054, 3067, 3072, 3073, 3074, + 3074, 3075, 3075, 3075, 3077, 3089, 3101, 3113, 3128, 3141, + 3152, 3157, 3158, 3159, 3159, 3161, 3176 }; #endif @@ -1155,16 +1160,16 @@ static const char *const yytname[] = "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM", "VAR_SSL_UPSTREAM", "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST", "VAR_STUB_SSL_UPSTREAM", - "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_STUB_FIRST", - "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", - "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES", - "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL", - "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", - "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS", - "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE", - "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", - "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION", - "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", + "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_HTTPS_PORT", + "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", + "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", + "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", + "VAR_DNS64_SYNTHALL", "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", + "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", + "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME", + "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", + "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY", + "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", @@ -1244,9 +1249,9 @@ static const char *const yytname[] = "server_tls_cert_bundle", "server_tls_win_cert", "server_tls_additional_port", "server_tls_ciphers", "server_tls_ciphersuites", "server_tls_session_ticket_keys", - "server_use_systemd", "server_do_daemonize", "server_use_syslog", - "server_log_time_ascii", "server_log_queries", "server_log_replies", - "server_log_tag_queryreply", "server_log_servfail", + "server_https_port", "server_use_systemd", "server_do_daemonize", + "server_use_syslog", "server_log_time_ascii", "server_log_queries", + "server_log_replies", "server_log_tag_queryreply", "server_log_servfail", "server_log_local_actions", "server_chroot", "server_username", "server_directory", "server_logfile", "server_pidfile", "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor", @@ -1377,14 +1382,14 @@ 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 + 535, 536, 537, 538, 539, 540 }; # endif -#define YYPACT_NINF -269 +#define YYPACT_NINF -271 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-269))) + (!!((Yystate) == (-271))) #define YYTABLE_NINF -1 @@ -1395,95 +1400,95 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -269, 0, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, 268, -42, - -37, -41, -21, -43, -44, -87, -106, -204, -228, -268, - 2, 3, 4, 12, 24, 25, 26, 27, 28, 31, + -271, 0, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 269, -42, + -38, -41, -21, -43, -44, -88, -103, -205, -230, -270, + 2, 3, 11, 12, 24, 25, 26, 27, 28, 31, 32, 33, 34, 36, 37, 38, 39, 40, 50, 51, 52, 53, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 87, 88, 91, 93, 94, 95, 96, + 82, 83, 84, 87, 88, 92, 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, 123, 124, 125, 126, 127, 128, 129, + 118, 119, 120, 121, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, + 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 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, 203, 204, 205, - 206, 207, 208, 209, 211, 212, 213, 214, 216, 218, - 221, 233, 235, 236, 237, 238, 239, 240, 241, 243, + 192, 193, 194, 195, 196, 197, 198, 199, 204, 205, + 206, 207, 208, 209, 210, 212, 213, 214, 215, 217, + 220, 222, 234, 236, 237, 238, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 266, 267, 302, 303, 304, 305, 309, 310, 311, - 353, 354, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 355, 356, 357, 358, 359, - 360, 361, -269, -269, -269, -269, -269, -269, -269, -269, - 365, 369, 370, 395, 396, 397, -269, -269, -269, -269, - -269, -269, -269, 399, 410, 411, 412, 413, 414, 415, - -269, -269, -269, -269, -269, -269, -269, -269, 416, 417, - 418, 419, 420, 421, 422, 423, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 424, 425, 426, 427, 428, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, 467, 469, 485, 486, 487, 488, 489, 490, -269, - -269, -269, -269, -269, -269, -269, -269, -269, 491, 492, - 493, 494, 495, 502, 503, 504, 505, 506, 507, 509, - 510, 511, 512, 513, 514, 515, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 518, -269, -269, 521, 524, - 525, 533, 534, 535, 537, 538, 539, 540, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, 541, - 542, 543, 544, 545, -269, -269, -269, -269, -269, -269, - 546, 547, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 548, 549, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, 550, 551, 552, -269, -269, -269, -269, -269, - -269, -269, -269, -269, 553, 554, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, 555, 556, 557, 558, 559, - 560, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, 561, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, 562, -269, -269, 563, 564, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, 565, 566, 567, -269, -269, -269, -269, - -269, -269, -269, -269 + 264, 265, 267, 268, 303, 304, 305, 306, 310, 311, + 312, 354, 355, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 356, 357, 358, + 359, 360, 361, 362, -271, -271, -271, -271, -271, -271, + -271, -271, 366, 370, 371, 396, 397, 398, -271, -271, + -271, -271, -271, -271, -271, 401, 412, 413, 414, 415, + 416, 417, -271, -271, -271, -271, -271, -271, -271, -271, + 418, 419, 420, 421, 422, 423, 424, 425, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 426, 427, 428, + 429, 430, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, 469, 471, 487, 488, 489, 490, 491, + 492, -271, -271, -271, -271, -271, -271, -271, -271, -271, + 493, 494, 495, 496, 497, 504, 505, 506, 507, 508, + 509, 511, 512, 513, 514, 515, 516, 517, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 520, -271, -271, + 523, 526, 527, 535, 536, 537, 539, 540, 541, 542, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, 543, 544, 545, 546, 547, -271, -271, -271, -271, + -271, -271, 548, 549, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 550, 551, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, 552, 553, 554, -271, -271, + -271, -271, -271, -271, -271, -271, -271, 555, 556, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 557, 558, + 559, 560, 561, 562, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, 563, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, 564, -271, -271, 565, 566, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, 567, 568, 569, -271, + -271, -271, -271, -271, -271, -271, -271 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1491,9 +1496,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 211, 221, 484, 542, 503, 230, - 551, 574, 240, 588, 256, 3, 18, 213, 223, 232, - 242, 258, 486, 505, 544, 553, 576, 590, 4, 5, + 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, + 553, 576, 241, 590, 257, 3, 18, 214, 224, 233, + 243, 259, 488, 507, 546, 555, 578, 592, 4, 5, 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1514,144 +1519,144 @@ 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, 17, 19, 20, 83, 86, 95, 182, 183, - 21, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 34, 74, 22, 87, 88, 45, 67, 82, 23, - 24, 27, 28, 25, 26, 29, 30, 31, 32, 33, - 118, 194, 119, 121, 122, 123, 196, 201, 197, 208, - 209, 210, 178, 84, 73, 99, 116, 117, 206, 203, - 120, 35, 36, 37, 38, 39, 75, 89, 90, 105, - 61, 71, 62, 186, 187, 100, 55, 56, 185, 57, - 58, 109, 113, 127, 136, 161, 207, 110, 68, 40, - 41, 42, 97, 128, 129, 130, 43, 44, 46, 47, - 49, 50, 48, 134, 51, 52, 53, 59, 78, 114, - 92, 135, 85, 157, 93, 94, 111, 112, 204, 98, - 54, 76, 79, 60, 63, 101, 102, 77, 158, 103, - 64, 65, 66, 195, 115, 171, 172, 173, 174, 175, - 176, 184, 104, 72, 106, 107, 108, 159, 69, 70, - 91, 80, 81, 96, 124, 125, 205, 126, 131, 132, - 133, 162, 163, 165, 167, 168, 166, 169, 179, 137, - 138, 141, 142, 139, 140, 143, 144, 146, 145, 198, - 200, 199, 160, 170, 188, 190, 189, 191, 192, 193, - 164, 177, 180, 181, 202, 0, 0, 0, 0, 0, - 0, 0, 212, 214, 215, 216, 218, 219, 220, 217, - 0, 0, 0, 0, 0, 0, 222, 224, 225, 226, - 227, 228, 229, 0, 0, 0, 0, 0, 0, 0, - 231, 233, 234, 237, 238, 235, 239, 236, 0, 0, - 0, 0, 0, 0, 0, 0, 241, 243, 244, 245, - 246, 250, 247, 248, 249, 0, 0, 0, 0, 0, - 261, 265, 266, 267, 268, 257, 259, 260, 262, 263, - 264, 0, 0, 0, 0, 0, 0, 0, 0, 485, - 487, 489, 488, 494, 490, 491, 492, 493, 0, 0, + 0, 0, 0, 17, 19, 20, 83, 86, 95, 183, + 184, 21, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 34, 74, 22, 87, 88, 45, 67, 82, + 23, 24, 27, 28, 25, 26, 29, 30, 31, 32, + 33, 118, 195, 119, 121, 122, 123, 197, 202, 198, + 209, 210, 211, 124, 179, 84, 73, 99, 116, 117, + 207, 204, 120, 35, 36, 37, 38, 39, 75, 89, + 90, 105, 61, 71, 62, 187, 188, 100, 55, 56, + 186, 57, 58, 109, 113, 128, 137, 162, 208, 110, + 68, 40, 41, 42, 97, 129, 130, 131, 43, 44, + 46, 47, 49, 50, 48, 135, 51, 52, 53, 59, + 78, 114, 92, 136, 85, 158, 93, 94, 111, 112, + 205, 98, 54, 76, 79, 60, 63, 101, 102, 77, + 159, 103, 64, 65, 66, 196, 115, 172, 173, 174, + 175, 176, 177, 185, 104, 72, 106, 107, 108, 160, + 69, 70, 91, 80, 81, 96, 125, 126, 206, 127, + 132, 133, 134, 163, 164, 166, 168, 169, 167, 170, + 180, 138, 139, 142, 143, 140, 141, 144, 145, 147, + 146, 199, 201, 200, 161, 171, 189, 191, 190, 192, + 193, 194, 165, 178, 181, 182, 203, 0, 0, 0, + 0, 0, 0, 0, 213, 215, 216, 217, 219, 220, + 221, 218, 0, 0, 0, 0, 0, 0, 223, 225, + 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, + 0, 0, 232, 234, 235, 238, 239, 236, 240, 237, + 0, 0, 0, 0, 0, 0, 0, 0, 242, 244, + 245, 246, 247, 251, 248, 249, 250, 0, 0, 0, + 0, 0, 262, 266, 267, 268, 269, 258, 260, 261, + 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, + 0, 487, 489, 491, 490, 496, 492, 493, 494, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 504, 506, 507, 508, + 0, 0, 0, 0, 0, 0, 0, 0, 506, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 0, 543, 545, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 552, 554, - 555, 556, 558, 559, 557, 560, 561, 562, 563, 0, - 0, 0, 0, 0, 575, 577, 578, 579, 580, 581, - 0, 0, 589, 591, 592, 270, 269, 276, 289, 287, - 299, 295, 296, 300, 297, 298, 301, 302, 303, 304, - 305, 327, 328, 329, 330, 331, 355, 356, 357, 362, - 363, 292, 364, 365, 368, 366, 367, 370, 371, 372, - 386, 342, 343, 345, 346, 373, 389, 336, 338, 390, - 396, 397, 398, 293, 354, 414, 415, 337, 409, 320, - 288, 332, 387, 393, 374, 0, 0, 418, 294, 271, - 319, 378, 272, 290, 291, 333, 334, 416, 376, 380, - 381, 273, 419, 358, 385, 321, 341, 391, 392, 395, - 408, 335, 412, 410, 411, 347, 353, 382, 383, 348, - 349, 375, 400, 322, 323, 326, 306, 308, 309, 310, - 311, 312, 420, 421, 423, 359, 360, 361, 369, 424, - 425, 426, 0, 0, 0, 377, 350, 547, 435, 439, - 437, 436, 440, 438, 0, 0, 443, 444, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 379, 394, - 413, 448, 449, 351, 427, 0, 0, 0, 0, 0, - 0, 401, 402, 403, 404, 405, 406, 407, 548, 344, - 339, 399, 318, 274, 275, 340, 450, 452, 451, 453, - 454, 455, 307, 314, 445, 447, 446, 313, 0, 325, - 384, 422, 324, 352, 315, 316, 317, 456, 457, 458, - 462, 461, 459, 460, 463, 464, 465, 466, 468, 467, - 477, 0, 481, 482, 0, 0, 483, 469, 475, 470, - 471, 472, 474, 476, 473, 251, 252, 253, 254, 255, - 495, 497, 496, 499, 500, 501, 502, 498, 524, 525, - 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 546, 564, 565, 566, - 569, 567, 568, 570, 571, 572, 573, 582, 583, 584, - 585, 586, 593, 594, 388, 417, 434, 549, 550, 441, - 442, 428, 429, 0, 0, 0, 433, 587, 478, 479, - 480, 432, 430, 431 + 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, + 565, 0, 0, 0, 0, 0, 577, 579, 580, 581, + 582, 583, 0, 0, 591, 593, 594, 271, 270, 277, + 290, 288, 300, 296, 297, 301, 298, 299, 302, 303, + 304, 305, 306, 329, 330, 331, 332, 333, 357, 358, + 359, 364, 365, 293, 366, 367, 370, 368, 369, 372, + 373, 374, 388, 344, 345, 347, 348, 375, 391, 338, + 340, 392, 398, 399, 400, 294, 356, 416, 417, 339, + 411, 322, 289, 334, 389, 395, 376, 0, 0, 420, + 295, 272, 321, 380, 273, 291, 292, 335, 336, 418, + 378, 382, 383, 274, 421, 360, 387, 323, 343, 393, + 394, 397, 410, 337, 414, 412, 413, 349, 355, 384, + 385, 350, 351, 377, 402, 324, 325, 328, 307, 309, + 310, 311, 312, 313, 319, 422, 423, 425, 361, 362, + 363, 371, 426, 427, 428, 0, 0, 0, 379, 352, + 549, 437, 441, 439, 438, 442, 440, 0, 0, 445, + 446, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 381, 396, 415, 450, 451, 353, 429, 0, 0, + 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, + 409, 550, 346, 341, 401, 320, 275, 276, 342, 452, + 454, 453, 455, 456, 457, 308, 315, 447, 449, 448, + 314, 0, 327, 386, 424, 326, 354, 316, 317, 318, + 458, 459, 460, 464, 463, 461, 462, 465, 466, 467, + 468, 470, 469, 479, 0, 483, 484, 0, 0, 485, + 471, 477, 472, 473, 474, 476, 478, 475, 252, 253, + 254, 255, 256, 497, 499, 498, 501, 502, 503, 504, + 500, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 548, + 566, 567, 568, 571, 569, 570, 572, 573, 574, 575, + 584, 585, 586, 587, 588, 595, 596, 390, 419, 436, + 551, 552, 443, 444, 430, 431, 0, 0, 0, 435, + 589, 480, 481, 482, 434, 432, 433 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -23, 568, 569, 570, - 571, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, - -269, -269, -269, -269, -269, -269, -269, -269 + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -23, 570, 571, + 572, 573, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 15, 16, 28, 232, 17, 29, 432, 18, - 30, 446, 19, 31, 460, 20, 32, 476, 490, 491, - 492, 493, 494, 21, 33, 495, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 433, 434, 435, 436, 437, 438, 439, - 447, 448, 449, 450, 451, 452, 477, 478, 479, 480, - 481, 482, 483, 484, 461, 462, 463, 464, 465, 466, - 467, 22, 34, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 23, 35, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, - 552, 553, 554, 24, 36, 556, 557, 420, 421, 422, - 423, 25, 37, 568, 569, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 26, 38, 584, 585, 586, 587, - 588, 589, 424, 27, 39, 592, 593, 594 + -1, 1, 15, 16, 28, 233, 17, 29, 434, 18, + 30, 448, 19, 31, 462, 20, 32, 478, 492, 493, + 494, 495, 496, 21, 33, 497, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 435, 436, 437, 438, 439, 440, + 441, 449, 450, 451, 452, 453, 454, 479, 480, 481, + 482, 483, 484, 485, 486, 463, 464, 465, 466, 467, + 468, 469, 22, 34, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 23, 35, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, + 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 26, 38, 586, 587, 588, + 589, 590, 591, 426, 27, 39, 594, 595, 596 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1659,142 +1664,142 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 468, 425, 453, 426, 427, 555, 440, 590, 591, - 496, 3, 595, 596, 597, 441, 442, 579, 580, 581, - 582, 583, 598, 468, 558, 559, 560, 561, 562, 563, - 564, 565, 566, 567, 599, 600, 601, 602, 603, 454, - 455, 604, 605, 606, 607, 4, 608, 609, 610, 611, - 612, 5, 501, 502, 503, 504, 505, 506, 507, 508, - 613, 614, 615, 616, 456, 428, 518, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 617, 618, 619, 620, 621, 622, - 623, 624, 625, 626, 627, 6, 429, 628, 629, 430, - 443, 630, 444, 631, 632, 633, 634, 635, 636, 637, - 638, 7, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 657, 457, 458, 658, 659, 660, 661, 662, 663, 664, - 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 8, 677, 678, 679, 680, 681, 682, 683, - 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, - 459, 694, 695, 696, 697, 698, 699, 700, 701, 702, - 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, - 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, - 723, 724, 725, 726, 727, 728, 729, 730, 731, 9, - 470, 471, 472, 732, 733, 734, 735, 736, 737, 738, - 475, 739, 740, 741, 742, 431, 743, 10, 744, 445, - 469, 745, 470, 471, 472, 473, 474, 485, 486, 487, - 488, 489, 475, 746, 11, 747, 748, 749, 750, 751, - 752, 753, 12, 754, 755, 756, 757, 758, 759, 760, - 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, - 771, 772, 773, 774, 775, 13, 776, 777, 0, 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, 778, 779, 780, 781, 72, 73, 74, 782, - 783, 784, 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, 785, 786, 787, 788, 789, 790, 791, - 792, 793, 116, 117, 118, 794, 119, 120, 121, 795, - 796, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 797, 798, 799, 146, 800, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, - 811, 812, 813, 814, 815, 816, 817, 818, 819, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 820, 195, 821, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 822, 823, 824, 825, 826, - 827, 828, 829, 830, 831, 832, 211, 212, 213, 214, - 215, 216, 833, 834, 835, 836, 837, 838, 217, 839, - 840, 841, 842, 843, 844, 845, 218, 219, 846, 220, - 221, 847, 222, 223, 848, 849, 224, 225, 226, 227, - 228, 229, 230, 850, 851, 852, 231, 853, 854, 855, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, - 876, 877, 878, 879, 880, 881, 882, 883, 0, 0, + 2, 470, 427, 455, 428, 429, 442, 592, 593, 557, + 498, 3, 597, 598, 443, 444, 581, 582, 583, 584, + 585, 599, 600, 470, 560, 561, 562, 563, 564, 565, + 566, 567, 568, 569, 601, 602, 603, 604, 605, 456, + 457, 606, 607, 608, 609, 4, 610, 611, 612, 613, + 614, 5, 503, 504, 505, 506, 507, 508, 509, 510, + 615, 616, 617, 618, 458, 430, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 6, 431, 630, 631, 445, + 432, 446, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 7, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660, 459, 460, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 8, 680, 681, 682, 683, 684, 685, + 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 696, 461, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 9, 472, 473, 474, 735, 736, 737, 738, 739, 740, + 741, 477, 742, 743, 744, 745, 433, 746, 10, 447, + 747, 471, 748, 472, 473, 474, 475, 476, 487, 488, + 489, 490, 491, 477, 749, 11, 750, 751, 752, 753, + 754, 755, 756, 12, 757, 758, 759, 760, 761, 762, + 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, + 773, 774, 775, 776, 777, 778, 13, 779, 780, 0, + 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, 781, 782, 783, 784, 72, 73, 74, + 785, 786, 787, 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, 788, 789, 790, 791, 792, 793, + 794, 795, 796, 116, 117, 118, 797, 119, 120, 121, + 798, 799, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 800, 801, 802, 146, + 147, 803, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, + 822, 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, 823, + 196, 824, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 212, 213, + 214, 215, 216, 217, 836, 837, 838, 839, 840, 841, + 218, 842, 843, 844, 845, 846, 847, 848, 219, 220, + 849, 221, 222, 850, 223, 224, 851, 852, 225, 226, + 227, 228, 229, 230, 231, 853, 854, 855, 232, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, + 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 497, 498, 499, 500 + 0, 0, 0, 499, 500, 501, 502 }; static const yytype_int16 yycheck[] = { - 0, 44, 44, 44, 46, 47, 112, 44, 276, 277, - 33, 11, 10, 10, 10, 52, 53, 245, 246, 247, - 248, 249, 10, 44, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 10, 10, 10, 10, 10, 80, + 0, 44, 44, 44, 46, 47, 44, 277, 278, 112, + 33, 11, 10, 10, 52, 53, 246, 247, 248, 249, + 250, 10, 10, 44, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 10, 10, 10, 10, 10, 80, 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, 10, 51, 96, 97, 98, 99, 100, 101, 102, 103, - 10, 10, 10, 10, 105, 107, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 95, 138, 10, 10, 141, - 137, 10, 139, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 105, 107, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 95, 138, 10, 10, 137, + 142, 139, 10, 10, 10, 10, 10, 10, 10, 10, 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 172, 173, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 173, 174, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 152, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 153, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 211, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 212, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 209, - 253, 254, 255, 10, 10, 10, 10, 10, 10, 10, - 263, 10, 10, 10, 10, 267, 10, 227, 10, 266, - 251, 10, 253, 254, 255, 256, 257, 280, 281, 282, - 283, 284, 263, 10, 244, 10, 10, 10, 10, 10, - 10, 10, 252, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 275, 10, 10, -1, 279, - 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, + 210, 254, 255, 256, 10, 10, 10, 10, 10, 10, + 10, 264, 10, 10, 10, 10, 268, 10, 228, 267, + 10, 252, 10, 254, 255, 256, 257, 258, 281, 282, + 283, 284, 285, 264, 10, 245, 10, 10, 10, 10, + 10, 10, 10, 253, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 276, 10, 10, -1, + 280, 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, + 141, 10, 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, 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, 10, + 211, 10, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 239, 240, + 241, 242, 243, 244, 10, 10, 10, 10, 10, 10, + 251, 10, 10, 10, 10, 10, 10, 10, 259, 260, + 10, 262, 263, 10, 265, 266, 10, 10, 269, 270, + 271, 272, 273, 274, 275, 10, 10, 10, 279, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 10, 210, 10, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 238, 239, 240, 241, - 242, 243, 10, 10, 10, 10, 10, 10, 250, 10, - 10, 10, 10, 10, 10, 10, 258, 259, 10, 261, - 262, 10, 264, 265, 10, 10, 268, 269, 270, 271, - 272, 273, 274, 10, 10, 10, 278, 10, 10, 10, 10, 10, 10, 10, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 33, 33, 33, 33 + -1, -1, -1, 33, 33, 33, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 286, 0, 11, 45, 51, 95, 111, 152, 209, - 227, 244, 252, 275, 279, 287, 288, 291, 294, 297, - 300, 308, 526, 537, 558, 566, 579, 588, 289, 292, - 295, 298, 301, 309, 527, 538, 559, 567, 580, 589, + 0, 287, 0, 11, 45, 51, 95, 111, 153, 210, + 228, 245, 253, 276, 280, 288, 289, 292, 295, 298, + 301, 309, 528, 539, 560, 568, 581, 590, 290, 293, + 296, 299, 302, 310, 529, 540, 561, 569, 582, 591, 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, @@ -1805,16 +1810,16 @@ static const yytype_uint16 yystos[] = 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, 171, 172, 173, + 131, 132, 133, 134, 135, 136, 140, 141, 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, 210, 212, 213, 214, 215, + 204, 205, 206, 207, 208, 209, 211, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 238, 239, 240, 241, 242, 243, 250, 258, 259, - 261, 262, 264, 265, 268, 269, 270, 271, 272, 273, - 274, 278, 290, 311, 312, 313, 314, 315, 316, 317, + 226, 227, 239, 240, 241, 242, 243, 244, 251, 259, + 260, 262, 263, 265, 266, 269, 270, 271, 272, 273, + 274, 275, 279, 291, 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, @@ -1833,24 +1838,24 @@ static const yytype_uint16 yystos[] = 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, - 562, 563, 564, 565, 587, 44, 46, 47, 107, 138, - 141, 267, 293, 498, 499, 500, 501, 502, 503, 504, - 44, 52, 53, 137, 139, 266, 296, 505, 506, 507, - 508, 509, 510, 44, 80, 81, 105, 172, 173, 211, - 299, 519, 520, 521, 522, 523, 524, 525, 44, 251, - 253, 254, 255, 256, 257, 263, 302, 511, 512, 513, - 514, 515, 516, 517, 518, 280, 281, 282, 283, 284, - 303, 304, 305, 306, 307, 310, 511, 512, 513, 514, - 515, 96, 97, 98, 99, 100, 101, 102, 103, 528, - 529, 530, 531, 532, 533, 534, 535, 536, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 539, 540, 541, 542, + 498, 499, 564, 565, 566, 567, 589, 44, 46, 47, + 107, 138, 142, 268, 294, 500, 501, 502, 503, 504, + 505, 506, 44, 52, 53, 137, 139, 267, 297, 507, + 508, 509, 510, 511, 512, 44, 80, 81, 105, 173, + 174, 212, 300, 521, 522, 523, 524, 525, 526, 527, + 44, 252, 254, 255, 256, 257, 258, 264, 303, 513, + 514, 515, 516, 517, 518, 519, 520, 281, 282, 283, + 284, 285, 304, 305, 306, 307, 308, 311, 513, 514, + 515, 516, 517, 96, 97, 98, 99, 100, 101, 102, + 103, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 112, 560, 561, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 245, - 246, 247, 248, 249, 581, 582, 583, 584, 585, 586, - 276, 277, 590, 591, 592, 10, 10, 10, 10, 10, + 553, 554, 555, 556, 557, 558, 559, 112, 562, 563, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 246, 247, 248, 249, 250, 583, 584, 585, 586, + 587, 588, 277, 278, 592, 593, 594, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1879,39 +1884,39 @@ 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 285, 286, 286, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 288, 289, 289, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 290, 291, 292, 292, 293, 293, 293, 293, 293, 293, - 293, 294, 295, 295, 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, 302, - 302, 303, 304, 305, 306, 307, 308, 309, 309, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 311, + 0, 286, 287, 287, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 289, 290, 290, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 292, 293, 293, 294, 294, 294, 294, 294, + 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, + 297, 298, 299, 299, 300, 300, 300, 300, 300, 300, + 300, 301, 302, 302, 303, 303, 303, 303, 303, 303, + 303, 303, 304, 305, 306, 307, 308, 309, 310, 310, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 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, @@ -1933,18 +1938,18 @@ static const yytype_uint16 yyr1[] = 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, 527, 528, 528, 528, - 528, 528, 528, 528, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 538, 539, 539, 539, 539, - 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 539, 539, 539, 540, 541, 542, 543, 544, 545, + 522, 523, 524, 525, 526, 527, 528, 529, 529, 530, + 530, 530, 530, 530, 530, 530, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 540, 541, 541, + 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, + 541, 541, 541, 541, 541, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 559, 560, 561, 562, 563, 564, - 565, 566, 567, 567, 568, 568, 568, 568, 568, 568, - 568, 568, 568, 568, 569, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 580, 581, 581, 581, - 581, 581, 582, 583, 584, 585, 586, 587, 588, 589, - 589, 590, 590, 591, 592 + 556, 557, 558, 559, 560, 561, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 569, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, + 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 591, 592, 592, 593, 594 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1971,12 +1976,12 @@ 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, 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, + 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, @@ -1988,28 +1993,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, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, - 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, - 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, + 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 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, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 3, 1, 2, - 0, 1, 1, 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, 2, 2, 2, 2, 2, 3, + 1, 2, 0, 1, 1, 2, 2 }; @@ -2025,22 +2030,22 @@ static const yytype_uint8 yyr2[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) /* Error token number */ #define YYTERROR 1 @@ -2080,37 +2085,37 @@ do { \ } while (0) -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ static void -yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyoutput = yyo; - YYUSE (yyoutput); + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyo, yytoknum[yytype], *yyvaluep); + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ static void -yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyo, "%s %s (", + YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyo, yytype, yyvaluep); - YYFPRINTF (yyo, ")"); + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. @@ -2144,7 +2149,7 @@ do { \ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long yylno = yyrline[yyrule]; + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", @@ -2155,7 +2160,7 @@ yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], - &yyvsp[(yyi + 1) - (yynrhs)] + &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } @@ -2259,10 +2264,7 @@ yytnamerr (char *yyres, const char *yystr) case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - else - goto append; - - append: + /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; @@ -2280,7 +2282,7 @@ yytnamerr (char *yyres, const char *yystr) if (! yyres) return yystrlen (yystr); - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); + return yystpcpy (yyres, yystr) - yyres; } # endif @@ -2358,10 +2360,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; + yysize = yysize1; } } } @@ -2373,7 +2375,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, case N: \ yyformat = S; \ break - default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -2385,10 +2386,9 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; + yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -2514,33 +2514,23 @@ yyparse (void) yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; - /*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | +| yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ -yynewstate: + yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - -/*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - *yyssp = (yytype_int16) yystate; + yysetstate: + *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - goto yyexhaustedlab; -#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + YYSIZE_T yysize = yyssp - yyss + 1; -# if defined yyoverflow +#ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into @@ -2556,10 +2546,14 @@ yysetstate: &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); + yyss = yyss1; yyvs = yyvs1; } -# else /* defined YYSTACK_RELOCATE */ +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -2575,33 +2569,35 @@ yysetstate: goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif +#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; - /*-----------. | yybackup. | `-----------*/ yybackup: + /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -2659,6 +2655,7 @@ yybackup: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + goto yynewstate; @@ -2673,7 +2670,7 @@ yydefault: /*-----------------------------. -| yyreduce -- do a reduction. | +| yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -2693,16 +2690,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: -#line 188 "./util/configparser.y" + case 16: +#line 189 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2702 "util/configparser.c" +#line 2699 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: -#line 280 "./util/configparser.y" + case 212: +#line 282 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2713,11 +2710,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2717 "util/configparser.c" +#line 2714 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 297 "./util/configparser.y" + case 222: +#line 299 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2728,11 +2725,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2732 "util/configparser.c" +#line 2729 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: -#line 314 "./util/configparser.y" + case 231: +#line 316 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2745,11 +2742,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2749 "util/configparser.c" +#line 2746 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: -#line 333 "./util/configparser.y" + case 241: +#line 335 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2765,11 +2762,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2769 "util/configparser.c" +#line 2766 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 357 "./util/configparser.y" + case 252: +#line 359 "./util/configparser.y" /* yacc.c:1646 */ { uint8_t* bitlist; size_t len = 0; @@ -2786,11 +2783,11 @@ yyreduce: } } -#line 2790 "util/configparser.c" +#line 2787 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 376 "./util/configparser.y" + case 253: +#line 378 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2805,21 +2802,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2809 "util/configparser.c" +#line 2806 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 393 "./util/configparser.y" + case 254: +#line 395 "./util/configparser.y" /* yacc.c:1646 */ { 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 2819 "util/configparser.c" +#line 2816 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 401 "./util/configparser.y" + case 255: +#line 403 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2827,21 +2824,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2831 "util/configparser.c" +#line 2828 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 411 "./util/configparser.y" + case 256: +#line 413 "./util/configparser.y" /* yacc.c:1646 */ { 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 2841 "util/configparser.c" +#line 2838 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 419 "./util/configparser.y" + case 257: +#line 421 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2857,11 +2854,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2861 "util/configparser.c" +#line 2858 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 442 "./util/configparser.y" + case 270: +#line 444 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2869,11 +2866,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2873 "util/configparser.c" +#line 2870 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 451 "./util/configparser.y" + case 271: +#line 453 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2881,11 +2878,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2885 "util/configparser.c" +#line 2882 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 460 "./util/configparser.y" + case 272: +#line 462 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2895,11 +2892,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2899 "util/configparser.c" +#line 2896 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 471 "./util/configparser.y" + case 273: +#line 473 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2907,11 +2904,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2911 "util/configparser.c" +#line 2908 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 480 "./util/configparser.y" + case 274: +#line 482 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2919,11 +2916,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2923 "util/configparser.c" +#line 2920 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 489 "./util/configparser.y" + case 275: +#line 491 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2931,11 +2928,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2935 "util/configparser.c" +#line 2932 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 498 "./util/configparser.y" + case 276: +#line 500 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2945,11 +2942,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2949 "util/configparser.c" +#line 2946 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 509 "./util/configparser.y" + case 277: +#line 511 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2957,11 +2954,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2961 "util/configparser.c" +#line 2958 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 518 "./util/configparser.y" + case 278: +#line 520 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2972,11 +2969,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2976 "util/configparser.c" +#line 2973 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 530 "./util/configparser.y" + case 279: +#line 532 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2988,11 +2985,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2992 "util/configparser.c" +#line 2989 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 544 "./util/configparser.y" + case 280: +#line 546 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3006,11 +3003,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3010 "util/configparser.c" +#line 3007 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 559 "./util/configparser.y" + case 281: +#line 561 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3020,11 +3017,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3024 "util/configparser.c" +#line 3021 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 570 "./util/configparser.y" + case 282: +#line 572 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3040,11 +3037,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3044 "util/configparser.c" +#line 3041 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 587 "./util/configparser.y" + case 283: +#line 589 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3060,11 +3057,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3064 "util/configparser.c" +#line 3061 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 604 "./util/configparser.y" + case 284: +#line 606 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3080,11 +3077,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3084 "util/configparser.c" +#line 3081 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 621 "./util/configparser.y" + case 285: +#line 623 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3100,11 +3097,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3104 "util/configparser.c" +#line 3101 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 638 "./util/configparser.y" + case 286: +#line 640 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3118,11 +3115,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3122 "util/configparser.c" +#line 3119 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 653 "./util/configparser.y" + case 287: +#line 655 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3136,11 +3133,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3140 "util/configparser.c" +#line 3137 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 668 "./util/configparser.y" + case 288: +#line 670 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3152,11 +3149,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3156 "util/configparser.c" +#line 3153 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 681 "./util/configparser.y" + case 289: +#line 683 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3170,11 +3167,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3174 "util/configparser.c" +#line 3171 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 696 "./util/configparser.y" + case 290: +#line 698 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3182,11 +3179,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3186 "util/configparser.c" +#line 3183 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 705 "./util/configparser.y" + case 291: +#line 707 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3194,11 +3191,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3198 "util/configparser.c" +#line 3195 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 714 "./util/configparser.y" + case 292: +#line 716 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3206,11 +3203,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3210 "util/configparser.c" +#line 3207 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 723 "./util/configparser.y" + case 293: +#line 725 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3218,11 +3215,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3222 "util/configparser.c" +#line 3219 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 732 "./util/configparser.y" + case 294: +#line 734 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3230,11 +3227,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3234 "util/configparser.c" +#line 3231 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 741 "./util/configparser.y" + case 295: +#line 743 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3242,11 +3239,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3246 "util/configparser.c" +#line 3243 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 750 "./util/configparser.y" + case 296: +#line 752 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3254,11 +3251,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3258 "util/configparser.c" +#line 3255 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 759 "./util/configparser.y" + case 297: +#line 761 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3266,11 +3263,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3270 "util/configparser.c" +#line 3267 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 768 "./util/configparser.y" + case 298: +#line 770 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3278,11 +3275,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3282 "util/configparser.c" +#line 3279 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 777 "./util/configparser.y" + case 299: +#line 779 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3290,11 +3287,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3294 "util/configparser.c" +#line 3291 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 786 "./util/configparser.y" + case 300: +#line 788 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3302,11 +3299,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3306 "util/configparser.c" +#line 3303 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 795 "./util/configparser.y" + case 301: +#line 797 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3314,11 +3311,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3318 "util/configparser.c" +#line 3315 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 804 "./util/configparser.y" + case 302: +#line 806 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3326,11 +3323,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3330 "util/configparser.c" +#line 3327 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 813 "./util/configparser.y" + case 303: +#line 815 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3338,11 +3335,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3342 "util/configparser.c" +#line 3339 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 822 "./util/configparser.y" + case 304: +#line 824 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3354,11 +3351,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3358 "util/configparser.c" +#line 3355 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 835 "./util/configparser.y" + case 305: +#line 837 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3366,11 +3363,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3370 "util/configparser.c" +#line 3367 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 844 "./util/configparser.y" + case 306: +#line 846 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3382,11 +3379,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3386 "util/configparser.c" +#line 3383 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 857 "./util/configparser.y" + case 307: +#line 859 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3394,11 +3391,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3398 "util/configparser.c" +#line 3395 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 866 "./util/configparser.y" + case 308: +#line 868 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3406,11 +3403,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3410 "util/configparser.c" +#line 3407 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 875 "./util/configparser.y" + case 309: +#line 877 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3418,31 +3415,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3422 "util/configparser.c" +#line 3419 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 884 "./util/configparser.y" + case 310: +#line 886 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3432 "util/configparser.c" +#line 3429 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 891 "./util/configparser.y" + case 311: +#line 893 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3442 "util/configparser.c" +#line 3439 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 898 "./util/configparser.y" + case 312: +#line 900 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3450,21 +3447,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3454 "util/configparser.c" +#line 3451 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 907 "./util/configparser.y" + case 313: +#line 909 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3464 "util/configparser.c" +#line 3461 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 914 "./util/configparser.y" + case 314: +#line 916 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3472,53 +3469,65 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3476 "util/configparser.c" +#line 3473 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 923 "./util/configparser.y" + case 315: +#line 925 "./util/configparser.y" /* yacc.c:1646 */ { 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 3487 "util/configparser.c" +#line 3484 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 931 "./util/configparser.y" + case 316: +#line 933 "./util/configparser.y" /* yacc.c:1646 */ { 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 3497 "util/configparser.c" +#line 3494 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 938 "./util/configparser.y" + case 317: +#line 940 "./util/configparser.y" /* yacc.c:1646 */ { 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 3507 "util/configparser.c" +#line 3504 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 945 "./util/configparser.y" + case 318: +#line 947 "./util/configparser.y" /* yacc.c:1646 */ { 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 3518 "util/configparser.c" +#line 3515 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 953 "./util/configparser.y" + case 319: +#line 955 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); + } +#line 3527 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 320: +#line 964 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3526,11 +3535,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3530 "util/configparser.c" +#line 3539 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 962 "./util/configparser.y" + case 321: +#line 973 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3538,11 +3547,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3542 "util/configparser.c" +#line 3551 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 971 "./util/configparser.y" + case 322: +#line 982 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3555,11 +3564,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3559 "util/configparser.c" +#line 3568 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 985 "./util/configparser.y" + case 323: +#line 996 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3567,11 +3576,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3571 "util/configparser.c" +#line 3580 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 994 "./util/configparser.y" + case 324: +#line 1005 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3579,11 +3588,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3583 "util/configparser.c" +#line 3592 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1003 "./util/configparser.y" + case 325: +#line 1014 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3591,11 +3600,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3595 "util/configparser.c" +#line 3604 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1012 "./util/configparser.y" + case 326: +#line 1023 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3603,11 +3612,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3607 "util/configparser.c" +#line 3616 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1021 "./util/configparser.y" + case 327: +#line 1032 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3615,11 +3624,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3619 "util/configparser.c" +#line 3628 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1030 "./util/configparser.y" + case 328: +#line 1041 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3627,31 +3636,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3631 "util/configparser.c" +#line 3640 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1039 "./util/configparser.y" + case 329: +#line 1050 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3641 "util/configparser.c" +#line 3650 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1046 "./util/configparser.y" + case 330: +#line 1057 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3651 "util/configparser.c" +#line 3660 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1053 "./util/configparser.y" + case 331: +#line 1064 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3676,105 +3685,105 @@ yyreduce: } } } -#line 3680 "util/configparser.c" +#line 3689 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1079 "./util/configparser.y" + case 332: +#line 1090 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3691 "util/configparser.c" +#line 3700 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1087 "./util/configparser.y" + case 333: +#line 1098 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3701 "util/configparser.c" +#line 3710 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1094 "./util/configparser.y" + case 334: +#line 1105 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3711 "util/configparser.c" +#line 3720 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1101 "./util/configparser.y" + case 335: +#line 1112 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3721 "util/configparser.c" +#line 3730 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1108 "./util/configparser.y" + case 336: +#line 1119 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3731 "util/configparser.c" +#line 3740 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1115 "./util/configparser.y" + case 337: +#line 1126 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3742 "util/configparser.c" +#line 3751 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1123 "./util/configparser.y" + case 338: +#line 1134 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3753 "util/configparser.c" +#line 3762 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1131 "./util/configparser.y" + case 339: +#line 1142 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3764 "util/configparser.c" +#line 3773 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1139 "./util/configparser.y" + case 340: +#line 1150 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3774 "util/configparser.c" +#line 3783 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1146 "./util/configparser.y" + case 341: +#line 1157 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3784,11 +3793,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3788 "util/configparser.c" +#line 3797 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1157 "./util/configparser.y" + case 342: +#line 1168 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3798,21 +3807,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3802 "util/configparser.c" +#line 3811 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1168 "./util/configparser.y" + case 343: +#line 1179 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3812 "util/configparser.c" +#line 3821 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1175 "./util/configparser.y" + case 344: +#line 1186 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3820,11 +3829,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" +#line 3833 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1184 "./util/configparser.y" + case 345: +#line 1195 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3832,11 +3841,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3836 "util/configparser.c" +#line 3845 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1193 "./util/configparser.y" + case 346: +#line 1204 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3844,53 +3853,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3848 "util/configparser.c" +#line 3857 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1202 "./util/configparser.y" + case 347: +#line 1213 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3858 "util/configparser.c" +#line 3867 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1209 "./util/configparser.y" + case 348: +#line 1220 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3868 "util/configparser.c" +#line 3877 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1216 "./util/configparser.y" + case 349: +#line 1227 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3879 "util/configparser.c" +#line 3888 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1224 "./util/configparser.y" + case 350: +#line 1235 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3890 "util/configparser.c" +#line 3899 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1232 "./util/configparser.y" + case 351: +#line 1243 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3899,11 +3908,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3903 "util/configparser.c" +#line 3912 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1242 "./util/configparser.y" + case 352: +#line 1253 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3912,11 +3921,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3916 "util/configparser.c" +#line 3925 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1252 "./util/configparser.y" + case 353: +#line 1263 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3925,22 +3934,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3929 "util/configparser.c" +#line 3938 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1262 "./util/configparser.y" + case 354: +#line 1273 "./util/configparser.y" /* yacc.c:1646 */ { 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 3940 "util/configparser.c" +#line 3949 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1270 "./util/configparser.y" + case 355: +#line 1281 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3952,11 +3961,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3956 "util/configparser.c" +#line 3965 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1283 "./util/configparser.y" + case 356: +#line 1294 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3966,22 +3975,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3970 "util/configparser.c" +#line 3979 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1294 "./util/configparser.y" + case 357: +#line 1305 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3981 "util/configparser.c" +#line 3990 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1302 "./util/configparser.y" + case 358: +#line 1313 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3993,11 +4002,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3997 "util/configparser.c" +#line 4006 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1315 "./util/configparser.y" + case 359: +#line 1326 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4005,11 +4014,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4009 "util/configparser.c" +#line 4018 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1324 "./util/configparser.y" + case 360: +#line 1335 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4017,11 +4026,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4021 "util/configparser.c" +#line 4030 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1333 "./util/configparser.y" + case 361: +#line 1344 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4029,11 +4038,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4033 "util/configparser.c" +#line 4042 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1342 "./util/configparser.y" + case 362: +#line 1353 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4042,11 +4051,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4046 "util/configparser.c" +#line 4055 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1352 "./util/configparser.y" + case 363: +#line 1363 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4055,22 +4064,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4059 "util/configparser.c" +#line 4068 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1362 "./util/configparser.y" + case 364: +#line 1373 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4070 "util/configparser.c" +#line 4079 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1370 "./util/configparser.y" + case 365: +#line 1381 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4082,11 +4091,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4086 "util/configparser.c" +#line 4095 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1383 "./util/configparser.y" + case 366: +#line 1394 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4094,22 +4103,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4098 "util/configparser.c" +#line 4107 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1392 "./util/configparser.y" + case 367: +#line 1403 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4109 "util/configparser.c" +#line 4118 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1400 "./util/configparser.y" + case 368: +#line 1411 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4117,22 +4126,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4121 "util/configparser.c" +#line 4130 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1409 "./util/configparser.y" + case 369: +#line 1420 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4132 "util/configparser.c" +#line 4141 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1417 "./util/configparser.y" + case 370: +#line 1428 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4144,11 +4153,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4148 "util/configparser.c" +#line 4157 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1430 "./util/configparser.y" + case 371: +#line 1441 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4156,21 +4165,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4160 "util/configparser.c" +#line 4169 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1439 "./util/configparser.y" + case 372: +#line 1450 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4170 "util/configparser.c" +#line 4179 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1446 "./util/configparser.y" + case 373: +#line 1457 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4179,11 +4188,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4183 "util/configparser.c" +#line 4192 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1456 "./util/configparser.y" + case 374: +#line 1467 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4192,11 +4201,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4196 "util/configparser.c" +#line 4205 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1466 "./util/configparser.y" + case 375: +#line 1477 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4205,11 +4214,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4209 "util/configparser.c" +#line 4218 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1476 "./util/configparser.y" + case 376: +#line 1487 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4218,11 +4227,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4222 "util/configparser.c" +#line 4231 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1486 "./util/configparser.y" + case 377: +#line 1497 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4231,11 +4240,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4235 "util/configparser.c" +#line 4244 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1496 "./util/configparser.y" + case 378: +#line 1507 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4244,11 +4253,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4248 "util/configparser.c" +#line 4257 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1506 "./util/configparser.y" + case 379: +#line 1517 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4257,11 +4266,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4261 "util/configparser.c" +#line 4270 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1516 "./util/configparser.y" + case 380: +#line 1527 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4270,41 +4279,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4274 "util/configparser.c" +#line 4283 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1526 "./util/configparser.y" + case 381: +#line 1537 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4284 "util/configparser.c" +#line 4293 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1533 "./util/configparser.y" + case 382: +#line 1544 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4294 "util/configparser.c" +#line 4303 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1540 "./util/configparser.y" + case 383: +#line 1551 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4304 "util/configparser.c" +#line 4313 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1547 "./util/configparser.y" + case 384: +#line 1558 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4312,11 +4321,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4316 "util/configparser.c" +#line 4325 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1556 "./util/configparser.y" + case 385: +#line 1567 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4324,11 +4333,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4328 "util/configparser.c" +#line 4337 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1565 "./util/configparser.y" + case 386: +#line 1576 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4336,11 +4345,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4340 "util/configparser.c" +#line 4349 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1574 "./util/configparser.y" + case 387: +#line 1585 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4348,21 +4357,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4352 "util/configparser.c" +#line 4361 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1583 "./util/configparser.y" + case 388: +#line 1594 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4362 "util/configparser.c" +#line 4371 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1590 "./util/configparser.y" + case 389: +#line 1601 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4371,11 +4380,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4375 "util/configparser.c" +#line 4384 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1600 "./util/configparser.y" + case 390: +#line 1611 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4394,21 +4403,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4398 "util/configparser.c" +#line 4407 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1620 "./util/configparser.y" + case 391: +#line 1631 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4408 "util/configparser.c" +#line 4417 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1627 "./util/configparser.y" + case 392: +#line 1638 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4425,11 +4434,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4429 "util/configparser.c" +#line 4438 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1645 "./util/configparser.y" + case 393: +#line 1656 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4441,11 +4450,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4445 "util/configparser.c" +#line 4454 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1658 "./util/configparser.y" + case 394: +#line 1669 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4457,11 +4466,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4461 "util/configparser.c" +#line 4470 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1671 "./util/configparser.y" + case 395: +#line 1682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4469,11 +4478,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4473 "util/configparser.c" +#line 4482 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1680 "./util/configparser.y" + case 396: +#line 1691 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4481,11 +4490,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4485 "util/configparser.c" +#line 4494 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1689 "./util/configparser.y" + case 397: +#line 1700 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4493,11 +4502,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4497 "util/configparser.c" +#line 4506 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1698 "./util/configparser.y" + case 398: +#line 1709 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4505,11 +4514,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4509 "util/configparser.c" +#line 4518 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1707 "./util/configparser.y" + case 399: +#line 1718 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4518,11 +4527,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4522 "util/configparser.c" +#line 4531 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1717 "./util/configparser.y" + case 400: +#line 1728 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4531,11 +4540,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4535 "util/configparser.c" +#line 4544 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1727 "./util/configparser.y" + case 401: +#line 1738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4545,11 +4554,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4549 "util/configparser.c" +#line 4558 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1738 "./util/configparser.y" + case 402: +#line 1749 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4557,11 +4566,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4561 "util/configparser.c" +#line 4570 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1747 "./util/configparser.y" + case 403: +#line 1758 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4569,11 +4578,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4573 "util/configparser.c" +#line 4582 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1756 "./util/configparser.y" + case 404: +#line 1767 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4581,11 +4590,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4585 "util/configparser.c" +#line 4594 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1765 "./util/configparser.y" + case 405: +#line 1776 "./util/configparser.y" /* yacc.c:1646 */ { 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) @@ -4593,11 +4602,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4597 "util/configparser.c" +#line 4606 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1774 "./util/configparser.y" + case 406: +#line 1785 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4605,11 +4614,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4609 "util/configparser.c" +#line 4618 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1783 "./util/configparser.y" + case 407: +#line 1794 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4617,11 +4626,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4621 "util/configparser.c" +#line 4630 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1792 "./util/configparser.y" + case 408: +#line 1803 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4633,11 +4642,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4637 "util/configparser.c" +#line 4646 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1805 "./util/configparser.y" + case 409: +#line 1816 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4649,11 +4658,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4653 "util/configparser.c" +#line 4662 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1818 "./util/configparser.y" + case 410: +#line 1829 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4661,21 +4670,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4665 "util/configparser.c" +#line 4674 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 1827 "./util/configparser.y" + case 411: +#line 1838 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4675 "util/configparser.c" +#line 4684 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 1834 "./util/configparser.y" + case 412: +#line 1845 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4683,11 +4692,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4687 "util/configparser.c" +#line 4696 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 1843 "./util/configparser.y" + case 413: +#line 1854 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4695,11 +4704,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4699 "util/configparser.c" +#line 4708 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 1852 "./util/configparser.y" + case 414: +#line 1863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4707,11 +4716,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4711 "util/configparser.c" +#line 4720 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 1861 "./util/configparser.y" + case 415: +#line 1872 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4720,22 +4729,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4724 "util/configparser.c" +#line 4733 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 1870 "./util/configparser.y" + case 416: +#line 1881 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4735 "util/configparser.c" +#line 4744 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 1878 "./util/configparser.y" + case 417: +#line 1889 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4747,22 +4756,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4751 "util/configparser.c" +#line 4760 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 1891 "./util/configparser.y" + case 418: +#line 1902 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4762 "util/configparser.c" +#line 4771 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 1899 "./util/configparser.y" + case 419: +#line 1910 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4802,21 +4811,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4806 "util/configparser.c" +#line 4815 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 1940 "./util/configparser.y" + case 420: +#line 1951 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4816 "util/configparser.c" +#line 4825 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 1947 "./util/configparser.y" + case 421: +#line 1958 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4830,11 +4839,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4834 "util/configparser.c" +#line 4843 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 1962 "./util/configparser.y" + case 422: +#line 1973 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4843,11 +4852,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4847 "util/configparser.c" +#line 4856 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 1972 "./util/configparser.y" + case 423: +#line 1983 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4856,41 +4865,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4860 "util/configparser.c" +#line 4869 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 1982 "./util/configparser.y" + case 424: +#line 1993 "./util/configparser.y" /* yacc.c:1646 */ { 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 4870 "util/configparser.c" +#line 4879 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 1989 "./util/configparser.y" + case 425: +#line 2000 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4880 "util/configparser.c" +#line 4889 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 1996 "./util/configparser.y" + case 426: +#line 2007 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4890 "util/configparser.c" +#line 4899 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2003 "./util/configparser.y" + case 427: +#line 2014 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4898,22 +4907,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4902 "util/configparser.c" +#line 4911 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2012 "./util/configparser.y" + case 428: +#line 2023 "./util/configparser.y" /* yacc.c:1646 */ { 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 4913 "util/configparser.c" +#line 4922 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2020 "./util/configparser.y" + case 429: +#line 2031 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4926,11 +4935,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4930 "util/configparser.c" +#line 4939 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2034 "./util/configparser.y" + case 430: +#line 2045 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4950,11 +4959,11 @@ yyreduce: } } } -#line 4954 "util/configparser.c" +#line 4963 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2055 "./util/configparser.y" + case 431: +#line 2066 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4974,11 +4983,11 @@ yyreduce: } } } -#line 4978 "util/configparser.c" +#line 4987 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2076 "./util/configparser.y" + case 432: +#line 2087 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4989,11 +4998,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4993 "util/configparser.c" +#line 5002 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2088 "./util/configparser.y" + case 433: +#line 2099 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5004,11 +5013,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5008 "util/configparser.c" +#line 5017 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2100 "./util/configparser.y" + case 434: +#line 2111 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5019,11 +5028,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5023 "util/configparser.c" +#line 5032 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2112 "./util/configparser.y" + case 435: +#line 2123 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5031,11 +5040,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5035 "util/configparser.c" +#line 5044 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2121 "./util/configparser.y" + case 436: +#line 2132 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5055,11 +5064,11 @@ yyreduce: } } } -#line 5059 "util/configparser.c" +#line 5068 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2142 "./util/configparser.y" + case 437: +#line 2153 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5067,11 +5076,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5071 "util/configparser.c" +#line 5080 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2152 "./util/configparser.y" + case 438: +#line 2163 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5079,33 +5088,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5083 "util/configparser.c" +#line 5092 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2161 "./util/configparser.y" + case 439: +#line 2172 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5094 "util/configparser.c" +#line 5103 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2169 "./util/configparser.y" + case 440: +#line 2180 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5105 "util/configparser.c" +#line 5114 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2177 "./util/configparser.y" + case 441: +#line 2188 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5117,11 +5126,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5121 "util/configparser.c" +#line 5130 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2190 "./util/configparser.y" + case 442: +#line 2201 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5133,11 +5142,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5137 "util/configparser.c" +#line 5146 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2203 "./util/configparser.y" + case 443: +#line 2214 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5151,11 +5160,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5155 "util/configparser.c" +#line 5164 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2218 "./util/configparser.y" + case 444: +#line 2229 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5169,11 +5178,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5173 "util/configparser.c" +#line 5182 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2233 "./util/configparser.y" + case 445: +#line 2244 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5181,11 +5190,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5185 "util/configparser.c" +#line 5194 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2242 "./util/configparser.y" + case 446: +#line 2253 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5193,20 +5202,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5197 "util/configparser.c" +#line 5206 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2251 "./util/configparser.y" + case 447: +#line 2262 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5206 "util/configparser.c" +#line 5215 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2257 "./util/configparser.y" + case 448: +#line 2268 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5214,11 +5223,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5218 "util/configparser.c" +#line 5227 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2266 "./util/configparser.y" + case 449: +#line 2277 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5226,11 +5235,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5230 "util/configparser.c" +#line 5239 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2275 "./util/configparser.y" + case 450: +#line 2286 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5239,11 +5248,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5243 "util/configparser.c" +#line 5252 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2285 "./util/configparser.y" + case 451: +#line 2296 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5252,11 +5261,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5256 "util/configparser.c" +#line 5265 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2295 "./util/configparser.y" + case 452: +#line 2306 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5268,11 +5277,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5272 "util/configparser.c" +#line 5281 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2308 "./util/configparser.y" + case 453: +#line 2319 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5284,11 +5293,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5288 "util/configparser.c" +#line 5297 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2321 "./util/configparser.y" + case 454: +#line 2332 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5299,11 +5308,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5303 "util/configparser.c" +#line 5312 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2333 "./util/configparser.y" + case 455: +#line 2344 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5316,11 +5325,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5320 "util/configparser.c" +#line 5329 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2347 "./util/configparser.y" + case 456: +#line 2358 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5331,11 +5340,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5335 "util/configparser.c" +#line 5344 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2359 "./util/configparser.y" + case 457: +#line 2370 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5348,11 +5357,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5352 "util/configparser.c" +#line 5361 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2373 "./util/configparser.y" + case 458: +#line 2384 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5361,31 +5370,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5365 "util/configparser.c" +#line 5374 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2383 "./util/configparser.y" + case 459: +#line 2394 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5375 "util/configparser.c" +#line 5384 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2390 "./util/configparser.y" + case 460: +#line 2401 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5385 "util/configparser.c" +#line 5394 "util/configparser.c" /* yacc.c:1646 */ break; - case 459: -#line 2397 "./util/configparser.y" + case 461: +#line 2408 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5393,11 +5402,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5397 "util/configparser.c" +#line 5406 "util/configparser.c" /* yacc.c:1646 */ break; - case 460: -#line 2406 "./util/configparser.y" + case 462: +#line 2417 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5405,11 +5414,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5409 "util/configparser.c" +#line 5418 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2415 "./util/configparser.y" + case 463: +#line 2426 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5418,11 +5427,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5422 "util/configparser.c" +#line 5431 "util/configparser.c" /* yacc.c:1646 */ break; - case 462: -#line 2425 "./util/configparser.y" + case 464: +#line 2436 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5431,11 +5440,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5435 "util/configparser.c" +#line 5444 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2435 "./util/configparser.y" + case 465: +#line 2446 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5444,31 +5453,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5448 "util/configparser.c" +#line 5457 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2445 "./util/configparser.y" + case 466: +#line 2456 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5458 "util/configparser.c" +#line 5467 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2452 "./util/configparser.y" + case 467: +#line 2463 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5468 "util/configparser.c" +#line 5477 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2459 "./util/configparser.y" + case 468: +#line 2470 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5476,11 +5485,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5480 "util/configparser.c" +#line 5489 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2468 "./util/configparser.y" + case 469: +#line 2479 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5488,11 +5497,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5492 "util/configparser.c" +#line 5501 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2477 "./util/configparser.y" + case 470: +#line 2488 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5501,11 +5510,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5505 "util/configparser.c" +#line 5514 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2487 "./util/configparser.y" + case 471: +#line 2498 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5514,52 +5523,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5518 "util/configparser.c" +#line 5527 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2497 "./util/configparser.y" + case 472: +#line 2508 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5528 "util/configparser.c" +#line 5537 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2504 "./util/configparser.y" + case 473: +#line 2515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5538 "util/configparser.c" +#line 5547 "util/configparser.c" /* yacc.c:1646 */ break; - case 472: -#line 2511 "./util/configparser.y" + case 474: +#line 2522 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5548 "util/configparser.c" +#line 5557 "util/configparser.c" /* yacc.c:1646 */ break; - case 473: -#line 2518 "./util/configparser.y" + case 475: +#line 2529 "./util/configparser.y" /* yacc.c:1646 */ { 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 5559 "util/configparser.c" +#line 5568 "util/configparser.c" /* yacc.c:1646 */ break; - case 474: -#line 2526 "./util/configparser.y" + case 476: +#line 2537 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5568,11 +5577,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5572 "util/configparser.c" +#line 5581 "util/configparser.c" /* yacc.c:1646 */ break; - case 475: -#line 2536 "./util/configparser.y" + case 477: +#line 2547 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5581,11 +5590,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5585 "util/configparser.c" +#line 5594 "util/configparser.c" /* yacc.c:1646 */ break; - case 476: -#line 2546 "./util/configparser.y" + case 478: +#line 2557 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5594,11 +5603,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5598 "util/configparser.c" +#line 5607 "util/configparser.c" /* yacc.c:1646 */ break; - case 477: -#line 2556 "./util/configparser.y" + case 479: +#line 2567 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5607,11 +5616,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5611 "util/configparser.c" +#line 5620 "util/configparser.c" /* yacc.c:1646 */ break; - case 478: -#line 2566 "./util/configparser.y" + case 480: +#line 2577 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5649,11 +5658,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5653 "util/configparser.c" +#line 5662 "util/configparser.c" /* yacc.c:1646 */ break; - case 479: -#line 2605 "./util/configparser.y" + case 481: +#line 2616 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5662,33 +5671,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5666 "util/configparser.c" +#line 5675 "util/configparser.c" /* yacc.c:1646 */ break; - case 480: -#line 2615 "./util/configparser.y" + case 482: +#line 2626 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5677 "util/configparser.c" +#line 5686 "util/configparser.c" /* yacc.c:1646 */ break; - case 481: -#line 2623 "./util/configparser.y" + case 483: +#line 2634 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5688 "util/configparser.c" +#line 5697 "util/configparser.c" /* yacc.c:1646 */ break; - case 482: -#line 2631 "./util/configparser.y" + case 484: +#line 2642 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5702,11 +5711,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5706 "util/configparser.c" +#line 5715 "util/configparser.c" /* yacc.c:1646 */ break; - case 483: -#line 2646 "./util/configparser.y" + case 485: +#line 2657 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5714,19 +5723,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5718 "util/configparser.c" +#line 5727 "util/configparser.c" /* yacc.c:1646 */ break; - case 484: -#line 2655 "./util/configparser.y" + case 486: +#line 2666 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5726 "util/configparser.c" +#line 5735 "util/configparser.c" /* yacc.c:1646 */ break; - case 495: -#line 2666 "./util/configparser.y" + case 497: +#line 2677 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5735,11 +5744,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5739 "util/configparser.c" +#line 5748 "util/configparser.c" /* yacc.c:1646 */ break; - case 496: -#line 2676 "./util/configparser.y" + case 498: +#line 2687 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5747,79 +5756,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5751 "util/configparser.c" +#line 5760 "util/configparser.c" /* yacc.c:1646 */ break; - case 497: -#line 2685 "./util/configparser.y" + case 499: +#line 2696 "./util/configparser.y" /* yacc.c:1646 */ { 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 5761 "util/configparser.c" +#line 5770 "util/configparser.c" /* yacc.c:1646 */ break; - case 498: -#line 2692 "./util/configparser.y" + case 500: +#line 2703 "./util/configparser.y" /* yacc.c:1646 */ { 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 5771 "util/configparser.c" +#line 5780 "util/configparser.c" /* yacc.c:1646 */ break; - case 499: -#line 2699 "./util/configparser.y" + case 501: +#line 2710 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5781 "util/configparser.c" +#line 5790 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2706 "./util/configparser.y" + case 502: +#line 2717 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5791 "util/configparser.c" +#line 5800 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2713 "./util/configparser.y" + case 503: +#line 2724 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5801 "util/configparser.c" +#line 5810 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2720 "./util/configparser.y" + case 504: +#line 2731 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5811 "util/configparser.c" +#line 5820 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2727 "./util/configparser.y" + case 505: +#line 2738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5819 "util/configparser.c" +#line 5828 "util/configparser.c" /* yacc.c:1646 */ break; - case 524: -#line 2747 "./util/configparser.y" + case 526: +#line 2758 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5827,31 +5836,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5831 "util/configparser.c" +#line 5840 "util/configparser.c" /* yacc.c:1646 */ break; - case 525: -#line 2756 "./util/configparser.y" + case 527: +#line 2767 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5841 "util/configparser.c" +#line 5850 "util/configparser.c" /* yacc.c:1646 */ break; - case 526: -#line 2763 "./util/configparser.y" + case 528: +#line 2774 "./util/configparser.y" /* yacc.c:1646 */ { 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 5851 "util/configparser.c" +#line 5860 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2770 "./util/configparser.y" + case 529: +#line 2781 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5859,51 +5868,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5863 "util/configparser.c" +#line 5872 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2779 "./util/configparser.y" + case 530: +#line 2790 "./util/configparser.y" /* yacc.c:1646 */ { 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 5873 "util/configparser.c" +#line 5882 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2786 "./util/configparser.y" + case 531: +#line 2797 "./util/configparser.y" /* yacc.c:1646 */ { 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 5883 "util/configparser.c" +#line 5892 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2793 "./util/configparser.y" + case 532: +#line 2804 "./util/configparser.y" /* yacc.c:1646 */ { 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 5893 "util/configparser.c" +#line 5902 "util/configparser.c" /* yacc.c:1646 */ break; - case 531: -#line 2800 "./util/configparser.y" + case 533: +#line 2811 "./util/configparser.y" /* yacc.c:1646 */ { 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 5903 "util/configparser.c" +#line 5912 "util/configparser.c" /* yacc.c:1646 */ break; - case 532: -#line 2807 "./util/configparser.y" + case 534: +#line 2818 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5911,11 +5920,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5915 "util/configparser.c" +#line 5924 "util/configparser.c" /* yacc.c:1646 */ break; - case 533: -#line 2816 "./util/configparser.y" + case 535: +#line 2827 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5923,31 +5932,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5927 "util/configparser.c" +#line 5936 "util/configparser.c" /* yacc.c:1646 */ break; - case 534: -#line 2825 "./util/configparser.y" + case 536: +#line 2836 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5937 "util/configparser.c" +#line 5946 "util/configparser.c" /* yacc.c:1646 */ break; - case 535: -#line 2832 "./util/configparser.y" + case 537: +#line 2843 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5947 "util/configparser.c" +#line 5956 "util/configparser.c" /* yacc.c:1646 */ break; - case 536: -#line 2839 "./util/configparser.y" + case 538: +#line 2850 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5956,11 +5965,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5960 "util/configparser.c" +#line 5969 "util/configparser.c" /* yacc.c:1646 */ break; - case 537: -#line 2849 "./util/configparser.y" + case 539: +#line 2860 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5969,11 +5978,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5973 "util/configparser.c" +#line 5982 "util/configparser.c" /* yacc.c:1646 */ break; - case 538: -#line 2859 "./util/configparser.y" + case 540: +#line 2870 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5982,11 +5991,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5986 "util/configparser.c" +#line 5995 "util/configparser.c" /* yacc.c:1646 */ break; - case 539: -#line 2869 "./util/configparser.y" + case 541: +#line 2880 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5995,11 +6004,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5999 "util/configparser.c" +#line 6008 "util/configparser.c" /* yacc.c:1646 */ break; - case 540: -#line 2879 "./util/configparser.y" + case 542: +#line 2890 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6008,11 +6017,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6012 "util/configparser.c" +#line 6021 "util/configparser.c" /* yacc.c:1646 */ break; - case 541: -#line 2889 "./util/configparser.y" + case 543: +#line 2900 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6021,29 +6030,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6025 "util/configparser.c" +#line 6034 "util/configparser.c" /* yacc.c:1646 */ break; - case 542: -#line 2899 "./util/configparser.y" + case 544: +#line 2910 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 6033 "util/configparser.c" +#line 6042 "util/configparser.c" /* yacc.c:1646 */ break; - case 546: -#line 2908 "./util/configparser.y" + case 548: +#line 2919 "./util/configparser.y" /* yacc.c:1646 */ { 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 6043 "util/configparser.c" +#line 6052 "util/configparser.c" /* yacc.c:1646 */ break; - case 547: -#line 2914 "./util/configparser.y" + case 549: +#line 2925 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6052,21 +6061,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6056 "util/configparser.c" +#line 6065 "util/configparser.c" /* yacc.c:1646 */ break; - case 548: -#line 2924 "./util/configparser.y" + case 550: +#line 2935 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6066 "util/configparser.c" +#line 6075 "util/configparser.c" /* yacc.c:1646 */ break; - case 549: -#line 2931 "./util/configparser.y" + case 551: +#line 2942 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6074,30 +6083,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6078 "util/configparser.c" +#line 6087 "util/configparser.c" /* yacc.c:1646 */ break; - case 550: -#line 2940 "./util/configparser.y" + case 552: +#line 2951 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6089 "util/configparser.c" +#line 6098 "util/configparser.c" /* yacc.c:1646 */ break; - case 551: -#line 2948 "./util/configparser.y" + case 553: +#line 2959 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6097 "util/configparser.c" +#line 6106 "util/configparser.c" /* yacc.c:1646 */ break; - case 564: -#line 2964 "./util/configparser.y" + case 566: +#line 2975 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6105,11 +6114,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6109 "util/configparser.c" +#line 6118 "util/configparser.c" /* yacc.c:1646 */ break; - case 565: -#line 2974 "./util/configparser.y" + case 567: +#line 2985 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6117,21 +6126,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6121 "util/configparser.c" +#line 6130 "util/configparser.c" /* yacc.c:1646 */ break; - case 566: -#line 2983 "./util/configparser.y" + case 568: +#line 2994 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6131 "util/configparser.c" +#line 6140 "util/configparser.c" /* yacc.c:1646 */ break; - case 567: -#line 2990 "./util/configparser.y" + case 569: +#line 3001 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6139,21 +6148,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 6143 "util/configparser.c" +#line 6152 "util/configparser.c" /* yacc.c:1646 */ break; - case 568: -#line 2999 "./util/configparser.y" + case 570: +#line 3010 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6153 "util/configparser.c" +#line 6162 "util/configparser.c" /* yacc.c:1646 */ break; - case 569: -#line 3006 "./util/configparser.y" + case 571: +#line 3017 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6161,22 +6170,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 6165 "util/configparser.c" +#line 6174 "util/configparser.c" /* yacc.c:1646 */ break; - case 570: -#line 3015 "./util/configparser.y" + case 572: +#line 3026 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6176 "util/configparser.c" +#line 6185 "util/configparser.c" /* yacc.c:1646 */ break; - case 571: -#line 3023 "./util/configparser.y" + case 573: +#line 3034 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6188,22 +6197,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6192 "util/configparser.c" +#line 6201 "util/configparser.c" /* yacc.c:1646 */ break; - case 572: -#line 3036 "./util/configparser.y" + case 574: +#line 3047 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6203 "util/configparser.c" +#line 6212 "util/configparser.c" /* yacc.c:1646 */ break; - case 573: -#line 3044 "./util/configparser.y" + case 575: +#line 3055 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6215,19 +6224,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6219 "util/configparser.c" +#line 6228 "util/configparser.c" /* yacc.c:1646 */ break; - case 574: -#line 3057 "./util/configparser.y" + case 576: +#line 3068 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 6227 "util/configparser.c" +#line 6236 "util/configparser.c" /* yacc.c:1646 */ break; - case 582: -#line 3067 "./util/configparser.y" + case 584: +#line 3078 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6238,11 +6247,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6242 "util/configparser.c" +#line 6251 "util/configparser.c" /* yacc.c:1646 */ break; - case 583: -#line 3079 "./util/configparser.y" + case 585: +#line 3090 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6253,11 +6262,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6257 "util/configparser.c" +#line 6266 "util/configparser.c" /* yacc.c:1646 */ break; - case 584: -#line 3091 "./util/configparser.y" + case 586: +#line 3102 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6268,11 +6277,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6272 "util/configparser.c" +#line 6281 "util/configparser.c" /* yacc.c:1646 */ break; - case 585: -#line 3103 "./util/configparser.y" + case 587: +#line 3114 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6286,11 +6295,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6290 "util/configparser.c" +#line 6299 "util/configparser.c" /* yacc.c:1646 */ break; - case 586: -#line 3118 "./util/configparser.y" + case 588: +#line 3129 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6302,11 +6311,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6306 "util/configparser.c" +#line 6315 "util/configparser.c" /* yacc.c:1646 */ break; - case 587: -#line 3131 "./util/configparser.y" + case 589: +#line 3142 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6316,19 +6325,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6320 "util/configparser.c" +#line 6329 "util/configparser.c" /* yacc.c:1646 */ break; - case 588: -#line 3142 "./util/configparser.y" + case 590: +#line 3153 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(ipset:)\n")); } -#line 6328 "util/configparser.c" +#line 6337 "util/configparser.c" /* yacc.c:1646 */ break; - case 593: -#line 3151 "./util/configparser.y" + case 595: +#line 3162 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6342,11 +6351,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6346 "util/configparser.c" +#line 6355 "util/configparser.c" /* yacc.c:1646 */ break; - case 594: -#line 3166 "./util/configparser.y" + case 596: +#line 3177 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6360,12 +6369,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6364 "util/configparser.c" +#line 6373 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6368 "util/configparser.c" - +#line 6377 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6390,13 +6398,14 @@ yyreduce: /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; @@ -6479,10 +6488,12 @@ yyerrlab: | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -6544,7 +6555,6 @@ yyacceptlab: yyresult = 0; goto yyreturn; - /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -6552,7 +6562,6 @@ yyabortlab: yyresult = 1; goto yyreturn; - #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -6563,10 +6572,6 @@ yyexhaustedlab: /* Fall through. */ #endif - -/*-----------------------------------------------------. -| yyreturn -- parsing is finished, return the result. | -`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -6596,7 +6601,7 @@ yyreturn: #endif return yyresult; } -#line 3180 "./util/configparser.y" +#line 3191 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index aaf822223..117b1e5fe 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,9 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.4.1. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,9 +30,6 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ - #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ @@ -187,150 +183,151 @@ extern int yydebug; VAR_STUB_SSL_UPSTREAM = 393, VAR_FORWARD_SSL_UPSTREAM = 394, VAR_TLS_CERT_BUNDLE = 395, - VAR_STUB_FIRST = 396, - VAR_MINIMAL_RESPONSES = 397, - VAR_RRSET_ROUNDROBIN = 398, - VAR_MAX_UDP_SIZE = 399, - VAR_DELAY_CLOSE = 400, - VAR_UNBLOCK_LAN_ZONES = 401, - VAR_INSECURE_LAN_ZONES = 402, - VAR_INFRA_CACHE_MIN_RTT = 403, - VAR_DNS64_PREFIX = 404, - VAR_DNS64_SYNTHALL = 405, - VAR_DNS64_IGNORE_AAAA = 406, - VAR_DNSTAP = 407, - VAR_DNSTAP_ENABLE = 408, - VAR_DNSTAP_SOCKET_PATH = 409, - VAR_DNSTAP_IP = 410, - VAR_DNSTAP_TLS = 411, - VAR_DNSTAP_TLS_SERVER_NAME = 412, - VAR_DNSTAP_TLS_CERT_BUNDLE = 413, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 414, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 415, - VAR_DNSTAP_SEND_IDENTITY = 416, - VAR_DNSTAP_SEND_VERSION = 417, - VAR_DNSTAP_IDENTITY = 418, - VAR_DNSTAP_VERSION = 419, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 420, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 421, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 422, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 423, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 424, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 425, - VAR_RESPONSE_IP_TAG = 426, - VAR_RESPONSE_IP = 427, - VAR_RESPONSE_IP_DATA = 428, - VAR_HARDEN_ALGO_DOWNGRADE = 429, - VAR_IP_TRANSPARENT = 430, - VAR_DISABLE_DNSSEC_LAME_CHECK = 431, - VAR_IP_RATELIMIT = 432, - VAR_IP_RATELIMIT_SLABS = 433, - VAR_IP_RATELIMIT_SIZE = 434, - VAR_RATELIMIT = 435, - VAR_RATELIMIT_SLABS = 436, - VAR_RATELIMIT_SIZE = 437, - VAR_RATELIMIT_FOR_DOMAIN = 438, - VAR_RATELIMIT_BELOW_DOMAIN = 439, - VAR_IP_RATELIMIT_FACTOR = 440, - VAR_RATELIMIT_FACTOR = 441, - VAR_SEND_CLIENT_SUBNET = 442, - VAR_CLIENT_SUBNET_ZONE = 443, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 444, - VAR_CLIENT_SUBNET_OPCODE = 445, - VAR_MAX_CLIENT_SUBNET_IPV4 = 446, - VAR_MAX_CLIENT_SUBNET_IPV6 = 447, - VAR_MIN_CLIENT_SUBNET_IPV4 = 448, - VAR_MIN_CLIENT_SUBNET_IPV6 = 449, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 451, - VAR_CAPS_WHITELIST = 452, - VAR_CACHE_MAX_NEGATIVE_TTL = 453, - VAR_PERMIT_SMALL_HOLDDOWN = 454, - VAR_QNAME_MINIMISATION = 455, - VAR_QNAME_MINIMISATION_STRICT = 456, - VAR_IP_FREEBIND = 457, - VAR_DEFINE_TAG = 458, - VAR_LOCAL_ZONE_TAG = 459, - VAR_ACCESS_CONTROL_TAG = 460, - VAR_LOCAL_ZONE_OVERRIDE = 461, - VAR_ACCESS_CONTROL_TAG_ACTION = 462, - VAR_ACCESS_CONTROL_TAG_DATA = 463, - VAR_VIEW = 464, - VAR_ACCESS_CONTROL_VIEW = 465, - VAR_VIEW_FIRST = 466, - VAR_SERVE_EXPIRED = 467, - VAR_SERVE_EXPIRED_TTL = 468, - VAR_SERVE_EXPIRED_TTL_RESET = 469, - VAR_SERVE_EXPIRED_REPLY_TTL = 470, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 471, - VAR_FAKE_DSA = 472, - VAR_FAKE_SHA1 = 473, - VAR_LOG_IDENTITY = 474, - VAR_HIDE_TRUSTANCHOR = 475, - VAR_TRUST_ANCHOR_SIGNALING = 476, - VAR_AGGRESSIVE_NSEC = 477, - VAR_USE_SYSTEMD = 478, - VAR_SHM_ENABLE = 479, - VAR_SHM_KEY = 480, - VAR_ROOT_KEY_SENTINEL = 481, - VAR_DNSCRYPT = 482, - VAR_DNSCRYPT_ENABLE = 483, - VAR_DNSCRYPT_PORT = 484, - VAR_DNSCRYPT_PROVIDER = 485, - VAR_DNSCRYPT_SECRET_KEY = 486, - VAR_DNSCRYPT_PROVIDER_CERT = 487, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 488, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 490, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 491, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 492, - VAR_IPSECMOD_ENABLED = 493, - VAR_IPSECMOD_HOOK = 494, - VAR_IPSECMOD_IGNORE_BOGUS = 495, - VAR_IPSECMOD_MAX_TTL = 496, - VAR_IPSECMOD_WHITELIST = 497, - VAR_IPSECMOD_STRICT = 498, - VAR_CACHEDB = 499, - VAR_CACHEDB_BACKEND = 500, - VAR_CACHEDB_SECRETSEED = 501, - VAR_CACHEDB_REDISHOST = 502, - VAR_CACHEDB_REDISPORT = 503, - VAR_CACHEDB_REDISTIMEOUT = 504, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 505, - VAR_FOR_UPSTREAM = 506, - VAR_AUTH_ZONE = 507, - VAR_ZONEFILE = 508, - VAR_MASTER = 509, - VAR_URL = 510, - VAR_FOR_DOWNSTREAM = 511, - VAR_FALLBACK_ENABLED = 512, - VAR_TLS_ADDITIONAL_PORT = 513, - VAR_LOW_RTT = 514, - VAR_LOW_RTT_PERMIL = 515, - VAR_FAST_SERVER_PERMIL = 516, - VAR_FAST_SERVER_NUM = 517, - VAR_ALLOW_NOTIFY = 518, - VAR_TLS_WIN_CERT = 519, - VAR_TCP_CONNECTION_LIMIT = 520, - VAR_FORWARD_NO_CACHE = 521, - VAR_STUB_NO_CACHE = 522, - VAR_LOG_SERVFAIL = 523, - VAR_DENY_ANY = 524, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 525, - VAR_LOG_TAG_QUERYREPLY = 526, - VAR_STREAM_WAIT_SIZE = 527, - VAR_TLS_CIPHERS = 528, - VAR_TLS_CIPHERSUITES = 529, - VAR_IPSET = 530, - VAR_IPSET_NAME_V4 = 531, - VAR_IPSET_NAME_V6 = 532, - VAR_TLS_SESSION_TICKET_KEYS = 533, - VAR_RPZ = 534, - VAR_TAGS = 535, - VAR_RPZ_ACTION_OVERRIDE = 536, - VAR_RPZ_CNAME_OVERRIDE = 537, - VAR_RPZ_LOG = 538, - VAR_RPZ_LOG_NAME = 539 + VAR_HTTPS_PORT = 396, + VAR_STUB_FIRST = 397, + VAR_MINIMAL_RESPONSES = 398, + VAR_RRSET_ROUNDROBIN = 399, + VAR_MAX_UDP_SIZE = 400, + VAR_DELAY_CLOSE = 401, + VAR_UNBLOCK_LAN_ZONES = 402, + VAR_INSECURE_LAN_ZONES = 403, + VAR_INFRA_CACHE_MIN_RTT = 404, + VAR_DNS64_PREFIX = 405, + VAR_DNS64_SYNTHALL = 406, + VAR_DNS64_IGNORE_AAAA = 407, + VAR_DNSTAP = 408, + VAR_DNSTAP_ENABLE = 409, + VAR_DNSTAP_SOCKET_PATH = 410, + VAR_DNSTAP_IP = 411, + VAR_DNSTAP_TLS = 412, + VAR_DNSTAP_TLS_SERVER_NAME = 413, + VAR_DNSTAP_TLS_CERT_BUNDLE = 414, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 415, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 416, + VAR_DNSTAP_SEND_IDENTITY = 417, + VAR_DNSTAP_SEND_VERSION = 418, + VAR_DNSTAP_IDENTITY = 419, + VAR_DNSTAP_VERSION = 420, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 421, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 422, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 423, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 424, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 425, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 426, + VAR_RESPONSE_IP_TAG = 427, + VAR_RESPONSE_IP = 428, + VAR_RESPONSE_IP_DATA = 429, + VAR_HARDEN_ALGO_DOWNGRADE = 430, + VAR_IP_TRANSPARENT = 431, + VAR_DISABLE_DNSSEC_LAME_CHECK = 432, + VAR_IP_RATELIMIT = 433, + VAR_IP_RATELIMIT_SLABS = 434, + VAR_IP_RATELIMIT_SIZE = 435, + VAR_RATELIMIT = 436, + VAR_RATELIMIT_SLABS = 437, + VAR_RATELIMIT_SIZE = 438, + VAR_RATELIMIT_FOR_DOMAIN = 439, + VAR_RATELIMIT_BELOW_DOMAIN = 440, + VAR_IP_RATELIMIT_FACTOR = 441, + VAR_RATELIMIT_FACTOR = 442, + VAR_SEND_CLIENT_SUBNET = 443, + VAR_CLIENT_SUBNET_ZONE = 444, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, + VAR_CLIENT_SUBNET_OPCODE = 446, + VAR_MAX_CLIENT_SUBNET_IPV4 = 447, + VAR_MAX_CLIENT_SUBNET_IPV6 = 448, + VAR_MIN_CLIENT_SUBNET_IPV4 = 449, + VAR_MIN_CLIENT_SUBNET_IPV6 = 450, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, + VAR_CAPS_WHITELIST = 453, + VAR_CACHE_MAX_NEGATIVE_TTL = 454, + VAR_PERMIT_SMALL_HOLDDOWN = 455, + VAR_QNAME_MINIMISATION = 456, + VAR_QNAME_MINIMISATION_STRICT = 457, + VAR_IP_FREEBIND = 458, + VAR_DEFINE_TAG = 459, + VAR_LOCAL_ZONE_TAG = 460, + VAR_ACCESS_CONTROL_TAG = 461, + VAR_LOCAL_ZONE_OVERRIDE = 462, + VAR_ACCESS_CONTROL_TAG_ACTION = 463, + VAR_ACCESS_CONTROL_TAG_DATA = 464, + VAR_VIEW = 465, + VAR_ACCESS_CONTROL_VIEW = 466, + VAR_VIEW_FIRST = 467, + VAR_SERVE_EXPIRED = 468, + VAR_SERVE_EXPIRED_TTL = 469, + VAR_SERVE_EXPIRED_TTL_RESET = 470, + VAR_SERVE_EXPIRED_REPLY_TTL = 471, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, + VAR_FAKE_DSA = 473, + VAR_FAKE_SHA1 = 474, + VAR_LOG_IDENTITY = 475, + VAR_HIDE_TRUSTANCHOR = 476, + VAR_TRUST_ANCHOR_SIGNALING = 477, + VAR_AGGRESSIVE_NSEC = 478, + VAR_USE_SYSTEMD = 479, + VAR_SHM_ENABLE = 480, + VAR_SHM_KEY = 481, + VAR_ROOT_KEY_SENTINEL = 482, + VAR_DNSCRYPT = 483, + VAR_DNSCRYPT_ENABLE = 484, + VAR_DNSCRYPT_PORT = 485, + VAR_DNSCRYPT_PROVIDER = 486, + VAR_DNSCRYPT_SECRET_KEY = 487, + VAR_DNSCRYPT_PROVIDER_CERT = 488, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, + VAR_IPSECMOD_ENABLED = 494, + VAR_IPSECMOD_HOOK = 495, + VAR_IPSECMOD_IGNORE_BOGUS = 496, + VAR_IPSECMOD_MAX_TTL = 497, + VAR_IPSECMOD_WHITELIST = 498, + VAR_IPSECMOD_STRICT = 499, + VAR_CACHEDB = 500, + VAR_CACHEDB_BACKEND = 501, + VAR_CACHEDB_SECRETSEED = 502, + VAR_CACHEDB_REDISHOST = 503, + VAR_CACHEDB_REDISPORT = 504, + VAR_CACHEDB_REDISTIMEOUT = 505, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, + VAR_FOR_UPSTREAM = 507, + VAR_AUTH_ZONE = 508, + VAR_ZONEFILE = 509, + VAR_MASTER = 510, + VAR_URL = 511, + VAR_FOR_DOWNSTREAM = 512, + VAR_FALLBACK_ENABLED = 513, + VAR_TLS_ADDITIONAL_PORT = 514, + VAR_LOW_RTT = 515, + VAR_LOW_RTT_PERMIL = 516, + VAR_FAST_SERVER_PERMIL = 517, + VAR_FAST_SERVER_NUM = 518, + VAR_ALLOW_NOTIFY = 519, + VAR_TLS_WIN_CERT = 520, + VAR_TCP_CONNECTION_LIMIT = 521, + VAR_FORWARD_NO_CACHE = 522, + VAR_STUB_NO_CACHE = 523, + VAR_LOG_SERVFAIL = 524, + VAR_DENY_ANY = 525, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, + VAR_LOG_TAG_QUERYREPLY = 527, + VAR_STREAM_WAIT_SIZE = 528, + VAR_TLS_CIPHERS = 529, + VAR_TLS_CIPHERSUITES = 530, + VAR_IPSET = 531, + VAR_IPSET_NAME_V4 = 532, + VAR_IPSET_NAME_V6 = 533, + VAR_TLS_SESSION_TICKET_KEYS = 534, + VAR_RPZ = 535, + VAR_TAGS = 536, + VAR_RPZ_ACTION_OVERRIDE = 537, + VAR_RPZ_CNAME_OVERRIDE = 538, + VAR_RPZ_LOG = 539, + VAR_RPZ_LOG_NAME = 540 }; #endif /* Tokens. */ @@ -472,162 +469,164 @@ extern int yydebug; #define VAR_STUB_SSL_UPSTREAM 393 #define VAR_FORWARD_SSL_UPSTREAM 394 #define VAR_TLS_CERT_BUNDLE 395 -#define VAR_STUB_FIRST 396 -#define VAR_MINIMAL_RESPONSES 397 -#define VAR_RRSET_ROUNDROBIN 398 -#define VAR_MAX_UDP_SIZE 399 -#define VAR_DELAY_CLOSE 400 -#define VAR_UNBLOCK_LAN_ZONES 401 -#define VAR_INSECURE_LAN_ZONES 402 -#define VAR_INFRA_CACHE_MIN_RTT 403 -#define VAR_DNS64_PREFIX 404 -#define VAR_DNS64_SYNTHALL 405 -#define VAR_DNS64_IGNORE_AAAA 406 -#define VAR_DNSTAP 407 -#define VAR_DNSTAP_ENABLE 408 -#define VAR_DNSTAP_SOCKET_PATH 409 -#define VAR_DNSTAP_IP 410 -#define VAR_DNSTAP_TLS 411 -#define VAR_DNSTAP_TLS_SERVER_NAME 412 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 413 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 414 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 415 -#define VAR_DNSTAP_SEND_IDENTITY 416 -#define VAR_DNSTAP_SEND_VERSION 417 -#define VAR_DNSTAP_IDENTITY 418 -#define VAR_DNSTAP_VERSION 419 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 420 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 421 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 422 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 423 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 424 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 425 -#define VAR_RESPONSE_IP_TAG 426 -#define VAR_RESPONSE_IP 427 -#define VAR_RESPONSE_IP_DATA 428 -#define VAR_HARDEN_ALGO_DOWNGRADE 429 -#define VAR_IP_TRANSPARENT 430 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 431 -#define VAR_IP_RATELIMIT 432 -#define VAR_IP_RATELIMIT_SLABS 433 -#define VAR_IP_RATELIMIT_SIZE 434 -#define VAR_RATELIMIT 435 -#define VAR_RATELIMIT_SLABS 436 -#define VAR_RATELIMIT_SIZE 437 -#define VAR_RATELIMIT_FOR_DOMAIN 438 -#define VAR_RATELIMIT_BELOW_DOMAIN 439 -#define VAR_IP_RATELIMIT_FACTOR 440 -#define VAR_RATELIMIT_FACTOR 441 -#define VAR_SEND_CLIENT_SUBNET 442 -#define VAR_CLIENT_SUBNET_ZONE 443 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 444 -#define VAR_CLIENT_SUBNET_OPCODE 445 -#define VAR_MAX_CLIENT_SUBNET_IPV4 446 -#define VAR_MAX_CLIENT_SUBNET_IPV6 447 -#define VAR_MIN_CLIENT_SUBNET_IPV4 448 -#define VAR_MIN_CLIENT_SUBNET_IPV6 449 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 451 -#define VAR_CAPS_WHITELIST 452 -#define VAR_CACHE_MAX_NEGATIVE_TTL 453 -#define VAR_PERMIT_SMALL_HOLDDOWN 454 -#define VAR_QNAME_MINIMISATION 455 -#define VAR_QNAME_MINIMISATION_STRICT 456 -#define VAR_IP_FREEBIND 457 -#define VAR_DEFINE_TAG 458 -#define VAR_LOCAL_ZONE_TAG 459 -#define VAR_ACCESS_CONTROL_TAG 460 -#define VAR_LOCAL_ZONE_OVERRIDE 461 -#define VAR_ACCESS_CONTROL_TAG_ACTION 462 -#define VAR_ACCESS_CONTROL_TAG_DATA 463 -#define VAR_VIEW 464 -#define VAR_ACCESS_CONTROL_VIEW 465 -#define VAR_VIEW_FIRST 466 -#define VAR_SERVE_EXPIRED 467 -#define VAR_SERVE_EXPIRED_TTL 468 -#define VAR_SERVE_EXPIRED_TTL_RESET 469 -#define VAR_SERVE_EXPIRED_REPLY_TTL 470 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 471 -#define VAR_FAKE_DSA 472 -#define VAR_FAKE_SHA1 473 -#define VAR_LOG_IDENTITY 474 -#define VAR_HIDE_TRUSTANCHOR 475 -#define VAR_TRUST_ANCHOR_SIGNALING 476 -#define VAR_AGGRESSIVE_NSEC 477 -#define VAR_USE_SYSTEMD 478 -#define VAR_SHM_ENABLE 479 -#define VAR_SHM_KEY 480 -#define VAR_ROOT_KEY_SENTINEL 481 -#define VAR_DNSCRYPT 482 -#define VAR_DNSCRYPT_ENABLE 483 -#define VAR_DNSCRYPT_PORT 484 -#define VAR_DNSCRYPT_PROVIDER 485 -#define VAR_DNSCRYPT_SECRET_KEY 486 -#define VAR_DNSCRYPT_PROVIDER_CERT 487 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 488 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 490 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 492 -#define VAR_IPSECMOD_ENABLED 493 -#define VAR_IPSECMOD_HOOK 494 -#define VAR_IPSECMOD_IGNORE_BOGUS 495 -#define VAR_IPSECMOD_MAX_TTL 496 -#define VAR_IPSECMOD_WHITELIST 497 -#define VAR_IPSECMOD_STRICT 498 -#define VAR_CACHEDB 499 -#define VAR_CACHEDB_BACKEND 500 -#define VAR_CACHEDB_SECRETSEED 501 -#define VAR_CACHEDB_REDISHOST 502 -#define VAR_CACHEDB_REDISPORT 503 -#define VAR_CACHEDB_REDISTIMEOUT 504 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 505 -#define VAR_FOR_UPSTREAM 506 -#define VAR_AUTH_ZONE 507 -#define VAR_ZONEFILE 508 -#define VAR_MASTER 509 -#define VAR_URL 510 -#define VAR_FOR_DOWNSTREAM 511 -#define VAR_FALLBACK_ENABLED 512 -#define VAR_TLS_ADDITIONAL_PORT 513 -#define VAR_LOW_RTT 514 -#define VAR_LOW_RTT_PERMIL 515 -#define VAR_FAST_SERVER_PERMIL 516 -#define VAR_FAST_SERVER_NUM 517 -#define VAR_ALLOW_NOTIFY 518 -#define VAR_TLS_WIN_CERT 519 -#define VAR_TCP_CONNECTION_LIMIT 520 -#define VAR_FORWARD_NO_CACHE 521 -#define VAR_STUB_NO_CACHE 522 -#define VAR_LOG_SERVFAIL 523 -#define VAR_DENY_ANY 524 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 525 -#define VAR_LOG_TAG_QUERYREPLY 526 -#define VAR_STREAM_WAIT_SIZE 527 -#define VAR_TLS_CIPHERS 528 -#define VAR_TLS_CIPHERSUITES 529 -#define VAR_IPSET 530 -#define VAR_IPSET_NAME_V4 531 -#define VAR_IPSET_NAME_V6 532 -#define VAR_TLS_SESSION_TICKET_KEYS 533 -#define VAR_RPZ 534 -#define VAR_TAGS 535 -#define VAR_RPZ_ACTION_OVERRIDE 536 -#define VAR_RPZ_CNAME_OVERRIDE 537 -#define VAR_RPZ_LOG 538 -#define VAR_RPZ_LOG_NAME 539 +#define VAR_HTTPS_PORT 396 +#define VAR_STUB_FIRST 397 +#define VAR_MINIMAL_RESPONSES 398 +#define VAR_RRSET_ROUNDROBIN 399 +#define VAR_MAX_UDP_SIZE 400 +#define VAR_DELAY_CLOSE 401 +#define VAR_UNBLOCK_LAN_ZONES 402 +#define VAR_INSECURE_LAN_ZONES 403 +#define VAR_INFRA_CACHE_MIN_RTT 404 +#define VAR_DNS64_PREFIX 405 +#define VAR_DNS64_SYNTHALL 406 +#define VAR_DNS64_IGNORE_AAAA 407 +#define VAR_DNSTAP 408 +#define VAR_DNSTAP_ENABLE 409 +#define VAR_DNSTAP_SOCKET_PATH 410 +#define VAR_DNSTAP_IP 411 +#define VAR_DNSTAP_TLS 412 +#define VAR_DNSTAP_TLS_SERVER_NAME 413 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 414 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 415 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 416 +#define VAR_DNSTAP_SEND_IDENTITY 417 +#define VAR_DNSTAP_SEND_VERSION 418 +#define VAR_DNSTAP_IDENTITY 419 +#define VAR_DNSTAP_VERSION 420 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 421 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 422 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 423 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 424 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 425 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 426 +#define VAR_RESPONSE_IP_TAG 427 +#define VAR_RESPONSE_IP 428 +#define VAR_RESPONSE_IP_DATA 429 +#define VAR_HARDEN_ALGO_DOWNGRADE 430 +#define VAR_IP_TRANSPARENT 431 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 +#define VAR_IP_RATELIMIT 433 +#define VAR_IP_RATELIMIT_SLABS 434 +#define VAR_IP_RATELIMIT_SIZE 435 +#define VAR_RATELIMIT 436 +#define VAR_RATELIMIT_SLABS 437 +#define VAR_RATELIMIT_SIZE 438 +#define VAR_RATELIMIT_FOR_DOMAIN 439 +#define VAR_RATELIMIT_BELOW_DOMAIN 440 +#define VAR_IP_RATELIMIT_FACTOR 441 +#define VAR_RATELIMIT_FACTOR 442 +#define VAR_SEND_CLIENT_SUBNET 443 +#define VAR_CLIENT_SUBNET_ZONE 444 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 +#define VAR_CLIENT_SUBNET_OPCODE 446 +#define VAR_MAX_CLIENT_SUBNET_IPV4 447 +#define VAR_MAX_CLIENT_SUBNET_IPV6 448 +#define VAR_MIN_CLIENT_SUBNET_IPV4 449 +#define VAR_MIN_CLIENT_SUBNET_IPV6 450 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 +#define VAR_CAPS_WHITELIST 453 +#define VAR_CACHE_MAX_NEGATIVE_TTL 454 +#define VAR_PERMIT_SMALL_HOLDDOWN 455 +#define VAR_QNAME_MINIMISATION 456 +#define VAR_QNAME_MINIMISATION_STRICT 457 +#define VAR_IP_FREEBIND 458 +#define VAR_DEFINE_TAG 459 +#define VAR_LOCAL_ZONE_TAG 460 +#define VAR_ACCESS_CONTROL_TAG 461 +#define VAR_LOCAL_ZONE_OVERRIDE 462 +#define VAR_ACCESS_CONTROL_TAG_ACTION 463 +#define VAR_ACCESS_CONTROL_TAG_DATA 464 +#define VAR_VIEW 465 +#define VAR_ACCESS_CONTROL_VIEW 466 +#define VAR_VIEW_FIRST 467 +#define VAR_SERVE_EXPIRED 468 +#define VAR_SERVE_EXPIRED_TTL 469 +#define VAR_SERVE_EXPIRED_TTL_RESET 470 +#define VAR_SERVE_EXPIRED_REPLY_TTL 471 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 +#define VAR_FAKE_DSA 473 +#define VAR_FAKE_SHA1 474 +#define VAR_LOG_IDENTITY 475 +#define VAR_HIDE_TRUSTANCHOR 476 +#define VAR_TRUST_ANCHOR_SIGNALING 477 +#define VAR_AGGRESSIVE_NSEC 478 +#define VAR_USE_SYSTEMD 479 +#define VAR_SHM_ENABLE 480 +#define VAR_SHM_KEY 481 +#define VAR_ROOT_KEY_SENTINEL 482 +#define VAR_DNSCRYPT 483 +#define VAR_DNSCRYPT_ENABLE 484 +#define VAR_DNSCRYPT_PORT 485 +#define VAR_DNSCRYPT_PROVIDER 486 +#define VAR_DNSCRYPT_SECRET_KEY 487 +#define VAR_DNSCRYPT_PROVIDER_CERT 488 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 +#define VAR_IPSECMOD_ENABLED 494 +#define VAR_IPSECMOD_HOOK 495 +#define VAR_IPSECMOD_IGNORE_BOGUS 496 +#define VAR_IPSECMOD_MAX_TTL 497 +#define VAR_IPSECMOD_WHITELIST 498 +#define VAR_IPSECMOD_STRICT 499 +#define VAR_CACHEDB 500 +#define VAR_CACHEDB_BACKEND 501 +#define VAR_CACHEDB_SECRETSEED 502 +#define VAR_CACHEDB_REDISHOST 503 +#define VAR_CACHEDB_REDISPORT 504 +#define VAR_CACHEDB_REDISTIMEOUT 505 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 +#define VAR_FOR_UPSTREAM 507 +#define VAR_AUTH_ZONE 508 +#define VAR_ZONEFILE 509 +#define VAR_MASTER 510 +#define VAR_URL 511 +#define VAR_FOR_DOWNSTREAM 512 +#define VAR_FALLBACK_ENABLED 513 +#define VAR_TLS_ADDITIONAL_PORT 514 +#define VAR_LOW_RTT 515 +#define VAR_LOW_RTT_PERMIL 516 +#define VAR_FAST_SERVER_PERMIL 517 +#define VAR_FAST_SERVER_NUM 518 +#define VAR_ALLOW_NOTIFY 519 +#define VAR_TLS_WIN_CERT 520 +#define VAR_TCP_CONNECTION_LIMIT 521 +#define VAR_FORWARD_NO_CACHE 522 +#define VAR_STUB_NO_CACHE 523 +#define VAR_LOG_SERVFAIL 524 +#define VAR_DENY_ANY 525 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 +#define VAR_LOG_TAG_QUERYREPLY 527 +#define VAR_STREAM_WAIT_SIZE 528 +#define VAR_TLS_CIPHERS 529 +#define VAR_TLS_CIPHERSUITES 530 +#define VAR_IPSET 531 +#define VAR_IPSET_NAME_V4 532 +#define VAR_IPSET_NAME_V6 533 +#define VAR_TLS_SESSION_TICKET_KEYS 534 +#define VAR_RPZ 535 +#define VAR_TAGS 536 +#define VAR_RPZ_ACTION_OVERRIDE 537 +#define VAR_RPZ_CNAME_OVERRIDE 538 +#define VAR_RPZ_LOG 539 +#define VAR_RPZ_LOG_NAME 540 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + union YYSTYPE { -#line 66 "./util/configparser.y" +#line 66 "./util/configparser.y" /* yacc.c:1909 */ char* str; -#line 629 "util/configparser.h" - +#line 628 "util/configparser.h" /* yacc.c:1909 */ }; + typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index 206f2f946..7498ab4f9 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -111,6 +111,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM %token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST %token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE +%token VAR_HTTPS_PORT %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES @@ -235,6 +236,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_log_queries | server_log_replies | server_tcp_upstream | server_ssl_upstream | server_log_local_actions | server_ssl_service_key | server_ssl_service_pem | server_ssl_port | + server_https_port | server_minimal_responses | server_rrset_roundrobin | server_max_udp_size | server_so_reuseport | server_delay_close | server_unblock_lan_zones | server_insecure_lan_zones | @@ -949,6 +951,15 @@ server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG yyerror("out of memory"); } ; +server_https_port: VAR_HTTPS_PORT STRING_ARG + { + OUTYY(("P(server_https_port:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("port number expected"); + else cfg_parser->cfg->https_port = atoi($2); + free($2); + } + ; server_use_systemd: VAR_USE_SYSTEMD STRING_ARG { OUTYY(("P(server_use_systemd:%s)\n", $2)); diff --git a/util/iana_ports.inc b/util/iana_ports.inc index b26677efb..0e01394bf 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -3771,6 +3771,7 @@ 4188, 4191, 4192, +4195, 4197, 4199, 4300, diff --git a/util/net_help.c b/util/net_help.c index 135d33427..82d37f489 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -58,6 +58,9 @@ #ifdef USE_WINSOCK #include #endif +#ifdef HAVE_NGHTTP2_NGHTTP2_H +#include +#endif /** max length of an IP address (the address portion) that we allow */ #define MAX_ADDR_STRLEN 128 /* characters */ @@ -855,6 +858,21 @@ log_cert(unsigned level, const char* str, void* cert) } #endif /* HAVE_SSL */ +#if defined(HAVE_SSL) && defined(HAVE_NGHTTP2) +static int alpn_select_cb(SSL* ATTR_UNUSED(ssl), const unsigned char** out, + unsigned char* outlen, const unsigned char* in, unsigned int inlen, + void* ATTR_UNUSED(arg)) +{ + int rv = nghttp2_select_next_protocol((unsigned char **)out, outlen, in, + inlen); + if(rv == -1) { + return SSL_TLSEXT_ERR_NOACK; + } + /* either http/1.1 or h2 selected */ + return SSL_TLSEXT_ERR_OK; +} +#endif + int listen_sslctx_setup(void* ctxt) { @@ -913,6 +931,9 @@ listen_sslctx_setup(void* ctxt) #ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL SSL_CTX_set_security_level(ctx, 0); #endif +#if defined(HAVE_SSL_CTX_SET_ALPN_SELECT_CB) && defined(HAVE_NGHTTP2) + SSL_CTX_set_alpn_select_cb(ctx, alpn_select_cb, NULL); +#endif #else (void)ctxt; #endif /* HAVE_SSL */ diff --git a/util/netevent.c b/util/netevent.c index 090238384..d3802e4f6 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -733,7 +733,7 @@ static void setup_tcp_handler(struct comm_point* c, int fd, int cur, int max) { int handler_usage; - log_assert(c->type == comm_tcp); + log_assert(c->type == comm_tcp || c->type == comm_http); log_assert(c->fd == -1); sldns_buffer_clear(c->buffer); #ifdef USE_DNSCRYPT @@ -908,6 +908,41 @@ comm_point_tcp_win_bio_cb(struct comm_point* c, void* thessl) } #endif +#ifdef HAVE_NGHTTP2 +/** Create http2 session server. Per connection, after TCP accepted.*/ +static int http2_session_server_create(struct http2_session* h2_session) +{ + log_assert(h2_session->callbacks); + h2_session->is_drop = 0; + if(nghttp2_session_server_new(&h2_session->session, + h2_session->callbacks, + h2_session) == NGHTTP2_ERR_NOMEM) { + log_err("failed to create nghttp2 session server"); + return 0; + } + + return 1; +} + +/** Submit http2 setting to session. Once per session. */ +static int http2_submit_settings(struct http2_session* h2_session) +{ + int ret; + nghttp2_settings_entry settings[1] = { + {NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100}}; + + ret = nghttp2_submit_settings(h2_session->session, NGHTTP2_FLAG_NONE, + settings, 1); + if(ret) { + verbose(VERB_QUERY, "http2: submit_settings failed, " + "error: %s", nghttp2_strerror(ret)); + return 0; + } + return 1; +} +#endif /* HAVE_NGHTTP2 */ + + void comm_point_tcp_accept_callback(int fd, short event, void* arg) { @@ -929,7 +964,28 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg) /* clear leftover flags from previous use, and then set the * correct event base for the event structure for libevent */ ub_event_free(c_hdl->ev->ev); - c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1, UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT, comm_point_tcp_handle_callback, c_hdl); + +#ifdef HAVE_NGHTTP2 + if(c_hdl->type == comm_http && c_hdl->h2_session) { + if(!http2_session_server_create(c_hdl->h2_session)) { + log_warn("failed to create nghttp2"); + return; + } + if(!http2_submit_settings(c_hdl->h2_session)) { + log_warn("failed to submit http2 settings"); + return; + } + c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1, + UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT, + comm_point_http_handle_callback, c_hdl); + } else { +#endif + c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1, + UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT, + comm_point_tcp_handle_callback, c_hdl); +#ifdef HAVE_NGHTTP2 + } +#endif if(!c_hdl->ev->ev) { log_warn("could not ub_event_new, dropped tcp"); return; @@ -1163,6 +1219,18 @@ ssl_handshake(struct comm_point* c) c->repinfo.addrlen); } + /* check if http2 use is negotiated */ + if(c->type == comm_http && c->h2_session) { + const unsigned char *alpn; + unsigned int alpnlen = 0; + SSL_get0_alpn_selected(c->ssl, &alpn, &alpnlen); + if(alpnlen == 2 && memcmp("h2", alpn, 2) == 0) { + /* connection upgraded to HTTP2 */ + c->tcp_do_toggle_rw = 0; + c->alpn_h2 = 1; + } + } + /* setup listen rw correctly */ if(c->tcp_is_reading) { if(c->ssl_shake_state != comm_ssl_shake_read) @@ -2180,11 +2248,210 @@ http_chunked_segment(struct comm_point* c) return 1; } +#ifdef HAVE_NGHTTP2 +/** Create new http2 session. Called when creating handling comm point. */ +struct http2_session* http2_session_create(struct comm_point* c) +{ + struct http2_session* session = calloc(1, sizeof(*session)); + if(!session) { + log_err("malloc failure while creating http2 session"); + return NULL; + } + session->c = c; + + return session; +} +#endif + +/** Delete http2 session. After closing connection or on error */ +void http2_session_delete(struct http2_session* h2_session) +{ +#ifdef HAVE_NGHTTP2 + if(h2_session->callbacks) + nghttp2_session_callbacks_del(h2_session->callbacks); + free(h2_session); +#else + (void)h2_session; +#endif +} + +#ifdef HAVE_NGHTTP2 +struct http2_stream* http2_stream_create(int32_t stream_id) +{ + struct http2_stream* h2_stream = calloc(1, sizeof(*h2_stream)); + if(!h2_stream) { + log_err("malloc failure while creating http2 stream"); + return NULL; + } + h2_stream->stream_id = stream_id; + return h2_stream; +} + +/** Delete http2 stream. After session delete or stream close callback */ +void http2_stream_delete(struct http2_session* h2_session, + struct http2_stream* h2_stream) +{ + if(h2_stream->mesh_state) { + mesh_state_remove_reply(h2_stream->mesh, h2_stream->mesh_state, + h2_session->c); + } + if(h2_stream->qbuffer) + sldns_buffer_free(h2_stream->qbuffer); + if(h2_stream->rbuffer) + sldns_buffer_free(h2_stream->rbuffer); + free(h2_stream); +} +#endif + +void http2_stream_add_meshstate(struct http2_stream* h2_stream, + struct mesh_area* mesh, struct mesh_state* m) +{ + h2_stream->mesh = mesh; + h2_stream->mesh_state = m; +} + +/** delete http2 session server. After closing connection. */ +static void http2_session_server_delete(struct http2_session* h2_session) +{ +#ifdef HAVE_NGHTTP2 + struct http2_stream* h2_stream, *next; + nghttp2_session_del(h2_session->session); /* NULL input is fine */ + h2_session->session = NULL; + for(h2_stream = h2_session->first_stream; h2_stream;) { + next = h2_stream->next; + http2_stream_delete(h2_session, h2_stream); + h2_stream = next; + } + h2_session->first_stream = NULL; + h2_session->is_drop = 0; + h2_session->postpone_drop = 0; + h2_session->c->h2_stream = NULL; +#endif + (void)h2_session; +} + +#ifdef HAVE_NGHTTP2 +void http2_session_add_stream(struct http2_session* h2_session, + struct http2_stream* h2_stream) +{ + if(h2_session->first_stream) + h2_session->first_stream->prev = h2_stream; + h2_stream->next = h2_session->first_stream; + h2_session->first_stream = h2_stream; +} + +/** remove stream from session linked list. After stream close callback or + * closing connection */ +void http2_session_remove_stream(struct http2_session* h2_session, + struct http2_stream* h2_stream) +{ + if(h2_stream->prev) + h2_stream->prev->next = h2_stream->next; + else + h2_session->first_stream = h2_stream->next; + if(h2_stream->next) + h2_stream->next->prev = h2_stream->prev; + +} + +int http2_stream_close_cb(nghttp2_session* ATTR_UNUSED(session), + int32_t stream_id, uint32_t ATTR_UNUSED(error_code), void* cb_arg) +{ + struct http2_stream* h2_stream; + struct http2_session* h2_session = (struct http2_session*)cb_arg; + if(!(h2_stream = nghttp2_session_get_stream_user_data( + h2_session->session, stream_id))) { + return 0; + } + http2_session_remove_stream(h2_session, h2_stream); + http2_stream_delete(h2_session, h2_stream); + return 0; +} + +ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, + size_t len, int ATTR_UNUSED(flags), void* cb_arg) +{ +#ifdef HAVE_SSL + struct http2_session* h2_session = (struct http2_session*)cb_arg; + int r; + + log_assert(h2_session->c->type == comm_http); + log_assert(h2_session->c->h2_session); + + if(!h2_session->c->ssl) + return 0; + + ERR_clear_error(); + r = SSL_read(h2_session->c->ssl, buf, len); + if(r <= 0) { + int want = SSL_get_error(h2_session->c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return NGHTTP2_ERR_EOF; + } else if(want == SSL_ERROR_WANT_READ) { + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_WANT_WRITE) { + h2_session->c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(h2_session->c, 0, 1); + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return NGHTTP2_ERR_CALLBACK_FAILURE; +#endif + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + log_crypto_err("could not SSL_read"); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return r; +#else + (void)buf; + (void)len; + (void)cb_arg; + return -1; +#endif +} +#endif /* HAVE_NGHTTP2 */ + +/** Handle http2 read */ +static int +comm_point_http2_handle_read(int ATTR_UNUSED(fd), struct comm_point* c) +{ +#ifdef HAVE_NGHTTP2 + int ret; + log_assert(c->h2_session); + log_assert(c->ssl); + + /* reading until recv cb returns NGHTTP2_ERR_WOULDBLOCK */ + ret = nghttp2_session_recv(c->h2_session->session); + if(ret) { + if(ret != NGHTTP2_ERR_EOF) { + verbose(VERB_QUERY, "http2: session_recv failed, " + "error: %s", nghttp2_strerror(ret)); + } + return 0; + } + if(nghttp2_session_want_write(c->h2_session->session)) { + c->tcp_is_reading = 0; + comm_point_stop_listening(c); + comm_point_start_listening(c, -1, c->tcp_timeout_msec); + } else if(!nghttp2_session_want_read(c->h2_session->session)) + return 0; /* connection can be closed */ + return 1; +#else + (void)c; + return 0; +#endif +} + /** - * Handle http reading callback. + * Handle http reading callback. * @param fd: file descriptor of socket. * @param c: comm point to read from into buffer. - * @return: 0 on error + * @return: 0 on error */ static int comm_point_http_handle_read(int fd, struct comm_point* c) @@ -2204,6 +2471,18 @@ comm_point_http_handle_read(int fd, struct comm_point* c) if(!c->tcp_is_reading) return 1; + + if(c->alpn_h2) { + return comm_point_http2_handle_read(fd, c); + } + + /* http version is <= http/1.1 */ + + if(c->http_min_version >= http_version_2) { + /* HTTP/2 failed, not allowed to use lower version. */ + return 0; + } + /* read more data */ if(c->ssl) { if(!ssl_http_read_more(c)) @@ -2214,7 +2493,9 @@ comm_point_http_handle_read(int fd, struct comm_point* c) } sldns_buffer_flip(c->buffer); + while(sldns_buffer_remaining(c->buffer) > 0) { + /* Handle HTTP/1.x data */ /* if we are reading headers, read more headers */ if(c->http_in_headers || c->http_in_chunk_headers) { /* if header is done, process the header */ @@ -2376,6 +2657,83 @@ http_write_more(int fd, struct comm_point* c) return 1; } +#ifdef HAVE_NGHTTP2 +ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf, + size_t len, int ATTR_UNUSED(flags), void* cb_arg) +{ +#ifdef HAVE_SSL + int r; + struct http2_session* h2_session = (struct http2_session*)cb_arg; + log_assert(h2_session->c->type == comm_http); + log_assert(h2_session->c->h2_session); + + if(!h2_session->c->ssl) + return 0; + + ERR_clear_error(); + r = SSL_write(h2_session->c->ssl, buf, len); + if(r <= 0) { + int want = SSL_get_error(h2_session->c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } else if(want == SSL_ERROR_WANT_READ) { + h2_session->c->ssl_shake_state = comm_ssl_shake_hs_read; + comm_point_listen_for_rw(h2_session->c, 1, 0); + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_WANT_WRITE) { + return NGHTTP2_ERR_WOULDBLOCK; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef EPIPE + if(errno == EPIPE && verbosity < 2) + return NGHTTP2_ERR_CALLBACK_FAILURE; +#endif + if(errno != 0) + log_err("SSL_write syscall: %s", + strerror(errno)); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + log_crypto_err("could not SSL_write"); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return r; +#else + (void)buf; + (void)len; + (void)cb_arg; + return -1; +#endif +} +#endif /* HAVE_NGHTTP2 */ + +/** Handle http2 writing */ +static int +comm_point_http2_handle_write(int ATTR_UNUSED(fd), struct comm_point* c) +{ +#ifdef HAVE_NGHTTP2 + int ret; + log_assert(c->h2_session); + log_assert(c->ssl); + + ret = nghttp2_session_send(c->h2_session->session); + if(ret) { + verbose(VERB_QUERY, "http2: session_send failed, " + "error: %s", nghttp2_strerror(ret)); + return 0; + } + + if(nghttp2_session_want_read(c->h2_session->session)) { + c->tcp_is_reading = 1; + comm_point_stop_listening(c); + comm_point_start_listening(c, -1, c->tcp_timeout_msec); + } else if(!nghttp2_session_want_write(c->h2_session->session)) + return 0; /* connection can be closed */ + return 1; +#else + (void)c; + return 0; +#endif +} + /** * Handle http writing callback. * @param fd: file descriptor of socket. @@ -2407,6 +2765,18 @@ comm_point_http_handle_write(int fd, struct comm_point* c) #endif /* HAVE_SSL */ if(c->tcp_is_reading) return 1; + + if(c->alpn_h2) { + return comm_point_http2_handle_write(fd, c); + } + + /* http version is <= http/1.1 */ + + if(c->http_min_version >= http_version_2) { + /* HTTP/2 failed, not allowed to use lower version. */ + return 0; + } + /* if we are writing, write more */ if(c->ssl) { if(!ssl_http_write_more(c)) @@ -2718,11 +3088,116 @@ comm_point_create_tcp_handler(struct comm_base *base, return c; } +static struct comm_point* +comm_point_create_http_handler(struct comm_base *base, + struct comm_point* parent, size_t bufsize, int harden_large_queries, + comm_point_callback_type* callback, void* callback_arg) +{ + struct comm_point* c = (struct comm_point*)calloc(1, + sizeof(struct comm_point)); + short evbits; + if(!c) + return NULL; + c->ev = (struct internal_event*)calloc(1, + sizeof(struct internal_event)); + if(!c->ev) { + free(c); + return NULL; + } + c->ev->base = base; + c->fd = -1; + c->buffer = sldns_buffer_new(bufsize); + if(!c->buffer) { + free(c->ev); + free(c); + return NULL; + } + c->timeout = (struct timeval*)malloc(sizeof(struct timeval)); + if(!c->timeout) { + sldns_buffer_free(c->buffer); + free(c->ev); + free(c); + return NULL; + } + c->tcp_is_reading = 0; + c->tcp_byte_count = 0; + c->tcp_parent = parent; + c->tcp_timeout_msec = parent->tcp_timeout_msec; + c->tcp_conn_limit = parent->tcp_conn_limit; + c->tcl_addr = NULL; + c->tcp_keepalive = 0; + c->max_tcp_count = 0; + c->cur_tcp_count = 0; + c->tcp_handlers = NULL; + c->tcp_free = NULL; + c->type = comm_http; + c->tcp_do_close = 1; + c->do_not_close = 0; + c->tcp_do_toggle_rw = 1; /* will be set to 0 after http2 upgrade */ + c->tcp_check_nb_connect = 0; +#ifdef USE_MSG_FASTOPEN + c->tcp_do_fastopen = 0; +#endif +#ifdef USE_DNSCRYPT + c->dnscrypt = 0; + c->dnscrypt_buffer = NULL; +#endif + c->repinfo.c = c; + c->callback = callback; + c->cb_arg = callback_arg; + + c->http_min_version = http_version_2; + c->http2_max_qbuffer_size = bufsize; + if(harden_large_queries && bufsize > 512) + c->http2_max_qbuffer_size = 512; + c->alpn_h2 = 0; +#ifdef HAVE_NGHTTP2 + if(!(c->h2_session = http2_session_create(c))) { + log_err("could not create http2 session"); + sldns_buffer_free(c->buffer); + free(c->timeout); + free(c->ev); + free(c); + return NULL; + } + if(!(c->h2_session->callbacks = http2_req_callbacks_create())) { + log_err("could not create http2 callbacks"); + http2_session_delete(c->h2_session); + sldns_buffer_free(c->buffer); + free(c->timeout); + free(c->ev); + free(c); + return NULL; + } +#endif + + /* add to parent free list */ + c->tcp_free = parent->tcp_free; + parent->tcp_free = c; + /* ub_event stuff */ + evbits = UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT; + c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, + comm_point_http_handle_callback, c); + if(c->ev->ev == NULL) + { + log_err("could not set http handler event"); + parent->tcp_free = c->tcp_free; + http2_session_delete(c->h2_session); + sldns_buffer_free(c->buffer); + free(c->timeout); + free(c->ev); + free(c); + return NULL; + } + return c; +} + struct comm_point* comm_point_create_tcp(struct comm_base *base, int fd, int num, - int idle_timeout, struct tcl_list* tcp_conn_limit, size_t bufsize, - struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, - void* callback_arg) + int idle_timeout, int harden_large_queries, + struct tcl_list* tcp_conn_limit, size_t bufsize, + struct sldns_buffer* spoolbuf, enum listen_type port_type, + comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -2786,10 +3261,23 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, comm_point_delete(c); return NULL; } - /* now prealloc the tcp handlers */ + /* now prealloc the handlers */ for(i=0; itcp_handlers[i] = comm_point_create_tcp_handler(base, - c, bufsize, spoolbuf, callback, callback_arg); + if(port_type == listen_type_tcp || + port_type == listen_type_ssl || + port_type == listen_type_tcp_dnscrypt) { + c->tcp_handlers[i] = comm_point_create_tcp_handler(base, + c, bufsize, spoolbuf, callback, callback_arg); + } else if(port_type == listen_type_http) { + c->tcp_handlers[i] = comm_point_create_http_handler( + base, c, bufsize, harden_large_queries, + callback, callback_arg); + } + else { + log_err("could not create tcp handler, unknown listen " + "type"); + return NULL; + } if(!c->tcp_handlers[i]) { comm_point_delete(c); return NULL; @@ -3073,6 +3561,9 @@ comm_point_close(struct comm_point* c) tcl_close_connection(c->tcl_addr); if(c->tcp_req_info) tcp_req_info_clear(c->tcp_req_info); + if(c->h2_session) + http2_session_server_delete(c->h2_session); + /* close fd after removing from event lists, or epoll.. is messed up */ if(c->fd != -1 && !c->do_not_close) { if(c->type == comm_tcp || c->type == comm_http) { @@ -3119,6 +3610,9 @@ comm_point_delete(struct comm_point* c) if(c->tcp_req_info) { tcp_req_info_delete(c->tcp_req_info); } + if(c->h2_session) { + http2_session_delete(c->h2_session); + } } ub_event_free(c->ev->ev); free(c->ev); @@ -3161,6 +3655,17 @@ comm_point_send_reply(struct comm_reply *repinfo) #endif if(repinfo->c->tcp_req_info) { tcp_req_info_send_reply(repinfo->c->tcp_req_info); + } else if(repinfo->c->alpn_h2) { + if(!http2_submit_dns_response(repinfo->c->h2_session)) { + comm_point_drop_reply(repinfo); + return; + } + repinfo->c->h2_stream = NULL; + repinfo->c->tcp_is_reading = 0; + comm_point_stop_listening(repinfo->c); + comm_point_start_listening(repinfo->c, -1, + repinfo->c->tcp_timeout_msec); + return; } else { comm_point_start_listening(repinfo->c, -1, repinfo->c->tcp_timeout_msec); @@ -3179,6 +3684,16 @@ comm_point_drop_reply(struct comm_reply* repinfo) return; if(repinfo->c->tcp_req_info) repinfo->c->tcp_req_info->is_drop = 1; + if(repinfo->c->type == comm_http) { + if(repinfo->c->h2_session) { + repinfo->c->h2_session->is_drop = 1; + if(!repinfo->c->h2_session->postpone_drop) + reclaim_http_handler(repinfo->c); + return; + } + reclaim_http_handler(repinfo->c); + return; + } reclaim_tcp_handler(repinfo->c); } diff --git a/util/netevent.h b/util/netevent.h index bb2cd1e53..8664a61b6 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -61,6 +61,9 @@ #define NET_EVENT_H #include "dnscrypt/dnscrypt.h" +#ifdef HAVE_NGHTTP2_NGHTTP2_H +#include +#endif struct sldns_buffer; struct comm_point; @@ -68,11 +71,16 @@ struct comm_reply; struct tcl_list; struct ub_event_base; +struct mesh_state; +struct mesh_area; + /* internal event notification data storage structure. */ struct internal_event; struct internal_base; struct internal_timer; /* A sub struct of the comm_timer super struct */ +enum listen_type; + /** callback from communication point function type */ typedef int comm_point_callback_type(struct comm_point*, void*, int, struct comm_reply*); @@ -205,6 +213,13 @@ struct comm_point { } ssl_shake_state; /* -------- HTTP ------- */ + /** Do not allow connection to use HTTP version lower than this. 0=no + * minimum. */ + enum { + http_version_none = 0, + http_version_2 = 2 + } http_min_version; + /* -------- HTTP/1.1 ------- */ /** Currently reading in http headers */ int http_in_headers; /** Currently reading in chunk headers, 0=not, 1=firstline, 2=unused @@ -216,6 +231,15 @@ struct comm_point { struct sldns_buffer* http_temp; /** http stored content in buffer */ size_t http_stored; + /* -------- HTTP/2 ------- */ + /** http2 session */ + struct http2_session* h2_session; + /** set to 1 if h2 is negatiated using alpn */ + int alpn_h2; + /** maximum allowed query buffer size */ + size_t http2_max_qbuffer_size; + /** stream currently being handled */ + struct http2_stream* h2_stream; /* -------- dnstap ------- */ /** the dnstap environment */ @@ -456,10 +480,13 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, * @param num: becomes max_tcp_count, the routine allocates that * many tcp handler commpoints. * @param idle_timeout: TCP idle timeout in ms. + * @param harden_large_queries: whether query size should be limited. * @param tcp_conn_limit: TCP connection limit info. * @param bufsize: size of buffer to create for handlers. * @param spoolbuf: shared spool buffer for tcp_req_info structures. * or NULL to not create those structures in the tcp handlers. + * @param port_type: the type of port we are creating a TCP listener for. Used + * to select handler type to use. * @param callback: callback function pointer for TCP handlers. * @param callback_arg: will be passed to your callback function. * @return: returns the TCP listener commpoint. You can find the @@ -468,8 +495,10 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, * Inits timeout to NULL. All handlers are on the free list. */ struct comm_point* comm_point_create_tcp(struct comm_base* base, - int fd, int num, int idle_timeout, struct tcl_list* tcp_conn_limit, + int fd, int num, int idle_timeout, int harden_large_queries, + struct tcl_list* tcp_conn_limit, size_t bufsize, struct sldns_buffer* spoolbuf, + enum listen_type port_type, comm_point_callback_type* callback, void* callback_arg); /** @@ -723,6 +752,110 @@ void comm_point_tcp_handle_callback(int fd, short event, void* arg); */ void comm_point_http_handle_callback(int fd, short event, void* arg); +/** + * HTTP2 session. HTTP2 related info per comm point. + */ +struct http2_session { + /** first item in list of streams */ + struct http2_stream* first_stream; +#ifdef HAVE_NGHTTP2 + /** nghttp2 session */ + nghttp2_session *session; + /** store nghttp2 callbacks for easy reuse */ + nghttp2_session_callbacks* callbacks; +#endif + /** comm point containing buffer used to build answer in worker or + * module */ + struct comm_point* c; + /** session is instructed to get dropped (comm port will be closed) */ + int is_drop; + /** postpone dropping the session, can be used to prevent dropping + * while being in a callback */ + int postpone_drop; +}; + +/** enum of HTTP status */ +enum http_status { + HTTP_STATUS_OK = 200, + HTTP_STATUS_BAD_REQUEST = 400, + HTTP_STATUS_NOT_FOUND = 404, + HTTP_STATUS_PAYLOAD_TOO_LARGE = 413, + HTTP_STATUS_URI_TOO_LONG = 414, + HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415, + HTTP_STATUS_NOT_IMPLEMENTED = 501 +}; + +/** + * HTTP stream. Part of list of HTTP2 streams per session. + */ +struct http2_stream { + /** next stream in list per session */ + struct http2_stream* next; + /** previous stream in list per session */ + struct http2_stream* prev; + /** HTTP2 stream ID is an unsigned 31-bit integer */ + int32_t stream_id; + /** HTTP method used for this stream */ + enum { + HTTP_METHOD_POST = 1, + HTTP_METHOD_GET, + HTTP_METHOD_UNSUPPORTED + } http_method; + /** message contains invalid content type */ + int invalid_content_type; + /** message body content type */ + size_t content_length; + /** HTTP response status */ + enum http_status status; + /** request for non existing endpoint */ + int invalid_endpoint; + /** query in request is too large */ + int query_too_large; + /** buffer to store query into. Can't use session shared buffer as query + * can arrive in parts, intertwined with frames for other queries. */ + struct sldns_buffer* qbuffer; + /** buffer to store response into. Can't use shared buffer as a next + * query read callback can overwrite it before it is send out. */ + struct sldns_buffer* rbuffer; + /** mesh area containing mesh state */ + struct mesh_area* mesh; + /** mesh state for query. Used to remove mesh reply before closing + * stream. */ + struct mesh_state* mesh_state; +}; + +#ifdef HAVE_NGHTTP2 +/** nghttp2 receive cb. Read from SSL connection into nghttp2 buffer */ +ssize_t http2_recv_cb(nghttp2_session* session, uint8_t* buf, + size_t len, int flags, void* cb_arg); +/** nghttp2 send callback. Send from nghttp2 buffer to ssl socket */ +ssize_t http2_send_cb(nghttp2_session* session, const uint8_t* buf, + size_t len, int flags, void* cb_arg); +/** nghttp2 callback on closing stream */ +int http2_stream_close_cb(nghttp2_session* session, int32_t stream_id, + uint32_t error_code, void* cb_arg); +#endif + +/** + * Create new http2 stream + * @param stream_id: ID for stream to create. + * @return malloc'ed stream, NULL on error + */ +struct http2_stream* http2_stream_create(int32_t stream_id); + +/** + * Add new stream to session linked list + * @param h2_session: http2 session to add stream to + * @param h2_stream: stream to add to session list + */ +void http2_session_add_stream(struct http2_session* h2_session, + struct http2_stream* h2_stream); + +/** Add mesh state to stream. To be able to remove mesh reply on stream closure + */ +void http2_stream_add_meshstate(struct http2_stream* h2_stream, + struct mesh_area* mesh, struct mesh_state* m); + /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for timer comm.