diff --git a/.gitignore b/.gitignore index 9d1018edfc2597741aa248aa06c2f097ecadaebe..f60a19afbaabaaabdeea3e7eeb687325243f4287 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,8 @@ /src/Makefile.in /src/zscanner/Makefile /src/zscanner/Makefile.in +/python/Makefile +/python/Makefile.in /samples/Makefile /samples/Makefile.in /samples/knot.sample.conf @@ -72,6 +74,7 @@ /src/kdig /src/keymgr /src/khost +/src/kjournalprint /src/knot1to2 /src/knotc /src/knotd diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py index d09c0848c4dfb6dbde29326d7442462764449ce1..ef39348fc2a0bc32ae57017e03d45a14a6756df6 100644 --- a/.ycm_extra_conf.py +++ b/.ycm_extra_conf.py @@ -14,7 +14,7 @@ DIR = os.path.dirname(__file__) FLAGS = [ '-std=gnu99', '-Wall', '-Wno-unused', '-Werror=implicit', '-Wno-#warnings', - '-DCONFIG_DIR=', '-DRUN_DIR=', '-DSTORAGE_DIR=', + '-DCONFIG_DIR=', '-DRUN_DIR=', '-DSTORAGE_DIR=', '-DPACKAGE_VERSION=', ] CONFIG_H = 'src/config.h' diff --git a/Knot.files b/Knot.files index 17c2571483af00a1725f80cbcd582a80ddf71ef1..74f4cd282146f8c4d21ba6fe3bdab2489acdd886 100644 --- a/Knot.files +++ b/Knot.files @@ -29,7 +29,6 @@ src/contrib/fnv/hash_64a.c src/contrib/fnv/longlong.h src/contrib/getline.c src/contrib/getline.h -src/contrib/hat-trie/hat-trie.c src/contrib/hat-trie/hat-trie.h src/contrib/hhash.c src/contrib/hhash.h @@ -50,6 +49,8 @@ src/contrib/openbsd/strlcpy.c src/contrib/openbsd/strlcpy.h src/contrib/print.c src/contrib/print.h +src/contrib/qp-trie/qp.c +src/contrib/qp-trie/qp.h src/contrib/sockaddr.c src/contrib/sockaddr.h src/contrib/string.c @@ -80,8 +81,10 @@ src/dnssec/lib/dnssec/event.h src/dnssec/lib/dnssec/kasp.h src/dnssec/lib/dnssec/key.h src/dnssec/lib/dnssec/keyid.h +src/dnssec/lib/dnssec/keystate.h src/dnssec/lib/dnssec/keystore.h src/dnssec/lib/dnssec/keytag.h +src/dnssec/lib/dnssec/keyusage.h src/dnssec/lib/dnssec/list.h src/dnssec/lib/dnssec/nsec.h src/dnssec/lib/dnssec/random.h @@ -94,7 +97,6 @@ src/dnssec/lib/event/action/nsec3_resalt.c src/dnssec/lib/event/action/zsk_rollover.c src/dnssec/lib/event/event.c src/dnssec/lib/event/keystate.c -src/dnssec/lib/event/keystate.h src/dnssec/lib/event/utils.c src/dnssec/lib/event/utils.h src/dnssec/lib/kasp/dir/dir.c @@ -136,6 +138,7 @@ src/dnssec/lib/keystore/keystore.c src/dnssec/lib/keystore/pkcs11.c src/dnssec/lib/keystore/pkcs8.c src/dnssec/lib/keystore/pkcs8_dir.c +src/dnssec/lib/keyusage/keyusage.c src/dnssec/lib/list/list.c src/dnssec/lib/list/ucw_clists.h src/dnssec/lib/nsec/bitmap.c @@ -185,6 +188,7 @@ src/dnssec/tests/keystore_pkcs11.c src/dnssec/tests/keystore_pkcs8.c src/dnssec/tests/keystore_pkcs8_dir.c src/dnssec/tests/keytag.c +src/dnssec/tests/keyusage.c src/dnssec/tests/list.c src/dnssec/tests/nsec_bitmap.c src/dnssec/tests/nsec_hash.c @@ -208,6 +212,8 @@ src/knot/common/process.c src/knot/common/process.h src/knot/common/ref.c src/knot/common/ref.h +src/knot/common/stats.c +src/knot/common/stats.h src/knot/conf/base.c src/knot/conf/base.h src/knot/conf/conf.c @@ -216,6 +222,8 @@ src/knot/conf/confdb.c src/knot/conf/confdb.h src/knot/conf/confio.c src/knot/conf/confio.h +src/knot/conf/migration.c +src/knot/conf/migration.h src/knot/conf/scheme.c src/knot/conf/scheme.h src/knot/conf/tools.c @@ -256,23 +264,35 @@ src/knot/events/log.c src/knot/events/log.h src/knot/events/replan.c src/knot/events/replan.h -src/knot/modules/dnsproxy.c -src/knot/modules/dnsproxy.h -src/knot/modules/dnstap.c -src/knot/modules/dnstap.h -src/knot/modules/noudp.c -src/knot/modules/noudp.h -src/knot/modules/online_sign/module.c -src/knot/modules/online_sign/module.h +src/knot/journal/journal.c +src/knot/journal/journal.h +src/knot/journal/old_journal.c +src/knot/journal/old_journal.h +src/knot/journal/serialization.c +src/knot/journal/serialization.h +src/knot/modules/dnsproxy/dnsproxy.c +src/knot/modules/dnsproxy/dnsproxy.h +src/knot/modules/dnstap/dnstap.c +src/knot/modules/dnstap/dnstap.h +src/knot/modules/noudp/noudp.c +src/knot/modules/noudp/noudp.h src/knot/modules/online_sign/nsec_next.c src/knot/modules/online_sign/nsec_next.h -src/knot/modules/rosedb.c -src/knot/modules/rosedb.h -src/knot/modules/rosedb_tool.c -src/knot/modules/synth_record.c -src/knot/modules/synth_record.h -src/knot/modules/whoami.c -src/knot/modules/whoami.h +src/knot/modules/online_sign/online_sign.c +src/knot/modules/online_sign/online_sign.h +src/knot/modules/rosedb/rosedb.c +src/knot/modules/rosedb/rosedb.h +src/knot/modules/rosedb/rosedb_tool.c +src/knot/modules/rrl/functions.c +src/knot/modules/rrl/functions.h +src/knot/modules/rrl/rrl.c +src/knot/modules/rrl/rrl.h +src/knot/modules/stats/stats.c +src/knot/modules/stats/stats.h +src/knot/modules/synth_record/synth_record.c +src/knot/modules/synth_record/synth_record.h +src/knot/modules/whoami/whoami.c +src/knot/modules/whoami/whoami.h src/knot/nameserver/axfr.c src/knot/nameserver/axfr.h src/knot/nameserver/chaos.c @@ -306,12 +326,6 @@ src/knot/query/requestor.c src/knot/query/requestor.h src/knot/server/dthreads.c src/knot/server/dthreads.h -src/knot/server/journal.c -src/knot/server/journal.h -src/knot/server/rrl.c -src/knot/server/rrl.h -src/knot/server/serialization.c -src/knot/server/serialization.h src/knot/server/server.c src/knot/server/server.h src/knot/server/tcp-handler.c @@ -488,6 +502,7 @@ src/utils/keymgr/options.h src/utils/khost/khost_main.c src/utils/khost/khost_params.c src/utils/khost/khost_params.h +src/utils/kjournalprint/main.c src/utils/knot1to2/cf-lex.c src/utils/knot1to2/cf-lex.l src/utils/knot1to2/cf-parse.tab.c @@ -530,35 +545,26 @@ src/zscanner/tests/processing.h src/zscanner/tests/tests.c src/zscanner/tests/tests.h src/zscanner/tests/zscanner-tool.c +tests-fuzz/afl-loop.h tests-fuzz/packet.c tests-fuzz/packet_libfuzzer.c tests-fuzz/wrap/server.c tests-fuzz/wrap/tcp-handler.c tests-fuzz/wrap/udp-handler.c -tests/acl.c -tests/changeset.c -tests/conf.c -tests/conf_tools.c -tests/confdb.c -tests/confio.c tests/contrib/test_base32hex.c tests/contrib/test_base64.c tests/contrib/test_endian.c -tests/contrib/test_hat-trie.c tests/contrib/test_heap.c tests/contrib/test_hhash.c tests/contrib/test_net.c tests/contrib/test_net_shortwrite.c +tests/contrib/test_qp-trie.c tests/contrib/test_sockaddr.c tests/contrib/test_string.c tests/contrib/test_strtonum.c tests/contrib/test_time.c tests/contrib/test_wire.c tests/contrib/test_wire_ctx.c -tests/dthreads.c -tests/fake_server.h -tests/fdset.c -tests/journal.c tests/libknot/test_control.c tests/libknot/test_cookies-client.c tests/libknot/test_cookies-opt.c @@ -578,21 +584,31 @@ tests/libknot/test_tsig.c tests/libknot/test_yparser.c tests/libknot/test_ypscheme.c tests/libknot/test_yptrafo.c -tests/modules/online_sign.c -tests/node.c -tests/process_query.c -tests/query_module.c -tests/requestor.c -tests/rrl.c -tests/server.c +tests/modules/test_online_sign.c +tests/modules/test_rrl.c +tests/test_acl.c +tests/test_changeset.c +tests/test_conf.c tests/test_conf.h +tests/test_conf_tools.c +tests/test_confdb.c +tests/test_confio.c +tests/test_dthreads.c +tests/test_fdset.c +tests/test_journal.c +tests/test_node.c +tests/test_process_query.c +tests/test_query_module.c +tests/test_requestor.c +tests/test_server.c +tests/test_server.h +tests/test_worker_pool.c +tests/test_worker_queue.c +tests/test_zone-tree.c +tests/test_zone-update.c +tests/test_zone_events.c +tests/test_zone_serial.c +tests/test_zone_timers.c +tests/test_zonedb.c tests/utils/test_cert.c tests/utils/test_lookup.c -tests/worker_pool.c -tests/worker_queue.c -tests/zone_events.c -tests/zone_serial.c -tests/zone_timers.c -tests/zone_update.c -tests/zonedb.c -tests/ztree.c diff --git a/Makefile.am b/Makefile.am index f6f6962f9d61c8b3fe3c2878a104b4a6b957eb0c..88d86ad861fc3f889679603c20f3163c8dd663f4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = libtap src tests tests-fuzz samples doc +SUBDIRS = libtap src tests tests-fuzz python samples doc .PHONY: singlehtml install-singlehtml singlehtml install-singlehtml: diff --git a/NEWS b/NEWS index b78af82acc2a1a9ef378d18086356743f5b6f903..230aafba0f16a0b4b37c86ec1f238c8cf24f76be 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,57 @@ -Knot DNS 2.4.0-dev -================== +Knot DNS 2.4.0-dev (unreleased) +=============================== + +Bugfixes: +-------- + - Schedule zone refresh after load only if not already scheduled + - Purge the timers together with zone-purge + - Don't preserve CD flag in the answers + - Fix incorrect type bitmap in NSEC + - Dump DNSSEC related records also if DNSSEC is not active + - Preserve bootstrap_retry interval after zone reload + - Don't set SO_REUSEPORT on the TCP socket as SO_REUSEPORT on TCP + is buggy + - Allow deleting non-apex DNSKEY and NSEC3PARAM records via DDNS + +Improvements: +------------- + - Lower memory consumption when used with many zones due hat-trie + replacement with qp-trie in zone-tree + - Improve the event scheduler + - Store the XFER timer between restarts + - Print all zone names in the FQDN format + - Improve and simplify modules interface + +Features: +--------- + - New unified LMDB-based zone journal + - Add kjournalprint utility + - New mod-stats module for detailed server metrics + - Automatically delete retired DNSSEC keys + +Knot DNS 2.3.1 (2016-10-07) +=========================== + +Bugfixes: +--------- + - Missing glue records in some responses + - Knsupdate prompt printing on non-terminal + - Mismatch between configuration policy item names and documentation + - Segfault on OS X (Sierra) + +Improvements: +------------- + - Significant speed-up of conf-commit and conf-diff operations (in most cases) + - New EDNS Client Subnet libknot API + - Better semantic-checks error messages + +Features: +--------- + - Print TLS certificate hierarchy in kdig verbose mode + - New +subnet alias for +client + - New mod-whoami and mod-noudp modules + - New zone-purge control command + - New log-queries and log-responses options for mod-dnstap Knot DNS 2.3.0 (2016-08-09) =========================== diff --git a/README b/README index 8bb0c1e064ca7f83746d7c5203dc5e8f6ae80dff..4a63572b094a4b0beb7fe87f1c84bb70f6ca95c2 100644 --- a/README +++ b/README @@ -4,6 +4,7 @@ Dependencies Knot DNS has several dependencies: * libtool * autoconf > 2.65 +* pkg-config * liburcu >= 0.5.4 * gnutls >= 3.0 * jansson >= 2.3 @@ -40,7 +41,7 @@ $ sudo apt-get upgrade Install prerequisites: $ sudo apt-get install \ - libtool autoconf make liburcu-dev libgnutls28-dev libjansson-dev libedit-dev + libtool autoconf make pkg-config liburcu-dev libgnutls28-dev libjansson-dev libedit-dev Install optional packages to override embedded libraries: $ sudo apt-get install liblmdb-dev @@ -51,20 +52,20 @@ $ sudo apt-get install libcap-ng-dev libsystemd-dev libidn11-dev protobuf-c-comp Fedora like distributions ------------------------- Update the system: -# yum upgrade +# dnf upgrade Install basic development tools: -# yum install @buildsys-build +# dnf install @buildsys-build Install prerequisites: -# yum install \ - libtool autoconf automake userspace-rcu-devel gnutls-devel jansson-devel libedit-devel +# dnf install \ + libtool autoconf pkgconfig automake userspace-rcu-devel gnutls-devel jansson-devel libedit-devel Install optional packages to override embedded libraries: -# yum install lmdb-devel +# dnf install lmdb-devel Install optional packages: -# yum install libcap-ng-devel systemd-devel libidn-devel protobuf-c-devel fstrm-devel +# dnf install libcap-ng-devel systemd-devel libidn-devel protobuf-c-devel fstrm-devel When compiling on RHEL based system, the Fedora EPEL repository has to be enabled. Also for RHEL 6, forward compatibility package gnutls30-devel diff --git a/configure.ac b/configure.ac index 3f0f21628b3d264b799127c290744e137e591990..34c2916aad80fe9b07c994a02d58e80102dc8f78 100644 --- a/configure.ac +++ b/configure.ac @@ -28,7 +28,7 @@ AC_CONFIG_FILES([src/libknot/version.h # Updating version info # https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html -AC_SUBST([libknot_VERSION_INFO],["-version-info 3:0:0"]) +AC_SUBST([libknot_VERSION_INFO],["-version-info 4:0:0"]) AC_SUBST([libdnssec_VERSION_INFO],["-version-info 2:0:0"]) AC_SUBST([libzscanner_VERSION_INFO],["-version-info 1:0:0"]) @@ -123,27 +123,21 @@ PKG_CHECK_MODULES([gnutls], [gnutls >= 3.3 nettle], [ # JSON for DNSSEC status storage PKG_CHECK_MODULES([jansson], [jansson >= 2.3]) -# recvmmsg() (valgrind doesn't support it, so disable for debugging) -# The check for struct mmsghdr is required when libc doesn't have an API but the function links AC_ARG_ENABLE([recvmmsg], - AS_HELP_STRING([--enable-recvmmsg=yes|no], [enable recvmmsg() network API under Linux (kernel support required) (set to 'no' if you have trouble running server under valgrind) [default=yes]]), - [case "${enableval}" in - yes) - AC_CHECK_FUNCS([sendmmsg]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[struct mmsghdr v; recvmmsg(0,0,0,0,0);]])], - [AC_DEFINE(HAVE_RECVMMSG, 1, [Define if struct mmsghdr and recvmmsg() exists.])]) - ;; - no) - ;; - *) - AC_MSG_ERROR([bad value ${enableval} for --enable-recvmmsg]) - ;; - esac], - [ - AC_CHECK_FUNCS([sendmmsg]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[struct mmsghdr v; recvmmsg(0,0,0,0,0);]])], - [AC_DEFINE(HAVE_RECVMMSG, 1, [Define if struct mmsghdr and recvmmsg() exists.])]) - ]) + AS_HELP_STRING([--enable-recvmmsg=auto|yes|no], [enable recvmmsg() network API [default=auto]]), + [], [enable_recvmmsg=auto]) + +AS_CASE([$enable_recvmmsg], + [auto|yes],[ + AC_CHECK_FUNC([recvmmsg], + [AC_CHECK_FUNC([sendmmsg],[enable_recvmmsg=yes],[enable_recvmmsg=no])], + [enable_recvmmsg=no])], + [no],[], + [*], [AC_MSG_ERROR([Invalid value of --enable-recvmmsg.] + )]) + +AS_IF([test "$enable_recvmmsg" = yes],[ + AC_DEFINE([ENABLE_RECVMMSG], [1], [Use recvmmsg().])]) AC_ARG_ENABLE([reuseport], AS_HELP_STRING([--enable-reuseport=auto|yes|no], [enable Linux SO_REUSEPORT support [default=auto]]), @@ -178,6 +172,8 @@ AS_IF([test "$enable_reuseport" = yes],[ AC_DEFINE([ENABLE_REUSEPORT], [1], [Use SO_REUSEPORT.])]) AX_CHECK_COMPILE_FLAG("-fpredictive-commoning", [CFLAGS="$CFLAGS -fpredictive-commoning"], [], "-Werror") +AX_CHECK_LINK_FLAG(["-Wl,--exclude-libs,ALL"], [ldflag_exclude_libs="-Wl,--exclude-libs,ALL"], [ldflag_exclude_libs=""], "") +AC_SUBST([LDFLAG_EXCLUDE_LIBS], $ldflag_exclude_libs) # Default directories run_dir="${localstatedir}/run/knot" @@ -353,13 +349,14 @@ AS_IF([test "$with_lmdb" != "no"],[ ]) AS_IF([test "$have_lmdb" != "no"],[ - AC_SUBST([lmdb_CFLAGS]) AC_SUBST([lmdb_LIBS]) enable_lmdb=shared ],[ enable_lmdb=embedded + lmdb_CFLAGS='-I$(srcdir)/contrib/lmdb' ]) -AM_CONDITIONAL([HAVE_LMDB], test "$have_lmdb" != "no") +AM_CONDITIONAL([HAVE_LMDB], test "$enable_lmdb" = "shared") +AC_SUBST([lmdb_CFLAGS]) # LMDB mapping sizes conf_mapsize_default=500 @@ -534,6 +531,7 @@ AC_CONFIG_FILES([Makefile tests/Makefile tests-fuzz/Makefile samples/Makefile + python/Makefile src/Makefile src/contrib/dnstap/Makefile src/dnssec/Makefile @@ -572,6 +570,7 @@ AC_MSG_RESULT([ Knot DNS utils: ${enable_utilities} Knot DNS documentation: ${enable_documentation} + Use recvmmsg: ${enable_recvmmsg} Use SO_REUSEPORT: ${enable_reuseport} Fast zone parser: ${enable_fastparser} Utilities with IDN: ${with_libidn} diff --git a/doc/.gitignore b/doc/.gitignore index 8eb82f2cfd31852fd6d8181e2b576d38ab0c61af..abcf6fdb39dfbc4a43abe6f4cc993e9140908f7a 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -4,6 +4,7 @@ /man/kdig.1 /man/keymgr.8 /man/khost.1 +/man/kjournalprint.1 /man/knot.conf.5 /man/knot1to2.1 /man/knotc.8 diff --git a/doc/Makefile.am b/doc/Makefile.am index 1a14126a49f26bdc5b376e2bc6dce1c45ef89581..37c169b3b76206ffe2b23efccba67bbdb7db1056 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,5 +1,5 @@ -MANPAGES_IN = man/knot.conf.5in man/knotc.8in man/knotd.8in man/kdig.1in man/khost.1in man/knsupdate.1in man/knot1to2.1in man/knsec3hash.1in man/keymgr.8in man/kzonecheck.1in -MANPAGES_RST = reference.rst man_knotc.rst man_knotd.rst man_kdig.rst man_khost.rst man_knsupdate.rst man_knot1to2.rst man_knsec3hash.rst man_keymgr.rst man_kzonecheck.rst +MANPAGES_IN = man/knot.conf.5in man/knotc.8in man/knotd.8in man/kdig.1in man/khost.1in man/kjournalprint.1in man/knsupdate.1in man/knot1to2.1in man/knsec3hash.1in man/keymgr.8in man/kzonecheck.1in +MANPAGES_RST = reference.rst man_knotc.rst man_knotd.rst man_kdig.rst man_khost.rst man_kjournalprint.rst man_knsupdate.rst man_knot1to2.rst man_knsec3hash.rst man_keymgr.rst man_kzonecheck.rst EXTRA_DIST = \ conf.py \ @@ -62,7 +62,7 @@ man_MANS += man/knot.conf.5 man/knotc.8 man/knotd.8 endif # HAVE_DAEMON if HAVE_UTILS -man_MANS += man/kdig.1 man/khost.1 man/knsupdate.1 man/knot1to2.1 man/knsec3hash.1 man/keymgr.8 man/kzonecheck.1 +man_MANS += man/kdig.1 man/khost.1 man/kjournalprint.1 man/knsupdate.1 man/knot1to2.1 man/knsec3hash.1 man/keymgr.8 man/kzonecheck.1 endif # HAVE_UTILS man/knot.conf.5: man/knot.conf.5in @@ -70,6 +70,7 @@ man/knotc.8: man/knotc.8in man/knotd.8: man/knotd.8in man/kdig.1: man/kdig.1in man/khost.1: man/khost.1in +man/kjournalprint.1: man/kjournalprint.1in man/knsupdate.1: man/knsupdate.1in man/knot1to2.1: man/knot1to2.1in man/knsec3hash.1: man/knsec3hash.1in diff --git a/doc/conf.py b/doc/conf.py index 0be8a3157c1e36740b3b4ec5e3bff96cacaaeb50..a51b9ebc636a86cfde1a5795ab11161296302973 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -13,6 +13,8 @@ import sys, os, time +sys.setrecursionlimit(1500) + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. @@ -220,6 +222,7 @@ man_pages = [ ('man_kdig', 'kdig', 'Advanced DNS lookup utility', author, 1), ('man_keymgr', 'keymgr', ' DNSSEC key management utility', author, 8), ('man_khost', 'khost', 'Simple DNS lookup utility', author, 1), + ('man_kjournalprint', 'kjournalprint', 'Knot DNS journal print utility', author, 1), ('man_knot1to2', 'knot1to2', 'Knot DNS configuration conversion utility', author, 1), ('man_knotc', 'knotc', 'Knot DNS control utility', author, 8), ('man_knotd', 'knotd', 'Knot DNS server daemon', author, 8), diff --git a/doc/configuration.rst b/doc/configuration.rst index c60939a7cbf08acc5ae700af40357d3c27cbf0f6..e422ca426438f7f2fca1c73f2e08845bac8d52b7 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -46,8 +46,7 @@ Zone templates ============== A zone template allows a single zone configuration to be shared among several zones. -Each template option can be explicitly overridden in zone-specific configurations. -A ``default`` template identifier is reserved for the default template:: +The ``default`` template identifier is reserved for the default template:: template: - id: default @@ -58,6 +57,7 @@ A ``default`` template identifier is reserved for the default template:: storage: /var/lib/knot/signed dnssec-signing: on semantic-checks: on + master: [master1, master2] - id: slave storage: /var/lib/knot/slave @@ -70,6 +70,7 @@ A ``default`` template identifier is reserved for the default template:: - domain: example.cz template: signed + master: master3 # Override masters to just master3 - domain: example1.eu template: slave @@ -79,37 +80,59 @@ A ``default`` template identifier is reserved for the default template:: template: slave master: master2 +.. NOTE:: + Each template option can be explicitly overridden in zone-specific configuration. + Access control list (ACL) ========================= An ACL list specifies which remotes are allowed to send the server a specific request. A remote can be a single IP address or a network subnet. Also a TSIG -key can be assigned (see :doc:`keymgr <man_keymgr>` how to generate a TSIG key):: +key can be assigned (see :doc:`keymgr <man_keymgr>` how to generate a TSIG key). - key: - - id: key1 - algorithm: hmac-md5 - secret: Wg== +With no ACL rule, all the actions are denied for the zone. Each ACL rule +can allow one or more actions for given address/subnet/TSIG, or deny them. + +The rule precendence, if multiple rules match (e.g. overlapping address ranges), +is not for stricter or more specific rules. In any case, just the first -- in the +order of rules in zone or template acl configuration item, not in the order of +declarations in acl section -- matching rule applies and the rest is ignored. + +See following examples and :ref:`ACL section`.:: acl: - id: address_rule - address: [2001:db8::1, 192.168.2.0/24] # Allowed IP address list - action: [transfer, update] # Allow zone transfers and updates + address: [2001:db8::1, 192.168.2.0/24] + action: transfer - - id: deny_rule # Negative match rule + - id: deny_rule address: 192.168.2.100 action: transfer - deny: on # The request is denied + deny: on + + zone: + - domain: acl1.example.com. + acl: [deny_rule, address_rule] # deny_rule first here to take precendence + +:: + + key: + - id: key1 + algorithm: hmac-md5 + secret: Wg== + + acl: + - id: deny_all + address: 192.168.3.0/24 + deny: on # no action specified and deny on implies denial of all actions - id: key_rule key: key1 # Access based just on TSIG key - action: transfer - -These rules can then be referenced from a zone :ref:`zone_acl`:: + action: [transfer, notify] zone: - - domain: example.com - acl: [address_rule, deny_rule, key_rule] + - domain: acl2.example.com + acl: [deny_all, key_rule] Slave zone ========== @@ -243,31 +266,6 @@ processed:: file: example.com.zone acl: update_acl -Response rate limiting -====================== - -Response rate limiting (RRL) is a method to combat DNS reflection amplification -attacks. These attacks rely on the fact that source address of a UDP query -can be forged, and without a worldwide deployment of `BCP38 -<https://tools.ietf.org/html/bcp38>`_, such a forgery cannot be prevented. -An attacker can use a DNS server (or multiple servers) as an amplification -source and can flood a victim with a large number of unsolicited DNS responses. - -The RRL lowers the amplification factor of these attacks by sending some of -the responses as truncated or by dropping them altogether. - -You can enable RRL by setting the :ref:`server_rate-limit` option in the -:ref:`server section<Server section>`. The option controls how many responses -per second are permitted for each flow. Responses exceeding this rate are -limited. The option :ref:`server_rate-limit-slip` then configures how many -limited responses are sent as truncated (slip) instead of being dropped. - -:: - - server: - rate-limit: 200 # Allow 200 resp/s for each flow - rate-limit-slip: 2 # Every other response slips - .. _dnssec: Automatic DNSSEC signing @@ -364,8 +362,7 @@ with manual key management flag has to be set:: dnssec-policy: manual To generate signing keys, use the :doc:`keymgr <man_keymgr>` utility. -Let's use the Single-Type Signing scheme with two algorithms, which is -a scheme currently not supported by the automatic key management. Run: +Let's use the Single-Type Signing scheme with two algorithms. Run: .. code-block:: console @@ -445,7 +442,7 @@ of the limitations will be hopefully removed in the near future. - Automatic key management: - Only one DNSSEC algorithm can be used per zone. - - Single-Type Signing scheme is not supported. + - CSK rollover with Single-Type Signing scheme is not implemented. - ZSK rollover always uses key pre-publish method (actually a feature). - KSK rollover is not implemented. @@ -460,516 +457,14 @@ of the limitations will be hopefully removed in the near future. - Legacy key export is not implemented. - DS record export is not implemented. -Query modules -============= - -Knot DNS supports configurable query modules that can alter the way -queries are processed. The concept is quite simple – each query -requires a finite number of steps to be resolved. We call this set of -steps a *query plan*, an abstraction that groups these steps into -several stages. - -* Before-query processing -* Answer, Authority, Additional records packet sections processing -* After-query processing - -For example, processing an Internet-class query needs to find an -answer. Then based on the previous state, it may also append an -authority SOA or provide additional records. Each of these actions -represents a 'processing step'. Now, if a query module is loaded for a -zone, it is provided with an implicit query plan which can be extended -by the module or even changed altogether. - -Each module is configured in the corresponding module section and is -identified for the subsequent usage. Then the identifier is referenced -in the form of ``module_name/module_id`` through a zone/template :ref:`zone_module` -option or through the *default* template :ref:`template_global-module` option -if it is used for all queries. - -``dnstap`` – dnstap-enabled query logging ------------------------------------------ - -A module for query and response logging based on dnstap_ library. -You can capture either all or zone-specific queries and responses; usually -you want to do the former. The configuration comprises only a -:ref:`mod-dnstap_sink` path parameter, which can be either a file or -a UNIX socket:: - - mod-dnstap: - - id: capture_all - sink: /tmp/capture.tap - - template: - - id: default - global-module: mod-dnstap/capture_all - -.. NOTE:: - To be able to use a Unix socket you need an external program to create it. - Knot DNS connects to it as a client using the libfstrm library. It operates - exactly like syslog. See `here - <https://www.nlnetlabs.nl/bugs-script/show_bug.cgi?id=741#c10>`_ for - more details. - -.. NOTE:: - Dnstap log files can also be created or read using ``kdig``. - -.. _dnstap: http://dnstap.info/ - -``synth-record`` – Automatic forward/reverse records ----------------------------------------------------- - -This module is able to synthesize either forward or reverse records for -a given prefix and subnet. - -Records are synthesized only if the query can't be satisfied from the zone. -Both IPv4 and IPv6 are supported. - -Automatic forward records -------------------------- - -Example:: - - mod-synth-record: - - id: test1 - type: forward - prefix: dynamic- - ttl: 400 - network: 2620:0:b61::/52 - - zone: - - domain: test. - file: test.zone # Must exist - module: mod-synth-record/test1 - -Result: - -.. code-block:: console - - $ kdig AAAA dynamic-2620-0000-0b61-0100-0000-0000-0000-0001.test. - ... - ;; QUESTION SECTION: - ;; dynamic-2620-0000-0b61-0100-0000-0000-0000-0001.test. IN AAAA - - ;; ANSWER SECTION: - dynamic-2620-0000-0b61-0100-0000-0000-0000-0001.test. 400 IN AAAA 2620:0:b61:100::1 - -You can also have CNAME aliases to the dynamic records, which are going to be -further resolved: - -.. code-block:: console - - $ kdig AAAA alias.test. - ... - ;; QUESTION SECTION: - ;; alias.test. IN AAAA - - ;; ANSWER SECTION: - alias.test. 3600 IN CNAME dynamic-2620-0000-0b61-0100-0000-0000-0000-0002.test. - dynamic-2620-0000-0b61-0100-0000-0000-0000-0002.test. 400 IN AAAA 2620:0:b61:100::2 - -Automatic reverse records -------------------------- - -Example:: - - mod-synth-record: - - id: test2 - type: reverse - prefix: dynamic- - origin: test - ttl: 400 - network: 2620:0:b61::/52 - - zone: - - domain: 1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa. - file: 1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa.zone # Must exist - module: mod-synth-record/test2 - -Result: - -.. code-block:: console - - $ kdig -x 2620:0:b61::1 - ... - ;; QUESTION SECTION: - ;; 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa. IN PTR - - ;; ANSWER SECTION: - 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa. 400 IN PTR - dynamic-2620-0000-0b61-0000-0000-0000-0000-0001.test. - -``dnsproxy`` – Tiny DNS proxy ------------------------------ - -The module catches all unsatisfied queries and forwards them to the -indicated server for resolution, i.e. a tiny DNS proxy. There are several -uses of this feature: - -* A substitute public-facing server in front of the real one -* Local zones (poor man's "views"), rest is forwarded to the public-facing server -* etc. - -.. NOTE:: - The module does not alter the query/response as the resolver would, - and the original transport protocol is kept as well. - -The configuration is straightforward and just a single remote server is -required:: - - remote: - - id: hidden - address: 10.0.1.1 - - mod-dnsproxy: - - id: default - remote: hidden - - template: - - id: default - global-module: mod-dnsproxy/default - - zone: - - domain: local.zone - -When clients query for anything in the ``local.zone``, they will be -responded to locally. The rest of the requests will be forwarded to the -specified server (``10.0.1.1`` in this case). - -``rosedb`` – Static resource records ------------------------------------- - -The module provides a mean to override responses for certain queries before -the record is searched in the available zones. The module comes with the -``rosedb_tool`` tool used to manipulate the database of static records. -Neither the tool nor the module are enabled by default, recompile with -the ``--enable-rosedb`` configuration flag to enable them. - -For example, let's suppose we have a database of following records: - -.. code-block:: none - - myrecord.com. 3600 IN A 127.0.0.1 - www.myrecord.com. 3600 IN A 127.0.0.2 - ipv6.myrecord.com. 3600 IN AAAA ::1 - -And we query the nameserver with the following: - -.. code-block:: console - - $ kdig IN A myrecord.com - ... returns NOERROR, 127.0.0.1 - $ kdig IN A www.myrecord.com - ... returns NOERROR, 127.0.0.2 - $ kdig IN A stuff.myrecord.com - ... returns NOERROR, 127.0.0.1 - $ kdig IN AAAA myrecord.com - ... returns NOERROR, NODATA - $ kdig IN AAAA ipv6.myrecord.com - ... returns NOERROR, ::1 - -An entry in the database matches anything at the same or a lower domain -level, i.e. 'myrecord.com' matches 'a.a.myrecord.com' as well. -This can be utilized to create catch-all entries. - -You can also add authority information for the entries, provided you create -SOA + NS records for a name, like so: - -.. code-block:: none - - myrecord.com. 3600 IN SOA master host 1 3600 60 3600 3600 - myrecord.com. 3600 IN NS ns1.myrecord.com. - myrecord.com. 3600 IN NS ns2.myrecord.com. - ns1.myrecord.com. 3600 IN A 127.0.0.1 - ns2.myrecord.com. 3600 IN A 127.0.0.2 - -In this case, the responses will: - -1. Be authoritative (AA flag set) -2. Provide an authority section (SOA + NS) -3. Be NXDOMAIN if the name is found *(i.e. the 'IN AAAA myrecord.com' from - the example)*, but not the RR type *(this is to allow the synthesis of - negative responses)* - -The SOA record applies only to the 'myrecord.com.', not to any other -record (not even those of its subdomains). From this point of view, all records -in the database are unrelated and not hierarchical. The idea is to provide -subtree isolation for each entry.* - -In addition, the module is able to log matching queries via remote syslog if -you specify a syslog address endpoint and an optional string code. - -Here is an example on how to use the module: - -* Create the entries in the database: - - .. code-block:: console - - $ mkdir /tmp/static_rrdb - $ # No logging - $ rosedb_tool /tmp/static_rrdb add myrecord.com. A 3600 "127.0.0.1" "-" "-" - $ # Logging as 'www_query' to Syslog at 10.0.0.1 - $ rosedb_tool /tmp/static_rrdb add www.myrecord.com. A 3600 "127.0.0.1" \ - "www_query" "10.0.0.1" - $ # Logging as 'ipv6_query' to Syslog at 10.0.0.1 - $ rosedb_tool /tmp/static_rrdb add ipv6.myrecord.com. AAAA 3600 "::1" \ - "ipv6_query" "10.0.0.1" - $ # Verify settings - $ rosedb_tool /tmp/static_rrdb list - www.myrecord.com. A RDATA=10B www_query 10.0.0.1 - ipv6.myrecord.com. AAAA RDATA=22B ipv6_query 10.0.0.1 - myrecord.com. A RDATA=10B - - - -.. NOTE:: - The database may be modified later on while the server is running. - -* Configure the query module:: - - mod-rosedb: - - id: default - dbdir: /tmp/static_rrdb - - template: - - id: default - global-module: mod-rosedb/default - -The module accepts just one parameter – the path to the directory where -the database will be stored. - -* Start the server: - - .. code-block:: console - - $ knotd -c knot.conf - -* Verify the running instance: - - .. code-block:: console - - $ kdig @127.0.0.1#6667 A myrecord.com - -``online-sign`` — Online DNSSEC signing ---------------------------------------- - -The module provides online DNSSEC signing. Instead of pre-computing the zone -signatures when the zone is loaded into the server or instead of loading an -externally signed zone, the signatures are computed on-the-fly during -answering. - -The main purpose of the module is to enable authenticated responses with -zones which use other dynamic module (e.g., automatic reverse record -synthesis) because these zones cannot be pre-signed. However, it can be also -used as a simple signing solution for zones with low traffic and also as -a protection against zone content enumeration (zone walking). - -In order to minimize the number of computed signatures per query, the module -produces a bit different responses from the responses that would be sent if -the zone was pre-signed. Still, the responses should be perfectly valid for -a DNSSEC validating resolver. - -Differences from statically signed zones: - -* The NSEC records are constructed as Minimally Covering NSEC Records - (see Appendix A in :rfc:`7129`). Therefore the generated domain names cover - the complete domain name space in the zone's authority. - -* NXDOMAIN responses are promoted to NODATA responses. The module proves - that the query type does not exist rather than that the domain name does not - exist. - -* Domain names matching a wildcard are expanded. The module pretends and proves - that the domain name exists rather than proving a presence of the wildcard. - -Records synthesized by the module: - -* DNSKEY record is synthesized in the zone apex and includes public key - material for the active signing key. - -* NSEC records are synthesized as needed. - -* RRSIG records are synthesized for authoritative content of the zone. - -How to use the online signing module: - -* First add the zone into the server's KASP database and generate a key to be - used for signing: - - .. code-block:: console - - $ cd /path/to/kasp - $ keymgr zone add example.com - $ keymgr zone key generate example.com algorithm ecdsap256sha256 size 256 - -* Enable the module in server configuration and hook it to the zone:: - - mod-online-sign: - - id: default - - zone: - - domain: example.com - module: mod-online-sign/default - dnssec-signing: false - -* Make sure the zone is not signed and also that the automatic signing is - disabled. All is set, you are good to go. Reload (or start) the server: - - .. code-block:: console - - $ knotc reload - -The following example stacks the online signing with reverse record synthesis -module:: - - mod-online-sign: - - id: default - - mod-synth-record: - - id: lan-forward - type: forward - prefix: ip- - ttl: 1200 - network: 192.168.100.0/24 - - template: - - id: default - dnssec-signing: false - - zone: - - domain: corp.example.net - module: mod-synth-record/lan-forward - module: mod-online-sign/default +.. _dnssec-keyusage: -Known issues: +DNSSEC keys used by multiple zones +---------------------------------- -* The delegations are not signed correctly. +Using same key for multiple zones with automatic key management is possible. +However, all zones must be listed in keyusage (keys directory) or they will be deleted, +when they retire in any zone. -* Some CNAME records are not signed correctly. - -Limitations: - -* Only a Single-Type Signing scheme is supported. - -* Only one active signing key can be used. - -* Key rollover is not possible. - -* The NSEC records may differ for one domain name if queried for different - types. This is an implementation shortcoming as the dynamic modules - cooperate loosely. Possible synthesis of a type by other module cannot - be predicted. This dissimilarity should not affect response validation, - even with validators performing `aggressive negative caching - <https://datatracker.ietf.org/doc/draft-fujiwara-dnsop-nsec-aggressiveuse/>`_. - -* The NSEC proofs will work well with other dynamic modules only if the - modules synthesize only A and AAAA records. If synthesis of other type - is required, please, report this information to Knot DNS developers. - -``whoami`` — whoami module --------------------------- - -The module synthesizes an A or AAAA record containing the query source IP address, -at the apex of the zone being served. It makes sure to allow Knot DNS to generate -cacheable negative responses, and to allow fallback to extra records defined in the -underlying zone file. The TTL of the synthesized record is copied from -the TTL of the SOA record in the zone file. - -Because a DNS query for type A or AAAA has nothing to do with whether -the query occurs over IPv4 or IPv6, this module requires a special -zone configuration to support both address families. For A queries, the -underlying zone must have a set of nameservers that only have IPv4 -addresses, and for AAAA queries, the underlying zone must have a set of -nameservers that only have IPv6 addresses. - -To enable this module, you need to add something like the following to -the Knot DNS configuration file:: - - mod-whoami: - - id: default - - zone: - - domain: whoami.domain.example - file: "/path/to/whoami.domain.example" - module: [mod-whoami/default] - - zone: - - domain: whoami6.domain.example - file: "/path/to/whoami6.domain.example" - module: [mod-whoami/default] - -The whoami.domain.example zone file example: - - .. code-block:: none - - $TTL 1 - - @ SOA ( - whoami.domain.example. ; MNAME - hostmaster.domain.example. ; RNAME - 2016051300 ; SERIAL - 86400 ; REFRESH - 86400 ; RETRY - 86400 ; EXPIRE - 1 ; MINIMUM - ) - - $TTL 86400 - - @ NS ns1.whoami.domain.example. - @ NS ns2.whoami.domain.example. - @ NS ns3.whoami.domain.example. - @ NS ns4.whoami.domain.example. - - ns1 A 198.51.100.53 - ns2 A 192.0.2.53 - ns3 A 203.0.113.53 - ns4 A 198.19.123.53 - -The whoami6.domain.example zone file example: - - .. code-block:: none - - $TTL 1 - - @ SOA ( - whoami6.domain.example. ; MNAME - hostmaster.domain.example. ; RNAME - 2016051300 ; SERIAL - 86400 ; REFRESH - 86400 ; RETRY - 86400 ; EXPIRE - 1 ; MINIMUM - ) - - $TTL 86400 - - @ NS ns1.whoami6.domain.example. - @ NS ns2.whoami6.domain.example. - @ NS ns3.whoami6.domain.example. - @ NS ns4.whoami6.domain.example. - - ns1 AAAA 2001:db8:100::53 - ns2 AAAA 2001:db8:200::53 - ns3 AAAA 2001:db8:300::53 - ns4 AAAA 2001:db8:400::53 - -The parent domain would then delegate whoami.domain.example to -ns[1-4].whoami.domain.example and whoami6.domain.example to -ns[1-4].whoami6.domain.example, and include the corresponding A-only or -AAAA-only glue records. - -``noudp`` — noudp module ------------------------- - -The module sends empty truncated response to any UDP query. This is similar -to a slipped answer in :ref:`response rate limiting<server_rate-limit>`. - -To enable this module globally, you need to add something like the following -to the configuration file:: - - mod-noudp: - - id: default - - template: - - id: default - global-module: mod-noudp/default +If keys are added manually as published, but not active (for next rollover event), they are added automatically. -The TCP queries are not affected. diff --git a/doc/index.rst b/doc/index.rst index f785bd9bd7508b1bf9aa277a1281a7d66a8499bd..3c919d8889908884b951cec8e3909c67200a444a 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -10,6 +10,7 @@ Welcome to Knot DNS's documentation! requirements installation configuration + modules operation troubleshooting reference diff --git a/doc/introduction.rst b/doc/introduction.rst index 5243280c5960e805cae7a792b81fb89bb3322a0b..1e80feab89ecef7283b3c856d7a9953fb05bed42 100644 --- a/doc/introduction.rst +++ b/doc/introduction.rst @@ -48,6 +48,7 @@ Server features: * Automatic DNSSEC signing * PKCS #11 interface * Forward and reverse records synthesis +* DNS request traffic statistics For more info and downloads see `www.knot-dns.cz <https://www.knot-dns.cz>`_. diff --git a/doc/man/kdig.1in b/doc/man/kdig.1in index 2e7feffd9e44a59d9e1ea73efe148f4a4a824073..5973db126f616e965354a8e3ab3450648f50983c 100644 --- a/doc/man/kdig.1in +++ b/doc/man/kdig.1in @@ -251,7 +251,7 @@ on libidn availability during project building! .sp Options \fB\-k\fP and \fB\-y\fP can not be used simultaneously. .sp -Dnssec\-keygen keyfile format is not supported. Use \fIkeymgr(8)\fP instead. +Dnssec\-keygen keyfile format is not supported. Use \fBkeymgr(8)\fP instead. .SH EXAMPLES .INDENT 0.0 .IP 1. 3 @@ -312,10 +312,10 @@ $ kdig \-d @185.49.141.38 +tls\-ca +tls\-host=getdnsapi.net \e \fB/etc/resolv.conf\fP .SH SEE ALSO .sp -\fIkhost(1)\fP, \fIknsupdate(1)\fP, \fIkeymgr(8)\fP\&. +\fBkhost(1)\fP, \fBknsupdate(1)\fP, \fBkeymgr(8)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/keymgr.8in b/doc/man/keymgr.8in index cda26f5e2e2c59b82820a15c42567b3cdcca6dcd..f089af49e187c949668429c62c9458d4665246be 100644 --- a/doc/man/keymgr.8in +++ b/doc/man/keymgr.8in @@ -148,14 +148,16 @@ utilities. .SS zone commands .INDENT 0.0 .TP -\fBzone\fP \fBkey\fP \fBlist\fP \fIzone\-name\fP [\fBfilter\fP] -List key IDs and tags of zone keys. +\fBzone\fP \fBkey\fP \fBlist\fP \fIzone\-name\fP [\fBfilter\fP [\fBfilter\fP]] +List key IDs and tags of zone keys. The \fBfilter\fP can be a key tag, a key ID prefix, a key state (active, published, retired, removed) or ksk/zsk. Key state and ksk/zsk combination is possible. +Use these key state and ksk/zsk with prefix \(aq+\(aq (\(aq+ksk\(aq, \(aq+active\(aq). .TP \fBzone\fP \fBkey\fP \fBshow\fP \fIzone\-name\fP \fIkey\fP Show zone key details. The \fIkey\fP can be a key tag or a key ID prefix. .TP -\fBzone\fP \fBkey\fP \fBds\fP \fIzone\-name\fP \fIkey\fP -Show DS records for a zone key. The \fIkey\fP can be a key tag or a key ID prefix. +\fBzone\fP \fBkey\fP \fBds\fP \fIzone\-name\fP \fIfilter\fP +Show DS records for a zone key. The \fIfilter\fP can be a key tag, a key ID prefix or key state (limited to active and published ksk). +Use these key state as \(aq+active\(aq or \(aq+published\(aq. .TP \fBzone\fP \fBkey\fP \fBgenerate\fP \fIzone\-name\fP [\fIkey\-parameter\fP\&...] Generate a new key for a zone. @@ -386,12 +388,12 @@ $ keymgr tsig generate operator.key algorithm hmac\-sha512 .sp \fI\%RFC 6781\fP \- DNSSEC Operational Practices. .sp -\fIknot.conf(5)\fP, -\fIknotc(8)\fP, -\fIknotd(8)\fP\&. +\fBknot.conf(5)\fP, +\fBknotc(8)\fP, +\fBknotd(8)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/khost.1in b/doc/man/khost.1in index 5e6763638e587fe287cabf50be71ca5a6f105595..29c0eecce88310f6ec6e89f8c77a75336f55b58d 100644 --- a/doc/man/khost.1in +++ b/doc/man/khost.1in @@ -143,10 +143,10 @@ $ khost \-t AXFR \-v example.com \fB/etc/resolv.conf\fP .SH SEE ALSO .sp -\fIkdig(1)\fP, \fIknsupdate(1)\fP\&. +\fBkdig(1)\fP, \fBknsupdate(1)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/kjournalprint.1in b/doc/man/kjournalprint.1in new file mode 100644 index 0000000000000000000000000000000000000000..9745e0263dd90aa1c2f2e7a60737e82c5f2a4a7e --- /dev/null +++ b/doc/man/kjournalprint.1in @@ -0,0 +1,89 @@ +.\" Man page generated from reStructuredText. +. +.TH "KJOURNALPRINT" "1" "@RELEASE_DATE@" "@VERSION@" "Knot DNS" +.SH NAME +kjournalprint \- Knot DNS journal print utility +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.SH SYNOPSIS +.sp +\fBkjournalprint\fP [\fIoptions\fP] \fIjournal_db\fP \fIzone_name\fP +.SH DESCRIPTION +.sp +The program prints zone history stored in a journal database. As default, +changes are colored for terminal. +.SS Options +.INDENT 0.0 +.TP +\fB\-l\fP, \fB\-\-limit\fP \fIlimit\fP +Limits the number of displayed changes. +.TP +\fB\-n\fP, \fB\-\-no\-color\fP +Removes changes coloring. +.TP +\fB\-z\fP, \fB\-\-zone\-list\fP +Instead of reading jurnal, display the list of zones in the DB. +(\fIzone_name\fP not needed) +.TP +\fB\-h\fP, \fB\-\-help\fP +Print the program help. +.TP +\fB\-V\fP, \fB\-\-version\fP +Print the program version. +.UNINDENT +.SS Parameters +.INDENT 0.0 +.TP +\fIjournal_db\fP +A path to the journal database. +.TP +\fIzone_name\fP +A name of the zone to print the history for. +.UNINDENT +.SH EXAMPLES +.sp +Last (most recent) 5 changes without colors: +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +$ kjournalprint \-nl 5 /var/lib/knot/journal example.com. +.ft P +.fi +.UNINDENT +.UNINDENT +.SH SEE ALSO +.sp +\fBknotd(8)\fP, \fBknot.conf(5)\fP\&. +.SH AUTHOR +CZ.NIC Labs <http://www.knot-dns.cz> +.SH COPYRIGHT +Copyright 2010–2017, CZ.NIC, z.s.p.o. +.\" Generated by docutils manpage writer. +. diff --git a/doc/man/knot.conf.5in b/doc/man/knot.conf.5in index ac940dcc0d75b0aabda6c36e0b87e748d151d44f..769b119286e9026ccdb0001682bcacabffd30b36 100644 --- a/doc/man/knot.conf.5in +++ b/doc/man/knot.conf.5in @@ -66,12 +66,13 @@ the following symbols: | – Choice .UNINDENT .sp -There are 10 main sections (\fBserver\fP, \fBcontrol\fP, \fBlog\fP, \fBkeystore\fP, -\fBpolicy\fP, \fBkey\fP, \fBacl\fP, \fBremote\fP, \fBtemplate\fP, and \fBzone\fP) and -module sections with the \fBmod\-\fP prefix. Most of the sections (excluding -\fBserver\fP and \fBcontrol\fP) are sequences of settings blocks. Each settings block -begins with a unique identifier, which can be used as a reference from other -sections (such identifier must be defined in advance). +There are 11 main sections (\fBserver\fP, \fBcontrol\fP, \fBlog\fP, \fBstatistics\fP, +\fBkeystore\fP, \fBpolicy\fP, \fBkey\fP, \fBacl\fP, \fBremote\fP, \fBtemplate\fP, and +\fBzone\fP) and module sections with the \fBmod\-\fP prefix. Most of the sections +(excluding \fBserver\fP, \fBcontrol\fP, and \fBstatistics\fP) are sequences of +settings blocks. Each settings block begins with a unique identifier, +which can be used as a reference from other sections (such identifier +must be defined in advance). .sp A multi\-valued item can be specified either as a YAML sequence: .INDENT 0.0 @@ -103,8 +104,8 @@ to enclose such value within double quotes \fB"\fP \fB"\fP\&. .SH COMMENTS .sp A comment begins with a \fB#\fP character and is ignored during processing. -Also each configuration section or sequence block allows to specify permanent -comment using \fBcomment\fP item which is stored in the server beside the +Also each configuration section or sequence block allows a permanent +comment using the \fBcomment\fP item which is stored in the server beside the configuration. .SH INCLUDES .sp @@ -149,10 +150,6 @@ server: max\-udp\-payload: SIZE max\-ipv4\-udp\-payload: SIZE max\-ipv6\-udp\-payload: SIZE - rate\-limit: INT - rate\-limit\-slip: INT - rate\-limit\-table\-size: INT - rate\-limit\-whitelist: ADDR[/INT] | ADDR\-ADDR ... listen: ADDR[@INT] ... .ft P .fi @@ -243,69 +240,6 @@ A maximum number of TCP clients connected in parallel, set this below the file descriptor limit to avoid resource exhaustion. .sp \fIDefault:\fP 100 -.SS rate\-limit -.sp -Rate limiting is based on the token bucket scheme. A rate basically -represents a number of tokens available each second. Each response is -processed and classified (based on several discriminators, e.g. -source netblock, query type, zone name, rcode, etc.). Classified responses are -then hashed and assigned to a bucket containing number of available -tokens, timestamp and metadata. When available tokens are exhausted, -response is dropped or sent as truncated (see \fI\%rate\-limit\-slip\fP). -Number of available tokens is recalculated each second. -.sp -\fIDefault:\fP 0 (disabled) -.SS rate\-limit\-table\-size -.sp -Size of the hash table in a number of buckets. The larger the hash table, the lesser -the probability of a hash collision, but at the expense of additional memory costs. -Each bucket is estimated roughly to 32 bytes. The size should be selected as -a reasonably large prime due to better hash function distribution properties. -Hash table is internally chained and works well up to a fill rate of 90 %, general -rule of thumb is to select a prime near 1.2 * maximum_qps. -.sp -\fIDefault:\fP 393241 -.SS rate\-limit\-slip -.sp -As attacks using DNS/UDP are usually based on a forged source address, -an attacker could deny services to the victim\(aqs netblock if all -responses would be completely blocked. The idea behind SLIP mechanism -is to send each N\s-2\uth\d\s0 response as truncated, thus allowing client to -reconnect via TCP for at least some degree of service. It is worth -noting, that some responses can\(aqt be truncated (e.g. SERVFAIL). -.INDENT 0.0 -.IP \(bu 2 -Setting the value to \fB0\fP will cause that all rate\-limited responses will -be dropped. The outbound bandwidth and packet rate will be strictly capped -by the \fI\%rate\-limit\fP option. All legitimate requestors affected -by the limit will face denial of service and will observe excessive timeouts. -Therefore this setting is not recommended. -.IP \(bu 2 -Setting the value to \fB1\fP will cause that all rate\-limited responses will -be sent as truncated. The amplification factor of the attack will be reduced, -but the outbound data bandwidth won\(aqt be lower than the incoming bandwidth. -Also the outbound packet rate will be the same as without RRL. -.IP \(bu 2 -Setting the value to \fB2\fP will cause that half of the rate\-limited responses -will be dropped, the other half will be sent as truncated. With this -configuration, both outbound bandwidth and packet rate will be lower than the -inbound. On the other hand, the dropped responses enlarge the time window -for possible cache poisoning attack on the resolver. -.IP \(bu 2 -Setting the value to anything \fBlarger than 2\fP will keep on decreasing -the outgoing rate\-limited bandwidth, packet rate, and chances to notify -legitimate requestors to reconnect using TCP. These attributes are inversely -proportional to the configured value. Setting the value high is not advisable. -.UNINDENT -.sp -\fIDefault:\fP 1 -.SS rate\-limit\-whitelist -.sp -A list of IP addresses, network subnets, or network ranges to exempt from -rate limiting. Empty list means that no incoming connection will be -white\-listed. -.sp -\fIDefault:\fP not set .SS max\-udp\-payload .sp Maximum EDNS0 UDP payload size default for both IPv4 and IPv6. @@ -395,8 +329,7 @@ match one of them. Empty value means that TSIG key is not required. \fIDefault:\fP not set .SS action .sp -An ordered list of allowed actions. Empty action list is only allowed if -\fI\%deny\fP is set. +An ordered list of allowed (or denied) actions. .sp Possible values: .INDENT 0.0 @@ -411,8 +344,9 @@ Possible values: \fIDefault:\fP not set .SS deny .sp -Deny if \fI\%address\fP, \fI\%key\fP and -\fI\%action\fP match. +If enabled, instead of allowing, deny the specified \fI\%action\fP, +\fI\%address\fP, \fI\%key\fP, or combination if these +items. If no action is specified, deny all actions. .sp \fIDefault:\fP off .SH CONTROL SECTION @@ -440,6 +374,39 @@ A UNIX socket path where the server listens for control commands. Maximum time the control socket operations can take. Set 0 for infinity. .sp \fIDefault:\fP 5 +.SH STATISTICS SECTION +.sp +Periodic server statistics dumping. +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +statistics: + timer: TIME + file: STR + append: BOOL +.ft P +.fi +.UNINDENT +.UNINDENT +.SS timer +.sp +A period after which all available statistics metrics will by written to the +\fI\%file\fP\&. +.sp +\fIDefault:\fP not set +.SS file +.sp +A file path of statistics output in the YAML format. +.sp +\fIDefault:\fP \fI\%rundir\fP/stats.yaml +.SS append +.sp +If enabled, the output will be appended to the \fI\%file\fP +instead of file replacement. +.sp +\fIDefault:\fP off .SH KEYSTORE SECTION .sp DNSSEC keystore configuration. @@ -500,18 +467,19 @@ policy: \- id: STR keystore: STR manual: BOOL + single\-type\-signing: BOOL algorithm: dsa | rsasha1 | dsa\-nsec3\-sha1 | rsasha1\-nsec3\-sha1 | rsasha256 | rsasha512 | ecdsap256sha256 | ecdsap384sha384 ksk\-size: SIZE zsk\-size: SIZE dnskey\-ttl: TIME zsk\-lifetime: TIME + propagation\-delay: TIME rrsig\-lifetime: TIME rrsig\-refresh: TIME nsec3: BOOL nsec3\-iterations: INT nsec3\-salt\-length: INT nsec3\-salt\-lifetime: TIME - propagation\-delay: TIME .ft P .fi .UNINDENT @@ -530,6 +498,20 @@ for zones. A special \fIdefault\fP value can be used for the default keystore se If enabled, automatic key management is not used. .sp \fIDefault:\fP off +.SS single\-type\-signing +.sp +If enabled, Single\-Type Signing Scheme is used in the automatic key management +mode. +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +Because key rollover is not supported yet, just one combined signing key is +generated if none is available. +.UNINDENT +.UNINDENT +.sp +\fIDefault:\fP off .SS algorithm .sp An algorithm of signing keys and issued signatures. @@ -550,11 +532,38 @@ A length of newly generated ZSK keys. A TTL value for DNSKEY records added into zone apex. .sp \fIDefault:\fP zone SOA TTL +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +has infuence over ZSK key lifetime +.UNINDENT +.UNINDENT .SS zsk\-lifetime .sp A period between ZSK publication and the next rollover initiation. .sp \fIDefault:\fP 30 days +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +ZSK key lifetime is also infuenced by propagation\-delay and dnskey\-ttl +.UNINDENT +.UNINDENT +.SS propagation\-delay +.sp +An extra delay added for each key rollover step. This value should be high +enough to cover propagation of data from the master server to all slaves. +.sp +\fIDefault:\fP 1 day +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +has infuence over ZSK key lifetime +.UNINDENT +.UNINDENT .SS rrsig\-lifetime .sp A validity period of newly issued signatures. @@ -586,12 +595,6 @@ name before hashing. A validity period of newly issued salt field. .sp \fIDefault:\fP 30 days -.SS propagation\-delay -.sp -An extra delay added for each key rollover step. This value should be high -enough to cover propagation of data from the master server to all slaves. -.sp -\fIDefault:\fP 1 day .SH REMOTE SECTION .sp Definitions of remote servers for outgoing connections (source of a zone @@ -630,7 +633,7 @@ can be appended to the address using \fB@\fP separator. \fIDefault:\fP not set .SS key .sp -A \fI\%reference\fP to the TSIG key which ise used to autenticate +A \fI\%reference\fP to the TSIG key which is used to authenticate the communication with the remote server. .sp \fIDefault:\fP not set @@ -648,6 +651,8 @@ if a zone doesn\(aqt have another template specified. template: \- id: STR timer\-db: STR + journal\-db: STR + max\-journal\-db\-size: SIZE global\-module: STR/STR ... # All zone options (excluding \(aqtemplate\(aq item) .ft P @@ -670,9 +675,41 @@ This option is only available in the \fIdefault\fP template. .UNINDENT .sp \fIDefault:\fP \fI\%storage\fP/timers +.SS journal\-db +.sp +Specifies a path of the persistent journal database. The path can be specified +as a relative path to the \fIdefault\fP template \fI\%storage\fP\&. +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +This option is only available in the \fIdefault\fP template. +.UNINDENT +.UNINDENT +.sp +\fIDefault:\fP \fI\%storage\fP/journal +.SS max\-journal\-db\-size +.sp +Hard limit for the common journal DB. There is no cleanup logic in journal +to recover from reaching this limit: journal simply starts refusing changes +across all zones. Decreasing this value has no effect if lower than actual +DB file size. +.sp +It is recommended to limit \fI\%max\-journal\-usage\fP +per\-zone instead of max\-journal\-size in most cases. Please keep this value +large enough. This value also influences server\(aqs usage of virtual memory. +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +This option is only available in the \fIdefault\fP template. +.UNINDENT +.UNINDENT +.sp +\fIDefault:\fP 20 GiB .SS global\-module .sp -An ordered list of references to query modules in the form +An ordered list of references to query modules in the form of \fImodule_name\fP or \fImodule_name/module_id\fP\&. These modules apply to all queries. .sp \fBNOTE:\fP @@ -694,8 +731,8 @@ Definition of zones served by the server. zone: \- domain: DNAME template: template_id - file: STR storage: STR + file: STR master: remote_id ... ddns\-master: remote_id notify: remote_id ... @@ -704,7 +741,8 @@ zone: disable\-any: BOOL zonefile\-sync: TIME ixfr\-from\-differences: BOOL - max\-journal\-size: SIZE + max\-journal\-usage: SIZE + max\-journal\-depth: INT max\-zone\-size : SIZE dnssec\-signing: BOOL dnssec\-policy: STR @@ -724,6 +762,11 @@ A zone name identifier. A \fI\%reference\fP to a configuration template. .sp \fIDefault:\fP not set or \fIdefault\fP (if the template exists) +.SS storage +.sp +A data directory for storing zone files, journal files and timers database. +.sp +\fIDefault:\fP \fB${localstatedir}/lib/knot\fP (configured with \fB\-\-with\-storage=path\fP) .SS file .sp A path to the zone file. Non absolute path is relative to @@ -733,8 +776,8 @@ A path to the zone file. Non absolute path is relative to \fB%c[\fP\fIN\fP\fB]\fP or \fB%c[\fP\fIN\fP\fB\-\fP\fIM\fP\fB]\fP – means the \fIN\fPth character or a sequence of characters beginning from the \fIN\fPth and ending with the \fIM\fPth character of the textual zone name (see \fB%s\fP). The -indexes are counted from 0 from the left. If the character is not available, -the formatter has no effect. +indexes are counted from 0 from the left. All dots (including the terminal +one) are considered. If the character is not available, the formatter has no effect. .IP \(bu 2 \fB%l[\fP\fIN\fP\fB]\fP – means the \fIN\fPth label of the textual zone name (see \fB%s\fP). The index is counted from 0 from the right (0 ~ TLD). @@ -749,11 +792,6 @@ terminating dot (the result for the root zone is the empty string!). .UNINDENT .sp \fIDefault:\fP \fI\%storage\fP/\fB%s\fP\&.zone -.SS storage -.sp -A data directory for storing zone files, journal files and timers database. -.sp -\fIDefault:\fP \fB${localstatedir}/lib/knot\fP (configured with \fB\-\-with\-storage=path\fP) .SS master .sp An ordered list of \fI\%references\fP to zone master servers. @@ -849,6 +887,15 @@ the immediate sync with a zone file is not desirable, increase the value. .UNINDENT .UNINDENT .sp +\fBWARNING:\fP +.INDENT 0.0 +.INDENT 3.5 +If the zone file is not up\-to\-date, the zone should be flushed before its +zone file editation or the SOA record must be untouched after editation. +Otherwise the journal can\(aqt be applied. +.UNINDENT +.UNINDENT +.sp \fIDefault:\fP 0 (immediate) .SS ixfr\-from\-differences .sp @@ -865,9 +912,22 @@ This option has no effect with enabled .UNINDENT .sp \fIDefault:\fP off -.SS max\-journal\-size +.SS max\-journal\-usage .sp -Maximum size of the zone journal file. +Policy how much space in journal DB will the zone\(aqs journal occupy. +.sp +\fIDefault:\fP 100 MiB +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +Journal DB may grow far above the sum of max\-journal\-usage across +all zones, because of DB free space fragmentation. +.UNINDENT +.UNINDENT +.SS max\-journal\-depth +.sp +Maximum history length of journal. .sp \fIDefault:\fP 2^64 .SS max\-zone\-size @@ -938,7 +998,7 @@ done by hand (see RFC 1982). \fIDefault:\fP increment .SS module .sp -An ordered list of references to query modules in the form +An ordered list of references to query modules in the form of \fImodule_name\fP or \fImodule_name/module_id\fP\&. These modules apply only to the current zone queries. .sp \fIDefault:\fP not set @@ -975,6 +1035,7 @@ will be logged to both standard error output and syslog. The \fBinfo\fP and log: \- target: stdout | stderr | syslog | STR server: critical | error | warning | notice | info | debug + control: critical | error | warning | notice | info | debug zone: critical | error | warning | notice | info | debug any: critical | error | warning | notice | info | debug .ft P @@ -1002,6 +1063,11 @@ Minimum severity level for messages related to general operation of the server that are logged. .sp \fIDefault:\fP not set +.SS control +.sp +Minimum severity level for messages related to server control that are logged. +.sp +\fIDefault:\fP not set .SS zone .sp Minimum severity level for messages related to zones that are logged. @@ -1012,6 +1078,90 @@ Minimum severity level for messages related to zones that are logged. Minimum severity level for all message types that are logged. .sp \fIDefault:\fP not set +.SH MODULE RRL +.sp +A response rate limiting module. +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +mod\-rrl: + \- id: STR + rate\-limit: INT + slip: INT + table\-size: INT + whitelist: ADDR[/INT] | ADDR\-ADDR ... +.ft P +.fi +.UNINDENT +.UNINDENT +.SS id +.sp +A module identifier. +.SS rate\-limit +.sp +Rate limiting is based on the token bucket scheme. A rate basically +represents a number of tokens available each second. Each response is +processed and classified (based on several discriminators, e.g. +source netblock, query type, zone name, rcode, etc.). Classified responses are +then hashed and assigned to a bucket containing number of available +tokens, timestamp and metadata. When available tokens are exhausted, +response is dropped or sent as truncated (see \fI\%slip\fP). +Number of available tokens is recalculated each second. +.sp +\fIRequired\fP +.SS table\-size +.sp +Size of the hash table in a number of buckets. The larger the hash table, the lesser +the probability of a hash collision, but at the expense of additional memory costs. +Each bucket is estimated roughly to 32 bytes. The size should be selected as +a reasonably large prime due to better hash function distribution properties. +Hash table is internally chained and works well up to a fill rate of 90 %, general +rule of thumb is to select a prime near 1.2 * maximum_qps. +.sp +\fIDefault:\fP 393241 +.SS slip +.sp +As attacks using DNS/UDP are usually based on a forged source address, +an attacker could deny services to the victim\(aqs netblock if all +responses would be completely blocked. The idea behind SLIP mechanism +is to send each N\s-2\uth\d\s0 response as truncated, thus allowing client to +reconnect via TCP for at least some degree of service. It is worth +noting, that some responses can\(aqt be truncated (e.g. SERVFAIL). +.INDENT 0.0 +.IP \(bu 2 +Setting the value to \fB0\fP will cause that all rate\-limited responses will +be dropped. The outbound bandwidth and packet rate will be strictly capped +by the \fI\%rate\-limit\fP option. All legitimate requestors affected +by the limit will face denial of service and will observe excessive timeouts. +Therefore this setting is not recommended. +.IP \(bu 2 +Setting the value to \fB1\fP will cause that all rate\-limited responses will +be sent as truncated. The amplification factor of the attack will be reduced, +but the outbound data bandwidth won\(aqt be lower than the incoming bandwidth. +Also the outbound packet rate will be the same as without RRL. +.IP \(bu 2 +Setting the value to \fB2\fP will cause that half of the rate\-limited responses +will be dropped, the other half will be sent as truncated. With this +configuration, both outbound bandwidth and packet rate will be lower than the +inbound. On the other hand, the dropped responses enlarge the time window +for possible cache poisoning attack on the resolver. +.IP \(bu 2 +Setting the value to anything \fBlarger than 2\fP will keep on decreasing +the outgoing rate\-limited bandwidth, packet rate, and chances to notify +legitimate requestors to reconnect using TCP. These attributes are inversely +proportional to the configured value. Setting the value high is not advisable. +.UNINDENT +.sp +\fIDefault:\fP 1 +.SS whitelist +.sp +A list of IP addresses, network subnets, or network ranges to exempt from +rate limiting. Empty list means that no incoming connection will be +white\-listed. +.sp +\fIDefault:\fP not set .SH MODULE DNSTAP .sp The module dnstap allows query and response logging. @@ -1063,6 +1213,30 @@ If enabled, query messages will be logged. If enabled, response messages will be logged. .sp \fIDefault:\fP on +.SH MODULE ONLINE-SIGN +.sp +The module provides online DNSSEC signing. Instead of pre\-computing the zone signatures +when the zone is loaded into the server or instead of loading an externally signed zone, +the signatures are computed on\-the\-fly during answering. +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +mod\-online\-sign: + \- id: STR + policy: STR +.ft P +.fi +.UNINDENT +.UNINDENT +.SS id +.sp +A module identifier. +.SS policy +.sp +A \fI\%reference\fP to DNSSEC signing policy. A special \fIdefault\fP +value can be used for the default policy settings. .SH MODULE SYNTH-RECORD .sp This module is able to synthesize either forward or reverse records for the @@ -1139,6 +1313,7 @@ server for resolution. mod\-dnsproxy: \- id: STR remote: remote_id + timeout: INT catch\-nxdomain: BOOL .ft P .fi @@ -1153,6 +1328,11 @@ A \fI\%reference\fP to a remote server where the queries are forwarded to. .sp \fIRequired\fP +.SS timeout +.sp +A remote response timeout in milliseconds. +.sp +\fIDefault:\fP 500 .SS catch\-nxdomain .sp If enabled, all unsatisfied queries (also applies to local zone lookups) @@ -1183,16 +1363,34 @@ A module identifier. A path to the directory where the database is stored. .sp \fIRequired\fP -.SH MODULE ONLINE-SIGN +.SH MODULE STATS +.sp +The module provides incoming query processing statistics. .sp -The module provides online DNSSEC signing. +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +Leading 16\-bit message size over TCP is not considered. +.UNINDENT +.UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C -mod\-online\-sign: +mod\-stats: \- id: STR + request\-protocol: BOOL + server\-operation: BOOL + request\-bytes: BOOL + response\-bytes: BOOL + edns\-presence: BOOL + flag\-presence: BOOL + response\-code: BOOL + reply\-nodata: BOOL + query\-type: BOOL + query\-size: BOOL + reply\-size: BOOL .ft P .fi .UNINDENT @@ -1200,44 +1398,220 @@ mod\-online\-sign: .SS id .sp A module identifier. -.SH MODULE WHOAMI +.SS request\-protocol +.sp +If enabled, all incoming requests are counted by the network protocol: +.INDENT 0.0 +.IP \(bu 2 +udp4 \- UDP over IPv4 +.IP \(bu 2 +tcp4 \- TCP over IPv4 +.IP \(bu 2 +udp6 \- UDP over IPv6 +.IP \(bu 2 +tcp6 \- TCP over IPv6 +.UNINDENT +.sp +\fIDefault:\fP on +.SS server\-operation +.sp +If enabled, all incoming requests are counted by the server operation. The +server operation is based on message header OpCode and message query (meta) type: +.INDENT 0.0 +.IP \(bu 2 +query \- Normal query operation +.IP \(bu 2 +update \- Dynamic update operation +.IP \(bu 2 +notify \- NOTIFY request operation +.IP \(bu 2 +axfr \- Full zone transfer operation +.IP \(bu 2 +ixfr \- Incremental zone transfer operation +.IP \(bu 2 +invalid \- Invalid server operation +.UNINDENT +.sp +\fIDefault:\fP on +.SS request\-bytes +.sp +If enabled, all incoming request bytes are counted by the server operation: +.INDENT 0.0 +.IP \(bu 2 +query \- Normal query bytes +.IP \(bu 2 +update \- Dynamic update bytes +.IP \(bu 2 +other \- Other request bytes +.UNINDENT +.sp +\fIDefault:\fP on +.SS response\-bytes .sp -The module synthesizes an A or AAAA record containing the query source IP address, -at the apex of the zone being served. +If enabled, outgoing response bytes are counted by the server operation: +.INDENT 0.0 +.IP \(bu 2 +reply \- Normal response bytes +.IP \(bu 2 +transfer \- Zone transfer bytes +.IP \(bu 2 +other \- Other response bytes +.UNINDENT +.sp +\fBWARNING:\fP .INDENT 0.0 .INDENT 3.5 +Dynamic update response bytes are not counted by this module. +.UNINDENT +.UNINDENT .sp -.nf -.ft C -mod\-whoami: - \- id: STR -.ft P -.fi +\fIDefault:\fP on +.SS edns\-presence +.sp +If enabled, EDNS pseudo section presence is counted by the message direction: +.INDENT 0.0 +.IP \(bu 2 +request \- EDNS present in request +.IP \(bu 2 +response \- EDNS present in response .UNINDENT +.sp +\fIDefault:\fP off +.SS flag\-presence +.sp +If enabled, some message header flags are counted: +.INDENT 0.0 +.IP \(bu 2 +TC \- Truncated Answer in response +.IP \(bu 2 +DO \- DNSSEC OK in request .UNINDENT -.SS id .sp -A module identifier. -.SH MODULE NOUDP +\fIDefault:\fP off +.SS response\-code .sp -The module sends empty truncated response to any UDP query. +If enabled, outgoing response code is counted: +.INDENT 0.0 +.IP \(bu 2 +NOERROR +.IP \(bu 2 +\&... +.IP \(bu 2 +NOTZONE +.IP \(bu 2 +BADVERS +.IP \(bu 2 +\&... +.IP \(bu 2 +BADCOOKIE +.IP \(bu 2 +other \- All other codes +.UNINDENT +.sp +\fBNOTE:\fP .INDENT 0.0 .INDENT 3.5 +In the case of multi\-message zone transfer response, just one counter is +incremented. +.UNINDENT +.UNINDENT .sp -.nf -.ft C -mod\-noudp: - \- id: STR -.ft P -.fi +\fBWARNING:\fP +.INDENT 0.0 +.INDENT 3.5 +Dynamic update response code is not counted by this module. .UNINDENT .UNINDENT -.SS id .sp -A module identifier. +\fIDefault:\fP on +.SS reply\-nodata +.sp +If enabled, NODATA pseudo RCODE (see RFC 2308, Section 2.2) is counted by the +query type: +.INDENT 0.0 +.IP \(bu 2 +A +.IP \(bu 2 +AAAA +.IP \(bu 2 +other \- All other types +.UNINDENT +.sp +\fIDefault:\fP off +.SS query\-type +.sp +If enabled, normal query type is counted: +.INDENT 0.0 +.IP \(bu 2 +A (TYPE1) +.IP \(bu 2 +\&... +.IP \(bu 2 +TYPE65 +.IP \(bu 2 +SPF (TYPE99) +.IP \(bu 2 +\&... +.IP \(bu 2 +TYPE110 +.IP \(bu 2 +ANY (TYPE255) +.IP \(bu 2 +\&... +.IP \(bu 2 +TYPE260 +.IP \(bu 2 +other \- All other types +.UNINDENT +.sp +\fBNOTE:\fP +.INDENT 0.0 +.INDENT 3.5 +Not all assigned meta types (IXFR, AXFR,...) have their own counters, +because such types are not processed as normal query. +.UNINDENT +.UNINDENT +.sp +\fIDefault:\fP off +.SS query\-size +.sp +If enabled, normal query message size distribution is counted by the size range +in bytes: +.INDENT 0.0 +.IP \(bu 2 +0\-15 +.IP \(bu 2 +16\-31 +.IP \(bu 2 +\&... +.IP \(bu 2 +272\-287 +.IP \(bu 2 +288\-65535 +.UNINDENT +.sp +\fIDefault:\fP off +.SS reply\-size +.sp +If enabled, normal reply message size distribution is counted by the size range +in bytes: +.INDENT 0.0 +.IP \(bu 2 +0\-15 +.IP \(bu 2 +16\-31 +.IP \(bu 2 +\&... +.IP \(bu 2 +4080\-4095 +.IP \(bu 2 +4096\-65535 +.UNINDENT +.sp +\fIDefault:\fP off .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/knot1to2.1in b/doc/man/knot1to2.1in index 51f90de247c1088e564dbf50444b1a8dea66ae17..5e69973b2c960a7d00137c081be533dbc1e7fcc8 100644 --- a/doc/man/knot1to2.1in +++ b/doc/man/knot1to2.1in @@ -63,10 +63,10 @@ Print the program version. .UNINDENT .SH SEE ALSO .sp -\fIknotc(8)\fP, \fIknotd(8)\fP, \fIknot.conf(5)\fP\&. +\fBknotc(8)\fP, \fBknotd(8)\fP, \fBknot.conf(5)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/knotc.8in b/doc/man/knotc.8in index d547b97fcecd09ed7f0b1ca7bc06703bcc88c5ef..adc8ed6faa17e19715618406298c368960cb20ec 100644 --- a/doc/man/knotc.8in +++ b/doc/man/knotc.8in @@ -78,6 +78,10 @@ Stop the server if running. Reload the server configuration and modified zone files. All open zone transactions will be aborted! .TP +\fBstats\fP [\fImodule\fP[\fB\&.\fP\fIcounter\fP]] +Show global statistics counter(s). To print also counters with value 0, use +force option. +.TP \fBzone\-check\fP [\fIzone\fP\&...] Test if the server can load the zone. Semantic checks are executed if enabled in the configuration. (*) @@ -135,7 +139,11 @@ requires a ttl value specified. Remove zone data within the transaction. .TP \fBzone\-purge\fP \fIzone\fP\&... -Purge zone data, zone file, and zone journal. +Purge zone data, file, journal, and timers. +.TP +\fBzone\-stats\fP \fIzone\fP [\fImodule\fP[\fB\&.\fP\fIcounter\fP]] +Show zone statistics counter(s). To print also counters with value 0, use +force option. .TP \fBconf\-init\fP Initialize the configuration database. (*) @@ -193,7 +201,7 @@ The utility provides interactive mode with basic line editing functionality, command completion, and command history. .sp Interactive mode behavior can be customized in \fI~/.editrc\fP\&. Refer to -\fIeditrc(5)\fP for details. +\fBeditrc(5)\fP for details. .sp Command history is saved in \fI~/.knotc_history\fP\&. .SH EXAMPLES @@ -279,10 +287,10 @@ $ knotc zone\-read \-\- @ SOA .UNINDENT .SH SEE ALSO .sp -\fIknotd(8)\fP, \fIknot.conf(5)\fP, \fIeditrc(5)\fP\&. +\fBknotd(8)\fP, \fBknot.conf(5)\fP, \fBeditrc(5)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/knotd.8in b/doc/man/knotd.8in index 93ad872ec3f7e1bebd4babdf6f4626ac7c6cd206..263ee445dd05c21a0b6fe85b4194f753f5812b3d 100644 --- a/doc/man/knotd.8in +++ b/doc/man/knotd.8in @@ -63,10 +63,10 @@ Print the program version. .UNINDENT .SH SEE ALSO .sp -\fIknotc(8)\fP, \fIknot.conf(5)\fP\&. +\fBknotc(8)\fP, \fBknot.conf(5)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/knsec3hash.1in b/doc/man/knsec3hash.1in index 261b3e5e6c9fafc5fb13ee9bd6728b06b4908750..5470c89c2bd9171f5b2b8489ea931f9f72a2e4f0 100644 --- a/doc/man/knsec3hash.1in +++ b/doc/man/knsec3hash.1in @@ -78,10 +78,10 @@ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH (salt=\-, hash=1, iterations=0) .sp \fI\%RFC 5155\fP – DNS Security (DNSSEC) Hashed Authenticated Denial of Existence. .sp -\fIknotc(8)\fP, \fIknotd(8)\fP\&. +\fBknotc(8)\fP, \fBknotd(8)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/knsupdate.1in b/doc/man/knsupdate.1in index 1aacad4b82d2483eaa8a0eb8c05307a802421700..0b4f8011dd2cf0e986fe9de2575d26aaaef15fdb 100644 --- a/doc/man/knsupdate.1in +++ b/doc/man/knsupdate.1in @@ -156,7 +156,7 @@ Quit the program. .sp Options \fB\-k\fP and \fB\-y\fP can not be used simultaneously. .sp -Dnssec\-keygen keyfile format is not supported. Use \fIkeymgr(8)\fP instead. +Dnssec\-keygen keyfile format is not supported. Use \fBkeymgr(8)\fP instead. .sp Zone name/server guessing is not supported if the zone name/server is not specified. .sp @@ -189,10 +189,10 @@ $ knsupdate .UNINDENT .SH SEE ALSO .sp -\fIkdig(1)\fP, \fIkhost(1)\fP, \fIkeymgr(8)\fP\&. +\fBkdig(1)\fP, \fBkhost(1)\fP, \fBkeymgr(8)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man/kzonecheck.1in b/doc/man/kzonecheck.1in index 0f8ae784ac389d7f48c6abd3aedc07209d83afca..fab5b87cf69d5c3ad1a929a5e7415299c5769d98 100644 --- a/doc/man/kzonecheck.1in +++ b/doc/man/kzonecheck.1in @@ -32,7 +32,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .. .SH SYNOPSIS .sp -\fBkzonecheck\fP [\fIoptions\fP] \fIzone\-file\fP +\fBkzonecheck\fP [\fIoptions\fP] \fIfilename\fP .SH DESCRIPTION .sp The utility checks zone file syntax and runs semantic checks on the zone @@ -40,7 +40,7 @@ content. The executed checks are the same as the checks run by the Knot DNS server. .sp Please, refer to the \fBsemantic\-checks\fP configuration option in -\fIknot.conf(5)\fP for the full list of available semantic checks. +\fBknot.conf(5)\fP for the full list of available semantic checks. .SS Options .INDENT 0.0 .TP @@ -59,10 +59,10 @@ Print the program version. .UNINDENT .SH SEE ALSO .sp -\fIknotd(8)\fP, \fIknot.conf(5)\fP +\fBknotd(8)\fP, \fBknot.conf(5)\fP\&. .SH AUTHOR CZ.NIC Labs <http://www.knot-dns.cz> .SH COPYRIGHT -Copyright 2010–2016, CZ.NIC, z.s.p.o. +Copyright 2010–2017, CZ.NIC, z.s.p.o. .\" Generated by docutils manpage writer. . diff --git a/doc/man_keymgr.rst b/doc/man_keymgr.rst index 1720fda5772a070810de544a8f75dd7304ee1ea6..4101bbbacbd85fb67deffdccde5d3d1a31f1ecc7 100644 --- a/doc/man_keymgr.rst +++ b/doc/man_keymgr.rst @@ -118,14 +118,16 @@ tsig commands zone commands ............. -**zone** **key** **list** *zone-name* [**filter**] - List key IDs and tags of zone keys. +**zone** **key** **list** *zone-name* [**filter** [**filter**]] + List key IDs and tags of zone keys. The **filter** can be a key tag, a key ID prefix, a key state (active, published, retired, removed) or ksk/zsk. Key state and ksk/zsk combination is possible. + Use these key state and ksk/zsk with prefix '+' ('+ksk', '+active'). **zone** **key** **show** *zone-name* *key* Show zone key details. The *key* can be a key tag or a key ID prefix. -**zone** **key** **ds** *zone-name* *key* - Show DS records for a zone key. The *key* can be a key tag or a key ID prefix. +**zone** **key** **ds** *zone-name* *filter* + Show DS records for a zone key. The *filter* can be a key tag, a key ID prefix or key state (limited to active and published ksk). + Use these key state as '+active' or '+published'. **zone** **key** **generate** *zone-name* [*key-parameter*...] Generate a new key for a zone. diff --git a/doc/man_kjournalprint.rst b/doc/man_kjournalprint.rst new file mode 100644 index 0000000000000000000000000000000000000000..6748c31d9bf1386f5f2b9c8ff38121e23263e816 --- /dev/null +++ b/doc/man_kjournalprint.rst @@ -0,0 +1,55 @@ +.. highlight:: console + +kjournalprint – Knot DNS journal print utility +============================================== + +Synopsis +-------- + +:program:`kjournalprint` [*options*] *journal_db* *zone_name* + +Description +----------- + +The program prints zone history stored in a journal database. As default, +changes are colored for terminal. + +Options +....... + +**-l**, **--limit** *limit* + Limits the number of displayed changes. + +**-n**, **--no-color** + Removes changes coloring. + +**-z**, **--zone-list** + Instead of reading jurnal, display the list of zones in the DB. + (*zone_name* not needed) + +**-h**, **--help** + Print the program help. + +**-V**, **--version** + Print the program version. + +Parameters +.......... + +*journal_db* + A path to the journal database. + +*zone_name* + A name of the zone to print the history for. + +Examples +-------- + +Last (most recent) 5 changes without colors:: + + $ kjournalprint -nl 5 /var/lib/knot/journal example.com. + +See Also +-------- + +:manpage:`knotd(8)`, :manpage:`knot.conf(5)`. diff --git a/doc/man_knotc.rst b/doc/man_knotc.rst index 70baa568ceabded38b8153ef5abae1044fa942ca..845b76f43e8cf94c601f21281ff8c754ce177ed5 100644 --- a/doc/man_knotc.rst +++ b/doc/man_knotc.rst @@ -55,6 +55,10 @@ Actions Reload the server configuration and modified zone files. All open zone transactions will be aborted! +**stats** [*module*\ [\ **.**\ *counter*\ ]] + Show global statistics counter(s). To print also counters with value 0, use + force option. + **zone-check** [*zone*...] Test if the server can load the zone. Semantic checks are executed if enabled in the configuration. (*) @@ -112,7 +116,11 @@ Actions Remove zone data within the transaction. **zone-purge** *zone*... - Purge zone data, zone file, and zone journal. + Purge zone data, file, journal, and timers. + +**zone-stats** *zone* [*module*\ [\ **.**\ *counter*\ ]] + Show zone statistics counter(s). To print also counters with value 0, use + force option. **conf-init** Initialize the configuration database. (*) diff --git a/doc/man_kzonecheck.rst b/doc/man_kzonecheck.rst index 61f20bf8ffbcca556cc7f137659f4c3196ccdc81..5ca1f27477c589c8e6f50377228ca78af6667c9c 100644 --- a/doc/man_kzonecheck.rst +++ b/doc/man_kzonecheck.rst @@ -6,7 +6,7 @@ kzonecheck – Knot DNS zone file checking tool Synopsis -------- -:program:`kzonecheck` [*options*] *zone-file* +:program:`kzonecheck` [*options*] *filename* Description ----------- @@ -19,7 +19,7 @@ Please, refer to the ``semantic-checks`` configuration option in :manpage:`knot.conf(5)` for the full list of available semantic checks. Options -.......... +....... **-o**, **--origin** *origin* Zone origin. If not specified, the origin is determined from the file name @@ -37,4 +37,4 @@ Options See Also -------- -:manpage:`knotd(8)`, :manpage:`knot.conf(5)` +:manpage:`knotd(8)`, :manpage:`knot.conf(5)`. diff --git a/doc/modules.rst b/doc/modules.rst new file mode 100644 index 0000000000000000000000000000000000000000..d78dc932d95c870f9f154240f3a98f4f8209cec2 --- /dev/null +++ b/doc/modules.rst @@ -0,0 +1,585 @@ +.. highlight:: none +.. _Query_modules: + +************* +Query modules +************* + +Knot DNS supports configurable query modules that can alter the way +queries are processed. The concept is quite simple – each query +requires a finite number of steps to be resolved. We call this set of +steps a *query plan*, an abstraction that groups these steps into +several stages. + +* Before-query processing +* Answer, Authority, Additional records packet sections processing +* After-query processing + +For example, processing an Internet-class query needs to find an +answer. Then based on the previous state, it may also append an +authority SOA or provide additional records. Each of these actions +represents a 'processing step'. Now, if a query module is loaded for a +zone, it is provided with an implicit query plan which can be extended +by the module or even changed altogether. + +A module is active if its name, which includes the ``mod-`` prefix, is assigned +to the zone/template :ref:`zone_module` option or to the *default* template +:ref:`template_global-module` option if activating for all queries. +If the module is configurable, a corresponding module section with +an identifier must be created and then referenced in the form of +``module_name/module_id``. + +.. NOTE:: + Query modules are processed in the order they are specified in the + zone/template configuration. In most cases, the recommended order is:: + + mod-synth-record, mod-online-sign, mod-rrl, mod-dnstap, mod-stats + +``rrl`` — Response rate limiting +-------------------------------- + +Response rate limiting (RRL) is a method to combat DNS reflection amplification +attacks. These attacks rely on the fact that source address of a UDP query +can be forged, and without a worldwide deployment of `BCP38 +<https://tools.ietf.org/html/bcp38>`_, such a forgery cannot be prevented. +An attacker can use a DNS server (or multiple servers) as an amplification +source and can flood a victim with a large number of unsolicited DNS responses. +The RRL lowers the amplification factor of these attacks by sending some of +the responses as truncated or by dropping them altogether. + +The module introduces two counters. The number of slipped and dropped responses. + +You can enable RRL by setting the :ref:`mod-rrl<mod-rrl>` module globally or per zone. + +:: + + mod-rrl: + - id: default + rate-limit: 200 # Allow 200 resp/s for each flow + slip: 2 # Every other response slips + + template: + - id: default + global-module: mod-rrl/default # Enable RRL globally + +``dnstap`` – dnstap-enabled query logging +----------------------------------------- + +A module for query and response logging based on dnstap_ library. +You can capture either all or zone-specific queries and responses; usually +you want to do the former. The configuration comprises only a +:ref:`mod-dnstap_sink` path parameter, which can be either a file or +a UNIX socket:: + + mod-dnstap: + - id: capture_all + sink: /tmp/capture.tap + + template: + - id: default + global-module: mod-dnstap/capture_all + +.. NOTE:: + To be able to use a Unix socket you need an external program to create it. + Knot DNS connects to it as a client using the libfstrm library. It operates + exactly like syslog. See `here + <https://www.nlnetlabs.nl/bugs-script/show_bug.cgi?id=741#c10>`_ for + more details. + +.. NOTE:: + Dnstap log files can also be created or read using ``kdig``. + +.. _dnstap: http://dnstap.info/ + +``synth-record`` – Automatic forward/reverse records +---------------------------------------------------- + +This module is able to synthesize either forward or reverse records for +a given prefix and subnet. + +Records are synthesized only if the query can't be satisfied from the zone. +Both IPv4 and IPv6 are supported. + +Automatic forward records +......................... + +Example:: + + mod-synth-record: + - id: test1 + type: forward + prefix: dynamic- + ttl: 400 + network: 2620:0:b61::/52 + + zone: + - domain: test. + file: test.zone # Must exist + module: mod-synth-record/test1 + +Result: + +.. code-block:: console + + $ kdig AAAA dynamic-2620-0000-0b61-0100-0000-0000-0000-0001.test. + ... + ;; QUESTION SECTION: + ;; dynamic-2620-0000-0b61-0100-0000-0000-0000-0001.test. IN AAAA + + ;; ANSWER SECTION: + dynamic-2620-0000-0b61-0100-0000-0000-0000-0001.test. 400 IN AAAA 2620:0:b61:100::1 + +You can also have CNAME aliases to the dynamic records, which are going to be +further resolved: + +.. code-block:: console + + $ kdig AAAA alias.test. + ... + ;; QUESTION SECTION: + ;; alias.test. IN AAAA + + ;; ANSWER SECTION: + alias.test. 3600 IN CNAME dynamic-2620-0000-0b61-0100-0000-0000-0000-0002.test. + dynamic-2620-0000-0b61-0100-0000-0000-0000-0002.test. 400 IN AAAA 2620:0:b61:100::2 + +Automatic reverse records +......................... + +Example:: + + mod-synth-record: + - id: test2 + type: reverse + prefix: dynamic- + origin: test + ttl: 400 + network: 2620:0:b61::/52 + + zone: + - domain: 1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa. + file: 1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa.zone # Must exist + module: mod-synth-record/test2 + +Result: + +.. code-block:: console + + $ kdig -x 2620:0:b61::1 + ... + ;; QUESTION SECTION: + ;; 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa. IN PTR + + ;; ANSWER SECTION: + 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.b.0.0.0.0.0.0.2.6.2.ip6.arpa. 400 IN PTR + dynamic-2620-0000-0b61-0000-0000-0000-0000-0001.test. + +``dnsproxy`` – Tiny DNS proxy +----------------------------- + +The module catches all unsatisfied queries and forwards them to the +indicated server for resolution, i.e. a tiny DNS proxy. There are several +uses of this feature: + +* A substitute public-facing server in front of the real one +* Local zones (poor man's "views"), rest is forwarded to the public-facing server +* etc. + +.. NOTE:: + The module does not alter the query/response as the resolver would, + and the original transport protocol is kept as well. + +The configuration is straightforward and just a single remote server is +required:: + + remote: + - id: hidden + address: 10.0.1.1 + + mod-dnsproxy: + - id: default + remote: hidden + + template: + - id: default + global-module: mod-dnsproxy/default + + zone: + - domain: local.zone + +When clients query for anything in the ``local.zone``, they will be +responded to locally. The rest of the requests will be forwarded to the +specified server (``10.0.1.1`` in this case). + +``rosedb`` – Static resource records +------------------------------------ + +The module provides a mean to override responses for certain queries before +the record is searched in the available zones. The module comes with the +``rosedb_tool`` tool used to manipulate the database of static records. +Neither the tool nor the module are enabled by default, recompile with +the ``--enable-rosedb`` configuration flag to enable them. + +For example, let's suppose we have a database of following records: + +.. code-block:: none + + myrecord.com. 3600 IN A 127.0.0.1 + www.myrecord.com. 3600 IN A 127.0.0.2 + ipv6.myrecord.com. 3600 IN AAAA ::1 + +And we query the nameserver with the following: + +.. code-block:: console + + $ kdig IN A myrecord.com + ... returns NOERROR, 127.0.0.1 + $ kdig IN A www.myrecord.com + ... returns NOERROR, 127.0.0.2 + $ kdig IN A stuff.myrecord.com + ... returns NOERROR, 127.0.0.1 + $ kdig IN AAAA myrecord.com + ... returns NOERROR, NODATA + $ kdig IN AAAA ipv6.myrecord.com + ... returns NOERROR, ::1 + +An entry in the database matches anything at the same or a lower domain +level, i.e. 'myrecord.com' matches 'a.a.myrecord.com' as well. +This can be utilized to create catch-all entries. + +You can also add authority information for the entries, provided you create +SOA + NS records for a name, like so: + +.. code-block:: none + + myrecord.com. 3600 IN SOA master host 1 3600 60 3600 3600 + myrecord.com. 3600 IN NS ns1.myrecord.com. + myrecord.com. 3600 IN NS ns2.myrecord.com. + ns1.myrecord.com. 3600 IN A 127.0.0.1 + ns2.myrecord.com. 3600 IN A 127.0.0.2 + +In this case, the responses will: + +1. Be authoritative (AA flag set) +2. Provide an authority section (SOA + NS) +3. Be NXDOMAIN if the name is found *(i.e. the 'IN AAAA myrecord.com' from + the example)*, but not the RR type *(this is to allow the synthesis of + negative responses)* + +The SOA record applies only to the 'myrecord.com.', not to any other +record (not even those of its subdomains). From this point of view, all records +in the database are unrelated and not hierarchical. The idea is to provide +subtree isolation for each entry.* + +In addition, the module is able to log matching queries via remote syslog if +you specify a syslog address endpoint and an optional string code. + +Here is an example on how to use the module: + +* Create the entries in the database: + + .. code-block:: console + + $ mkdir /tmp/static_rrdb + $ # No logging + $ rosedb_tool /tmp/static_rrdb add myrecord.com. A 3600 "127.0.0.1" "-" "-" + $ # Logging as 'www_query' to Syslog at 10.0.0.1 + $ rosedb_tool /tmp/static_rrdb add www.myrecord.com. A 3600 "127.0.0.1" \ + "www_query" "10.0.0.1" + $ # Logging as 'ipv6_query' to Syslog at 10.0.0.1 + $ rosedb_tool /tmp/static_rrdb add ipv6.myrecord.com. AAAA 3600 "::1" \ + "ipv6_query" "10.0.0.1" + $ # Verify settings + $ rosedb_tool /tmp/static_rrdb list + www.myrecord.com. A RDATA=10B www_query 10.0.0.1 + ipv6.myrecord.com. AAAA RDATA=22B ipv6_query 10.0.0.1 + myrecord.com. A RDATA=10B - - + +.. NOTE:: + The database may be modified later on while the server is running. + +* Configure the query module:: + + mod-rosedb: + - id: default + dbdir: /tmp/static_rrdb + + template: + - id: default + global-module: mod-rosedb/default + +The module accepts just one parameter – the path to the directory where +the database will be stored. + +* Start the server: + + .. code-block:: console + + $ knotd -c knot.conf + +* Verify the running instance: + + .. code-block:: console + + $ kdig @127.0.0.1#6667 A myrecord.com + +``online-sign`` — Online DNSSEC signing +--------------------------------------- + +The module provides online DNSSEC signing. Instead of pre-computing the zone +signatures when the zone is loaded into the server or instead of loading an +externally signed zone, the signatures are computed on-the-fly during +answering. + +The main purpose of the module is to enable authenticated responses with +zones which use other dynamic module (e.g., automatic reverse record +synthesis) because these zones cannot be pre-signed. However, it can be also +used as a simple signing solution for zones with low traffic and also as +a protection against zone content enumeration (zone walking). + +In order to minimize the number of computed signatures per query, the module +produces a bit different responses from the responses that would be sent if +the zone was pre-signed. Still, the responses should be perfectly valid for +a DNSSEC validating resolver. + +Differences from statically signed zones: + +* The NSEC records are constructed as Minimally Covering NSEC Records + (see Appendix A in :rfc:`7129`). Therefore the generated domain names cover + the complete domain name space in the zone's authority. + +* NXDOMAIN responses are promoted to NODATA responses. The module proves + that the query type does not exist rather than that the domain name does not + exist. + +* Domain names matching a wildcard are expanded. The module pretends and proves + that the domain name exists rather than proving a presence of the wildcard. + +Records synthesized by the module: + +* DNSKEY record is synthesized in the zone apex and includes public key + material for the active signing key. + +* NSEC records are synthesized as needed. + +* RRSIG records are synthesized for authoritative content of the zone. + +How to use the online signing module: + +* Enable the module in the zone configuration with the default signing policy:: + + zone: + - domain: example.com + module: mod-online-sign + + Or with an explicit signing policy:: + + policy: + - id: rsa + algorithm: RSASHA256 + zsk-size: 2048 + + mod-online-sign: + - id: explicit + policy: rsa + + zone: + - domain: example.com + module: mod-online-sign/explicit + + Or use manual policy in an analogous manner, see + :ref:`Manual key management<dnssec-manual-key-management>`. + + .. NOTE:: + Only id, manual, keystore, algorithm, zsk-size, and rrsig-lifetime policy items are + relevant to this module. If no rrsig-lifetime is configured, the + default value is 25 hours. + +* Make sure the zone is not signed and also that the automatic signing is + disabled. All is set, you are good to go. Reload (or start) the server: + + .. code-block:: console + + $ knotc reload + +The following example stacks the online signing with reverse record synthesis +module:: + + mod-synth-record: + - id: lan-forward + type: forward + prefix: ip- + ttl: 1200 + network: 192.168.100.0/24 + + zone: + - domain: corp.example.net + module: [mod-synth-record/lan-forward, mod-online-sign] + +Known issues: + +* The delegations are not signed correctly. + +* Some CNAME records are not signed correctly. + +* The automatic policy-based key rotation does not work. The rotation events are + invoked just at server (re)load. + +Limitations: + +* Online-sign module always enforces Single-Type Signing scheme. + +* Only one active signing key can be used. + +* Key rollover is not possible. + +* The NSEC records may differ for one domain name if queried for different + types. This is an implementation shortcoming as the dynamic modules + cooperate loosely. Possible synthesis of a type by other module cannot + be predicted. This dissimilarity should not affect response validation, + even with validators performing `aggressive negative caching + <https://datatracker.ietf.org/doc/draft-fujiwara-dnsop-nsec-aggressiveuse/>`_. + +* The NSEC proofs will work well with other dynamic modules only if the + modules synthesize only A and AAAA records. If synthesis of other type + is required, please, report this information to Knot DNS developers. + +``whoami`` — whoami module +-------------------------- + +The module synthesizes an A or AAAA record containing the query source IP address, +at the apex of the zone being served. It makes sure to allow Knot DNS to generate +cacheable negative responses, and to allow fallback to extra records defined in the +underlying zone file. The TTL of the synthesized record is copied from +the TTL of the SOA record in the zone file. + +Because a DNS query for type A or AAAA has nothing to do with whether +the query occurs over IPv4 or IPv6, this module requires a special +zone configuration to support both address families. For A queries, the +underlying zone must have a set of nameservers that only have IPv4 +addresses, and for AAAA queries, the underlying zone must have a set of +nameservers that only have IPv6 addresses. + +To enable this module, you need to add something like the following to +the Knot DNS configuration file:: + + zone: + - domain: whoami.domain.example + file: "/path/to/whoami.domain.example" + module: mod-whoami + + zone: + - domain: whoami6.domain.example + file: "/path/to/whoami6.domain.example" + module: mod-whoami + +.. NOTE:: + This module is not configurable. + +The whoami.domain.example zone file example: + + .. code-block:: none + + $TTL 1 + + @ SOA ( + whoami.domain.example. ; MNAME + hostmaster.domain.example. ; RNAME + 2016051300 ; SERIAL + 86400 ; REFRESH + 86400 ; RETRY + 86400 ; EXPIRE + 1 ; MINIMUM + ) + + $TTL 86400 + + @ NS ns1.whoami.domain.example. + @ NS ns2.whoami.domain.example. + @ NS ns3.whoami.domain.example. + @ NS ns4.whoami.domain.example. + + ns1 A 198.51.100.53 + ns2 A 192.0.2.53 + ns3 A 203.0.113.53 + ns4 A 198.19.123.53 + +The whoami6.domain.example zone file example: + + .. code-block:: none + + $TTL 1 + + @ SOA ( + whoami6.domain.example. ; MNAME + hostmaster.domain.example. ; RNAME + 2016051300 ; SERIAL + 86400 ; REFRESH + 86400 ; RETRY + 86400 ; EXPIRE + 1 ; MINIMUM + ) + + $TTL 86400 + + @ NS ns1.whoami6.domain.example. + @ NS ns2.whoami6.domain.example. + @ NS ns3.whoami6.domain.example. + @ NS ns4.whoami6.domain.example. + + ns1 AAAA 2001:db8:100::53 + ns2 AAAA 2001:db8:200::53 + ns3 AAAA 2001:db8:300::53 + ns4 AAAA 2001:db8:400::53 + +The parent domain would then delegate whoami.domain.example to +ns[1-4].whoami.domain.example and whoami6.domain.example to +ns[1-4].whoami6.domain.example, and include the corresponding A-only or +AAAA-only glue records. + +``noudp`` — noudp module +------------------------ + +The module sends empty truncated response to any UDP query. This is similar +to a slipped answer in :ref:`response rate limiting<mod-rrl_rate-limit>`. +TCP queries are not affected. + +To enable this module globally, you need to add something like the following +to the configuration file:: + + template: + - id: default + global-module: mod-noudp + +.. NOTE:: + This module is not configurable. + +``stats`` — query statistics +---------------------------- + +The module extends server statistics with incoming DNS request and corresponding +response counters, such as used network protocol, total number of responded bytes, +etc (see :ref:`mod-stats<mod-stats>` for full list of supported counters). +This module should be configured as the last module. + +Common statistics with default module configuration:: + + template: + - id: default + global-module: mod-stats + +Per zone statistics with explicit module configuration:: + + mod-stats: + - id: custom + edns-presence: on + query-type: on + + template: + - id: default + module: mod-stats/custom + +.. NOTE:: + Server initiated communication (outgoing NOTIFY, incoming \*XFR,...) is not + counted by this module. + diff --git a/doc/operation.rst b/doc/operation.rst index 47c72c3872f7ba632e228fccf3ab97a7d66d8d8c..f7d0663703192284cff53315fc4fcabc11c2c544 100644 --- a/doc/operation.rst +++ b/doc/operation.rst @@ -246,6 +246,37 @@ A full example of setting up a completely new zone from scratch:: $ knotc zone-set example.com www 3600 A 192.168.0.100 $ knotc zone-commit example.com +.. _Journal behaviour: + +Journal behaviour +================= + +Zone journal keeps some history of changes of the zone. It is useful for +responding IXFR queries. Also if zone file flush is disabled, +journal keeps diff between zonefile and zone for the case of server shutdown. +The history is stored by changesets - diffs of zone contents between two +(usually subsequent) zone serials. + +Journals for all zones are stored in common LMDB database. Huge changesets are +split into 70 KiB (this constant is hardcoded) blocks to prevent fragmentation of the DB. +Journal does each operation in one transaction to keep consistency of the DB and performance. +The exception is when store transaction exceeds 5% of the whole DB mapsize, it is split into multiple ones +and some dirty-chunks-management involves. + +Each zone journal has own +usage limit on how much DB space it may occupy. Before hitting the limit, +changesets are stored one-by-one and whole history is linear. While hitting the limit, +the zone is flushed into zone file, and oldest changesets are deleted as needed to free +some space. Actually, twice (again, hardcoded constant) the needed amount is deleted to +prevent too frequent deletes. Further zone file flush is invoked after the journal runs out of deletable +"flushed changesets". + +If zone file flush is disabled, instead of flushing the zone, the journal tries to +save space by merging older changesets into one. It works well if the changes rewrite +each other, e.g. periodically changing few zone records, re-signing whole zone... +The diff between zone file and zone is thus preserved, even if journal deletes some +older changesets. + .. _Controlling running daemon: Daemon controls @@ -266,3 +297,24 @@ no differences will be created. If you want to refresh the slave zones, you can do this with:: $ knotc zone-refresh + +.. _Statistics: + +Statistics +========== + +The server provides some general statistics and optional query module statistics +(see :ref:`mod-stats<mod-stats>`). + +Server statistics or global module statistics can be shown by:: + + $ knotc stats + $ knotc stats server # Show all server counters + $ knotc stats mod-stats # Show all mod-stats counters + $ knotc stats server.zone-count # Show specific server counter + +Per zone statistics can be shown by:: + + $ knotc zone-stats example.com mod-stats + +To show all supported counters even with 0 value use the force option. diff --git a/doc/reference.rst b/doc/reference.rst index 479b60636ef1b15c6998754a47301bc9f95c4ff3..36c0519b561ee3bf45ec14e84aeff0cddaac1f68 100644 --- a/doc/reference.rst +++ b/doc/reference.rst @@ -31,12 +31,13 @@ the following symbols: - [ ] – Optional value - \| – Choice -There are 10 main sections (``server``, ``control``, ``log``, ``keystore``, -``policy``, ``key``, ``acl``, ``remote``, ``template``, and ``zone``) and -module sections with the ``mod-`` prefix. Most of the sections (excluding -``server`` and ``control``) are sequences of settings blocks. Each settings block -begins with a unique identifier, which can be used as a reference from other -sections (such identifier must be defined in advance). +There are 11 main sections (``server``, ``control``, ``log``, ``statistics``, +``keystore``, ``policy``, ``key``, ``acl``, ``remote``, ``template``, and +``zone``) and module sections with the ``mod-`` prefix. Most of the sections +(excluding ``server``, ``control``, and ``statistics``) are sequences of +settings blocks. Each settings block begins with a unique identifier, +which can be used as a reference from other sections (such identifier +must be defined in advance). A multi-valued item can be specified either as a YAML sequence:: @@ -56,8 +57,8 @@ Comments ======== A comment begins with a ``#`` character and is ignored during processing. -Also each configuration section or sequence block allows to specify permanent -comment using ``comment`` item which is stored in the server beside the +Also each configuration section or sequence block allows a permanent +comment using the ``comment`` item which is stored in the server beside the configuration. .. _Includes: @@ -102,10 +103,6 @@ General options related to the server. max-udp-payload: SIZE max-ipv4-udp-payload: SIZE max-ipv6-udp-payload: SIZE - rate-limit: INT - rate-limit-slip: INT - rate-limit-table-size: INT - rate-limit-whitelist: ADDR[/INT] | ADDR-ADDR ... listen: ADDR[@INT] ... .. _server_identity: @@ -249,83 +246,6 @@ descriptor limit to avoid resource exhaustion. *Default:* 100 -.. _server_rate-limit: - -rate-limit ----------- - -Rate limiting is based on the token bucket scheme. A rate basically -represents a number of tokens available each second. Each response is -processed and classified (based on several discriminators, e.g. -source netblock, query type, zone name, rcode, etc.). Classified responses are -then hashed and assigned to a bucket containing number of available -tokens, timestamp and metadata. When available tokens are exhausted, -response is dropped or sent as truncated (see :ref:`server_rate-limit-slip`). -Number of available tokens is recalculated each second. - -*Default:* 0 (disabled) - -.. _server_rate-limit-table-size: - -rate-limit-table-size ---------------------- - -Size of the hash table in a number of buckets. The larger the hash table, the lesser -the probability of a hash collision, but at the expense of additional memory costs. -Each bucket is estimated roughly to 32 bytes. The size should be selected as -a reasonably large prime due to better hash function distribution properties. -Hash table is internally chained and works well up to a fill rate of 90 %, general -rule of thumb is to select a prime near 1.2 * maximum_qps. - -*Default:* 393241 - -.. _server_rate-limit-slip: - -rate-limit-slip ---------------- - -As attacks using DNS/UDP are usually based on a forged source address, -an attacker could deny services to the victim's netblock if all -responses would be completely blocked. The idea behind SLIP mechanism -is to send each N\ :sup:`th` response as truncated, thus allowing client to -reconnect via TCP for at least some degree of service. It is worth -noting, that some responses can't be truncated (e.g. SERVFAIL). - -- Setting the value to **0** will cause that all rate-limited responses will - be dropped. The outbound bandwidth and packet rate will be strictly capped - by the :ref:`server_rate-limit` option. All legitimate requestors affected - by the limit will face denial of service and will observe excessive timeouts. - Therefore this setting is not recommended. - -- Setting the value to **1** will cause that all rate-limited responses will - be sent as truncated. The amplification factor of the attack will be reduced, - but the outbound data bandwidth won't be lower than the incoming bandwidth. - Also the outbound packet rate will be the same as without RRL. - -- Setting the value to **2** will cause that half of the rate-limited responses - will be dropped, the other half will be sent as truncated. With this - configuration, both outbound bandwidth and packet rate will be lower than the - inbound. On the other hand, the dropped responses enlarge the time window - for possible cache poisoning attack on the resolver. - -- Setting the value to anything **larger than 2** will keep on decreasing - the outgoing rate-limited bandwidth, packet rate, and chances to notify - legitimate requestors to reconnect using TCP. These attributes are inversely - proportional to the configured value. Setting the value high is not advisable. - -*Default:* 1 - -.. _server_rate-limit-whitelist: - -rate-limit-whitelist --------------------- - -A list of IP addresses, network subnets, or network ranges to exempt from -rate limiting. Empty list means that no incoming connection will be -white-listed. - -*Default:* not set - .. _server_max-udp-payload: max-udp-payload @@ -454,8 +374,7 @@ match one of them. Empty value means that TSIG key is not required. action ------ -An ordered list of allowed actions. Empty action list is only allowed if -:ref:`deny<acl_deny>` is set. +An ordered list of allowed (or denied) actions. Possible values: @@ -470,8 +389,9 @@ Possible values: deny ---- -Deny if :ref:`address<acl_address>`, :ref:`key<acl_key>` and -:ref:`action<acl_action>` match. +If enabled, instead of allowing, deny the specified :ref:`action<acl_action>`, +:ref:`address<acl_address>`, :ref:`key<acl_key>`, or combination if these +items. If no action is specified, deny all actions. *Default:* off @@ -506,6 +426,49 @@ Maximum time the control socket operations can take. Set 0 for infinity. *Default:* 5 +.. _statistics_section: + +Statistics section +================== + +Periodic server statistics dumping. + +:: + + statistics: + timer: TIME + file: STR + append: BOOL + +.. _statistics_timer: + +timer +----- + +A period after which all available statistics metrics will by written to the +:ref:`file<statistics_file>`. + +*Default:* not set + +.. _statistics_file: + +file +---- + +A file path of statistics output in the YAML format. + +*Default:* :ref:`rundir<server_rundir>`/stats.yaml + +.. _statistics_append: + +append +------ + +If enabled, the output will be appended to the :ref:`file<statistics_file>` +instead of file replacement. + +*Default:* off + .. _Keystore section: Keystore section @@ -566,18 +529,19 @@ DNSSEC policy configuration. - id: STR keystore: STR manual: BOOL + single-type-signing: BOOL algorithm: dsa | rsasha1 | dsa-nsec3-sha1 | rsasha1-nsec3-sha1 | rsasha256 | rsasha512 | ecdsap256sha256 | ecdsap384sha384 ksk-size: SIZE zsk-size: SIZE dnskey-ttl: TIME zsk-lifetime: TIME + propagation-delay: TIME rrsig-lifetime: TIME rrsig-refresh: TIME nsec3: BOOL nsec3-iterations: INT nsec3-salt-length: INT nsec3-salt-lifetime: TIME - propagation-delay: TIME .. _policy_id: @@ -605,6 +569,20 @@ If enabled, automatic key management is not used. *Default:* off +.. _policy_single-type-signing: + +single-type-signing +------------------- + +If enabled, Single-Type Signing Scheme is used in the automatic key management +mode. + +.. NOTE:: + Because key rollover is not supported yet, just one combined signing key is + generated if none is available. + +*Default:* off + .. _policy_algorithm: algorithm @@ -641,6 +619,9 @@ A TTL value for DNSKEY records added into zone apex. *Default:* zone SOA TTL +.. NOTE:: + has infuence over ZSK key lifetime + .. _policy_zsk-lifetime: zsk-lifetime @@ -650,6 +631,22 @@ A period between ZSK publication and the next rollover initiation. *Default:* 30 days +.. NOTE:: + ZSK key lifetime is also infuenced by propagation-delay and dnskey-ttl + +.. _policy_propagation-delay: + +propagation-delay +----------------- + +An extra delay added for each key rollover step. This value should be high +enough to cover propagation of data from the master server to all slaves. + +*Default:* 1 day + +.. NOTE:: + has infuence over ZSK key lifetime + .. _policy_rrsig-lifetime: rrsig-lifetime @@ -705,16 +702,6 @@ A validity period of newly issued salt field. *Default:* 30 days -.. _policy_propagation-delay: - -propagation-delay ------------------ - -An extra delay added for each key rollover step. This value should be high -enough to cover propagation of data from the master server to all slaves. - -*Default:* 1 day - .. _Remote section: Remote section @@ -766,7 +753,7 @@ can be appended to the address using ``@`` separator. key --- -A :ref:`reference<key_id>` to the TSIG key which ise used to autenticate +A :ref:`reference<key_id>` to the TSIG key which is used to authenticate the communication with the remote server. *Default:* not set @@ -786,6 +773,8 @@ if a zone doesn't have another template specified. template: - id: STR timer-db: STR + journal-db: STR + max-journal-db-size: SIZE global-module: STR/STR ... # All zone options (excluding 'template' item) @@ -809,12 +798,44 @@ as a relative path to the *default* template :ref:`storage<zone_storage>`. *Default:* :ref:`storage<zone_storage>`/timers +.. _template_journal-db: + +journal-db +---------- + +Specifies a path of the persistent journal database. The path can be specified +as a relative path to the *default* template :ref:`storage<zone_storage>`. + +.. NOTE:: + This option is only available in the *default* template. + +*Default:* :ref:`storage<zone_storage>`/journal + +.. _template_max-journal-db-size: + +max-journal-db-size +------------------- + +Hard limit for the common journal DB. There is no cleanup logic in journal +to recover from reaching this limit: journal simply starts refusing changes +across all zones. Decreasing this value has no effect if lower than actual +DB file size. + +It is recommended to limit :ref:`max-journal-usage<zone_max-journal-usage>` +per-zone instead of max-journal-size in most cases. Please keep this value +large enough. This value also influences server's usage of virtual memory. + +.. NOTE:: + This option is only available in the *default* template. + +*Default:* 20 GiB + .. _template_global-module: global-module ------------- -An ordered list of references to query modules in the form +An ordered list of references to query modules in the form of *module_name* or *module_name/module_id*. These modules apply to all queries. .. NOTE:: @@ -834,8 +855,8 @@ Definition of zones served by the server. zone: - domain: DNAME template: template_id - file: STR storage: STR + file: STR master: remote_id ... ddns-master: remote_id notify: remote_id ... @@ -844,7 +865,8 @@ Definition of zones served by the server. disable-any: BOOL zonefile-sync: TIME ixfr-from-differences: BOOL - max-journal-size: SIZE + max-journal-usage: SIZE + max-journal-depth: INT max-zone-size : SIZE dnssec-signing: BOOL dnssec-policy: STR @@ -869,6 +891,15 @@ A :ref:`reference<template_id>` to a configuration template. *Default:* not set or *default* (if the template exists) +.. _zone_storage: + +storage +------- + +A data directory for storing zone files, journal files and timers database. + +*Default:* ``${localstatedir}/lib/knot`` (configured with ``--with-storage=path``) + .. _zone_file: file @@ -880,8 +911,8 @@ A path to the zone file. Non absolute path is relative to - ``%c[``\ *N*\ ``]`` or ``%c[``\ *N*\ ``-``\ *M*\ ``]`` – means the *N*\ th character or a sequence of characters beginning from the *N*\ th and ending with the *M*\ th character of the textual zone name (see ``%s``). The - indexes are counted from 0 from the left. If the character is not available, - the formatter has no effect. + indexes are counted from 0 from the left. All dots (including the terminal + one) are considered. If the character is not available, the formatter has no effect. - ``%l[``\ *N*\ ``]`` – means the *N*\ th label of the textual zone name (see ``%s``). The index is counted from 0 from the right (0 ~ TLD). If the label is not available, the formatter has no effect. @@ -893,15 +924,6 @@ A path to the zone file. Non absolute path is relative to *Default:* :ref:`storage<zone_storage>`/``%s``\ .zone -.. _zone_storage: - -storage -------- - -A data directory for storing zone files, journal files and timers database. - -*Default:* ``${localstatedir}/lib/knot`` (configured with ``--with-storage=path``) - .. _zone_master: master @@ -1003,6 +1025,11 @@ can be used (manual zone flush is still possible). If you are serving large zones with frequent updates where the immediate sync with a zone file is not desirable, increase the value. +.. WARNING:: + If the zone file is not up-to-date, the zone should be flushed before its + zone file editation or the SOA record must be untouched after editation. + Otherwise the journal can't be applied. + *Default:* 0 (immediate) .. _zone_ixfr-from-differences: @@ -1020,12 +1047,25 @@ is a master server for the zone. *Default:* off -.. _zone_max_journal_size: +.. _zone_max-journal-usage: -max-journal-size ----------------- +max-journal-usage +----------------- + +Policy how much space in journal DB will the zone's journal occupy. + +*Default:* 100 MiB + +.. NOTE:: + Journal DB may grow far above the sum of max-journal-usage across + all zones, because of DB free space fragmentation. -Maximum size of the zone journal file. +.. _zone_max_journal_depth: + +max-journal-depth +----------------- + +Maximum history length of journal. *Default:* 2^64 @@ -1113,7 +1153,7 @@ Possible values: module ------ -An ordered list of references to query modules in the form +An ordered list of references to query modules in the form of *module_name* or *module_name/module_id*. These modules apply only to the current zone queries. *Default:* not set @@ -1150,6 +1190,7 @@ will be logged to both standard error output and syslog. The ``info`` and log: - target: stdout | stderr | syslog | STR server: critical | error | warning | notice | info | debug + control: critical | error | warning | notice | info | debug zone: critical | error | warning | notice | info | debug any: critical | error | warning | notice | info | debug @@ -1177,6 +1218,15 @@ that are logged. *Default:* not set +.. _log_control: + +control +------- + +Minimum severity level for messages related to server control that are logged. + +*Default:* not set + .. _log_zone: zone @@ -1195,6 +1245,106 @@ Minimum severity level for all message types that are logged. *Default:* not set +.. _mod-rrl: + +Module rrl +========== + +A response rate limiting module. + +:: + + mod-rrl: + - id: STR + rate-limit: INT + slip: INT + table-size: INT + whitelist: ADDR[/INT] | ADDR-ADDR ... + +.. _mod-rrl_id: + +id +-- + +A module identifier. + +.. _mod-rrl_rate-limit: + +rate-limit +---------- + +Rate limiting is based on the token bucket scheme. A rate basically +represents a number of tokens available each second. Each response is +processed and classified (based on several discriminators, e.g. +source netblock, query type, zone name, rcode, etc.). Classified responses are +then hashed and assigned to a bucket containing number of available +tokens, timestamp and metadata. When available tokens are exhausted, +response is dropped or sent as truncated (see :ref:`mod-rrl_slip`). +Number of available tokens is recalculated each second. + +*Required* + +.. _mod-rrl_table-size: + +table-size +---------- + +Size of the hash table in a number of buckets. The larger the hash table, the lesser +the probability of a hash collision, but at the expense of additional memory costs. +Each bucket is estimated roughly to 32 bytes. The size should be selected as +a reasonably large prime due to better hash function distribution properties. +Hash table is internally chained and works well up to a fill rate of 90 %, general +rule of thumb is to select a prime near 1.2 * maximum_qps. + +*Default:* 393241 + +.. _mod-rrl_slip: + +slip +---- + +As attacks using DNS/UDP are usually based on a forged source address, +an attacker could deny services to the victim's netblock if all +responses would be completely blocked. The idea behind SLIP mechanism +is to send each N\ :sup:`th` response as truncated, thus allowing client to +reconnect via TCP for at least some degree of service. It is worth +noting, that some responses can't be truncated (e.g. SERVFAIL). + +- Setting the value to **0** will cause that all rate-limited responses will + be dropped. The outbound bandwidth and packet rate will be strictly capped + by the :ref:`mod-rrl_rate-limit` option. All legitimate requestors affected + by the limit will face denial of service and will observe excessive timeouts. + Therefore this setting is not recommended. + +- Setting the value to **1** will cause that all rate-limited responses will + be sent as truncated. The amplification factor of the attack will be reduced, + but the outbound data bandwidth won't be lower than the incoming bandwidth. + Also the outbound packet rate will be the same as without RRL. + +- Setting the value to **2** will cause that half of the rate-limited responses + will be dropped, the other half will be sent as truncated. With this + configuration, both outbound bandwidth and packet rate will be lower than the + inbound. On the other hand, the dropped responses enlarge the time window + for possible cache poisoning attack on the resolver. + +- Setting the value to anything **larger than 2** will keep on decreasing + the outgoing rate-limited bandwidth, packet rate, and chances to notify + legitimate requestors to reconnect using TCP. These attributes are inversely + proportional to the configured value. Setting the value high is not advisable. + +*Default:* 1 + +.. _mod-rrl_whitelist: + +whitelist +--------- + +A list of IP addresses, network subnets, or network ranges to exempt from +rate limiting. Empty list means that no incoming connection will be +white-listed. + +*Default:* not set + .. _Module dnstap: Module dnstap @@ -1268,6 +1418,36 @@ If enabled, response messages will be logged. *Default:* on +.. _Module online-sign: + +Module online-sign +================== + +The module provides online DNSSEC signing. Instead of pre-computing the zone signatures +when the zone is loaded into the server or instead of loading an externally signed zone, +the signatures are computed on-the-fly during answering. + +:: + + mod-online-sign: + - id: STR + policy: STR + +.. _mod-online-sign_id: + +id +-- + +A module identifier. + +.. _mod-online-sign_policy: + +policy +------ + +A :ref:`reference<policy_id>` to DNSSEC signing policy. A special *default* +value can be used for the default policy settings. + .. _Module synth-record: Module synth-record @@ -1360,6 +1540,7 @@ server for resolution. mod-dnsproxy: - id: STR remote: remote_id + timeout: INT catch-nxdomain: BOOL .. _mod-dnsproxy_id: @@ -1379,6 +1560,15 @@ forwarded to. *Required* +.. _mod-dnsproxy_timeout: + +timeout +------- + +A remote response timeout in milliseconds. + +*Default:* 500 + .. _mod-dnsproxy_catch-nxdomain: catch-nxdomain @@ -1419,60 +1609,213 @@ A path to the directory where the database is stored. *Required* -.. _mod-online-sign: +.. _mod-stats: -Module online-sign -================== +Module stats +============ + +The module provides incoming query processing statistics. -The module provides online DNSSEC signing. +.. NOTE:: + Leading 16-bit message size over TCP is not considered. :: - mod-online-sign: + mod-stats: - id: STR - -.. _mod-online-sign_id: + request-protocol: BOOL + server-operation: BOOL + request-bytes: BOOL + response-bytes: BOOL + edns-presence: BOOL + flag-presence: BOOL + response-code: BOOL + reply-nodata: BOOL + query-type: BOOL + query-size: BOOL + reply-size: BOOL + +.. _mod-stats_id: id -- A module identifier. -.. _mod-whoami: +.. _mod-stats_request-protocol: -Module whoami -============= +request-protocol +---------------- -The module synthesizes an A or AAAA record containing the query source IP address, -at the apex of the zone being served. +If enabled, all incoming requests are counted by the network protocol: -:: +* udp4 - UDP over IPv4 +* tcp4 - TCP over IPv4 +* udp6 - UDP over IPv6 +* tcp6 - TCP over IPv6 - mod-whoami: - - id: STR +*Default:* on -.. _mod-whoami_id: +.. _mod-stats_server-operation: -id --- +server-operation +---------------- -A module identifier. +If enabled, all incoming requests are counted by the server operation. The +server operation is based on message header OpCode and message query (meta) type: -.. _mod-noudp: +* query - Normal query operation +* update - Dynamic update operation +* notify - NOTIFY request operation +* axfr - Full zone transfer operation +* ixfr - Incremental zone transfer operation +* invalid - Invalid server operation -Module noudp -============ +*Default:* on -The module sends empty truncated response to any UDP query. +.. _mod-stats_request-bytes: -:: +request-bytes +------------- - mod-noudp: - - id: STR +If enabled, all incoming request bytes are counted by the server operation: -.. _mod-noudp_id: +* query - Normal query bytes +* update - Dynamic update bytes +* other - Other request bytes -id --- +*Default:* on -A module identifier. +.. _mod-stats_response-bytes: + +response-bytes +-------------- + +If enabled, outgoing response bytes are counted by the server operation: + +* reply - Normal response bytes +* transfer - Zone transfer bytes +* other - Other response bytes + +.. WARNING:: + Dynamic update response bytes are not counted by this module. + +*Default:* on + +.. _mod-stats_edns-presence: + +edns-presence +------------- + +If enabled, EDNS pseudo section presence is counted by the message direction: + +* request - EDNS present in request +* response - EDNS present in response + +*Default:* off + +.. _mod-stats_flag-presence: + +flag-presence +------------- + +If enabled, some message header flags are counted: + +* TC - Truncated Answer in response +* DO - DNSSEC OK in request + +*Default:* off + +.. _mod-stats_response-code: + +response-code +------------- + +If enabled, outgoing response code is counted: + +* NOERROR +* ... +* NOTZONE +* BADVERS +* ... +* BADCOOKIE +* other - All other codes + +.. NOTE:: + In the case of multi-message zone transfer response, just one counter is + incremented. + +.. WARNING:: + Dynamic update response code is not counted by this module. + +*Default:* on + +.. _mod-stats_reply-nodata: + +reply-nodata +------------ + +If enabled, NODATA pseudo RCODE (see RFC 2308, Section 2.2) is counted by the +query type: + +* A +* AAAA +* other - All other types + +*Default:* off + +.. _mod-stats_query-type: + +query-type +---------- + +If enabled, normal query type is counted: + +* A (TYPE1) +* ... +* TYPE65 +* SPF (TYPE99) +* ... +* TYPE110 +* ANY (TYPE255) +* ... +* TYPE260 +* other - All other types + +.. NOTE:: + Not all assigned meta types (IXFR, AXFR,...) have their own counters, + because such types are not processed as normal query. + +*Default:* off + +.. _mod-stats_query-size: + +query-size +---------- + +If enabled, normal query message size distribution is counted by the size range +in bytes: + +* 0-15 +* 16-31 +* ... +* 272-287 +* 288-65535 + +*Default:* off + +.. _mod-stats_reply-size: + +reply-size +---------- + +If enabled, normal reply message size distribution is counted by the size range +in bytes: + +* 0-15 +* 16-31 +* ... +* 4080-4095 +* 4096-65535 + +*Default:* off diff --git a/doc/utilities.rst b/doc/utilities.rst index 7df012f42ed1f41cfa75ef0c1dd3ff6b5f02ce52..77134987d82c6b55fa1080dc9c7e9edb5d89df34 100644 --- a/doc/utilities.rst +++ b/doc/utilities.rst @@ -13,6 +13,7 @@ the server. This section collects manual pages for all provided binaries: man_kdig man_keymgr man_khost + man_kjournalprint man_knot1to2 man_knotc man_knotd diff --git a/libtap/tap/files.c b/libtap/tap/files.c index 90f087f3724cfb206f4866b6ce195f73cf65549e..2e67e9e57975b8ca8a33272f4bb5281a9f600baa 100644 --- a/libtap/tap/files.c +++ b/libtap/tap/files.c @@ -16,6 +16,7 @@ #include "files.h" +#include "../../src/contrib/string.c" #include "../../src/contrib/files.c" #include <stdlib.h> diff --git a/m4/ax_check_link_flag.m4 b/m4/ax_check_link_flag.m4 new file mode 100644 index 0000000000000000000000000000000000000000..e2d0d363e4c4ac672d36a2c964973136d007be73 --- /dev/null +++ b/m4/ax_check_link_flag.m4 @@ -0,0 +1,71 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the linker or gives an error. +# (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the linker's default flags +# when the check is done. The check is thus made with the flags: "LDFLAGS +# EXTRA-FLAGS FLAG". This can for example be used to force the linker to +# issue an error when a bad flag is given. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de> +# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com> +# +# 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 the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 2 + +AC_DEFUN([AX_CHECK_LINK_FLAG], +[AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl +AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ + ax_check_save_flags=$LDFLAGS + LDFLAGS="$LDFLAGS $4 $1" + AC_LINK_IFELSE([AC_LANG_PROGRAM()], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + LDFLAGS=$ax_check_save_flags]) +AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_LINK_FLAGS diff --git a/python/Makefile.am b/python/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..2c03a5bb7c3ad55868bfaae5ad8ea95bc43d7c1e --- /dev/null +++ b/python/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = \ + libknot/__init__.py \ + libknot/control.py \ + stats_http.py \ + stats_influxdb.py diff --git a/python/libknot/control.py b/python/libknot/control.py index 43737031b3a0f891b2c0e3f41c44c9d26e144f4b..c2f677e2fa37b205f19e6c43899166c5c00a70e6 100755 --- a/python/libknot/control.py +++ b/python/libknot/control.py @@ -1,6 +1,9 @@ """Libknot server control interface wrapper. Example: + import json + from libknot.control import * + ctl = KnotCtl() ctl.connect("/var/run/knot/knot.sock") @@ -25,35 +28,72 @@ Example: from ctypes import cdll, c_void_p, c_int, c_char_p, c_uint, byref from enum import IntEnum -LIB = cdll.LoadLibrary('libknot.so') +CTL_ALLOC = None +CTL_FREE = None +CTL_SET_TIMEOUT = None +CTL_CONNECT = None +CTL_CLOSE = None +CTL_SEND = None +CTL_RECEIVE = None +CTL_ERROR = None + + +def load_lib(path="libknot.so"): + """Loads the libknot library.""" + + LIB = cdll.LoadLibrary(path) + + global CTL_ALLOC + CTL_ALLOC = LIB.knot_ctl_alloc + CTL_ALLOC.restype = c_void_p + + global CTL_FREE + CTL_FREE = LIB.knot_ctl_free + CTL_FREE.argtypes = [c_void_p] + + global CTL_SET_TIMEOUT + CTL_SET_TIMEOUT = LIB.knot_ctl_set_timeout + CTL_SET_TIMEOUT.argtypes = [c_void_p, c_int] -CTL_ALLOC = LIB.knot_ctl_alloc -CTL_ALLOC.restype = c_void_p + global CTL_CONNECT + CTL_CONNECT = LIB.knot_ctl_connect + CTL_CONNECT.restype = c_int + CTL_CONNECT.argtypes = [c_void_p, c_char_p] -CTL_FREE = LIB.knot_ctl_free -CTL_FREE.argtypes = [c_void_p] + global CTL_CLOSE + CTL_CLOSE = LIB.knot_ctl_close + CTL_CLOSE.argtypes = [c_void_p] -CTL_SET_TIMEOUT = LIB.knot_ctl_set_timeout -CTL_SET_TIMEOUT.argtypes = [c_void_p, c_int] + global CTL_SEND + CTL_SEND = LIB.knot_ctl_send + CTL_SEND.restype = c_int + CTL_SEND.argtypes = [c_void_p, c_uint, c_void_p] -CTL_CONNECT = LIB.knot_ctl_connect -CTL_CONNECT.restype = c_int -CTL_CONNECT.argtypes = [c_void_p, c_char_p] + global CTL_RECEIVE + CTL_RECEIVE = LIB.knot_ctl_receive + CTL_RECEIVE.restype = c_int + CTL_RECEIVE.argtypes = [c_void_p, c_void_p, c_void_p] -CTL_CLOSE = LIB.knot_ctl_close -CTL_CLOSE.argtypes = [c_void_p] + global CTL_ERROR + CTL_ERROR = LIB.knot_strerror + CTL_ERROR.restype = c_char_p + CTL_ERROR.argtypes = [c_int] -CTL_SEND = LIB.knot_ctl_send -CTL_SEND.restype = c_int -CTL_SEND.argtypes = [c_void_p, c_uint, c_void_p] -CTL_RECEIVE = LIB.knot_ctl_receive -CTL_RECEIVE.restype = c_int -CTL_RECEIVE.argtypes = [c_void_p, c_void_p, c_void_p] +class KnotCtlError(Exception): + """Libknot server control error.""" -CTL_ERROR = LIB.knot_strerror -CTL_ERROR.restype = c_char_p -CTL_ERROR.argtypes = [c_int] + def __init__(self, message, data=None): + """ + @type message: str + @type data: KnotCtlData + """ + + self.message = message + self.data = data + + def __str__(self): + return "%s (data: %s)" % (self.message, self.data) class KnotCtlType(IntEnum): @@ -89,6 +129,17 @@ class KnotCtlData(object): def __init__(self): self.data = self.DataArray() + def __str__(self): + string = str() + + for idx in KnotCtlDataIdx: + if self.data[idx]: + if string: + string += ", " + string += "%s = %s" % (idx.name, self.data[idx]) + + return string + def __getitem__(self, index): """Data unit item getter. @@ -114,6 +165,8 @@ class KnotCtl(object): """Libknot server control interface.""" def __init__(self): + if not CTL_ALLOC: + load_lib() self.obj = CTL_ALLOC() def __del__(self): @@ -136,7 +189,7 @@ class KnotCtl(object): ret = CTL_CONNECT(self.obj, path.encode()) if ret != 0: err = CTL_ERROR(ret) - raise Exception(err if isinstance(err, str) else err.decode()) + raise KnotCtlError(err if isinstance(err, str) else err.decode()) def close(self): """Disconnects from the current control socket.""" @@ -154,7 +207,7 @@ class KnotCtl(object): data.data if data else c_char_p()) if ret != 0: err = CTL_ERROR(ret) - raise Exception(err if isinstance(err, str) else err.decode()) + raise KnotCtlError(err if isinstance(err, str) else err.decode()) def receive(self, data=None): """Receives a data unit from the connected control socket. @@ -168,11 +221,11 @@ class KnotCtl(object): data.data if data else c_char_p()) if ret != 0: err = CTL_ERROR(ret) - raise Exception(err if isinstance(err, str) else err.decode()) + raise KnotCtlError(err if isinstance(err, str) else err.decode()) return KnotCtlType(data_type.value) def send_block(self, cmd, section=None, item=None, identifier=None, zone=None, - owner=None, ttl=None, rtype=None, data=None): + owner=None, ttl=None, rtype=None, data=None, flags=None): """Sends a control query block. @type cmd: str @@ -196,6 +249,7 @@ class KnotCtl(object): query[KnotCtlDataIdx.TTL] = ttl query[KnotCtlDataIdx.TYPE] = rtype query[KnotCtlDataIdx.DATA] = data + query[KnotCtlDataIdx.FLAGS] = flags self.send(KnotCtlType.DATA, query) self.send(KnotCtlType.BLOCK) @@ -212,18 +266,19 @@ class KnotCtl(object): out[section] = dict() # Add the identifier if not exists. - if ident and ident not in section: - section[ident] = dict() + if ident and ident not in out[section]: + out[section][ident] = dict() # Return if no item/value. if not item: return - item_level = section[ident] if ident else section + item_level = out[section][ident] if ident else out[section] # Treat alone identifier item differently. if item in ["id", "domain", "target"]: - section[data] = dict() + if data not in out[section]: + out[section][data] = dict() else: if item not in item_level: item_level[item] = list() @@ -269,6 +324,64 @@ class KnotCtl(object): else: out[zone][owner][rtype]["data"].append(data) + def _receive_stats(self, out, reply): + + zone = reply[KnotCtlDataIdx.ZONE] + section = reply[KnotCtlDataIdx.SECTION] + item = reply[KnotCtlDataIdx.ITEM] + idx = reply[KnotCtlDataIdx.ID] + data = reply[KnotCtlDataIdx.DATA] + + # Add the zone if not exists. + if zone: + if "zone" not in out: + out["zone"] = dict() + + if zone not in out["zone"]: + out["zone"][zone] = dict() + + section_level = out["zone"][zone] if zone else out + + if section not in section_level: + section_level[section] = dict() + + if idx: + if item not in section_level[section]: + section_level[section][item] = dict() + + section_level[section][item][idx] = data + else: + section_level[section][item] = data + + def receive_stats(self): + """Receives statistics answer and returns it as a structured dictionary. + + @rtype: dict + """ + + out = dict() + err_reply = None + + while True: + reply = KnotCtlData() + reply_type = self.receive(reply) + + # Stop if not data type. + if reply_type not in [KnotCtlType.DATA, KnotCtlType.EXTRA]: + break + + # Check for an error. + if reply[KnotCtlDataIdx.ERROR]: + err_reply = reply + continue + + self._receive_stats(out, reply) + + if err_reply: + raise KnotCtlError(err_reply[KnotCtlDataIdx.ERROR], err_reply) + + return out + def receive_block(self): """Receives a control answer and returns it as a structured dictionary. @@ -276,6 +389,7 @@ class KnotCtl(object): """ out = dict() + err_reply = None while True: reply = KnotCtlData() @@ -287,7 +401,8 @@ class KnotCtl(object): # Check for an error. if reply[KnotCtlDataIdx.ERROR]: - raise Exception(reply[KnotCtlDataIdx.ERROR]) + err_reply = reply + continue # Check for config data. if reply[KnotCtlDataIdx.SECTION]: @@ -301,4 +416,7 @@ class KnotCtl(object): else: continue + if err_reply: + raise KnotCtlError(err_reply[KnotCtlDataIdx.ERROR], err_reply) + return out diff --git a/python/stats_http.py b/python/stats_http.py new file mode 100755 index 0000000000000000000000000000000000000000..a38d5f752160888e22ef0733c7c292a226a7e18c --- /dev/null +++ b/python/stats_http.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 + +"""Simple program for exposing statistics from Knot DNS over HTTP/HTTPS.""" + +import http.server +import libknot.control +import json +import ssl +import time + +# Configuration. +#libknot.control.load_lib("../src/.libs/libknot.so") +ctl_socket = "/tmp/knot.sock" +ctl_timeout = 2 +ctl_flags = "" # set "F" for all supported counters. +http_host = "127.0.0.1" +http_port = 8080 +ssl_enable = False +ssl_keyfile = "./mykey.key" +ssl_certfile = "./mycert.crt" + + +class StatsServer(http.server.BaseHTTPRequestHandler): + def do_GET(self): + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + + # Connect to Knot server. + ctl = libknot.control.KnotCtl() + ctl.connect(ctl_socket) + ctl.set_timeout(ctl_timeout) + + # Get global metrics. + global_stats = dict() + try: + ctl.send_block(cmd="stats", flags=ctl_flags) + global_stats = ctl.receive_stats() + except: + pass + + # Get zone metrics. + zone_stats = dict() + try: + ctl.send_block(cmd="zone-stats", flags=ctl_flags) + zone_stats = ctl.receive_stats() + except: + pass + + # Disconnect from the server. + ctl.send(libknot.control.KnotCtlType.END) + ctl.close() + + # Publish the stats. + stats = {**global_stats, **zone_stats} + self.wfile.write(bytes(json.dumps(stats, indent=4, sort_keys=True), "utf-8")) + + +httpd = http.server.HTTPServer((http_host, http_port), StatsServer) + +if ssl_enable: + httpd.socket = ssl.wrap_socket(httpd.socket, keyfile=ssl_keyfile, + certfile=ssl_certfile, server_side=True) + +print("%s: HTTP%s Server Start - %s:%s" % + (time.asctime(), "S" if ssl_enable else "", http_host, http_port)) + +try: + httpd.serve_forever() +except KeyboardInterrupt: + pass + +httpd.server_close() diff --git a/python/stats_influxdb.py b/python/stats_influxdb.py new file mode 100755 index 0000000000000000000000000000000000000000..33d3709501981b1e4bcc2b13dd651beea266fc83 --- /dev/null +++ b/python/stats_influxdb.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 + +"""Simple program for exporting statistics from Knot DNS to influxdb.""" + +import libknot.control +import io +import json +import os +import time + +# Configuration. +#libknot.control.load_lib("../src/.libs/libknot.so") +ctl_socket = "/tmp/knot.sock" +ctl_timeout = 2 +# InfluxDB parameters. +host = "217.31.192.164" +port = "8086" +db = "KnotDNS" +instance = "Knot" +# Send metrics every N seconds. +send_interval = 5 + + +def send(): + # Connect to Knot server. + ctl = libknot.control.KnotCtl() + ctl.connect(ctl_socket) + ctl.set_timeout(ctl_timeout) + + # Get global metrics. + global_stats = dict() + try: + ctl.send_block(cmd="stats", flags="F") + global_stats = ctl.receive_stats() + except: + pass + + # Get zone metrics. + zone_stats = dict() + try: + ctl.send_block(cmd="zone-stats", flags="F") + zone_stats = ctl.receive_stats() + except: + pass + + # Disconnect from the server. + ctl.send(libknot.control.KnotCtlType.END) + ctl.close() + + # Prepare the metrics to publish. + output = io.StringIO() + + stats = {**global_stats, **zone_stats} + timestamp = str(int(time.time())) + + for metric in stats["server"]: + print("server,instance=" + instance + ",metric=" + metric + " value=" + + stats["server"][metric] + " " + timestamp, file=output) + + for group in stats["mod-stats"]: + for metric in stats["mod-stats"][group]: + print(group + ",instance=" + instance + ",metric=" + metric + + " value=" + stats["mod-stats"][group][metric] + " " + timestamp, + file=output) + + # Publish the metrics. + os.system("curl -i -XPOST 'http://%s:%s/write?db=%s&precision=s' --data-binary '%s'" + % (host, port, db, output.getvalue())) + + +print("%s: Graphite sender - Server Start - %s:%s" % + (time.asctime(), host, port)) + +try: + while(True): + send() + time.sleep(send_interval) +except KeyboardInterrupt: + pass diff --git a/src/Makefile.am b/src/Makefile.am index 887e38f14bcad95454bf3aad8222031670bb6042..9bc4abd737a6f48a917bdbc14f7a30f21c62e7b4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -28,7 +28,6 @@ EXTRA_DIST = \ contrib/licenses/LGPL-2.0 \ contrib/licenses/MIT \ contrib/licenses/OLDAP-2.8 \ - contrib/hat-trie/LICENSE \ contrib/lmdb/LICENSE \ contrib/murmurhash3/LICENSE \ contrib/openbsd/LICENSE \ @@ -49,6 +48,7 @@ libcontrib_la_SOURCES = \ contrib/fnv/longlong.h \ contrib/getline.c \ contrib/getline.h \ + contrib/hat-trie/hat-trie.h \ contrib/hhash.c \ contrib/hhash.h \ contrib/macros.h \ @@ -58,6 +58,8 @@ libcontrib_la_SOURCES = \ contrib/net.h \ contrib/print.c \ contrib/print.h \ + contrib/qp-trie/qp.c \ + contrib/qp-trie/qp.h \ contrib/sockaddr.c \ contrib/sockaddr.h \ contrib/string.c \ @@ -69,8 +71,6 @@ libcontrib_la_SOURCES = \ contrib/trim.h \ contrib/wire.h \ contrib/wire_ctx.h \ - contrib/hat-trie/hat-trie.c \ - contrib/hat-trie/hat-trie.h \ contrib/murmurhash3/murmurhash3.c \ contrib/murmurhash3/murmurhash3.h \ contrib/openbsd/strlcat.c \ @@ -86,6 +86,14 @@ libcontrib_la_SOURCES = \ contrib/ucw/mempool.c \ contrib/ucw/mempool.h +if !HAVE_LMDB +libcontrib_la_SOURCES += \ + contrib/lmdb/lmdb.h \ + contrib/lmdb/mdb.c \ + contrib/lmdb/midl.c \ + contrib/lmdb/midl.h +endif !HAVE_LMDB + # static: libknot-yparser sources libknot_yparser_la_SOURCES = \ libknot/yparser/yparser.c \ @@ -183,22 +191,12 @@ libknot_la_SOURCES = \ libknot_la_CPPFLAGS = $(AM_CPPFLAGS) $(CFLAG_VISIBILITY) $(lmdb_CFLAGS) libknot_la_CFLAGS = $(AM_CFLAGS) -libknot_la_LDFLAGS = $(AM_LDFLAGS) $(libknot_VERSION_INFO) $(lmdb_LIBS) +libknot_la_LDFLAGS = $(AM_LDFLAGS) $(libknot_VERSION_INFO) $(lmdb_LIBS) $(LDFLAG_EXCLUDE_LIBS) libknot_la_LIBADD = dnssec/libdnssec.la libcontrib.la # pkg-config pkgconfig_DATA = libknot.pc -if !HAVE_LMDB -libknot_la_SOURCES += \ - contrib/lmdb/lmdb.h \ - contrib/lmdb/mdb.c \ - contrib/lmdb/midl.c \ - contrib/lmdb/midl.h -libknot_la_CPPFLAGS += \ - -I$(srcdir)/contrib/lmdb/ -endif - # static: utilities shared libknotus_la_SOURCES = \ utils/common/cert.c \ @@ -237,6 +235,8 @@ libknotd_la_SOURCES = \ knot/conf/confdb.h \ knot/conf/confio.c \ knot/conf/confio.h \ + knot/conf/migration.c \ + knot/conf/migration.h \ knot/conf/scheme.c \ knot/conf/scheme.h \ knot/conf/tools.c \ @@ -277,18 +277,24 @@ libknotd_la_SOURCES = \ knot/events/log.h \ knot/events/replan.c \ knot/events/replan.h \ - knot/modules/dnsproxy.c \ - knot/modules/dnsproxy.h \ - knot/modules/noudp.c \ - knot/modules/noudp.h \ - knot/modules/online_sign/module.c \ - knot/modules/online_sign/module.h \ + knot/modules/dnsproxy/dnsproxy.c \ + knot/modules/dnsproxy/dnsproxy.h \ + knot/modules/noudp/noudp.c \ + knot/modules/noudp/noudp.h \ + knot/modules/online_sign/online_sign.c \ + knot/modules/online_sign/online_sign.h \ knot/modules/online_sign/nsec_next.c \ knot/modules/online_sign/nsec_next.h \ - knot/modules/synth_record.c \ - knot/modules/synth_record.h \ - knot/modules/whoami.c \ - knot/modules/whoami.h \ + knot/modules/rrl/functions.c \ + knot/modules/rrl/functions.h \ + knot/modules/rrl/rrl.c \ + knot/modules/rrl/rrl.h \ + knot/modules/stats/stats.c \ + knot/modules/stats/stats.h \ + knot/modules/synth_record/synth_record.c\ + knot/modules/synth_record/synth_record.h\ + knot/modules/whoami/whoami.c \ + knot/modules/whoami/whoami.h \ knot/nameserver/axfr.c \ knot/nameserver/axfr.h \ knot/nameserver/chaos.c \ @@ -330,14 +336,16 @@ libknotd_la_SOURCES = \ knot/common/process.h \ knot/common/ref.c \ knot/common/ref.h \ + knot/common/stats.c \ + knot/common/stats.h \ knot/server/dthreads.c \ knot/server/dthreads.h \ - knot/server/journal.c \ - knot/server/journal.h \ - knot/server/rrl.c \ - knot/server/rrl.h \ - knot/server/serialization.c \ - knot/server/serialization.h \ + knot/journal/journal.c \ + knot/journal/journal.h \ + knot/journal/old_journal.c \ + knot/journal/old_journal.h \ + knot/journal/serialization.c \ + knot/journal/serialization.h \ knot/server/server.c \ knot/server/server.h \ knot/server/tcp-handler.c \ @@ -385,7 +393,7 @@ libknotd_la_SOURCES = \ knot/zone/zonefile.c \ knot/zone/zonefile.h -libknotd_la_CPPFLAGS = $(AM_CPPFLAGS) $(systemd_CFLAGS) $(liburcu_CFLAGS) +libknotd_la_CPPFLAGS = $(AM_CPPFLAGS) $(systemd_CFLAGS) $(liburcu_CFLAGS) $(lmdb_CFLAGS) libknotd_la_LDFLAGS = $(AM_LDFLAGS) $(systemd_LIBS) $(liburcu_LIBS) libknotd_la_LIBADD = libknot.la libknot-yparser.la zscanner/libzscanner.la $(liburcu_LIBS) @@ -450,7 +458,7 @@ keymgr_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/dnssec/lib/dnssec -I$(srcdir)/dnsse keymgr_LDADD = libknotd.la libknotus.la dnssec/libdnssec.la dnssec/libshared.la \ zscanner/libzscanner.la $(gnutls_LIBS) knotd_CPPFLAGS = $(AM_CPPFLAGS) $(liburcu_CFLAGS) -knotd_LDADD = libknotd.la $(liburcu_LIBS) +knotd_LDADD = libknotd.la libcontrib.la $(liburcu_LIBS) knotc_CPPFLAGS = $(AM_CPPFLAGS) $(libedit_CFLAGS) knotc_LDADD = libknotd.la libknotus.la $(libedit_LIBS) knot1to2_LDADD = libcontrib.la @@ -461,16 +469,16 @@ knot1to2_LDADD = libcontrib.la if HAVE_DNSTAP libknotd_la_SOURCES += \ - knot/modules/dnstap.c \ - knot/modules/dnstap.h + knot/modules/dnstap/dnstap.c \ + knot/modules/dnstap/dnstap.h libknotd_la_CPPFLAGS += $(DNSTAP_CFLAGS) libknotd_la_LIBADD += $(DNSTAP_LIBS) contrib/dnstap/libdnstap.la endif # HAVE_DNSTAP if HAVE_ROSEDB libknotd_la_SOURCES += \ - knot/modules/rosedb.c \ - knot/modules/rosedb.h + knot/modules/rosedb/rosedb.c \ + knot/modules/rosedb/rosedb.h endif # HAVE_ROSEDB # Create storage and run-time directories @@ -487,7 +495,7 @@ endif # HAVE_DAEMON if HAVE_UTILS -bin_PROGRAMS = kdig khost knsec3hash knsupdate kzonecheck +bin_PROGRAMS = kdig khost knsec3hash knsupdate kzonecheck kjournalprint if !HAVE_DAEMON noinst_LTLIBRARIES += libknotd.la endif @@ -524,16 +532,21 @@ kzonecheck_SOURCES = \ utils/kzonecheck/zone_check.c \ utils/kzonecheck/zone_check.h +kjournalprint_SOURCES = \ + utils/kjournalprint/main.c + # bin programs -kdig_CPPFLAGS = $(AM_CPPFLAGS) $(gnutls_CFLAGS) -kdig_LDADD = $(libidn_LIBS) libknotus.la -khost_CPPFLAGS = $(AM_CPPFLAGS) $(gnutls_CFLAGS) -khost_LDADD = $(libidn_LIBS) libknotus.la -knsupdate_CPPFLAGS = $(AM_CPPFLAGS) $(gnutls_CFLAGS) -knsupdate_LDADD = zscanner/libzscanner.la libknotus.la -knsec3hash_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/dnssec/lib/dnssec -I$(srcdir)/dnssec -knsec3hash_LDADD = dnssec/libdnssec.la dnssec/libshared.la -kzonecheck_LDADD = libknotd.la +kdig_CPPFLAGS = $(AM_CPPFLAGS) $(gnutls_CFLAGS) +kdig_LDADD = $(libidn_LIBS) libknotus.la +khost_CPPFLAGS = $(AM_CPPFLAGS) $(gnutls_CFLAGS) +khost_LDADD = $(libidn_LIBS) libknotus.la +knsupdate_CPPFLAGS = $(AM_CPPFLAGS) $(gnutls_CFLAGS) +knsupdate_LDADD = zscanner/libzscanner.la libknotus.la +knsec3hash_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/dnssec/lib/dnssec -I$(srcdir)/dnssec +knsec3hash_LDADD = dnssec/libdnssec.la dnssec/libshared.la +kzonecheck_LDADD = libknotd.la libcontrib.la +kjournalprint_CPPFLAGS = $(AM_CPPFLAGS) $(gnutls_CFLAGS) +kjournalprint_LDADD = $(libidn_LIBS) libknotd.la libcontrib.la ####################################### # Optional Knot DNS Utilities modules # @@ -548,8 +561,8 @@ endif # HAVE_DNSTAP if HAVE_ROSEDB bin_PROGRAMS += rosedb_tool -rosedb_tool_SOURCES = knot/modules/rosedb_tool.c -rosedb_tool_LDADD = libknotd.la +rosedb_tool_SOURCES = knot/modules/rosedb/rosedb_tool.c +rosedb_tool_LDADD = libknotd.la libcontrib.la rosedb_tool_CFLAGS = $(AM_CFLAGS) $(lmdb_CFLAGS) $(DNSTAP_CFLAGS) rosedb_tool_LDFLAGS = $(AM_LDFLAGS) $(lmdb_LIBS) endif # HAVE_ROSEDB diff --git a/src/contrib/endian.h b/src/contrib/endian.h index d49f9da37ae7fb965d5dbb75899340505fdebac8..b5447a1ef9ace2456167ffd2cc106dc590dc83d2 100644 --- a/src/contrib/endian.h +++ b/src/contrib/endian.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -24,7 +24,8 @@ #pragma once -#if defined(__linux__) +#if defined(__linux__) || defined(__gnu_hurd__) || \ + (defined(__FreeBSD_kernel__) && defined(__GLIBC__)) # include <endian.h> # ifndef be64toh # include <arpa/inet.h> diff --git a/src/contrib/files.c b/src/contrib/files.c index 12a6ae51f03030eef23ede89906f098107801d3f..e654ea79a8393488733fe693389131eed4a7005a 100644 --- a/src/contrib/files.c +++ b/src/contrib/files.c @@ -21,9 +21,11 @@ #include <fcntl.h> #include <stdbool.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> +#include "contrib/string.h" #include "libknot/errcode.h" static bool special_name(const char *name) @@ -114,3 +116,69 @@ int make_dir(const char *path, mode_t mode, bool ignore_existing) return KNOT_EOK; } + +int make_path(const char *path, mode_t mode) +{ + if (path == NULL) { + return KNOT_EINVAL; + } + + char *dir = strdup(path); + if (dir == NULL) { + return KNOT_ENOMEM; + } + + for (char *p = strchr(dir + 1, '/'); p != NULL; p = strchr(p + 1, '/')) { + *p = '\0'; + if (mkdir(dir, mode) == -1 && errno != EEXIST) { + free(dir); + return knot_map_errno(); + } + *p = '/'; + } + + free(dir); + + return KNOT_EOK; +} + +int open_tmp_file(const char *path, char **tmp_name, FILE **file, mode_t mode) +{ + int ret; + + *tmp_name = sprintf_alloc("%s.XXXXXX", path); + if (*tmp_name == NULL) { + ret = KNOT_ENOMEM; + goto open_tmp_failed; + } + + int fd = mkstemp(*tmp_name); + if (fd < 0) { + ret = knot_map_errno(); + goto open_tmp_failed; + } + + if (fchmod(fd, mode) != 0) { + ret = knot_map_errno(); + close(fd); + unlink(*tmp_name); + goto open_tmp_failed; + } + + *file = fdopen(fd, "w"); + if (*file == NULL) { + ret = knot_map_errno(); + close(fd); + unlink(*tmp_name); + goto open_tmp_failed; + } + + return KNOT_EOK; +open_tmp_failed: + free(*tmp_name); + *tmp_name = NULL; + *file = NULL; + + assert(ret != KNOT_EOK); + return ret; +} diff --git a/src/contrib/files.h b/src/contrib/files.h index 6756cb8d53ba549f765758b41a56f076b8610746..c4c681f866699efcf5ed7c4e7ea2aea5cfde6bca 100644 --- a/src/contrib/files.h +++ b/src/contrib/files.h @@ -17,6 +17,7 @@ #pragma once #include <stdbool.h> +#include <stdio.h> #include <sys/types.h> /*! @@ -30,3 +31,13 @@ bool remove_path(const char *path); * Equivalent to mkdir(2), can succeed if the directory already exists. */ int make_dir(const char *path, mode_t mode, bool ignore_existing); + +/*! + * Makes a directory part of the path with all parent directories if not exist. + */ +int make_path(const char *path, mode_t mode); + +/*! + * Creates and opens for writing a temporary file based on given path. + */ +int open_tmp_file(const char *path, char **tmp_name, FILE **file, mode_t mode); diff --git a/src/contrib/hat-trie/LICENSE b/src/contrib/hat-trie/LICENSE deleted file mode 100644 index 01617031f0794897d5be06e0dc8d0751eec03f5b..0000000000000000000000000000000000000000 --- a/src/contrib/hat-trie/LICENSE +++ /dev/null @@ -1 +0,0 @@ -../licenses/MIT \ No newline at end of file diff --git a/src/contrib/hat-trie/hat-trie.c b/src/contrib/hat-trie/hat-trie.c deleted file mode 100644 index 5b8be94a2e4c15353d724ef49c68413be2472a19..0000000000000000000000000000000000000000 --- a/src/contrib/hat-trie/hat-trie.c +++ /dev/null @@ -1,1114 +0,0 @@ -/* - * This file is part of hat-trie. - * - * Copyright (c) 2011 by Daniel C. Jones <dcjones@cs.washington.edu> - * - */ - -#include <stdint.h> -#include <assert.h> -#include <string.h> -#include "contrib/hhash.h" -#include "contrib/hat-trie/hat-trie.h" -#include "contrib/mempattern.h" -#include "libknot/errcode.h" - -/* number of child nodes for used alphabet */ -#define NODE_CHILDS (TRIE_MAXCHAR+1) -/* initial nodestack size */ -#define NODESTACK_INIT 128 -/* hashtable max fill (undefine to maximize) */ -#define HHASH_MAX_FILL 0.9 - -static const uint8_t NODE_TYPE_TRIE = 0x1; -static const uint8_t NODE_TYPE_PURE_BUCKET = 0x2; -static const uint8_t NODE_TYPE_HYBRID_BUCKET = 0x4; -static const uint8_t NODE_HAS_VAL = 0x8; - -struct trie_node_t_; - -/* Node's may be trie nodes or buckets. This union allows us to keep - * non-specific pointer. */ -typedef union node_ptr_ -{ - hhash_t* b; - struct trie_node_t_* t; - uint8_t* flag; -} node_ptr; - -typedef struct trie_node_t_ -{ - uint8_t flag; - - /* the value for the key that is consumed on a trie node */ - value_t val; - - /* Map a character to either a trie_node_t or a hhash_t. The first byte - * must be examined to determine which. */ - node_ptr xs[NODE_CHILDS]; - -} trie_node_t; - -struct hattrie_t_ -{ - node_ptr root; // root node - size_t m; // number of stored keys - unsigned bsize; // bucket size - knot_mm_t mm; -}; - -/* Create an empty trie node. */ -static trie_node_t* alloc_empty_node(hattrie_t* T) -{ - trie_node_t* node = T->mm.alloc(T->mm.ctx, sizeof(trie_node_t)); - node->flag = NODE_TYPE_TRIE; - node->val = 0; - - memset(node->xs, 0, sizeof(node_ptr) * NODE_CHILDS); - return node; -} - -/* Create a new trie node with all pointer pointing to the given child (which - * can be NULL). */ -static trie_node_t* alloc_trie_node(hattrie_t* T, node_ptr child) -{ - trie_node_t* node = T->mm.alloc(T->mm.ctx, sizeof(trie_node_t)); - node->flag = NODE_TYPE_TRIE; - node->val = 0; - - size_t i; - for (i = 0; i < NODE_CHILDS; ++i) node->xs[i] = child; - return node; -} - -/* iterate trie nodes until string is consumed or bucket is found */ -static node_ptr hattrie_consume_ns(node_ptr **s, size_t *sp, size_t slen, - const char **k, size_t *l, unsigned min_len) -{ - - node_ptr *bs = *s; - node_ptr node = bs[*sp].t->xs[(unsigned char) **k]; - while (node.flag && *node.flag & NODE_TYPE_TRIE && *l > min_len) { - ++*k; - --*l; - /* build node stack if slen > 0 */ - if (slen > 0) { - if (*sp == slen - 1) { - /* switch pointers if allocating from base - * this is a bit ugly, but needed to avoid memory allocation - * most of the time - */ - slen *= 2; - if (bs == *s) { /* points to original stack mem */ - bs = malloc(slen * sizeof(node_ptr)); - memcpy(bs, *s, (slen/2) * sizeof(node_ptr)); - } else { /* points to heap memory already */ - node_ptr *bs_new = realloc(bs, slen * sizeof(node_ptr)); - /* \note tricky, hattrie should be slowly moved from 'never-expect-malloc-fail' state */ - if (bs_new == NULL) { - *sp = 0; /* caller will get take care of freeing old 'bs' */ - return bs[0]; /* return root node, so the search fails */ - } else { - bs = bs_new; - } - } - /* update parent pointer on resize */ - *s = bs; - } - /* increment stack pointer */ - ++*sp; - } - bs[*sp] = node; - node = node.t->xs[(unsigned char) **k]; - } - - /* stack top is always parent node */ - assert(*bs[*sp].flag & NODE_TYPE_TRIE); - return node; -} - -/*! \brief Consume key. */ -static inline node_ptr hattrie_consume(node_ptr *parent, const char **key, - size_t *key_len, unsigned min_len) -{ - size_t sp = 0; - return hattrie_consume_ns(&parent, &sp, 0, key, key_len, min_len); -} - -/* use node value and return pointer to it */ -static inline value_t* hattrie_useval(hattrie_t *T, node_ptr n) -{ - if (!(n.t->flag & NODE_HAS_VAL)) { - n.t->flag |= NODE_HAS_VAL; - ++T->m; - } - return &n.t->val; -} - -/* clear node value if exists */ -static inline int hattrie_clrval(hattrie_t *T, node_ptr n) -{ - if (n.t->flag & NODE_HAS_VAL) { - n.t->flag &= ~NODE_HAS_VAL; - n.t->val = 0; - --T->m; - return 0; - } - return -1; -} - -/* find rightmost non-empty node */ -static value_t* hattrie_find_rightmost(node_ptr node) -{ - /* iterate children from right */ - if (*node.flag & NODE_TYPE_TRIE) { - for (int i = TRIE_MAXCHAR; i > -1; --i) { - /* skip repeated pointers to hybrid bucket */ - if (i < TRIE_MAXCHAR && node.t->xs[i].t == node.t->xs[i + 1].t) - continue; - /* nest if trie */ - value_t *ret = hattrie_find_rightmost(node.t->xs[i]); - if (ret) { - return ret; - } - } - /* use trie node value if no children found */ - if (node.t->flag & NODE_HAS_VAL) { - return &node.t->val; - } - - /* no non-empty children? */ - return NULL; - } - - /* node is hashtable */ - if (node.b->weight == 0) { - return NULL; - } - /* return rightmost value */ - assert(node.b->index); - return hhash_indexval(node.b, node.b->weight - 1); -} - -static value_t* hattrie_find_leftmost(node_ptr node) -{ - /* iterate children from left */ - if (*node.flag & NODE_TYPE_TRIE) { - for (int i = 0; i <= TRIE_MAXCHAR; ++i) { - /* skip repeated pointers to hybrid bucket */ - if (i < TRIE_MAXCHAR - 1 && node.t->xs[i].t == node.t->xs[i + 1].t) { - continue; - } - /* nest if trie */ - value_t *ret = hattrie_find_leftmost(node.t->xs[i]); - if (ret) { - return ret; - } - } - /* use trie node value if no children found */ - if (node.t->flag & NODE_HAS_VAL) { - return &node.t->val; - } - - /* no non-empty children? */ - return NULL; - } - - /* node is hashtable */ - if (node.b->weight == 0) { - return NULL; - } - /* return leftmost value */ - assert(node.b->index); - return hhash_indexval(node.b, 0); -} - -/* find node in trie and keep node stack (if slen > 0) */ -static node_ptr hattrie_find_ns(node_ptr **s, size_t *sp, size_t slen, - const char **key, size_t *len) -{ - assert(*(*s)[*sp].flag & NODE_TYPE_TRIE); - - if (*len == 0) return (*s)[*sp]; /* parent, as sp == 0 */ - - node_ptr node = hattrie_consume_ns(s, sp, slen, key, len, 1); - - /* using pure trie and couldn't find the key, return stack top */ - if (node.flag == NULL) { - node = (*s)[*sp]; - } - - /* if the trie node consumes value, use it */ - if (*node.flag & NODE_TYPE_TRIE) { - if (!(node.t->flag & NODE_HAS_VAL)) { - node.flag = NULL; - } - return node; - } - - /* pure bucket holds only key suffixes, skip current char */ - if (*node.flag & NODE_TYPE_PURE_BUCKET) { - ++*key; - --*len; - } - - /* do not scan bucket, it's not needed for this operation */ - return node; -} - -/* find node in trie */ -static inline node_ptr hattrie_find(node_ptr *parent, const char **key, size_t *len) -{ - size_t sp = 0; - return hattrie_find_ns(&parent, &sp, 0, key, len); -} - -/* initialize root node */ -static void hattrie_initroot(hattrie_t *T) -{ - node_ptr node; - if (T->bsize > 0) { - node.b = hhash_create(TRIE_BUCKET_SIZE); - node.b->flag = NODE_TYPE_HYBRID_BUCKET; - node.b->c0 = 0x00; - node.b->c1 = TRIE_MAXCHAR; - T->root.t = alloc_trie_node(T, node); - } else { - T->root.t = alloc_empty_node(T); - } -} - -/* Free hat-trie nodes recursively. */ -static void hattrie_free_node(node_ptr node, knot_mm_free_t free_cb) -{ - if (*node.flag & NODE_TYPE_TRIE) { - size_t i; - for (i = 0; i < NODE_CHILDS; ++i) { - if (i > 0 && node.t->xs[i].t == node.t->xs[i - 1].t) - continue; - - /* XXX: recursion might not be the best choice here. It is possible - * to build a very deep trie. */ - if (node.t->xs[i].t) - hattrie_free_node(node.t->xs[i], free_cb); - } - if (free_cb) - free_cb(node.t); - } - else { - hhash_free(node.b); - } -} - -/* Initialize hat-trie. */ -static void hattrie_init(hattrie_t * T, unsigned bucket_size) -{ - T->m = 0; - T->bsize = bucket_size; - hattrie_initroot(T); -} - -/* Deinitialize hat-trie. */ -static void hattrie_deinit(hattrie_t * T) -{ - if (T->bsize > 0 || T->mm.free) - hattrie_free_node(T->root, T->mm.free); -} - -hattrie_t* hattrie_create() -{ - knot_mm_t mm; - mm_ctx_init(&mm); - return hattrie_create_n(TRIE_BUCKET_SIZE, &mm); -} - -void hattrie_free(hattrie_t* T) -{ - if (T == NULL) { - return; - } - hattrie_deinit(T); - if (T->mm.free) - T->mm.free(T); -} - -void hattrie_clear(hattrie_t* T) -{ - if (T == NULL) { - return; - } - - hattrie_deinit(T); - hattrie_init(T, T->bsize); -} - -hattrie_t* hattrie_dup(const hattrie_t* T, value_t (*nval)(value_t)) -{ - hattrie_t *N = hattrie_create_n(T->bsize, &T->mm); - - if (nval == NULL) { - return N; - } - - /*! \todo could be probably implemented faster */ - - size_t l = 0; - const char *k = NULL; - hattrie_iter_t *i = hattrie_iter_begin(T, false); - while (!hattrie_iter_finished(i)) { - k = hattrie_iter_key(i, &l); - *hattrie_get(N, k, l) = nval(*hattrie_iter_val(i)); - hattrie_iter_next(i); - } - hattrie_iter_free(i); - return N; -} - -size_t hattrie_weight (const hattrie_t *T) -{ - if (T == NULL) { - return 0; - } - - return T->m; -} - -hattrie_t* hattrie_create_n(unsigned bucket_size, const knot_mm_t *mm) -{ - hattrie_t* T = mm_alloc((knot_mm_t *)mm, sizeof(hattrie_t)); - memcpy(&T->mm, mm, sizeof(knot_mm_t)); - hattrie_init(T, bucket_size); - return T; -} - -static void node_build_index(node_ptr node) -{ - /* build index on all hashtable nodes */ - if (*node.flag & NODE_TYPE_TRIE) { - size_t i; - for (i = 0; i < NODE_CHILDS; ++i) { - if (i > 0 && node.t->xs[i].t == node.t->xs[i - 1].t) continue; - if (node.t->xs[i].t) node_build_index(node.t->xs[i]); - } - } - else { - hhash_build_index(node.b); - } -} - -void hattrie_build_index(hattrie_t *T) -{ - node_build_index(T->root); -} - -static int node_apply(node_ptr node, int (*f)(value_t*,void*), void* d) -{ - int result = TRIE_EOK; - - if (*node.flag & NODE_TYPE_TRIE) { - size_t i; - for (i = 0; i < NODE_CHILDS; ++i) { - if (i > 0 && node.t->xs[i].t == node.t->xs[i - 1].t) { - continue; - } - if (node.t->xs[i].t) { - result = node_apply(node.t->xs[i], f, d); - } - if (result == TRIE_EOK && *node.flag & NODE_HAS_VAL) { - result = f(&node.t->val, d); - } - if (result != TRIE_EOK) { - break; - } - } - } - else { - hhash_iter_t i; - hhash_iter_begin(node.b, &i, false); - while (!hhash_iter_finished(&i)) { - result = f(hhash_iter_val(&i), d); - if (result != TRIE_EOK) { - break; - } - hhash_iter_next(&i); - } - } - - return result; -} - -static int node_apply_ahtable(node_ptr node, int (*f)(void*,void*), void* d) -{ - int result = TRIE_EOK; - - if (*node.flag & NODE_TYPE_TRIE) { - size_t i; - for (i = 0; i < NODE_CHILDS; ++i) { - if (i > 0 && node.t->xs[i].t == node.t->xs[i - 1].t) { - continue; - } - if (node.t->xs[i].t) { - result = node_apply_ahtable(node.t->xs[i], f, d); - if (result != TRIE_EOK) { - break; - } - } - } - } - else { - result = f(node.b, d); - } - - return result; -} - -int hattrie_apply_rev(hattrie_t* T, int (*f)(value_t*,void*), void* d) -{ - return node_apply(T->root, f, d); -} - -int hattrie_apply_rev_ahtable(hattrie_t* T, int (*f)(void*,void*), void* d) -{ - return node_apply_ahtable(T->root, f, d); -} - -int hattrie_split_mid(node_ptr node, unsigned *left_m, unsigned *right_m) -{ - /* count the number of occourances of every leading character */ - unsigned int cs[NODE_CHILDS]; // occurrence count for leading chars - memset(cs, 0, NODE_CHILDS * sizeof(unsigned int)); - uint16_t len; - const char* key; - - /*! \todo expensive, maybe some heuristics or precalc would be better */ - hhash_iter_t i; - hhash_iter_begin(node.b, &i, false); - while (!hhash_iter_finished(&i)) { - key = hhash_iter_key(&i, &len); - assert(len > 0); - cs[(unsigned char) key[0]] += 1; - hhash_iter_next(&i); - } - - /* choose a split point */ - unsigned int all_m; - unsigned char j = node.b->c0; - all_m = node.b->weight; - *left_m = cs[j]; - *right_m = all_m - *left_m; - int d; - - while (j + 1 < node.b->c1) { - d = abs((int) (*left_m + cs[j + 1]) - (int) (*right_m - cs[j + 1])); - if (d <= abs((int) (*left_m) - (int) (*right_m)) && *left_m + cs[j + 1] < all_m) { - j += 1; - *left_m += cs[j]; - *right_m -= cs[j]; - } - else break; - } - - return j; -} - -static value_t *find_below(hattrie_t *T, node_ptr parent, - const char *key, size_t len); - -static void hashnode_split_reinsert(hattrie_t *T, node_ptr parent, node_ptr src) -{ - value_t* u = NULL; - const char* key = NULL; - uint16_t len = 0; - hhash_iter_t i; - - hhash_iter_begin(src.b, &i, false); - while (!hhash_iter_finished(&i)) { - key = hhash_iter_key(&i, &len); - u = hhash_iter_val(&i); - - *find_below(T, parent, key, len) = *u; - - hhash_iter_next(&i); - } - hhash_free(src.b); -} - -static size_t hashnode_nextsize(unsigned items) -{ - /* Next bucket size increments. */ - size_t increment = ((items + (TRIE_BUCKET_INCR/2))/TRIE_BUCKET_INCR); - if (increment > TRIE_BUCKET_MAX) { - increment = TRIE_BUCKET_MAX; - } - /* Align to closest bucket size. */ - return TRIE_BUCKET_SIZE + increment * TRIE_BUCKET_INCR; -} - -static void hashnode_split(hattrie_t *T, node_ptr parent, node_ptr node) -{ - /* Find split point. */ - unsigned left_m, right_m; - unsigned char j = hattrie_split_mid(node, &left_m, &right_m); - - /* now split into two nodes corresponding to ranges [0, j] and - * [j + 1, TRIE_MAXCHAR], respectively. */ - - /* create new left and right nodes - * one node may reuse existing if it keeps hybrid flag - * hybrid -> pure always needs a new table - */ - unsigned char c0 = node.b->c0, c1 = node.b->c1; - node_ptr left, right; - right.b = hhash_create(hashnode_nextsize(right_m)); - left.b = hhash_create(hashnode_nextsize(left_m)); - - /* setup created nodes */ - left.b->c0 = c0; - left.b->c1 = j; - left.b->flag = c0 == j ? NODE_TYPE_PURE_BUCKET : NODE_TYPE_HYBRID_BUCKET; // need to force it - right.b->c0 = j + 1; - right.b->c1 = c1; - right.b->flag = right.b->c0 == right.b->c1 ? - NODE_TYPE_PURE_BUCKET : NODE_TYPE_HYBRID_BUCKET; - - /* update the parent's pointer */ - unsigned int c; - for (c = c0; c <= j; ++c) parent.t->xs[c] = left; - for (; c <= c1; ++c) parent.t->xs[c] = right; - - /* fill new tables */ - hashnode_split_reinsert(T, parent, node); -} - -/* Perform one split operation on the given node with the given parent. - */ -static void node_split(hattrie_t* T, node_ptr parent, node_ptr node) -{ - /* only buckets may be split */ - assert(*node.flag & NODE_TYPE_PURE_BUCKET || - *node.flag & NODE_TYPE_HYBRID_BUCKET); - - assert(*parent.flag & NODE_TYPE_TRIE); - - if (*node.flag & NODE_TYPE_PURE_BUCKET) { - /* turn the pure bucket into a hybrid bucket */ - parent.t->xs[node.b->c0].t = alloc_trie_node(T, node); - - /* if the bucket had an empty key, move it to the new trie node */ - value_t* val = hhash_find(node.b, NULL, 0); - if (val) { - parent.t->xs[node.b->c0].t->val = *val; - parent.t->xs[node.b->c0].t->flag |= NODE_HAS_VAL; - *val = 0; - hhash_del(node.b, NULL, 0); - } - - node.b->c0 = 0x00; - node.b->c1 = TRIE_MAXCHAR; - node.b->flag = NODE_TYPE_HYBRID_BUCKET; - - return; - } - - /* This is a hybrid bucket. Perform a proper split. */ - hashnode_split(T, parent, node); -} - -static value_t *find_below(hattrie_t *T, node_ptr parent, const char *key, size_t len) -{ - /* consume all trie nodes, now parent must be trie and child anything */ - node_ptr node = hattrie_consume(&parent, &key, &len, 0); - assert(*parent.flag & NODE_TYPE_TRIE); - - /* if the key has been consumed on a trie node, use its value */ - if (len == 0) { - if (*node.flag & NODE_TYPE_TRIE) { - return hattrie_useval(T, node); - } else if (*node.flag & NODE_TYPE_HYBRID_BUCKET) { - return hattrie_useval(T, parent); - } - } - -#ifdef HHASH_MAX_FILL - /* preemptively split the bucket if fill is over threshold */ - if (node.b->weight >= node.b->size * HHASH_MAX_FILL) { - node_split(T, parent, node); - return find_below(T, parent, key, len); - } -#endif - - /* attempt to fit new element and split if it doesn't fit */ - value_t *val = NULL; - assert(len > 0); - if (*node.flag & NODE_TYPE_PURE_BUCKET) { - val = hhash_map(node.b, key + 1, len - 1, HHASH_INSERT); - } - else { - val = hhash_map(node.b, key, len, HHASH_INSERT); - } - - /* not inserted, recursively split */ - if (val == NULL) { - node_split(T, parent, node); - val = find_below(T, parent, key, len); - } - - return val; -} - -value_t* hattrie_get(hattrie_t* T, const char* key, size_t len) -{ - node_ptr parent = T->root; - value_t *val = NULL; - assert(*parent.flag & NODE_TYPE_TRIE); - - /* Find value below root node if not empty string. */ - if (len == 0) { - val = &parent.t->val; - } else { - val = find_below(T, parent, key, len); - } - - /* Count insertions. */ - if (val && *val == NULL) { - ++T->m; - } - - return val; -} - -value_t* hattrie_tryget(hattrie_t* T, const char* key, size_t len) -{ - /* find node for given key */ - node_ptr parent = T->root; - node_ptr node = hattrie_find(&parent, &key, &len); - if (node.flag == NULL) { - return NULL; - } - - /* if the trie node consumes value, use it */ - if (*node.flag & NODE_TYPE_TRIE) { - return &node.t->val; - } - - return hhash_find(node.b, key, len); -} - -static value_t* hattrie_walk_left(node_ptr* s, size_t sp, - const char* key, value_t* (*f)(node_ptr)) -{ - value_t *r = NULL; - while (r == NULL) { - /* if not found prev in table, it should be - * the rightmost of the nodes left of the current - */ - node_ptr visited = s[sp].t->xs[(unsigned char)*key]; - for (int i = *key - 1; i > -1; --i) { - if (s[sp].t->xs[i].flag == visited.flag) - continue; /* skip pointers to visited container */ - r = f(s[sp].t->xs[i]); - if (r) { - return r; - } - } - - /* use trie node value if possible */ - if (s[sp].t->flag & NODE_HAS_VAL) { - return &s[sp].t->val; - } - - /* consumed whole stack */ - if (sp == 0) { - break; - } - - /* pop stack */ - --key; - --sp; - } - - return NULL; -} - -static value_t* hattrie_walk_right(node_ptr* s, size_t sp, - const char* key, value_t* (*f)(node_ptr)) -{ - value_t *r = NULL; - while (r == NULL) { - /* if not found next in table, it should be - * the leftmost of the nodes right of the current - */ - node_ptr visited = s[sp].t->xs[(unsigned char)*key]; - for (int i = *key + 1; i <= TRIE_MAXCHAR; ++i) { - if (s[sp].t->xs[i].flag == visited.flag) - continue; /* skip pointers to visited container */ - r = f(s[sp].t->xs[i]); - if (r) { - return r; - } - } - /* use trie node value if possible */ - if (s[sp].t->flag & NODE_HAS_VAL) { - return &s[sp].t->val; - } - - /* consumed whole stack */ - if (sp == 0) { - break; - } - - /* pop stack */ - --key; - --sp; - } - - return NULL; -} - -int hattrie_find_leq (hattrie_t* T, const char* key, size_t len, value_t** dst) -{ - /* create node stack for traceback */ - size_t sp = 0; - node_ptr bs[NODESTACK_INIT]; /* base stack (will be enough mostly) */ - node_ptr *ns = bs; /* generic ptr, could point to new mem */ - ns[sp] = T->root; - - /* find node for given key */ - int ret = 1; /* no node on the left matches */ - node_ptr node = hattrie_find_ns(&ns, &sp, NODESTACK_INIT, &key, &len); - if (node.flag == NULL) { - *dst = hattrie_walk_left(ns, sp, key, hattrie_find_rightmost); - if (ns != bs) free(ns); - if (*dst) { - return -1; /* found previous */ - } - return 1; /* no previous key found */ - } - - /* assign value from trie or find in table */ - if (*node.flag & NODE_TYPE_TRIE) { - *dst = &node.t->val; - ret = 0; /* found exact match */ - } else { - *dst = hhash_find(node.b, key, len); - if (*dst) { - ret = 0; /* found exact match */ - } else { /* look for previous in hashtable */ - ret = hhash_find_leq(node.b, key, len, dst); - } - } - - /* return if found equal or left in hashtable */ - if (*dst == 0) { - /* we're retracing from pure bucket, pop the key */ - if (*node.flag & NODE_TYPE_PURE_BUCKET) { - --key; - } - /* walk up the stack of visited nodes and find closest match on the left */ - *dst = hattrie_walk_left(ns, sp, key, hattrie_find_rightmost); - if (*dst) { - ret = -1; /* found previous */ - } else { - ret = 1; /* no previous key found */ - } - } - - if (ns != bs) free(ns); - return ret; -} - -int hattrie_find_next (hattrie_t* T, const char* key, size_t len, value_t **dst) -{ - /* create node stack for traceback */ - size_t sp = 0; - node_ptr bs[NODESTACK_INIT]; /* base stack (will be enough mostly) */ - node_ptr *ns = bs; /* generic ptr, could point to new mem */ - ns[sp] = T->root; - - /* find node for given key */ - node_ptr ptr = hattrie_find_ns(&ns, &sp, NODESTACK_INIT, &key, &len); - if (ptr.flag == NULL) { - *dst = hattrie_walk_right(ns, sp, key, hattrie_find_leftmost); - if (ns != bs) free(ns); - if (*dst) { - return 0; /* found next. */ - } else { - return 1; /* no next key found. */ - } - } - - int ret = 0; - if (*ptr.flag & NODE_TYPE_TRIE) { - /* Get next using walk. */ - ret = 1; - } else { - ret = hhash_find_next(ptr.b, key, len, dst); - } - - if (ret == 1) { - /* we're retracing from pure bucket, pop the key. */ - if (*ptr.flag & NODE_TYPE_PURE_BUCKET) { - --key; - } - *dst = hattrie_walk_right(ns, sp, key, hattrie_find_leftmost); - if (ns != bs) free(ns); - if (*dst) { - ret = 0; /* found next. */ - } else { - ret = 1; /* no next key found. */ - } - } - - return ret; -} - -int hattrie_del(hattrie_t* T, const char* key, size_t len) -{ - node_ptr parent = T->root; - assert(*parent.flag & NODE_TYPE_TRIE); - - /* find node for deletion */ - node_ptr node = hattrie_find(&parent, &key, &len); - if (node.flag == NULL) { - return -1; - } - - /* if consumed on a trie node, clear the value */ - if (*node.flag & NODE_TYPE_TRIE) { - return hattrie_clrval(T, node); - } - - /* remove from bucket */ - size_t m_old = node.b->weight; - int ret = hhash_del(node.b, key, len); - T->m -= (m_old - node.b->weight); - - /* merge empty buckets */ - /*! \todo */ - - return ret; -} - -/* plan for iteration: - * This is tricky, as we have no parent pointers currently, and I would like to - * avoid adding them. That means maintaining a stack - * - */ - -typedef struct hattrie_node_stack_t_ -{ - unsigned char c; - size_t level; - - node_ptr node; - struct hattrie_node_stack_t_* next; - -} hattrie_node_stack_t; - -struct hattrie_iter_t_ -{ - char* key; - size_t keysize; // space reserved for the key - size_t level; - - /* keep track of keys stored in trie nodes */ - bool has_nil_key; - value_t nil_val; - - const hattrie_t* T; - bool sorted; - hhash_iter_t* i; - hattrie_node_stack_t* stack; -}; - -static void hattrie_iter_pushchar(hattrie_iter_t* i, size_t level, char c) -{ - if (i->keysize < level) { - i->keysize *= 2; - i->key = realloc(i->key, i->keysize * sizeof(char)); - } - - if (level > 0) { - i->key[level - 1] = c; - } - - i->level = level; -} - -static void hattrie_iter_nextnode(hattrie_iter_t* i) -{ - if (i->stack == NULL) return; - - /* pop the stack */ - node_ptr node; - hattrie_node_stack_t* next; - unsigned char c; - size_t level; - - node = i->stack->node; - next = i->stack->next; - c = i->stack->c; - level = i->stack->level; - - free(i->stack); - i->stack = next; - - if (*node.flag & NODE_TYPE_TRIE) { - hattrie_iter_pushchar(i, level, c); - - if(node.t->flag & NODE_HAS_VAL) { - i->has_nil_key = true; - i->nil_val = node.t->val; - } - - /* push all child nodes from right to left */ - int j; - for (j = TRIE_MAXCHAR; j >= 0; --j) { - - /* skip repeated pointers to hybrid bucket */ - if (j < TRIE_MAXCHAR && node.t->xs[j].t == node.t->xs[j + 1].t) continue; - - // push stack - next = i->stack; - i->stack = malloc(sizeof(hattrie_node_stack_t)); - i->stack->node = node.t->xs[j]; - i->stack->next = next; - i->stack->level = level + 1; - i->stack->c = (unsigned char) j; - } - } - else { - if (*node.flag & NODE_TYPE_PURE_BUCKET) { - hattrie_iter_pushchar(i, level, c); - } - else { - i->level = level - 1; - } - - i->i = malloc(sizeof(hhash_iter_t)); - hhash_iter_begin(node.b, i->i, i->sorted); - } -} - -hattrie_iter_t* hattrie_iter_begin(const hattrie_t* T, bool sorted) -{ - hattrie_iter_t* i = NULL; - if (T) { - i = malloc(sizeof(hattrie_iter_t)); - i->T = T; - i->sorted = sorted; - i->i = NULL; - i->keysize = 16; - i->key = malloc(i->keysize * sizeof(char)); - i->level = 0; - i->has_nil_key = false; - i->nil_val = 0; - - i->stack = malloc(sizeof(hattrie_node_stack_t)); - i->stack->next = NULL; - i->stack->node = T->root; - i->stack->c = '\0'; - i->stack->level = 0; - - while (((i->i == NULL || hhash_iter_finished(i->i)) && !i->has_nil_key) && - i->stack != NULL ) { - - free(i->i); - i->i = NULL; - hattrie_iter_nextnode(i); - } - - if (i->i != NULL && hhash_iter_finished(i->i)) { - free(i->i); - i->i = NULL; - } - } - - return i; -} - -void hattrie_iter_next(hattrie_iter_t* i) -{ - if (hattrie_iter_finished(i)) return; - - if (i->i != NULL && !hhash_iter_finished(i->i)) { - hhash_iter_next(i->i); - } - else if (i->has_nil_key) { - i->has_nil_key = false; - i->nil_val = 0; - hattrie_iter_nextnode(i); - } - - while (((i->i == NULL || hhash_iter_finished(i->i)) && !i->has_nil_key) && - i->stack != NULL ) { - - free(i->i); - i->i = NULL; - hattrie_iter_nextnode(i); - } - - if (i->i != NULL && hhash_iter_finished(i->i)) { - free(i->i); - i->i = NULL; - } -} - -bool hattrie_iter_finished(hattrie_iter_t* i) -{ - return i->stack == NULL && i->i == NULL && !i->has_nil_key; -} - -void hattrie_iter_free(hattrie_iter_t* i) -{ - if (i == NULL) return; - if (i->i) { - free(i->i); - } - - hattrie_node_stack_t* next; - while (i->stack) { - next = i->stack->next; - free(i->stack); - i->stack = next; - } - - free(i->key); - free(i); -} - -const char* hattrie_iter_key(hattrie_iter_t* i, size_t* len) -{ - if (hattrie_iter_finished(i)) return NULL; - - uint16_t sublen; - const char* subkey; - - if (i->has_nil_key) { - subkey = NULL; - sublen = 0; - } - else subkey = hhash_iter_key(i->i, &sublen); - - if (i->keysize < i->level + sublen + 1) { - while (i->keysize < i->level + sublen + 1) i->keysize *= 2; - i->key = realloc(i->key, i->keysize * sizeof(char)); - } - - if (sublen > 0) { - memcpy(i->key + i->level, subkey, sublen); - } - i->key[i->level + sublen] = '\0'; - - *len = i->level + sublen; - return i->key; -} - -value_t* hattrie_iter_val(hattrie_iter_t* i) -{ - if (i->has_nil_key) return &i->nil_val; - - if (hattrie_iter_finished(i)) return NULL; - - return hhash_iter_val(i->i); -} diff --git a/src/contrib/hat-trie/hat-trie.h b/src/contrib/hat-trie/hat-trie.h index d579ff8865555d04d947ab2770394b10d44437c2..1e57fc2c7f6907f4dcffc3a8505e07bf14a18669 100644 --- a/src/contrib/hat-trie/hat-trie.h +++ b/src/contrib/hat-trie/hat-trie.h @@ -1,101 +1,98 @@ -/* - * This file is part of hat-trie - * - * Copyright (c) 2011 by Daniel C. Jones <dcjones@cs.washington.edu> - * - * This is an ANSI C99 implementation of the HAT-trie data structure of Askitis - * and Sinha, an extremely efficient (space and time) modern variant of tries. - * The HAT-trie is in essence a hybrid data structure, combining tries and hash - * tables in a clever way to try to get the best of both worlds. - * - * The version implemented here maps arrays of bytes to words (i.e., unsigned - * longs), which can be used to store counts, pointers, etc, or not used at all if - * you simply want to maintain a set of unique strings. - * - * For details see - * 1. Askitis, N., & Sinha, R. (2007). HAT-trie: a cache-conscious trie-based data - * structure for strings. Proceedings of the thirtieth Australasian conference on - * Computer science-Volume 62 (pp. 97–105). Australian Computer Society, Inc. - * 2. Askitis, N., & Zobel, J. (2005). Cache-conscious collision resolution in - * string hash tables. String Processing and Information Retrieval (pp. - * 91–102). Springer. - */ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> -#pragma once + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -#ifdef __cplusplus -extern "C" { -#endif + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -#include <stdlib.h> -#include <stdbool.h> + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#pragma once + +#include "contrib/qp-trie/qp.h" #include "contrib/hhash.h" -struct knot_mm; +typedef trie_t hattrie_t; +typedef trie_it_t hattrie_iter_t; -/* Hat-trie defines. */ -#define TRIE_ZEROBUCKETS 0 /* Do not use hash buckets (pure trie). */ -#define TRIE_BUCKET_SIZE 253 /* 253, 509, 765 for n*4K pages per 1 hhash. */ -#define TRIE_BUCKET_INCR 256 /* Size increase. */ -#define TRIE_BUCKET_MAX 4 /* Maximum N table increments. */ -#define TRIE_MAXCHAR 0xff /* Use 7-bit ASCII alphabet. */ -#define TRIE_EOK KNOT_EOK +inline static hattrie_t* hattrie_create(struct knot_mm *mm) +{ + return trie_create(mm); +} -typedef struct hattrie_t_ hattrie_t; +inline static void hattrie_free(hattrie_t *trie) +{ + trie_free(trie); +} -hattrie_t* hattrie_create (void); //< Create an empty hat-trie. -void hattrie_free (hattrie_t*); //< Free all memory used by a trie. -void hattrie_clear (hattrie_t*); //< Remove all entries. -size_t hattrie_weight (const hattrie_t*); //< Number of entries +inline static void hattrie_clear(hattrie_t *trie) +{ + trie_clear(trie); +} -/** Create new trie with custom bucket size and memory management. - */ -hattrie_t* hattrie_create_n (unsigned, const struct knot_mm *); +inline static size_t hattrie_weight(const hattrie_t *trie) +{ + return trie_weight(trie); +} -/** Duplicate an existing trie. - */ -hattrie_t* hattrie_dup (const hattrie_t*, value_t (*nval)(value_t)); +inline static int hattrie_apply_rev(hattrie_t *trie, int (*f)(value_t*,void*), void* d) +{ + return trie_apply(trie, f, d); +} -/** Build order index on all ahtable nodes in trie. - */ -void hattrie_build_index (hattrie_t*); +inline static value_t* hattrie_tryget(hattrie_t *trie, const char *key, size_t len) +{ + return trie_get_try(trie, key, len); +} -int hattrie_apply_rev (hattrie_t*, int (*f)(value_t*,void*), void* d); -int hattrie_apply_rev_ahtable(hattrie_t* T, int (*f)(void*,void*), void* d); +inline static value_t* hattrie_get(hattrie_t *trie, const char *key, size_t len) +{ + return trie_get_ins(trie, key, len); +} -/** Find the given key in the trie, inserting it if it does not exist, and - * returning a pointer to its key. - * - * This pointer is not guaranteed to be valid after additional calls to - * hattrie_get, hattrie_del, hattrie_clear, or other functions that modifies the - * trie. - */ -value_t* hattrie_get (hattrie_t*, const char* key, size_t len); +inline static int hattrie_find_leq(hattrie_t *trie, const char *key, size_t len, value_t **dst) +{ + return trie_get_leq(trie, key, len, dst); +} + +inline static int hattrie_del(hattrie_t *trie, const char* key, size_t len, value_t *val) +{ + return trie_del(trie, key, len, val); +} -/** Find a given key in the table, returning a NULL pointer if it does not - * exist. */ -value_t* hattrie_tryget (hattrie_t*, const char* key, size_t len); +inline static hattrie_iter_t* hattrie_iter_begin(hattrie_t *trie) +{ + return trie_it_begin(trie); +} -/** Find a given key in the table, returning a NULL pointer if it does not - * exist. Also set prev to point to previous node. */ -int hattrie_find_leq (hattrie_t*, const char* key, size_t len, value_t** dst); -/** Find a next value for given key, returning NULL if it does not exist. */ -int hattrie_find_next (hattrie_t* T, const char* key, size_t len, value_t **dst); +inline static void hattrie_iter_next(hattrie_iter_t *it) +{ + trie_it_next(it); +} -/** Delete a given key from trie. Returns 0 if successful or -1 if not found. - */ -int hattrie_del(hattrie_t* T, const char* key, size_t len); +inline static bool hattrie_iter_finished(hattrie_iter_t *it) +{ + return trie_it_finished(it); +} -typedef struct hattrie_iter_t_ hattrie_iter_t; +inline static void hattrie_iter_free(hattrie_iter_t *it) +{ + trie_it_free(it); +} -hattrie_iter_t* hattrie_iter_begin (const hattrie_t*, bool sorted); -void hattrie_iter_next (hattrie_iter_t*); -bool hattrie_iter_finished (hattrie_iter_t*); -void hattrie_iter_free (hattrie_iter_t*); -const char* hattrie_iter_key (hattrie_iter_t*, size_t* len); -value_t* hattrie_iter_val (hattrie_iter_t*); +inline static const char* hattrie_iter_key(hattrie_iter_t *it, size_t *len) +{ + return trie_it_key(it, len); +} -#ifdef __cplusplus +inline static value_t* hattrie_iter_val(hattrie_iter_t *it) +{ + return trie_it_val(it); } -#endif diff --git a/src/contrib/lmdb/lmdb.h b/src/contrib/lmdb/lmdb.h index c4d05d1791f90d8ff7f5fe6e70e1f17b1968c6c4..0aeff0d320036d3997a726e8846ed6d78417b6e4 100644 --- a/src/contrib/lmdb/lmdb.h +++ b/src/contrib/lmdb/lmdb.h @@ -77,6 +77,11 @@ * access to locks and lock file. Exceptions: On read-only filesystems * or with the #MDB_NOLOCK flag described under #mdb_env_open(). * + * - An LMDB configuration will often reserve considerable \b unused + * memory address space and maybe file size for future growth. + * This does not use actual memory or disk space, but users may need + * to understand the difference so they won't be scared off. + * * - By default, in versions before 0.9.10, unused portions of the data * file might receive garbage data from memory freed by other code. * (This does not happen when using the #MDB_WRITEMAP flag.) As of @@ -91,11 +96,12 @@ * transactions. Each transaction belongs to one thread. See below. * The #MDB_NOTLS flag changes this for read-only transactions. * - * - Use an MDB_env* in the process which opened it, without fork()ing. + * - Use an MDB_env* in the process which opened it, not after fork(). * * - Do not have open an LMDB database twice in the same process at * the same time. Not even from a plain open() call - close()ing it - * breaks flock() advisory locking. + * breaks fcntl() advisory locking. (It is OK to reopen it after + * fork() - exec*(), since the lockfile has FD_CLOEXEC set.) * * - Avoid long-lived transactions. Read transactions prevent * reuse of pages freed by newer write transactions, thus the @@ -194,7 +200,7 @@ typedef int mdb_filehandle_t; /** Library minor version */ #define MDB_VERSION_MINOR 9 /** Library patch version */ -#define MDB_VERSION_PATCH 18 +#define MDB_VERSION_PATCH 19 /** Combine args a,b,c into a single integer for easy version comparisons */ #define MDB_VERINT(a,b,c) (((a) << 24) | ((b) << 16) | (c)) @@ -204,7 +210,7 @@ typedef int mdb_filehandle_t; MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH) /** The release date of this library version */ -#define MDB_VERSION_DATE "February 5, 2016" +#define MDB_VERSION_DATE "December 28, 2016" /** A stringifier for the version info */ #define MDB_VERSTR(a,b,c,d) "LMDB " #a "." #b "." #c ": (" d ")" @@ -383,7 +389,9 @@ typedef enum MDB_cursor_op { MDB_PREV_NODUP, /**< Position at last data item of previous key */ MDB_SET, /**< Position at specified key */ MDB_SET_KEY, /**< Position at specified key, return key + data */ - MDB_SET_RANGE /**< Position at first key greater than or equal to specified key. */ + MDB_SET_RANGE, /**< Position at first key greater than or equal to specified key. */ + MDB_PREV_MULTIPLE /**< Position at previous page and return key and up to + a page of duplicate data items. Only for #MDB_DUPFIXED */ } MDB_cursor_op; /** @defgroup errors Return Codes @@ -672,6 +680,7 @@ int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd); * <li>#MDB_CP_COMPACT - Perform compaction while copying: omit free * pages and sequentially renumber all pages in output. This option * consumes more CPU and runs more slowly than the default. + * Currently it fails if the environment has suffered a page leak. * </ul> * @return A non-zero error value on failure and 0 on success. */ @@ -786,6 +795,10 @@ int mdb_env_get_flags(MDB_env *env, unsigned int *flags); int mdb_env_get_path(MDB_env *env, const char **path); /** @brief Return the filedescriptor for the given environment. + * + * This function may be called after fork(), so the descriptor can be + * closed before exec*(). Other LMDB file descriptors have FD_CLOEXEC. + * (Until LMDB 0.9.18, only the lockfile had that.) * * @param[in] env An environment handle returned by #mdb_env_create() * @param[out] fd Address of a mdb_filehandle_t to contain the descriptor. @@ -1090,8 +1103,9 @@ int mdb_txn_renew(MDB_txn *txn); * This flag may only be used in combination with #MDB_DUPSORT. This option * tells the library that the data items for this database are all the same * size, which allows further optimizations in storage and retrieval. When - * all data items are the same size, the #MDB_GET_MULTIPLE and #MDB_NEXT_MULTIPLE - * cursor operations may be used to retrieve multiple items at once. + * all data items are the same size, the #MDB_GET_MULTIPLE, #MDB_NEXT_MULTIPLE + * and #MDB_PREV_MULTIPLE cursor operations may be used to retrieve multiple + * items at once. * <li>#MDB_INTEGERDUP * This option specifies that duplicate data items are binary integers, * similar to #MDB_INTEGERKEY keys. diff --git a/src/contrib/lmdb/mdb.c b/src/contrib/lmdb/mdb.c index 25b44a5f4d7f750d30dbc3270b549b6b1a17128b..23c1f009b01dd75b8d4d6c212d360238f65e19ae 100644 --- a/src/contrib/lmdb/mdb.c +++ b/src/contrib/lmdb/mdb.c @@ -35,9 +35,14 @@ #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif +#if defined(__WIN64__) +#define _FILE_OFFSET_BITS 64 +#endif #ifdef _WIN32 #include <malloc.h> #include <windows.h> +#include <wchar.h> /* get wcscpy() */ + /** getpid() returns int; MinGW defines pid_t but MinGW64 typedefs it * as int64 which is wrong. MSVC doesn't define it at all, so just * don't use it. @@ -115,7 +120,7 @@ typedef SSIZE_T ssize_t; #include <resolv.h> /* defines BYTE_ORDER on HPUX and Solaris */ #endif -#if defined(__APPLE__) || defined (BSD) +#if defined(__APPLE__) || defined (BSD) || defined(__FreeBSD_kernel__) # define MDB_USE_POSIX_SEM 1 # define MDB_FDATASYNC fsync #elif defined(ANDROID) @@ -124,6 +129,7 @@ typedef SSIZE_T ssize_t; #ifndef _WIN32 #include <pthread.h> +#include <signal.h> #ifdef MDB_USE_POSIX_SEM # define MDB_USE_HASH 1 #include <semaphore.h> @@ -244,10 +250,9 @@ typedef SSIZE_T ssize_t; /** Some platforms define the EOWNERDEAD error code * even though they don't support Robust Mutexes. * Compile with -DMDB_USE_ROBUST=0, or use some other - * mechanism like -DMDB_USE_SYSV_SEM instead of - * -DMDB_USE_POSIX_MUTEX. (SysV semaphores are - * also Robust, but some systems don't support them - * either.) + * mechanism like -DMDB_USE_POSIX_SEM instead of + * -DMDB_USE_POSIX_MUTEX. + * (Posix semaphores are not robust.) */ #ifndef MDB_USE_ROBUST /* Android currently lacks Robust Mutex support. So does glibc < 2.4. */ @@ -256,16 +261,20 @@ typedef SSIZE_T ssize_t; # define MDB_USE_ROBUST 0 # else # define MDB_USE_ROBUST 1 +# endif +#endif /* !MDB_USE_ROBUST */ + +#if defined(MDB_USE_POSIX_MUTEX) && (MDB_USE_ROBUST) /* glibc < 2.12 only provided _np API */ -# if defined(__GLIBC__) && GLIBC_VER < 0x02000c +# if (defined(__GLIBC__) && GLIBC_VER < 0x02000c) || \ + (defined(PTHREAD_MUTEX_ROBUST_NP) && !defined(PTHREAD_MUTEX_ROBUST)) # define PTHREAD_MUTEX_ROBUST PTHREAD_MUTEX_ROBUST_NP # define pthread_mutexattr_setrobust(attr, flag) pthread_mutexattr_setrobust_np(attr, flag) # define pthread_mutex_consistent(mutex) pthread_mutex_consistent_np(mutex) # endif -# endif -#endif /* MDB_USE_ROBUST */ +#endif /* MDB_USE_POSIX_MUTEX && MDB_USE_ROBUST */ -#if defined(MDB_OWNERDEAD) && MDB_USE_ROBUST +#if defined(MDB_OWNERDEAD) && (MDB_USE_ROBUST) #define MDB_ROBUST_SUPPORTED 1 #endif @@ -288,8 +297,10 @@ typedef HANDLE mdb_mutex_t, mdb_mutexref_t; #define pthread_mutex_lock(x) WaitForSingleObject(*x, INFINITE) #define pthread_cond_signal(x) SetEvent(*x) #define pthread_cond_wait(cond,mutex) do{SignalObjectAndWait(*mutex, *cond, INFINITE, FALSE); WaitForSingleObject(*mutex, INFINITE);}while(0) -#define THREAD_CREATE(thr,start,arg) thr=CreateThread(NULL,0,start,arg,0,NULL) -#define THREAD_FINISH(thr) WaitForSingleObject(thr, INFINITE) +#define THREAD_CREATE(thr,start,arg) \ + (((thr) = CreateThread(NULL, 0, start, arg, 0, NULL)) ? 0 : ErrCode()) +#define THREAD_FINISH(thr) \ + (WaitForSingleObject(thr, INFINITE) ? ErrCode() : 0) #define LOCK_MUTEX0(mutex) WaitForSingleObject(mutex, INFINITE) #define UNLOCK_MUTEX(mutex) ReleaseMutex(mutex) #define mdb_mutex_consistent(mutex) 0 @@ -330,15 +341,15 @@ mdb_sem_wait(sem_t *sem) } #else /* MDB_USE_POSIX_MUTEX: */ - /** Shared mutex/semaphore as it is stored (mdb_mutex_t), and as - * local variables keep it (mdb_mutexref_t). + /** Shared mutex/semaphore as the original is stored. * - * When #mdb_mutexref_t is a pointer declaration and #mdb_mutex_t is - * not, then it is array[size 1] so it can be assigned to a pointer. - * @{ + * Not for copies. Instead it can be assigned to an #mdb_mutexref_t. + * When mdb_mutexref_t is a pointer and mdb_mutex_t is not, then it + * is array[size 1] so it can be assigned to the pointer. */ -typedef pthread_mutex_t mdb_mutex_t[1], *mdb_mutexref_t; - /* @} */ +typedef pthread_mutex_t mdb_mutex_t[1]; + /** Reference to an #mdb_mutex_t */ +typedef pthread_mutex_t *mdb_mutexref_t; /** Lock the reader or writer mutex. * Returns 0 or a code to give #mdb_mutex_failed(), as in #LOCK_MUTEX(). */ @@ -475,7 +486,7 @@ static txnid_t mdb_debug_start; * The string is printed literally, with no format processing. */ #define DPUTS(arg) DPRINTF(("%s", arg)) - /** Debugging output value of a cursor DBI: Negative in a sub-cursor. */ + /** Debuging output value of a cursor DBI: Negative in a sub-cursor. */ #define DDBI(mc) \ (((mc)->mc_flags & C_SUB) ? -(int)(mc)->mc_dbi : (int)(mc)->mc_dbi) /** @} */ @@ -763,9 +774,23 @@ typedef struct MDB_txninfo { + (((MDB_PIDLOCK) != 0) << 16))) /** @} */ -/** Common header for all page types. - * Overflow records occupy a number of contiguous pages with no - * headers on any page after the first. +/** Common header for all page types. The page type depends on #mp_flags. + * + * #P_BRANCH and #P_LEAF pages have unsorted '#MDB_node's at the end, with + * sorted #mp_ptrs[] entries referring to them. Exception: #P_LEAF2 pages + * omit mp_ptrs and pack sorted #MDB_DUPFIXED values after the page header. + * + * #P_OVERFLOW records occupy one or more contiguous pages where only the + * first has a page header. They hold the real data of #F_BIGDATA nodes. + * + * #P_SUBP sub-pages are small leaf "pages" with duplicate data. + * A node with flag #F_DUPDATA but not #F_SUBDATA contains a sub-page. + * (Duplicate data can also go in sub-databases, which use normal pages.) + * + * #P_META pages contain #MDB_meta, the start point of an LMDB snapshot. + * + * Each non-metapage up to #MDB_meta.%mm_last_pg is reachable exactly once + * in the snapshot: Either used by a database or listed in a freeDB record. */ typedef struct MDB_page { #define mp_pgno mp_p.p_pgno @@ -774,7 +799,7 @@ typedef struct MDB_page { pgno_t p_pgno; /**< page number */ struct MDB_page *p_next; /**< for in-memory list of freed pages */ } mp_p; - uint16_t mp_pad; + uint16_t mp_pad; /**< key size if this is a LEAF2 page */ /** @defgroup mdb_page Page Flags * @ingroup internal * Flags for the page headers. @@ -841,25 +866,34 @@ typedef struct MDB_page { /** The number of overflow pages needed to store the given size. */ #define OVPAGES(size, psize) ((PAGEHDRSZ-1 + (size)) / (psize) + 1) - /** Link in #MDB_txn.%mt_loose_pgs list */ + /** Link in #MDB_txn.%mt_loose_pgs list. + * Kept outside the page header, which is needed when reusing the page. + */ #define NEXT_LOOSE_PAGE(p) (*(MDB_page **)((p) + 2)) /** Header for a single key/data pair within a page. * Used in pages of type #P_BRANCH and #P_LEAF without #P_LEAF2. * We guarantee 2-byte alignment for 'MDB_node's. + * + * #mn_lo and #mn_hi are used for data size on leaf nodes, and for child + * pgno on branch nodes. On 64 bit platforms, #mn_flags is also used + * for pgno. (Branch nodes have no flags). Lo and hi are in host byte + * order in case some accesses can be optimized to 32-bit word access. + * + * Leaf node flags describe node contents. #F_BIGDATA says the node's + * data part is the page number of an overflow page with actual data. + * #F_DUPDATA and #F_SUBDATA can be combined giving duplicate data in + * a sub-page/sub-database, and named databases (just #F_SUBDATA). */ typedef struct MDB_node { - /** lo and hi are used for data size on leaf nodes and for - * child pgno on branch nodes. On 64 bit platforms, flags - * is also used for pgno. (Branch nodes have no flags). - * They are in host byte order in case that lets some - * accesses be optimized into a 32-bit word access. - */ + /** part of data size or pgno + * @{ */ #if BYTE_ORDER == LITTLE_ENDIAN - unsigned short mn_lo, mn_hi; /**< part of data size or pgno */ + unsigned short mn_lo, mn_hi; #else unsigned short mn_hi, mn_lo; #endif + /** @} */ /** @defgroup mdb_node Node Flags * @ingroup internal * Flags for node headers. @@ -969,9 +1003,9 @@ typedef struct MDB_db { pgno_t md_root; /**< the root page of this tree */ } MDB_db; - /** mdb_dbi_open flags */ #define MDB_VALID 0x8000 /**< DB handle is valid, for me_dbflags */ #define PERSISTENT_FLAGS (0xffff & ~(MDB_VALID)) + /** #mdb_dbi_open() flags */ #define VALID_FLAGS (MDB_REVERSEKEY|MDB_DUPSORT|MDB_INTEGERKEY|MDB_DUPFIXED|\ MDB_INTEGERDUP|MDB_REVERSEDUP|MDB_CREATE) @@ -1002,7 +1036,10 @@ typedef struct MDB_meta { #define mm_psize mm_dbs[FREE_DBI].md_pad /** Any persistent environment flags. @ref mdb_env */ #define mm_flags mm_dbs[FREE_DBI].md_flags - pgno_t mm_last_pg; /**< last used page in file */ + /** Last used page in the datafile. + * Actually the file may be shorter if the freeDB lists the final pages. + */ + pgno_t mm_last_pg; volatile txnid_t mm_txnid; /**< txnid that committed this page */ } MDB_meta; @@ -1052,7 +1089,7 @@ struct MDB_txn { * in this transaction, linked through #NEXT_LOOSE_PAGE(page). */ MDB_page *mt_loose_pgs; - /* #Number of loose pages (#mt_loose_pgs) */ + /** Number of loose pages (#mt_loose_pgs) */ int mt_loose_count; /** The sorted list of dirty pages we temporarily wrote to disk * because the dirty list was full. page numbers in here are @@ -1075,11 +1112,12 @@ struct MDB_txn { * @ingroup internal * @{ */ -#define DB_DIRTY 0x01 /**< DB was modified or is DUPSORT data */ +#define DB_DIRTY 0x01 /**< DB was written in this txn */ #define DB_STALE 0x02 /**< Named-DB record is older than txnID */ #define DB_NEW 0x04 /**< Named-DB handle opened in this txn */ #define DB_VALID 0x08 /**< DB handle is valid, see also #MDB_VALID */ #define DB_USRVALID 0x10 /**< As #DB_VALID, but not set for #FREE_DBI */ +#define DB_DUPDATA 0x20 /**< DB is #MDB_DUPSORT data */ /** @} */ /** In write txns, array of cursors for each DB */ MDB_cursor **mt_cursors; @@ -1184,6 +1222,21 @@ typedef struct MDB_xcursor { unsigned char mx_dbflag; } MDB_xcursor; + /** Check if there is an inited xcursor, so #XCURSOR_REFRESH() is proper */ +#define XCURSOR_INITED(mc) \ + ((mc)->mc_xcursor && ((mc)->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) + + /** Update sub-page pointer, if any, in \b mc->mc_xcursor. Needed + * when the node which contains the sub-page may have moved. Called + * with \b mp = mc->mc_pg[mc->mc_top], \b ki = mc->mc_ki[mc->mc_top]. + */ +#define XCURSOR_REFRESH(mc, mp, ki) do { \ + MDB_page *xr_pg = (mp); \ + MDB_node *xr_node = NODEPTR(xr_pg, ki); \ + if ((xr_node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) \ + (mc)->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(xr_node); \ +} while (0) + /** State of FreeDB old pages, stored in the MDB_env */ typedef struct MDB_pgstate { pgno_t *mf_pghead; /**< Reclaimed freeDB pages, or NULL before use */ @@ -1194,7 +1247,7 @@ typedef struct MDB_pgstate { struct MDB_env { HANDLE me_fd; /**< The main data file */ HANDLE me_lfd; /**< The lock file */ - HANDLE me_mfd; /**< just for writing the meta pages */ + HANDLE me_mfd; /**< For writing and syncing the meta pages */ /** Failed to update the meta page. Probably an I/O error. */ #define MDB_FATAL_ERROR 0x80000000U /** Some fields are initialized. */ @@ -1298,7 +1351,7 @@ enum { #define MDB_END_SLOT MDB_NOTLS /**< release any reader slot if #MDB_NOTLS */ static void mdb_txn_end(MDB_txn *txn, unsigned mode); -static int mdb_page_get(MDB_txn *txn, pgno_t pgno, MDB_page **mp, int *lvl); +static int mdb_page_get(MDB_cursor *mc, pgno_t pgno, MDB_page **mp, int *lvl); static int mdb_page_search_root(MDB_cursor *mc, MDB_val *key, int modify); #define MDB_PS_MODIFY 1 @@ -1327,7 +1380,7 @@ static int mdb_node_add(MDB_cursor *mc, indx_t indx, static void mdb_node_del(MDB_cursor *mc, int ksize); static void mdb_node_shrink(MDB_page *mp, indx_t indx); static int mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst, int fromleft); -static int mdb_node_read(MDB_txn *txn, MDB_node *leaf, MDB_val *data); +static int mdb_node_read(MDB_cursor *mc, MDB_node *leaf, MDB_val *data); static size_t mdb_leaf_size(MDB_env *env, MDB_val *key, MDB_val *data); static size_t mdb_branch_size(MDB_env *env, MDB_val *key); @@ -1372,7 +1425,8 @@ static SECURITY_DESCRIPTOR mdb_null_sd; static SECURITY_ATTRIBUTES mdb_all_sa; static int mdb_sec_inited; -static int utf8_to_utf16(const char *src, int srcsize, wchar_t **dst, int *dstsize); +struct MDB_name; +static int utf8_to_utf16(const char *src, struct MDB_name *dst, int xtra); #endif /** Return the library version info. */ @@ -1417,8 +1471,9 @@ mdb_strerror(int err) * This works as long as no function between the call to mdb_strerror * and the actual use of the message uses more than 4K of stack. */ - char pad[4096]; - char buf[1024], *ptr = buf; +#define MSGSIZE 1024 +#define PADSIZE 4096 + char buf[MSGSIZE+PADSIZE], *ptr = buf; #endif int i; if (!err) @@ -1450,7 +1505,7 @@ mdb_strerror(int err) buf[0] = 0; FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, err, 0, ptr, sizeof(buf), (va_list *)pad); + NULL, err, 0, ptr, MSGSIZE, (va_list *)buf+MSGSIZE); return ptr; #else return strerror(err); @@ -1558,7 +1613,7 @@ mdb_page_list(MDB_page *mp) pgno, ((MDB_meta *)METADATA(mp))->mm_txnid); return; default: - fprintf(stderr, "Bad page %"Z"u flags 0x%u\n", pgno, mp->mp_flags); + fprintf(stderr, "Bad page %"Z"u flags 0x%X\n", pgno, mp->mp_flags); return; } @@ -1613,7 +1668,7 @@ mdb_cursor_chk(MDB_cursor *mc) } if (mc->mc_ki[i] >= NUMKEYS(mc->mc_pg[i])) printf("ack!\n"); - if (mc->mc_xcursor && (mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) { + if (XCURSOR_INITED(mc)) { node = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) && mc->mc_xcursor->mx_cursor.mc_pg[0] != NODEDATA(node)) { @@ -1674,7 +1729,7 @@ static void mdb_audit(MDB_txn *txn) } } if (freecount + count + NUM_METAS != txn->mt_next_pgno) { - fprintf(stderr, "audit: %lu freecount: %lu count: %lu total: %lu next_pgno: %lu\n", + fprintf(stderr, "audit: %"Z"u freecount: %"Z"u count: %"Z"u total: %"Z"u next_pgno: %"Z"u\n", txn->mt_txnid, freecount, count+NUM_METAS, freecount+count+NUM_METAS, txn->mt_next_pgno); } @@ -1700,6 +1755,7 @@ mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b) /** Allocate memory for a page. * Re-use old malloc'd pages first for singletons, otherwise just malloc. + * Set #MDB_TXN_ERROR on failure. */ static MDB_page * mdb_page_malloc(MDB_txn *txn, unsigned num) @@ -1842,7 +1898,7 @@ mdb_pages_xkeep(MDB_cursor *mc, unsigned pflags, int all) { enum { Mask = P_SUBP|P_DIRTY|P_LOOSE|P_KEEP }; MDB_txn *txn = mc->mc_txn; - MDB_cursor *m3; + MDB_cursor *m3, *m0 = mc; MDB_xcursor *mx; MDB_page *dp, *mp; MDB_node *leaf; @@ -1885,7 +1941,7 @@ mdb_pages_xkeep(MDB_cursor *mc, unsigned pflags, int all) pgno_t pgno = txn->mt_dbs[i].md_root; if (pgno == P_INVALID) continue; - if ((rc = mdb_page_get(txn, pgno, &dp, &level)) != MDB_SUCCESS) + if ((rc = mdb_page_get(m0, pgno, &dp, &level)) != MDB_SUCCESS) break; if ((dp->mp_flags & Mask) == pflags && level <= 1) dp->mp_flags ^= P_KEEP; @@ -2067,7 +2123,7 @@ mdb_page_dirty(MDB_txn *txn, MDB_page *mp) } /** Allocate page numbers and memory for writing. Maintain me_pglast, - * me_pghead and mt_next_pgno. + * me_pghead and mt_next_pgno. Set #MDB_TXN_ERROR on failure. * * If there are free pages available from older transactions, they * are re-used first. Otherwise allocate a new page at mt_next_pgno. @@ -2189,8 +2245,8 @@ mdb_page_alloc(MDB_cursor *mc, int num, MDB_page **mp) } np = m2.mc_pg[m2.mc_top]; leaf = NODEPTR(np, m2.mc_ki[m2.mc_top]); - if ((rc = mdb_node_read(txn, leaf, &data)) != MDB_SUCCESS) - return rc; + if ((rc = mdb_node_read(&m2, leaf, &data)) != MDB_SUCCESS) + goto fail; idl = (MDB_ID *) data.mv_data; i = idl[0]; @@ -2340,6 +2396,7 @@ mdb_page_unspill(MDB_txn *txn, MDB_page *mp, MDB_page **ret) } /** Touch a page: make it dirty and re-insert into tree with updated pgno. + * Set #MDB_TXN_ERROR on failure. * @param[in] mc cursor pointing to the page to be touched * @return 0 on success, non-zero on failure. */ @@ -2428,14 +2485,8 @@ done: if (m2 == mc) continue; if (m2->mc_pg[mc->mc_top] == mp) { m2->mc_pg[mc->mc_top] = np; - if ((mc->mc_db->md_flags & MDB_DUPSORT) && - IS_LEAF(np) && - (m2->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) - { - MDB_node *leaf = NODEPTR(np, m2->mc_ki[mc->mc_top]); - if ((leaf->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) - m2->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(leaf); - } + if (XCURSOR_INITED(m2) && IS_LEAF(np)) + XCURSOR_REFRESH(m2, np, m2->mc_ki[mc->mc_top]); } } } @@ -3786,7 +3837,10 @@ mdb_env_write_meta(MDB_txn *txn) len = sizeof(MDB_meta) - off; off += (char *)mp - env->me_map; - /* Write to the SYNC fd */ + /* Write to the SYNC fd unless MDB_NOSYNC/MDB_NOMETASYNC. + * (me_mfd goes to the same file as me_fd, but writing to it + * also syncs to disk. Avoids a separate fdatasync() call.) + */ mfd = (flags & (MDB_NOSYNC|MDB_NOMETASYNC)) ? env->me_fd : env->me_mfd; #ifdef _WIN32 { @@ -4041,6 +4095,189 @@ mdb_fsize(HANDLE fd, size_t *size) return MDB_SUCCESS; } + +#ifdef _WIN32 +typedef wchar_t mdb_nchar_t; +# define MDB_NAME(str) L##str +# define mdb_name_cpy wcscpy +#else +/** Character type for file names: char on Unix, wchar_t on Windows */ +typedef char mdb_nchar_t; +# define MDB_NAME(str) str /**< #mdb_nchar_t[] string literal */ +# define mdb_name_cpy strcpy /**< Copy name (#mdb_nchar_t string) */ +#endif + +/** Filename - string of #mdb_nchar_t[] */ +typedef struct MDB_name { + int mn_len; /**< Length */ + int mn_alloced; /**< True if #mn_val was malloced */ + mdb_nchar_t *mn_val; /**< Contents */ +} MDB_name; + +/** Filename suffixes [datafile,lockfile][without,with MDB_NOSUBDIR] */ +static const mdb_nchar_t *const mdb_suffixes[2][2] = { + { MDB_NAME("/data.mdb"), MDB_NAME("") }, + { MDB_NAME("/lock.mdb"), MDB_NAME("-lock") } +}; + +#define MDB_SUFFLEN 9 /**< Max string length in #mdb_suffixes[] */ + +/** Set up filename + scratch area for filename suffix, for opening files. + * It should be freed with #mdb_fname_destroy(). + * On Windows, paths are converted from char *UTF-8 to wchar_t *UTF-16. + * + * @param[in] path Pathname for #mdb_env_open(). + * @param[in] envflags Whether a subdir and/or lockfile will be used. + * @param[out] fname Resulting filename, with room for a suffix if necessary. + */ +static int ESECT +mdb_fname_init(const char *path, unsigned envflags, MDB_name *fname) +{ + int no_suffix = F_ISSET(envflags, MDB_NOSUBDIR|MDB_NOLOCK); + fname->mn_alloced = 0; +#ifdef _WIN32 + return utf8_to_utf16(path, fname, no_suffix ? 0 : MDB_SUFFLEN); +#else + fname->mn_len = strlen(path); + if (no_suffix) + fname->mn_val = (char *) path; + else if ((fname->mn_val = malloc(fname->mn_len + MDB_SUFFLEN+1)) != NULL) { + fname->mn_alloced = 1; + strcpy(fname->mn_val, path); + } + else + return ENOMEM; + return MDB_SUCCESS; +#endif +} + +/** Destroy \b fname from #mdb_fname_init() */ +#define mdb_fname_destroy(fname) \ + do { if ((fname).mn_alloced) free((fname).mn_val); } while (0) + +#ifdef O_CLOEXEC /* POSIX.1-2008: Set FD_CLOEXEC atomically at open() */ +# define MDB_CLOEXEC O_CLOEXEC +#else +# define MDB_CLOEXEC 0 +#endif + +/** File type, access mode etc. for #mdb_fopen() */ +enum mdb_fopen_type { +#ifdef _WIN32 + MDB_O_RDONLY, MDB_O_RDWR, MDB_O_META, MDB_O_COPY, MDB_O_LOCKS +#else + /* A comment in mdb_fopen() explains some O_* flag choices. */ + MDB_O_RDONLY= O_RDONLY, /**< for RDONLY me_fd */ + MDB_O_RDWR = O_RDWR |O_CREAT, /**< for me_fd */ + MDB_O_META = O_WRONLY|MDB_DSYNC |MDB_CLOEXEC, /**< for me_mfd */ + MDB_O_COPY = O_WRONLY|O_CREAT|O_EXCL|MDB_CLOEXEC, /**< for #mdb_env_copy() */ + /** Bitmask for open() flags in enum #mdb_fopen_type. The other bits + * distinguish otherwise-equal MDB_O_* constants from each other. + */ + MDB_O_MASK = MDB_O_RDWR|MDB_CLOEXEC | MDB_O_RDONLY|MDB_O_META|MDB_O_COPY, + MDB_O_LOCKS = MDB_O_RDWR|MDB_CLOEXEC | ((MDB_O_MASK+1) & ~MDB_O_MASK) /**< for me_lfd */ +#endif +}; + +/** Open an LMDB file. + * @param[in] env The LMDB environment. + * @param[in,out] fname Path from from #mdb_fname_init(). A suffix is + * appended if necessary to create the filename, without changing mn_len. + * @param[in] which Determines file type, access mode, etc. + * @param[in] mode The Unix permissions for the file, if we create it. + * @param[out] res Resulting file handle. + * @return 0 on success, non-zero on failure. + */ +static int ESECT +mdb_fopen(const MDB_env *env, MDB_name *fname, + enum mdb_fopen_type which, mdb_mode_t mode, + HANDLE *res) +{ + int rc = MDB_SUCCESS; + HANDLE fd; +#ifdef _WIN32 + DWORD acc, share, disp, attrs; +#else + int flags; +#endif + + if (fname->mn_alloced) /* modifiable copy */ + mdb_name_cpy(fname->mn_val + fname->mn_len, + mdb_suffixes[which==MDB_O_LOCKS][F_ISSET(env->me_flags, MDB_NOSUBDIR)]); + + /* The directory must already exist. Usually the file need not. + * MDB_O_META requires the file because we already created it using + * MDB_O_RDWR. MDB_O_COPY must not overwrite an existing file. + * + * With MDB_O_COPY we do not want the OS to cache the writes, since + * the source data is already in the OS cache. + * + * The lockfile needs FD_CLOEXEC (close file descriptor on exec*()) + * to avoid the flock() issues noted under Caveats in lmdb.h. + * Also set it for other filehandles which the user cannot get at + * and close himself, which he may need after fork(). I.e. all but + * me_fd, which programs do use via mdb_env_get_fd(). + */ + +#ifdef _WIN32 + acc = GENERIC_READ|GENERIC_WRITE; + share = FILE_SHARE_READ|FILE_SHARE_WRITE; + disp = OPEN_ALWAYS; + attrs = FILE_ATTRIBUTE_NORMAL; + switch (which) { + case MDB_O_RDONLY: /* read-only datafile */ + acc = GENERIC_READ; + disp = OPEN_EXISTING; + break; + case MDB_O_META: /* for writing metapages */ + acc = GENERIC_WRITE; + disp = OPEN_EXISTING; + attrs = FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH; + break; + case MDB_O_COPY: /* mdb_env_copy() & co */ + acc = GENERIC_WRITE; + share = 0; + disp = CREATE_NEW; + attrs = FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH; + break; + default: break; /* silence gcc -Wswitch (not all enum values handled) */ + } + fd = CreateFileW(fname->mn_val, acc, share, NULL, disp, attrs, NULL); +#else + fd = open(fname->mn_val, which & MDB_O_MASK, mode); +#endif + + if (fd == INVALID_HANDLE_VALUE) + rc = ErrCode(); +#ifndef _WIN32 + else { + if (which != MDB_O_RDONLY && which != MDB_O_RDWR) { + /* Set CLOEXEC if we could not pass it to open() */ + if (!MDB_CLOEXEC && (flags = fcntl(fd, F_GETFD)) != -1) + (void) fcntl(fd, F_SETFD, flags | FD_CLOEXEC); + } + if (which == MDB_O_COPY && env->me_psize >= env->me_os_psize) { + /* This may require buffer alignment. There is no portable + * way to ask how much, so we require OS pagesize alignment. + */ +# ifdef F_NOCACHE /* __APPLE__ */ + (void) fcntl(fd, F_NOCACHE, 1); +# elif defined O_DIRECT + /* open(...O_DIRECT...) would break on filesystems without + * O_DIRECT support (ITS#7682). Try to set it here instead. + */ + if ((flags = fcntl(fd, F_GETFL)) != -1) + (void) fcntl(fd, F_SETFL, flags | O_DIRECT); +# endif + } + } +#endif /* !_WIN32 */ + + *res = fd; + return rc; +} + + #ifdef BROKEN_FDATASYNC #include <sys/utsname.h> #include <sys/vfs.h> @@ -4206,7 +4443,11 @@ mdb_env_reader_dest(void *ptr) { MDB_reader *reader = ptr; - reader->mr_pid = 0; +#ifndef _WIN32 + if (reader->mr_pid == getpid()) /* catch pthread_exit() in child process */ +#endif + /* We omit the mutex, so do this atomically (i.e. skip mr_txnid) */ + reader->mr_pid = 0; } #ifdef _WIN32 @@ -4446,52 +4687,30 @@ mdb_hash_enc(MDB_val *val, char *encbuf) /** Open and/or initialize the lock region for the environment. * @param[in] env The LMDB environment. - * @param[in] lpath The pathname of the file used for the lock region. + * @param[in] fname Filename + scratch area, from #mdb_fname_init(). * @param[in] mode The Unix permissions for the file, if we create it. * @param[in,out] excl In -1, out lock type: -1 none, 0 shared, 1 exclusive * @return 0 on success, non-zero on failure. */ static int ESECT -mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) +mdb_env_setup_locks(MDB_env *env, MDB_name *fname, int mode, int *excl) { #ifdef _WIN32 # define MDB_ERRCODE_ROFS ERROR_WRITE_PROTECT #else # define MDB_ERRCODE_ROFS EROFS -#ifdef O_CLOEXEC /* Linux: Open file and set FD_CLOEXEC atomically */ -# define MDB_CLOEXEC O_CLOEXEC -#else - int fdflags; -# define MDB_CLOEXEC 0 -#endif #endif int rc; off_t size, rsize; -#ifdef _WIN32 - wchar_t *wlpath; - rc = utf8_to_utf16(lpath, -1, &wlpath, NULL); - if (rc) - return rc; - env->me_lfd = CreateFileW(wlpath, GENERIC_READ|GENERIC_WRITE, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, - FILE_ATTRIBUTE_NORMAL, NULL); - free(wlpath); -#else - env->me_lfd = open(lpath, O_RDWR|O_CREAT|MDB_CLOEXEC, mode); -#endif - if (env->me_lfd == INVALID_HANDLE_VALUE) { - rc = ErrCode(); + rc = mdb_fopen(env, fname, MDB_O_LOCKS, mode, &env->me_lfd); + if (rc) { + /* Omit lockfile if read-only env on read-only filesystem */ if (rc == MDB_ERRCODE_ROFS && (env->me_flags & MDB_RDONLY)) { return MDB_SUCCESS; } - goto fail_errno; + goto fail; } -#if ! ((MDB_CLOEXEC) || defined(_WIN32)) - /* Lose record locks when exec*() */ - if ((fdflags = fcntl(env->me_lfd, F_GETFD) | FD_CLOEXEC) >= 0) - fcntl(env->me_lfd, F_SETFD, fdflags); -#endif if (!(env->me_flags & MDB_NOTLS)) { rc = pthread_key_create(&env->me_txkey, mdb_env_reader_dest); @@ -4619,15 +4838,25 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) #else /* MDB_USE_POSIX_MUTEX: */ pthread_mutexattr_t mattr; - if ((rc = pthread_mutexattr_init(&mattr)) - || (rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED)) + /* Solaris needs this before initing a robust mutex. Otherwise + * it may skip the init and return EBUSY "seems someone already + * inited" or EINVAL "it was inited differently". + */ + memset(env->me_txns->mti_rmutex, 0, sizeof(*env->me_txns->mti_rmutex)); + memset(env->me_txns->mti_wmutex, 0, sizeof(*env->me_txns->mti_wmutex)); + + if ((rc = pthread_mutexattr_init(&mattr))) + goto fail; + + rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); #ifdef MDB_ROBUST_SUPPORTED - || (rc = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST)) + if (!rc) rc = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST); #endif - || (rc = pthread_mutex_init(env->me_txns->mti_rmutex, &mattr)) - || (rc = pthread_mutex_init(env->me_txns->mti_wmutex, &mattr))) - goto fail; + if (!rc) rc = pthread_mutex_init(env->me_txns->mti_rmutex, &mattr); + if (!rc) rc = pthread_mutex_init(env->me_txns->mti_wmutex, &mattr); pthread_mutexattr_destroy(&mattr); + if (rc) + goto fail; #endif /* _WIN32 || MDB_USE_POSIX_SEM */ env->me_txns->mti_magic = MDB_MAGIC; @@ -4671,12 +4900,6 @@ fail: return rc; } - /** The name of the lock file in the DB environment */ -#define LOCKNAME "/lock.mdb" - /** The name of the data file in the DB environment */ -#define DATANAME "/data.mdb" - /** The suffix of the lock file when no subdir is used */ -#define LOCKSUFF "-lock" /** Only a subset of the @ref mdb_env flags can be changed * at runtime. Changing other flags requires closing the * environment and re-opening it with the new flags. @@ -4692,36 +4915,18 @@ fail: int ESECT mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode) { - int oflags, rc, len, excl = -1; - char *lpath, *dpath; -#ifdef _WIN32 - wchar_t *wpath; -#endif + int rc, excl = -1; + MDB_name fname; if (env->me_fd!=INVALID_HANDLE_VALUE || (flags & ~(CHANGEABLE|CHANGELESS))) return EINVAL; - len = strlen(path); - if (flags & MDB_NOSUBDIR) { - rc = len + sizeof(LOCKSUFF) + len + 1; - } else { - rc = len + sizeof(LOCKNAME) + len + sizeof(DATANAME); - } - lpath = malloc(rc); - if (!lpath) - return ENOMEM; - if (flags & MDB_NOSUBDIR) { - dpath = lpath + len + sizeof(LOCKSUFF); - sprintf(lpath, "%s" LOCKSUFF, path); - strcpy(dpath, path); - } else { - dpath = lpath + len + sizeof(LOCKNAME); - sprintf(lpath, "%s" LOCKNAME, path); - sprintf(dpath, "%s" DATANAME, path); - } - - rc = MDB_SUCCESS; flags |= env->me_flags; + + rc = mdb_fname_init(path, flags, &fname); + if (rc) + return rc; + if (flags & MDB_RDONLY) { /* silently ignore WRITEMAP when we're only getting read access */ flags &= ~MDB_WRITEMAP; @@ -4746,69 +4951,31 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode /* For RDONLY, get lockfile after we know datafile exists */ if (!(flags & (MDB_RDONLY|MDB_NOLOCK))) { - rc = mdb_env_setup_locks(env, lpath, mode, &excl); + rc = mdb_env_setup_locks(env, &fname, mode, &excl); if (rc) goto leave; } -#ifdef _WIN32 - if (F_ISSET(flags, MDB_RDONLY)) { - oflags = GENERIC_READ; - len = OPEN_EXISTING; - } else { - oflags = GENERIC_READ|GENERIC_WRITE; - len = OPEN_ALWAYS; - } - mode = FILE_ATTRIBUTE_NORMAL; - rc = utf8_to_utf16(dpath, -1, &wpath, NULL); + rc = mdb_fopen(env, &fname, + (flags & MDB_RDONLY) ? MDB_O_RDONLY : MDB_O_RDWR, + mode, &env->me_fd); if (rc) goto leave; - env->me_fd = CreateFileW(wpath, oflags, FILE_SHARE_READ|FILE_SHARE_WRITE, - NULL, len, mode, NULL); - free(wpath); -#else - if (F_ISSET(flags, MDB_RDONLY)) - oflags = O_RDONLY; - else - oflags = O_RDWR | O_CREAT; - - env->me_fd = open(dpath, oflags, mode); -#endif - if (env->me_fd == INVALID_HANDLE_VALUE) { - rc = ErrCode(); - goto leave; - } if ((flags & (MDB_RDONLY|MDB_NOLOCK)) == MDB_RDONLY) { - rc = mdb_env_setup_locks(env, lpath, mode, &excl); + rc = mdb_env_setup_locks(env, &fname, mode, &excl); if (rc) goto leave; } if ((rc = mdb_env_open2(env)) == MDB_SUCCESS) { - if (flags & (MDB_RDONLY|MDB_WRITEMAP)) { - env->me_mfd = env->me_fd; - } else { + if (!(flags & (MDB_RDONLY|MDB_WRITEMAP))) { /* Synchronous fd for meta writes. Needed even with * MDB_NOSYNC/MDB_NOMETASYNC, in case these get reset. */ -#ifdef _WIN32 - len = OPEN_EXISTING; - rc = utf8_to_utf16(dpath, -1, &wpath, NULL); + rc = mdb_fopen(env, &fname, MDB_O_META, mode, &env->me_mfd); if (rc) goto leave; - env->me_mfd = CreateFileW(wpath, oflags, - FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, len, - mode | FILE_FLAG_WRITE_THROUGH, NULL); - free(wpath); -#else - oflags &= ~O_CREAT; - env->me_mfd = open(dpath, oflags | MDB_DSYNC, mode); -#endif - if (env->me_mfd == INVALID_HANDLE_VALUE) { - rc = ErrCode(); - goto leave; - } } DPRINTF(("opened dbenv %p", (void *) env)); if (excl > 0) { @@ -4841,7 +5008,7 @@ leave: if (rc) { mdb_env_close0(env, excl); } - free(lpath); + mdb_fname_destroy(fname); return rc; } @@ -4885,7 +5052,7 @@ mdb_env_close0(MDB_env *env, int excl) if (env->me_map) { munmap(env->me_map, env->me_mapsize); } - if (env->me_mfd != env->me_fd && env->me_mfd != INVALID_HANDLE_VALUE) + if (env->me_mfd != INVALID_HANDLE_VALUE) (void) close(env->me_mfd); if (env->me_fd != INVALID_HANDLE_VALUE) (void) close(env->me_fd); @@ -5185,7 +5352,9 @@ mdb_cursor_pop(MDB_cursor *mc) } } -/** Push a page onto the top of the cursor's stack. */ +/** Push a page onto the top of the cursor's stack. + * Set #MDB_TXN_ERROR on failure. + */ static int mdb_cursor_push(MDB_cursor *mc, MDB_page *mp) { @@ -5205,15 +5374,17 @@ mdb_cursor_push(MDB_cursor *mc, MDB_page *mp) } /** Find the address of the page corresponding to a given page number. - * @param[in] txn the transaction for this access. + * Set #MDB_TXN_ERROR on failure. + * @param[in] mc the cursor accessing the page. * @param[in] pgno the page number for the page to retrieve. * @param[out] ret address of a pointer where the page's address will be stored. * @param[out] lvl dirty_list inheritance level of found page. 1=current txn, 0=mapped page. * @return 0 on success, non-zero on failure. */ static int -mdb_page_get(MDB_txn *txn, pgno_t pgno, MDB_page **ret, int *lvl) +mdb_page_get(MDB_cursor *mc, pgno_t pgno, MDB_page **ret, int *lvl) { + MDB_txn *txn = mc->mc_txn; MDB_env *env = txn->mt_env; MDB_page *p = NULL; int level; @@ -5308,7 +5479,7 @@ mdb_page_search_root(MDB_cursor *mc, MDB_val *key, int flags) mdb_cassert(mc, i < NUMKEYS(mp)); node = NODEPTR(mp, i); - if ((rc = mdb_page_get(mc->mc_txn, NODEPGNO(node), &mp, NULL)) != 0) + if ((rc = mdb_page_get(mc, NODEPGNO(node), &mp, NULL)) != 0) return rc; mc->mc_ki[mc->mc_top] = i; @@ -5350,7 +5521,7 @@ mdb_page_search_lowest(MDB_cursor *mc) MDB_node *node = NODEPTR(mp, 0); int rc; - if ((rc = mdb_page_get(mc->mc_txn, NODEPGNO(node), &mp, NULL)) != 0) + if ((rc = mdb_page_get(mc, NODEPGNO(node), &mp, NULL)) != 0) return rc; mc->mc_ki[mc->mc_top] = 0; @@ -5402,7 +5573,7 @@ mdb_page_search(MDB_cursor *mc, MDB_val *key, int flags) return MDB_NOTFOUND; if ((leaf->mn_flags & (F_DUPDATA|F_SUBDATA)) != F_SUBDATA) return MDB_INCOMPATIBLE; /* not a named DB */ - rc = mdb_node_read(mc->mc_txn, leaf, &data); + rc = mdb_node_read(&mc2, leaf, &data); if (rc) return rc; memcpy(&flags, ((char *) data.mv_data + offsetof(MDB_db, md_flags)), @@ -5426,7 +5597,7 @@ mdb_page_search(MDB_cursor *mc, MDB_val *key, int flags) mdb_cassert(mc, root > 1); if (!mc->mc_pg[0] || mc->mc_pg[0]->mp_pgno != root) - if ((rc = mdb_page_get(mc->mc_txn, root, &mc->mc_pg[0], NULL)) != 0) + if ((rc = mdb_page_get(mc, root, &mc->mc_pg[0], NULL)) != 0) return rc; mc->mc_snum = 1; @@ -5523,13 +5694,13 @@ release: } /** Return the data associated with a given node. - * @param[in] txn The transaction for this operation. + * @param[in] mc The cursor for this operation. * @param[in] leaf The node being read. * @param[out] data Updated to point to the node's data. * @return 0 on success, non-zero on failure. */ static int -mdb_node_read(MDB_txn *txn, MDB_node *leaf, MDB_val *data) +mdb_node_read(MDB_cursor *mc, MDB_node *leaf, MDB_val *data) { MDB_page *omp; /* overflow page */ pgno_t pgno; @@ -5545,7 +5716,7 @@ mdb_node_read(MDB_txn *txn, MDB_node *leaf, MDB_val *data) */ data->mv_size = NODEDSZ(leaf); memcpy(&pgno, NODEDATA(leaf), sizeof(pgno)); - if ((rc = mdb_page_get(txn, pgno, &omp, NULL)) != 0) { + if ((rc = mdb_page_get(mc, pgno, &omp, NULL)) != 0) { DPRINTF(("read overflow page %"Z"u failed", pgno)); return rc; } @@ -5619,7 +5790,7 @@ mdb_cursor_sibling(MDB_cursor *mc, int move_right) mdb_cassert(mc, IS_BRANCH(mc->mc_pg[mc->mc_top])); indx = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); - if ((rc = mdb_page_get(mc->mc_txn, NODEPGNO(indx), &mp, NULL)) != 0) { + if ((rc = mdb_page_get(mc, NODEPGNO(indx), &mp, NULL)) != 0) { /* mc will be inconsistent if caller does mc_snum++ as above */ mc->mc_flags &= ~(C_INITIALIZED|C_EOF); return rc; @@ -5640,11 +5811,12 @@ mdb_cursor_next(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) MDB_node *leaf; int rc; - if (mc->mc_flags & C_EOF) { + if ((mc->mc_flags & C_EOF) || + ((mc->mc_flags & C_DEL) && op == MDB_NEXT_DUP)) { return MDB_NOTFOUND; } - - mdb_cassert(mc, mc->mc_flags & C_INITIALIZED); + if (!(mc->mc_flags & C_INITIALIZED)) + return mdb_cursor_first(mc, key, data); mp = mc->mc_pg[mc->mc_top]; @@ -5701,7 +5873,7 @@ skip: mdb_xcursor_init1(mc, leaf); } if (data) { - if ((rc = mdb_node_read(mc->mc_txn, leaf, data)) != MDB_SUCCESS) + if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { @@ -5723,7 +5895,12 @@ mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) MDB_node *leaf; int rc; - mdb_cassert(mc, mc->mc_flags & C_INITIALIZED); + if (!(mc->mc_flags & C_INITIALIZED)) { + rc = mdb_cursor_last(mc, key, data); + if (rc) + return rc; + mc->mc_ki[mc->mc_top]++; + } mp = mc->mc_pg[mc->mc_top]; @@ -5779,7 +5956,7 @@ mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) mdb_xcursor_init1(mc, leaf); } if (data) { - if ((rc = mdb_node_read(mc->mc_txn, leaf, data)) != MDB_SUCCESS) + if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { @@ -5873,6 +6050,7 @@ mdb_cursor_set(MDB_cursor *mc, MDB_val *key, MDB_val *data, } } rc = 0; + mc->mc_flags &= ~C_EOF; goto set2; } } @@ -5961,7 +6139,7 @@ set1: } else if (op == MDB_GET_BOTH || op == MDB_GET_BOTH_RANGE) { MDB_val olddata; MDB_cmp_func *dcmp; - if ((rc = mdb_node_read(mc->mc_txn, leaf, &olddata)) != MDB_SUCCESS) + if ((rc = mdb_node_read(mc, leaf, &olddata)) != MDB_SUCCESS) return rc; dcmp = mc->mc_dbx->md_dcmp; #if UINT_MAX < SIZE_MAX @@ -5973,13 +6151,13 @@ set1: if (op == MDB_GET_BOTH || rc > 0) return MDB_NOTFOUND; rc = 0; - *data = olddata; } + *data = olddata; } else { if (mc->mc_xcursor) mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); - if ((rc = mdb_node_read(mc->mc_txn, leaf, data)) != MDB_SUCCESS) + if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } } @@ -6028,7 +6206,7 @@ mdb_cursor_first(MDB_cursor *mc, MDB_val *key, MDB_val *data) if (rc) return rc; } else { - if ((rc = mdb_node_read(mc->mc_txn, leaf, data)) != MDB_SUCCESS) + if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } } @@ -6073,7 +6251,7 @@ mdb_cursor_last(MDB_cursor *mc, MDB_val *key, MDB_val *data) if (rc) return rc; } else { - if ((rc = mdb_node_read(mc->mc_txn, leaf, data)) != MDB_SUCCESS) + if ((rc = mdb_node_read(mc, leaf, data)) != MDB_SUCCESS) return rc; } } @@ -6119,7 +6297,7 @@ mdb_cursor_get(MDB_cursor *mc, MDB_val *key, MDB_val *data, if (F_ISSET(leaf->mn_flags, F_DUPDATA)) { rc = mdb_cursor_get(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_GET_CURRENT); } else { - rc = mdb_node_read(mc->mc_txn, leaf, data); + rc = mdb_node_read(mc, leaf, data); } } } @@ -6169,10 +6347,7 @@ mdb_cursor_get(MDB_cursor *mc, MDB_val *key, MDB_val *data, rc = MDB_INCOMPATIBLE; break; } - if (!(mc->mc_flags & C_INITIALIZED)) - rc = mdb_cursor_first(mc, key, data); - else - rc = mdb_cursor_next(mc, key, data, MDB_NEXT_DUP); + rc = mdb_cursor_next(mc, key, data, MDB_NEXT_DUP); if (rc == MDB_SUCCESS) { if (mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) { MDB_cursor *mx; @@ -6187,24 +6362,38 @@ fetchm: } } break; + case MDB_PREV_MULTIPLE: + if (data == NULL) { + rc = EINVAL; + break; + } + if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) { + rc = MDB_INCOMPATIBLE; + break; + } + if (!(mc->mc_flags & C_INITIALIZED)) + rc = mdb_cursor_last(mc, key, data); + else + rc = MDB_SUCCESS; + if (rc == MDB_SUCCESS) { + MDB_cursor *mx = &mc->mc_xcursor->mx_cursor; + if (mx->mc_flags & C_INITIALIZED) { + rc = mdb_cursor_sibling(mx, 0); + if (rc == MDB_SUCCESS) + goto fetchm; + } else { + rc = MDB_NOTFOUND; + } + } + break; case MDB_NEXT: case MDB_NEXT_DUP: case MDB_NEXT_NODUP: - if (!(mc->mc_flags & C_INITIALIZED)) - rc = mdb_cursor_first(mc, key, data); - else - rc = mdb_cursor_next(mc, key, data, op); + rc = mdb_cursor_next(mc, key, data, op); break; case MDB_PREV: case MDB_PREV_DUP: case MDB_PREV_NODUP: - if (!(mc->mc_flags & C_INITIALIZED)) { - rc = mdb_cursor_last(mc, key, data); - if (rc) - break; - mc->mc_flags |= C_INITIALIZED; - mc->mc_ki[mc->mc_top]++; - } rc = mdb_cursor_prev(mc, key, data, op); break; case MDB_FIRST: @@ -6225,7 +6414,7 @@ fetchm: MDB_node *leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]); if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) { MDB_GET_KEY(leaf, key); - rc = mdb_node_read(mc->mc_txn, leaf, data); + rc = mdb_node_read(mc, leaf, data); break; } } @@ -6262,7 +6451,8 @@ mdb_cursor_touch(MDB_cursor *mc) { int rc = MDB_SUCCESS; - if (mc->mc_dbi >= CORE_DBS && !(*mc->mc_dbflag & DB_DIRTY)) { + if (mc->mc_dbi >= CORE_DBS && !(*mc->mc_dbflag & (DB_DIRTY|DB_DUPDATA))) { + /* Touch DB record of named DB */ MDB_cursor mc2; MDB_xcursor mcx; if (TXN_DBI_CHANGED(mc->mc_txn, mc->mc_dbi)) @@ -6609,7 +6799,7 @@ current: int level, ovpages, dpages = OVPAGES(data->mv_size, env->me_psize); memcpy(&pg, olddata.mv_data, sizeof(pg)); - if ((rc2 = mdb_page_get(mc->mc_txn, pg, &omp, &level)) != 0) + if ((rc2 = mdb_page_get(mc, pg, &omp, &level)) != 0) return rc2; ovpages = omp->mp_pages; @@ -6641,8 +6831,13 @@ current: /* Note - this page is already counted in parent's dirty_room */ rc2 = mdb_mid2l_insert(mc->mc_txn->mt_u.dirty_list, &id2); mdb_cassert(mc, rc2 == 0); + /* Currently we make the page look as with put() in the + * parent txn, in case the user peeks at MDB_RESERVEd + * or unused parts. Some users treat ovpages specially. + */ if (!(flags & MDB_RESERVE)) { - /* Copy end of page, adjusting alignment so + /* Skip the part where LMDB will put *data. + * Copy end of page, adjusting alignment so * compiler may copy words instead of bytes. */ off = (PAGEHDRSZ + data->mv_size) & -sizeof(size_t); @@ -6711,11 +6906,8 @@ new_sub: if (m3->mc_ki[i] >= mc->mc_ki[i] && insert_key) { m3->mc_ki[i]++; } - if (m3->mc_xcursor && (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) { - MDB_node *n2 = NODEPTR(mp, m3->mc_ki[i]); - if ((n2->mn_flags & (F_SUBDATA|F_DUPDATA)) == F_DUPDATA) - m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(n2); - } + if (XCURSOR_INITED(m3)) + XCURSOR_REFRESH(m3, mp, m3->mc_ki[i]); } } } @@ -6766,9 +6958,7 @@ put_sub: if (m2->mc_ki[i] == mc->mc_ki[i]) { mdb_xcursor_init2(m2, mx, new_dupdata); } else if (!insert_key && m2->mc_ki[i] < nkeys) { - MDB_node *n2 = NODEPTR(mp, m2->mc_ki[i]); - if ((n2->mn_flags & (F_SUBDATA|F_DUPDATA)) == F_DUPDATA) - m2->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(n2); + XCURSOR_REFRESH(m2, mp, m2->mc_ki[i]); } } } @@ -6873,13 +7063,12 @@ mdb_cursor_del(MDB_cursor *mc, unsigned int flags) if (m2 == mc || m2->mc_snum < mc->mc_snum) continue; if (!(m2->mc_flags & C_INITIALIZED)) continue; if (m2->mc_pg[mc->mc_top] == mp) { - if (m2->mc_ki[mc->mc_top] == mc->mc_ki[mc->mc_top]) { - m2->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(leaf); - } else { - MDB_node *n2 = NODEPTR(mp, m2->mc_ki[mc->mc_top]); - if (!(n2->mn_flags & F_SUBDATA)) - m2->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(n2); + MDB_node *n2 = leaf; + if (m2->mc_ki[mc->mc_top] != mc->mc_ki[mc->mc_top]) { + n2 = NODEPTR(mp, m2->mc_ki[mc->mc_top]); + if (n2->mn_flags & F_SUBDATA) continue; } + m2->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(n2); } } } @@ -6910,7 +7099,7 @@ mdb_cursor_del(MDB_cursor *mc, unsigned int flags) pgno_t pg; memcpy(&pg, NODEDATA(leaf), sizeof(pg)); - if ((rc = mdb_page_get(mc->mc_txn, pg, &omp, NULL)) || + if ((rc = mdb_page_get(mc, pg, &omp, NULL)) || (rc = mdb_ovpage_free(mc, omp))) goto fail; } @@ -6924,6 +7113,7 @@ fail: } /** Allocate and initialize new pages for a database. + * Set #MDB_TXN_ERROR on failure. * @param[in] mc a cursor on the database being added to. * @param[in] flags flags defining what type of page is being allocated. * @param[in] num the number of pages to allocate. This is usually 1, @@ -7009,6 +7199,7 @@ mdb_branch_size(MDB_env *env, MDB_val *key) } /** Add a node to the page pointed to by the cursor. + * Set #MDB_TXN_ERROR on failure. * @param[in] mc The cursor for this operation. * @param[in] indx The index on the page where the new node should be added. * @param[in] key The key for the new node. @@ -7318,7 +7509,7 @@ mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node) } DPRINTF(("Sub-db -%u root page %"Z"u", mx->mx_cursor.mc_dbi, mx->mx_db.md_root)); - mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DIRTY; /* DB_DIRTY guides mdb_cursor_touch */ + mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA; #if UINT_MAX < SIZE_MAX if (mx->mx_dbx.md_cmp == mdb_cmp_int && mx->mx_db.md_pad == sizeof(size_t)) mx->mx_dbx.md_cmp = mdb_cmp_clong; @@ -7344,7 +7535,7 @@ mdb_xcursor_init2(MDB_cursor *mc, MDB_xcursor *src_mx, int new_dupdata) mx->mx_cursor.mc_top = 0; mx->mx_cursor.mc_flags |= C_INITIALIZED; mx->mx_cursor.mc_ki[0] = 0; - mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DIRTY; /* DB_DIRTY guides mdb_cursor_touch */ + mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA; #if UINT_MAX < SIZE_MAX mx->mx_dbx.md_cmp = src_mx->mx_dbx.md_cmp; #endif @@ -7497,6 +7688,7 @@ mdb_cursor_dbi(MDB_cursor *mc) } /** Replace the key for a branch node with a new key. + * Set #MDB_TXN_ERROR on failure. * @param[in] mc Cursor pointing to the node to operate on. * @param[in] key The new key to use. * @return 0 on success, non-zero on failure. @@ -7716,12 +7908,8 @@ mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst, int fromleft) m3->mc_ki[csrc->mc_top] = cdst->mc_ki[cdst->mc_top]; m3->mc_ki[csrc->mc_top-1]++; } - if (m3->mc_xcursor && (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) && - IS_LEAF(mps)) { - MDB_node *node = NODEPTR(m3->mc_pg[csrc->mc_top], m3->mc_ki[csrc->mc_top]); - if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) - m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); - } + if (XCURSOR_INITED(m3) && IS_LEAF(mps)) + XCURSOR_REFRESH(m3, m3->mc_pg[csrc->mc_top], m3->mc_ki[csrc->mc_top]); } } else /* Adding on the right, bump others down */ @@ -7742,12 +7930,8 @@ mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst, int fromleft) } else { m3->mc_ki[csrc->mc_top]--; } - if (m3->mc_xcursor && (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) && - IS_LEAF(mps)) { - MDB_node *node = NODEPTR(m3->mc_pg[csrc->mc_top], m3->mc_ki[csrc->mc_top]); - if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) - m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); - } + if (XCURSOR_INITED(m3) && IS_LEAF(mps)) + XCURSOR_REFRESH(m3, m3->mc_pg[csrc->mc_top], m3->mc_ki[csrc->mc_top]); } } } @@ -7948,12 +8132,8 @@ mdb_page_merge(MDB_cursor *csrc, MDB_cursor *cdst) m3->mc_ki[top-1] > csrc->mc_ki[top-1]) { m3->mc_ki[top-1]--; } - if (m3->mc_xcursor && (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) && - IS_LEAF(psrc)) { - MDB_node *node = NODEPTR(m3->mc_pg[top], m3->mc_ki[top]); - if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) - m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); - } + if (XCURSOR_INITED(m3) && IS_LEAF(psrc)) + XCURSOR_REFRESH(m3, m3->mc_pg[top], m3->mc_ki[top]); } } { @@ -8069,7 +8249,7 @@ mdb_rebalance(MDB_cursor *mc) if (rc) return rc; mc->mc_db->md_root = NODEPGNO(NODEPTR(mp, 0)); - rc = mdb_page_get(mc->mc_txn,mc->mc_db->md_root,&mc->mc_pg[0],NULL); + rc = mdb_page_get(mc, mc->mc_db->md_root, &mc->mc_pg[0], NULL); if (rc) return rc; mc->mc_db->md_depth--; @@ -8130,7 +8310,7 @@ mdb_rebalance(MDB_cursor *mc) DPUTS("reading right neighbor"); mn.mc_ki[ptop]++; node = NODEPTR(mc->mc_pg[ptop], mn.mc_ki[ptop]); - rc = mdb_page_get(mc->mc_txn,NODEPGNO(node),&mn.mc_pg[mn.mc_top],NULL); + rc = mdb_page_get(mc, NODEPGNO(node), &mn.mc_pg[mn.mc_top], NULL); if (rc) return rc; mn.mc_ki[mn.mc_top] = 0; @@ -8142,7 +8322,7 @@ mdb_rebalance(MDB_cursor *mc) DPUTS("reading left neighbor"); mn.mc_ki[ptop]--; node = NODEPTR(mc->mc_pg[ptop], mn.mc_ki[ptop]); - rc = mdb_page_get(mc->mc_txn,NODEPGNO(node),&mn.mc_pg[mn.mc_top],NULL); + rc = mdb_page_get(mc, NODEPGNO(node), &mn.mc_pg[mn.mc_top], NULL); if (rc) return rc; mn.mc_ki[mn.mc_top] = NUMKEYS(mn.mc_pg[mn.mc_top]) - 1; @@ -8207,16 +8387,16 @@ mdb_cursor_del0(MDB_cursor *mc) if (m3->mc_pg[mc->mc_top] == mp) { if (m3->mc_ki[mc->mc_top] == ki) { m3->mc_flags |= C_DEL; - if (mc->mc_db->md_flags & MDB_DUPSORT) - m3->mc_xcursor->mx_cursor.mc_flags &= ~C_INITIALIZED; + if (mc->mc_db->md_flags & MDB_DUPSORT) { + /* Sub-cursor referred into dataset which is gone */ + m3->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); + } + continue; } else if (m3->mc_ki[mc->mc_top] > ki) { m3->mc_ki[mc->mc_top]--; } - if (m3->mc_xcursor && (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) { - MDB_node *node = NODEPTR(m3->mc_pg[mc->mc_top], m3->mc_ki[mc->mc_top]); - if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) - m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); - } + if (XCURSOR_INITED(m3)) + XCURSOR_REFRESH(m3, m3->mc_pg[mc->mc_top], m3->mc_ki[mc->mc_top]); } } } @@ -8242,11 +8422,27 @@ mdb_cursor_del0(MDB_cursor *mc) continue; if (m3->mc_pg[mc->mc_top] == mp) { /* if m3 points past last node in page, find next sibling */ - if (m3->mc_ki[mc->mc_top] >= nkeys) { - rc = mdb_cursor_sibling(m3, 1); - if (rc == MDB_NOTFOUND) { - m3->mc_flags |= C_EOF; - rc = MDB_SUCCESS; + if (m3->mc_ki[mc->mc_top] >= mc->mc_ki[mc->mc_top]) { + if (m3->mc_ki[mc->mc_top] >= nkeys) { + rc = mdb_cursor_sibling(m3, 1); + if (rc == MDB_NOTFOUND) { + m3->mc_flags |= C_EOF; + rc = MDB_SUCCESS; + continue; + } + } + if (mc->mc_db->md_flags & MDB_DUPSORT) { + MDB_node *node = NODEPTR(m3->mc_pg[m3->mc_top], m3->mc_ki[m3->mc_top]); + /* If this node is a fake page, it needs to be reinited + * because its data has moved. But just reset mc_pg[0] + * if the xcursor is already live. + */ + if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) { + if (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) + m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); + else + mdb_xcursor_init1(m3, node); + } } } } @@ -8321,6 +8517,7 @@ mdb_del0(MDB_txn *txn, MDB_dbi dbi, } /** Split a page and insert a new node. + * Set #MDB_TXN_ERROR on failure. * @param[in,out] mc Cursor pointing to the page and desired insertion index. * The cursor will be updated to point to the actual page and index where * the node got inserted after the split. @@ -8730,12 +8927,8 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno m3->mc_ki[ptop] >= mc->mc_ki[ptop]) { m3->mc_ki[ptop]++; } - if (m3->mc_xcursor && (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) && - IS_LEAF(mp)) { - MDB_node *node = NODEPTR(m3->mc_pg[mc->mc_top], m3->mc_ki[mc->mc_top]); - if ((node->mn_flags & (F_DUPDATA|F_SUBDATA)) == F_DUPDATA) - m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node); - } + if (XCURSOR_INITED(m3) && IS_LEAF(mp)) + XCURSOR_REFRESH(m3, m3->mc_pg[mc->mc_top], m3->mc_ki[mc->mc_top]); } } DPRINTF(("mp left: %d, rp left: %d", SIZELEFT(mp), SIZELEFT(rp))); @@ -8776,23 +8969,26 @@ mdb_put(MDB_txn *txn, MDB_dbi dbi, #ifndef MDB_WBUF #define MDB_WBUF (1024*1024) #endif +#define MDB_EOF 0x10 /**< #mdb_env_copyfd1() is done reading */ - /** State needed for a compacting copy. */ + /** State needed for a double-buffering compacting copy. */ typedef struct mdb_copy { + MDB_env *mc_env; + MDB_txn *mc_txn; pthread_mutex_t mc_mutex; - pthread_cond_t mc_cond; + pthread_cond_t mc_cond; /**< Condition variable for #mc_new */ char *mc_wbuf[2]; char *mc_over[2]; - MDB_env *mc_env; - MDB_txn *mc_txn; int mc_wlen[2]; int mc_olen[2]; pgno_t mc_next_pgno; HANDLE mc_fd; - int mc_status; - volatile int mc_new; - int mc_toggle; - + int mc_toggle; /**< Buffer number in provider */ + int mc_new; /**< (0-2 buffers to write) | (#MDB_EOF at end) */ + /** Error code. Never cleared if set. Both threads can set nonzero + * to fail the copy. Not mutex-protected, LMDB expects atomic int. + */ + volatile int mc_error; } mdb_copy; /** Dedicated writer thread for compacting copy. */ @@ -8808,26 +9004,38 @@ mdb_env_copythr(void *arg) #else int len; #define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) +#ifdef SIGPIPE + sigset_t set; + sigemptyset(&set); + sigaddset(&set, SIGPIPE); + if ((rc = pthread_sigmask(SIG_BLOCK, &set, NULL)) != 0) + my->mc_error = rc; +#endif #endif pthread_mutex_lock(&my->mc_mutex); - my->mc_new = 0; - pthread_cond_signal(&my->mc_cond); for(;;) { while (!my->mc_new) pthread_cond_wait(&my->mc_cond, &my->mc_mutex); - if (my->mc_new < 0) { - my->mc_new = 0; + if (my->mc_new == 0 + MDB_EOF) /* 0 buffers, just EOF */ break; - } - my->mc_new = 0; wsize = my->mc_wlen[toggle]; ptr = my->mc_wbuf[toggle]; again: - while (wsize > 0) { + rc = MDB_SUCCESS; + while (wsize > 0 && !my->mc_error) { DO_WRITE(rc, my->mc_fd, ptr, wsize, len); if (!rc) { rc = ErrCode(); +#if defined(SIGPIPE) && !defined(_WIN32) + if (rc == EPIPE) { + /* Collect the pending SIGPIPE, otherwise at least OS X + * gives it to the process on thread-exit (ITS#8504). + */ + int tmp; + sigwait(&set, &tmp); + } +#endif break; } else if (len > 0) { rc = MDB_SUCCESS; @@ -8840,8 +9048,7 @@ again: } } if (rc) { - my->mc_status = rc; - break; + my->mc_error = rc; } /* If there's an overflow page tail, write it too */ if (my->mc_olen[toggle]) { @@ -8852,39 +9059,45 @@ again: } my->mc_wlen[toggle] = 0; toggle ^= 1; + /* Return the empty buffer to provider */ + my->mc_new--; pthread_cond_signal(&my->mc_cond); } - pthread_cond_signal(&my->mc_cond); pthread_mutex_unlock(&my->mc_mutex); return (THREAD_RET)0; #undef DO_WRITE } - /** Tell the writer thread there's a buffer ready to write */ + /** Give buffer and/or #MDB_EOF to writer thread, await unused buffer. + * + * @param[in] my control structure. + * @param[in] adjust (1 to hand off 1 buffer) | (MDB_EOF when ending). + */ static int ESECT -mdb_env_cthr_toggle(mdb_copy *my, int st) +mdb_env_cthr_toggle(mdb_copy *my, int adjust) { - int toggle = my->mc_toggle ^ 1; pthread_mutex_lock(&my->mc_mutex); - if (my->mc_status) { - pthread_mutex_unlock(&my->mc_mutex); - return my->mc_status; - } - while (my->mc_new == 1) - pthread_cond_wait(&my->mc_cond, &my->mc_mutex); - my->mc_new = st; - my->mc_toggle = toggle; + my->mc_new += adjust; pthread_cond_signal(&my->mc_cond); + while (my->mc_new & 2) /* both buffers in use */ + pthread_cond_wait(&my->mc_cond, &my->mc_mutex); pthread_mutex_unlock(&my->mc_mutex); - return 0; + + my->mc_toggle ^= (adjust & 1); + /* Both threads reset mc_wlen, to be safe from threading errors */ + my->mc_wlen[my->mc_toggle] = 0; + return my->mc_error; } - /** Depth-first tree traversal for compacting copy. */ + /** Depth-first tree traversal for compacting copy. + * @param[in] my control structure. + * @param[in,out] pg database root. + * @param[in] flags includes #F_DUPDATA if it is a sorted-duplicate sub-DB. + */ static int ESECT mdb_env_cwalk(mdb_copy *my, pgno_t *pg, int flags) { - MDB_cursor mc; - MDB_txn *txn = my->mc_txn; + MDB_cursor mc = {0}; MDB_node *ni; MDB_page *mo, *mp, *leaf; char *buf, *ptr; @@ -8896,10 +9109,9 @@ mdb_env_cwalk(mdb_copy *my, pgno_t *pg, int flags) return MDB_SUCCESS; mc.mc_snum = 1; - mc.mc_top = 0; - mc.mc_txn = txn; + mc.mc_txn = my->mc_txn; - rc = mdb_page_get(my->mc_txn, *pg, &mc.mc_pg[0], NULL); + rc = mdb_page_get(&mc, *pg, &mc.mc_pg[0], NULL); if (rc) return rc; rc = mdb_page_search_root(&mc, NULL, MDB_PS_FIRST); @@ -8943,7 +9155,8 @@ mdb_env_cwalk(mdb_copy *my, pgno_t *pg, int flags) } memcpy(&pg, NODEDATA(ni), sizeof(pg)); - rc = mdb_page_get(txn, pg, &omp, NULL); + memcpy(NODEDATA(ni), &my->mc_next_pgno, sizeof(pgno_t)); + rc = mdb_page_get(&mc, pg, &omp, NULL); if (rc) goto done; if (my->mc_wlen[toggle] >= MDB_WBUF) { @@ -8965,7 +9178,6 @@ mdb_env_cwalk(mdb_copy *my, pgno_t *pg, int flags) goto done; toggle = my->mc_toggle; } - memcpy(NODEDATA(ni), &mo->mp_pgno, sizeof(pgno_t)); } else if (ni->mn_flags & F_SUBDATA) { MDB_db db; @@ -8994,7 +9206,7 @@ mdb_env_cwalk(mdb_copy *my, pgno_t *pg, int flags) again: ni = NODEPTR(mp, mc.mc_ki[mc.mc_top]); pg = NODEPGNO(ni); - rc = mdb_page_get(txn, pg, &mp, NULL); + rc = mdb_page_get(&mc, pg, &mp, NULL); if (rc) goto done; mc.mc_top++; @@ -9043,47 +9255,56 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd) { MDB_meta *mm; MDB_page *mp; - mdb_copy my; + mdb_copy my = {0}; MDB_txn *txn = NULL; pthread_t thr; - int rc; + pgno_t root, new_root; + int rc = MDB_SUCCESS; #ifdef _WIN32 - my.mc_mutex = CreateMutex(NULL, FALSE, NULL); - my.mc_cond = CreateEvent(NULL, FALSE, FALSE, NULL); + if (!(my.mc_mutex = CreateMutex(NULL, FALSE, NULL)) || + !(my.mc_cond = CreateEvent(NULL, FALSE, FALSE, NULL))) { + rc = ErrCode(); + goto done; + } my.mc_wbuf[0] = _aligned_malloc(MDB_WBUF*2, env->me_os_psize); - if (my.mc_wbuf[0] == NULL) - return errno; + if (my.mc_wbuf[0] == NULL) { + /* _aligned_malloc() sets errno, but we use Windows error codes */ + rc = ERROR_NOT_ENOUGH_MEMORY; + goto done; + } #else - pthread_mutex_init(&my.mc_mutex, NULL); - pthread_cond_init(&my.mc_cond, NULL); + if ((rc = pthread_mutex_init(&my.mc_mutex, NULL)) != 0) + return rc; + if ((rc = pthread_cond_init(&my.mc_cond, NULL)) != 0) + goto done2; #ifdef HAVE_MEMALIGN my.mc_wbuf[0] = memalign(env->me_os_psize, MDB_WBUF*2); - if (my.mc_wbuf[0] == NULL) - return errno; + if (my.mc_wbuf[0] == NULL) { + rc = errno; + goto done; + } #else - rc = posix_memalign((void **)&my.mc_wbuf[0], env->me_os_psize, MDB_WBUF*2); - if (rc) - return rc; + { + void *p; + if ((rc = posix_memalign(&p, env->me_os_psize, MDB_WBUF*2)) != 0) + goto done; + my.mc_wbuf[0] = p; + } #endif #endif memset(my.mc_wbuf[0], 0, MDB_WBUF*2); my.mc_wbuf[1] = my.mc_wbuf[0] + MDB_WBUF; - my.mc_wlen[0] = 0; - my.mc_wlen[1] = 0; - my.mc_olen[0] = 0; - my.mc_olen[1] = 0; my.mc_next_pgno = NUM_METAS; - my.mc_status = 0; - my.mc_new = 1; - my.mc_toggle = 0; my.mc_env = env; my.mc_fd = fd; - THREAD_CREATE(thr, mdb_env_copythr, &my); + rc = THREAD_CREATE(thr, mdb_env_copythr, &my); + if (rc) + goto done; rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); if (rc) - return rc; + goto finish; mp = (MDB_page *)my.mc_wbuf[0]; memset(mp, 0, NUM_METAS * env->me_psize); @@ -9099,57 +9320,64 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd) *(MDB_meta *)METADATA(mp) = *mm; mm = (MDB_meta *)METADATA(mp); - /* Count the number of free pages, subtract from lastpg to find - * number of active pages - */ - { + /* Set metapage 1 with current main DB */ + root = new_root = txn->mt_dbs[MAIN_DBI].md_root; + if (root != P_INVALID) { + /* Count free pages + freeDB pages. Subtract from last_pg + * to find the new last_pg, which also becomes the new root. + */ MDB_ID freecount = 0; MDB_cursor mc; MDB_val key, data; mdb_cursor_init(&mc, txn, FREE_DBI, NULL); while ((rc = mdb_cursor_get(&mc, &key, &data, MDB_NEXT)) == 0) freecount += *(MDB_ID *)data.mv_data; + if (rc != MDB_NOTFOUND) + goto finish; freecount += txn->mt_dbs[FREE_DBI].md_branch_pages + txn->mt_dbs[FREE_DBI].md_leaf_pages + txn->mt_dbs[FREE_DBI].md_overflow_pages; - /* Set metapage 1 */ - mm->mm_last_pg = txn->mt_next_pgno - freecount - 1; + new_root = txn->mt_next_pgno - 1 - freecount; + mm->mm_last_pg = new_root; mm->mm_dbs[MAIN_DBI] = txn->mt_dbs[MAIN_DBI]; - if (mm->mm_last_pg > NUM_METAS-1) { - mm->mm_dbs[MAIN_DBI].md_root = mm->mm_last_pg; - mm->mm_txnid = 1; - } else { - mm->mm_dbs[MAIN_DBI].md_root = P_INVALID; - } + mm->mm_dbs[MAIN_DBI].md_root = new_root; + } else { + /* When the DB is empty, handle it specially to + * fix any breakage like page leaks from ITS#8174. + */ + mm->mm_dbs[MAIN_DBI].md_flags = txn->mt_dbs[MAIN_DBI].md_flags; + } + if (root != P_INVALID || mm->mm_dbs[MAIN_DBI].md_flags) { + mm->mm_txnid = 1; /* use metapage 1 */ } + my.mc_wlen[0] = env->me_psize * NUM_METAS; my.mc_txn = txn; - pthread_mutex_lock(&my.mc_mutex); - while(my.mc_new) - pthread_cond_wait(&my.mc_cond, &my.mc_mutex); - pthread_mutex_unlock(&my.mc_mutex); - rc = mdb_env_cwalk(&my, &txn->mt_dbs[MAIN_DBI].md_root, 0); - if (rc == MDB_SUCCESS && my.mc_wlen[my.mc_toggle]) - rc = mdb_env_cthr_toggle(&my, 1); - mdb_env_cthr_toggle(&my, -1); - pthread_mutex_lock(&my.mc_mutex); - while(my.mc_new) - pthread_cond_wait(&my.mc_cond, &my.mc_mutex); - pthread_mutex_unlock(&my.mc_mutex); - THREAD_FINISH(thr); + rc = mdb_env_cwalk(&my, &root, 0); + if (rc == MDB_SUCCESS && root != new_root) { + rc = MDB_INCOMPATIBLE; /* page leak or corrupt DB */ + } +finish: + if (rc) + my.mc_error = rc; + mdb_env_cthr_toggle(&my, 1 | MDB_EOF); + rc = THREAD_FINISH(thr); mdb_txn_abort(txn); + +done: #ifdef _WIN32 - CloseHandle(my.mc_cond); - CloseHandle(my.mc_mutex); - _aligned_free(my.mc_wbuf[0]); + if (my.mc_wbuf[0]) _aligned_free(my.mc_wbuf[0]); + if (my.mc_cond) CloseHandle(my.mc_cond); + if (my.mc_mutex) CloseHandle(my.mc_mutex); #else + free(my.mc_wbuf[0]); pthread_cond_destroy(&my.mc_cond); +done2: pthread_mutex_destroy(&my.mc_mutex); - free(my.mc_wbuf[0]); #endif - return rc; + return rc ? rc : my.mc_error; } /** Copy environment as-is. */ @@ -9270,67 +9498,20 @@ mdb_env_copyfd(MDB_env *env, HANDLE fd) int ESECT mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags) { - int rc, len; - char *lpath; + int rc; + MDB_name fname; HANDLE newfd = INVALID_HANDLE_VALUE; -#ifdef _WIN32 - wchar_t *wpath; -#endif - if (env->me_flags & MDB_NOSUBDIR) { - lpath = (char *)path; - } else { - len = strlen(path); - len += sizeof(DATANAME); - lpath = malloc(len); - if (!lpath) - return ENOMEM; - sprintf(lpath, "%s" DATANAME, path); - } - - /* The destination path must exist, but the destination file must not. - * We don't want the OS to cache the writes, since the source data is - * already in the OS cache. - */ -#ifdef _WIN32 - rc = utf8_to_utf16(lpath, -1, &wpath, NULL); - if (rc) - goto leave; - newfd = CreateFileW(wpath, GENERIC_WRITE, 0, NULL, CREATE_NEW, - FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH, NULL); - free(wpath); -#else - newfd = open(lpath, O_WRONLY|O_CREAT|O_EXCL, 0666); -#endif - if (newfd == INVALID_HANDLE_VALUE) { - rc = ErrCode(); - goto leave; - } - - if (env->me_psize >= env->me_os_psize) { -#ifdef O_DIRECT - /* Set O_DIRECT if the file system supports it */ - if ((rc = fcntl(newfd, F_GETFL)) != -1) - (void) fcntl(newfd, F_SETFL, rc | O_DIRECT); -#endif -#ifdef F_NOCACHE /* __APPLE__ */ - rc = fcntl(newfd, F_NOCACHE, 1); - if (rc) { - rc = ErrCode(); - goto leave; - } -#endif + rc = mdb_fname_init(path, env->me_flags | MDB_NOLOCK, &fname); + if (rc == MDB_SUCCESS) { + rc = mdb_fopen(env, &fname, MDB_O_COPY, 0666, &newfd); + mdb_fname_destroy(fname); } - - rc = mdb_env_copyfd2(env, newfd, flags); - -leave: - if (!(env->me_flags & MDB_NOSUBDIR)) - free(lpath); - if (newfd != INVALID_HANDLE_VALUE) + if (rc == MDB_SUCCESS) { + rc = mdb_env_copyfd2(env, newfd, flags); if (close(newfd) < 0 && rc == MDB_SUCCESS) rc = ErrCode(); - + } return rc; } @@ -9567,7 +9748,8 @@ int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *db memset(&dummy, 0, sizeof(dummy)); dummy.md_root = P_INVALID; dummy.md_flags = flags & PERSISTENT_FLAGS; - rc = mdb_cursor_put(&mc, &key, &data, F_SUBDATA); + WITH_CURSOR_TRACKING(mc, + rc = mdb_cursor_put(&mc, &key, &data, F_SUBDATA)); dbflag |= DB_DIRTY; } @@ -9659,8 +9841,11 @@ mdb_drop0(MDB_cursor *mc, int subs) /* DUPSORT sub-DBs have no ovpages/DBs. Omit scanning leaves. * This also avoids any P_LEAF2 pages, which have no nodes. + * Also if the DB doesn't have sub-DBs and has no overflow + * pages, omit scanning leaves. */ - if (mc->mc_flags & C_SUB) + if ((mc->mc_flags & C_SUB) || + (!subs && !mc->mc_db->md_overflow_pages)) mdb_cursor_pop(mc); mdb_cursor_copy(mc, &mx); @@ -9674,7 +9859,7 @@ mdb_drop0(MDB_cursor *mc, int subs) MDB_page *omp; pgno_t pg; memcpy(&pg, NODEDATA(ni), sizeof(pg)); - rc = mdb_page_get(txn, pg, &omp, NULL); + rc = mdb_page_get(mc, pg, &omp, NULL); if (rc != 0) goto done; mdb_cassert(mc, IS_OVERFLOW(omp)); @@ -9682,6 +9867,9 @@ mdb_drop0(MDB_cursor *mc, int subs) pg, omp->mp_pages); if (rc) goto done; + mc->mc_db->md_overflow_pages -= omp->mp_pages; + if (!mc->mc_db->md_overflow_pages && !subs) + break; } else if (subs && (ni->mn_flags & F_SUBDATA)) { mdb_xcursor_init1(mc, ni); rc = mdb_drop0(&mc->mc_xcursor->mx_cursor, 0); @@ -9689,6 +9877,8 @@ mdb_drop0(MDB_cursor *mc, int subs) goto done; } } + if (!subs && !mc->mc_db->md_overflow_pages) + goto pop; } else { if ((rc = mdb_midl_need(&txn->mt_free_pgs, n)) != 0) goto done; @@ -9710,6 +9900,7 @@ mdb_drop0(MDB_cursor *mc, int subs) /* no more siblings, go back to beginning * of previous level. */ +pop: mdb_cursor_pop(mc); mc->mc_ki[0] = 0; for (i=1; i<mc->mc_snum; i++) { @@ -9911,7 +10102,7 @@ mdb_reader_check(MDB_env *env, int *dead) return env->me_txns ? mdb_reader_check0(env, 0, dead) : MDB_SUCCESS; } -/** As #mdb_reader_check(). rlocked = <caller locked the reader mutex>. */ +/** As #mdb_reader_check(). \b rlocked is set if caller locked #me_rmutex. */ static int ESECT mdb_reader_check0(MDB_env *env, int rlocked, int *dead) { @@ -10014,25 +10205,32 @@ mdb_mutex_failed(MDB_env *env, mdb_mutexref_t mutex, int rc) return rc; } #endif /* MDB_ROBUST_SUPPORTED */ -/** @} */ #if defined(_WIN32) -static int utf8_to_utf16(const char *src, int srcsize, wchar_t **dst, int *dstsize) -{ - int need; - wchar_t *result; - need = MultiByteToWideChar(CP_UTF8, 0, src, srcsize, NULL, 0); - if (need == 0xFFFD) - return EILSEQ; - if (need == 0) - return EINVAL; - result = malloc(sizeof(wchar_t) * need); - if (!result) - return ENOMEM; - MultiByteToWideChar(CP_UTF8, 0, src, srcsize, result, need); - if (dstsize) - *dstsize = need; - *dst = result; - return 0; +/** Convert \b src to new wchar_t[] string with room for \b xtra extra chars */ +static int ESECT +utf8_to_utf16(const char *src, MDB_name *dst, int xtra) +{ + int rc, need = 0; + wchar_t *result = NULL; + for (;;) { /* malloc result, then fill it in */ + need = MultiByteToWideChar(CP_UTF8, 0, src, -1, result, need); + if (!need) { + rc = ErrCode(); + free(result); + return rc; + } + if (!result) { + result = malloc(sizeof(wchar_t) * (need + xtra)); + if (!result) + return ENOMEM; + continue; + } + dst->mn_alloced = 1; + dst->mn_len = need - 1; + dst->mn_val = result; + return MDB_SUCCESS; + } } #endif /* defined(_WIN32) */ +/** @} */ diff --git a/src/contrib/qp-trie/qp.c b/src/contrib/qp-trie/qp.c new file mode 100644 index 0000000000000000000000000000000000000000..6f9b9dbb32812f136b066e76da51bbd28c53bbcb --- /dev/null +++ b/src/contrib/qp-trie/qp.c @@ -0,0 +1,833 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + The code originated from https://github.com/fanf2/qp/blob/master/qp.c + at revision 5f6d93753. + */ + +#include <assert.h> +#include <stdlib.h> +#include <string.h> + +#include "contrib/qp-trie/qp.h" +#include "contrib/macros.h" +#include "contrib/mempattern.h" +#include "libknot/errcode.h" + +#if defined(__i386) || defined(__x86_64) || defined(_M_IX86) \ + || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN) \ + && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) + + /*! + * \brief Use a pointer alignment hack to save memory. + * + * When on, isbranch() relies on the fact that in leaf_t the first pointer + * is aligned on multiple of 4 bytes and that the flags bitfield is + * overlaid over the lowest two bits of that pointer. + * Neither is really guaranteed by the C standards; the second part should + * be OK with x86_64 ABI and most likely any other little-endian platform. + * It would be possible to manipulate the right bits portably, but it would + * complicate the code nontrivially. C++ doesn't even guarantee type-punning. + * In debug mode we check this works OK when creating a new trie instance. + */ + #define FLAGS_HACK 1 +#else + #define FLAGS_HACK 0 +#endif + +typedef unsigned char byte; +typedef unsigned int uint; +typedef uint bitmap_t; /*! Bit-maps, using the range of 1<<0 to 1<<16 (inclusive). */ + +typedef struct { + uint32_t len; // 32 bits are enough for key lengths; probably even 16 bits would be. + char chars[]; +} tkey_t; + +/*! \brief Leaf of trie. */ +typedef struct { + #if !FLAGS_HACK + byte flags; + #endif + tkey_t *key; /*!< The pointer must be aligned to 4-byte multiples! */ + trie_val_t val; +} leaf_t; + +/*! \brief A trie node is either leaf_t or branch_t. */ +typedef union node node_t; + +/*! + * \brief Branch node of trie. + * + * - The flags distinguish whether the node is a leaf_t (0), or a branch + * testing the more-important nibble (1) or the less-important one (2). + * - It stores the index of the byte that the node tests. The combined + * value (index*4 + flags) increases in branch nodes as you go deeper + * into the trie. All the keys below a branch are identical up to the + * nibble identified by the branch. Indices have to be stored because + * we skip any branch nodes that would have a single child. + * (Consequently, the skipped parts of key have to be validated in a leaf.) + * - The bitmap indicates which subtries are present. The present child nodes + * are stored in the twigs array (with no holes between them). + * - To simplify storing keys that are prefixes of each other, the end-of-string + * position is treated as another nibble value, ordered before all others. + * That affects the bitmap and twigs fields. + * + * \note The branch nodes are never allocated individually, but they are + * always part of either the root node or the twigs array of the parent. + */ +typedef struct { + #if FLAGS_HACK + uint32_t flags : 2, + bitmap : 17; /*!< The first bitmap bit is for end-of-string child. */ + #else + byte flags; + uint32_t bitmap; + #endif + uint32_t index; + node_t *twigs; +} branch_t; + +union node { + leaf_t leaf; + branch_t branch; +}; + +struct trie { + node_t root; // undefined when weight == 0, see empty_root() + size_t weight; + knot_mm_t mm; +}; + +/*! \brief Make the root node empty (debug-only). */ +static inline void empty_root(node_t *root) { +#ifndef NDEBUG + *root = (node_t){ .branch = { + .flags = 3, // invalid value that fits + .bitmap = 0, + .index = -1, + .twigs = NULL + } }; +#endif +} + +/*! \brief Check that unportable code works OK (debug-only). */ +static void assert_portability(void) { +#if FLAGS_HACK + assert(((union node){ .leaf = { + .key = ((void *)NULL) + 1, + .val = NULL + } }).branch.flags == 1); +#endif +} + +/*! \brief Propagate error codes. */ +#define ERR_RETURN(x) \ + do { \ + int err_code_ = x; \ + if (unlikely(err_code_ != KNOT_EOK)) \ + return err_code_; \ + } while (false) + +/*! + * \brief Count the number of set bits. + * + * \TODO This implementation may be relatively slow on some HW. + */ +static uint bitmap_weight(bitmap_t w) +{ + assert((w & ~((1 << 17) - 1)) == 0); // using the least-important 17 bits + return __builtin_popcount(w); +} + +/*! \brief Test flags to determine type of this node. */ +static bool isbranch(const node_t *t) +{ + uint f = t->branch.flags; + assert(f <= 2); + return f != 0; +} + +/*! \brief Make a bitmask for testing a branch bitmap. */ +static bitmap_t nibbit(byte k, uint flags) +{ + uint shift = (2 - flags) << 2; + uint nibble = (k >> shift) & 0xf; + return 1 << (nibble + 1/*because of prefix keys*/); +} + +/*! \brief Extract a nibble from a key and turn it into a bitmask. */ +static bitmap_t twigbit(node_t *t, const char *key, uint32_t len) +{ + assert(isbranch(t)); + uint i = t->branch.index; + + if (i >= len) + return 1 << 0; // leaf position + + return nibbit((byte)key[i], t->branch.flags); +} + +/*! \brief Test if a branch node has a child indicated by a bitmask. */ +static bool hastwig(node_t *t, bitmap_t bit) +{ + assert(isbranch(t)); + return t->branch.bitmap & bit; +} + +/*! \brief Compute offset of an existing child in a branch node. */ +static uint twigoff(node_t *t, bitmap_t b) +{ + assert(isbranch(t)); + return bitmap_weight(t->branch.bitmap & (b - 1)); +} + +/*! \brief Get pointer to a particular child of a branch node. */ +static node_t* twig(node_t *t, uint i) +{ + assert(isbranch(t)); + return &t->branch.twigs[i]; +} + +/*! + * \brief For a branch nod, compute offset of a child and child count. + * + * Having this separate might be meaningful for performance optimization. + */ +#define TWIGOFFMAX(off, max, t, b) do { \ + off = twigoff(t, b); \ + max = bitmap_weight(t->branch.bitmap); \ + } while(0) + +/*! \brief Simple string comparator. */ +static int key_cmp(const char *k1, uint32_t k1_len, const char *k2, uint32_t k2_len) +{ + int ret = memcmp(k1, k2, MIN(k1_len, k2_len)); + if (ret != 0) { + return ret; + } + + /* Key string is equal, compare lengths. */ + if (k1_len == k2_len) { + return 0; + } else if (k1_len < k2_len) { + return -1; + } else { + return 1; + } +} + +trie_t* trie_create(knot_mm_t *mm) +{ + assert_portability(); + trie_t *trie = mm_alloc(mm, sizeof(trie_t)); + if (trie != NULL) { + empty_root(&trie->root); + trie->weight = 0; + if (mm != NULL) + trie->mm = *mm; + else + mm_ctx_init(&trie->mm); + } + return trie; +} + +/*! \brief Free anything under the trie node, except for the passed pointer itself. */ +static void clear_trie(node_t *trie, knot_mm_t *mm) +{ + if (!isbranch(trie)) { + mm_free(mm, trie->leaf.key); + } else { + branch_t *b = &trie->branch; + int len = bitmap_weight(b->bitmap); + for (int i = 0; i < len; ++i) + clear_trie(b->twigs + i, mm); + mm_free(mm, b->twigs); + } +} + +void trie_free(trie_t *tbl) +{ + if (tbl == NULL) + return; + if (tbl->weight) + clear_trie(&tbl->root, &tbl->mm); + mm_free(&tbl->mm, tbl); +} + +void trie_clear(trie_t *tbl) +{ + assert(tbl); + if (!tbl->weight) + return; + clear_trie(&tbl->root, &tbl->mm); + empty_root(&tbl->root); + tbl->weight = 0; +} + +size_t trie_weight(const trie_t *tbl) +{ + assert(tbl); + return tbl->weight; +} + +trie_val_t* trie_get_try(trie_t *tbl, const char *key, uint32_t len) +{ + assert(tbl); + if (!tbl->weight) + return NULL; + node_t *t = &tbl->root; + while (isbranch(t)) { + __builtin_prefetch(t->branch.twigs); + bitmap_t b = twigbit(t, key, len); + if (!hastwig(t, b)) + return NULL; + t = twig(t, twigoff(t, b)); + } + if (key_cmp(key, len, t->leaf.key->chars, t->leaf.key->len) != 0) + return NULL; + return &t->leaf.val; +} + +int trie_del(trie_t *tbl, const char *key, uint32_t len, trie_val_t *val) +{ + assert(tbl); + if (!tbl->weight) + return KNOT_ENOENT; + node_t *t = &tbl->root; // current and parent node + branch_t *p = NULL; + bitmap_t b = 0; + while (isbranch(t)) { + __builtin_prefetch(t->branch.twigs); + b = twigbit(t, key, len); + if (!hastwig(t, b)) + return KNOT_ENOENT; + p = &t->branch; + t = twig(t, twigoff(t, b)); + } + if (key_cmp(key, len, t->leaf.key->chars, t->leaf.key->len) != 0) + return KNOT_ENOENT; + mm_free(&tbl->mm, t->leaf.key); + if (val != NULL) + *val = t->leaf.val; // we return trie_val_t directly when deleting + --tbl->weight; + if (unlikely(!p)) { // whole trie was a single leaf + assert(tbl->weight == 0); + empty_root(&tbl->root); + return KNOT_EOK; + } + // remove leaf t as child of p + int ci = t - p->twigs, // child index via pointer arithmetic + cc = bitmap_weight(p->bitmap); // child count + assert(ci >= 0 && ci < cc); + + if (cc == 2) { // collapse binary node p: move the other child to this node + node_t *twigs = p->twigs; + (*(node_t *)p) = twigs[1 - ci]; // it might be a leaf or branch + mm_free(&tbl->mm, twigs); + return KNOT_EOK; + } + memmove(p->twigs + ci, p->twigs + ci + 1, sizeof(node_t) * (cc - ci - 1)); + p->bitmap &= ~b; + node_t *twigs = mm_realloc(&tbl->mm, p->twigs, sizeof(node_t) * (cc - 1), + sizeof(node_t) * cc); + if (likely(twigs != NULL)) + p->twigs = twigs; + /* We can ignore mm_realloc failure, only beware that next time + * the prev_size passed to it wouldn't be correct; TODO? */ + return KNOT_EOK; +} + +/*! + * \brief Stack of nodes, storing a path down a trie. + * + * The structure also serves directly as the public trie_it_t type, + * in which case it always points to the current leaf, unless we've finished + * (i.e. it->len == 0). + */ +typedef struct trie_it { + node_t* *stack; /*!< The stack; malloc is used directly instead of mm. */ + uint32_t len; /*!< Current length of the stack. */ + uint32_t alen; /*!< Allocated/available length of the stack. */ + /*! \brief Initial storage for \a stack; it should fit in most use cases. */ + node_t* stack_init[2000 / sizeof(node_t *)]; +} nstack_t; + +/*! \brief Create a node stack containing just the root (or empty). */ +static void ns_init(nstack_t *ns, trie_t *tbl) +{ + assert(tbl); + ns->stack = ns->stack_init; + ns->alen = sizeof(ns->stack_init) / sizeof(ns->stack_init[0]); + if (tbl->weight) { + ns->len = 1; + ns->stack[0] = &tbl->root; + } else { + ns->len = 0; + } +} + +/*! \brief Free inside of the stack, i.e. not the passed pointer itself. */ +static void ns_cleanup(nstack_t *ns) +{ + assert(ns && ns->stack); + if (likely(ns->stack == ns->stack_init)) + return; + free(ns->stack); + #ifndef NDEBUG + ns->stack = NULL; + ns->alen = 0; + #endif +} + +/*! \brief Allocate more space for the stack. */ +static int ns_longer_alloc(nstack_t *ns) +{ + ns->alen *= 2; + size_t new_size = sizeof(nstack_t) + ns->alen * sizeof(node_t *); + node_t **st; + if (ns->stack == ns->stack_init) { + st = malloc(new_size); + if (st != NULL) + memcpy(st, ns->stack, ns->len * sizeof(node_t *)); + } else { + st = realloc(ns->stack, new_size); + } + if (st == NULL) + return KNOT_ENOMEM; + ns->stack = st; + return KNOT_EOK; +} + +/*! \brief Ensure the node stack can be extended by one. */ +static inline int ns_longer(nstack_t *ns) +{ + // get a longer stack if needed + if (likely(ns->len < ns->alen)) + return KNOT_EOK; + return ns_longer_alloc(ns); // hand-split the part suitable for inlining +} + +/*! + * \brief Find the "branching point" as if searching for a key. + * + * The whole path to the point is kept on the passed stack; + * always at least the root will remain on the top of it. + * Beware: the precise semantics of this function is rather tricky. + * The top of the stack will contain: the corresponding leaf if exact match is found; + * or the immediate node below a branching-point-on-edge or the branching-point itself. + * + * \param info Set position of the point of first mismatch (in index and flags). + * \param first Set the value of the first non-matching character (from trie), + * optionally; end-of-string character has value -256 (that's why it's int). + * + * \return KNOT_EOK or KNOT_ENOMEM. + */ +static int ns_find_branch(nstack_t *ns, const char *key, uint32_t len, + branch_t *info, int *first) +{ + assert(ns && ns->len && info); + // First find some leaf with longest matching prefix. + while (isbranch(ns->stack[ns->len - 1])) { + ERR_RETURN(ns_longer(ns)); + node_t *t = ns->stack[ns->len - 1]; + __builtin_prefetch(t->branch.twigs); + bitmap_t b = twigbit(t, key, len); + // Even if our key is missing from this branch we need to + // keep iterating down to a leaf. It doesn't matter which + // twig we choose since the keys are all the same up to this + // index. Note that blindly using twigoff(t, b) can cause + // an out-of-bounds index if it equals twigmax(t). + uint i = hastwig(t, b) ? twigoff(t, b) : 0; + ns->stack[ns->len++] = twig(t, i); + } + tkey_t *lkey = ns->stack[ns->len-1]->leaf.key; + // Find index of the first char that differs. + uint32_t index = 0; + while (index < MIN(len,lkey->len)) { + if (key[index] != lkey->chars[index]) + break; + else + ++index; + } + info->index = index; + if (first) + *first = lkey->len > index ? lkey->chars[index] : -256; + // Find flags: which half-byte has matched. + uint flags; + if (index == len && len == lkey->len) { // found equivalent key + info->flags = flags = 0; + goto success; + } + if (likely(index < MIN(len,lkey->len))) { + byte k2 = (byte)lkey->chars[index]; + byte k1 = (byte)key[index]; + flags = ((k1 ^ k2) & 0xf0) ? 1 : 2; + } else { // one is prefix of another + flags = 1; + } + info->flags = flags; + // now go up the trie from the current leaf + branch_t *t; + do { + if (unlikely(ns->len == 1)) + goto success; // only the root stays on the stack + t = (branch_t*)ns->stack[ns->len - 2]; + if (t->index < index || (t->index == index && t->flags < flags)) + goto success; + --ns->len; + } while (true); +success: + #ifndef NDEBUG // invariants on successful return + assert(ns->len); + if (isbranch(ns->stack[ns->len - 1])) { + t = &ns->stack[ns->len - 1]->branch; + assert(t->index > index || (t->index == index && t->flags >= flags)); + } + if (ns->len > 1) { + t = &ns->stack[ns->len - 2]->branch; + assert(t->index < index || (t->index == index + && (t->flags < flags || (t->flags == 1 && flags == 0)))); + } + #endif + return KNOT_EOK; +} + +/*! + * \brief Advance the node stack to the last leaf in the subtree. + * + * \return KNOT_EOK or KNOT_ENOMEM. + */ +static int ns_last_leaf(nstack_t *ns) +{ + assert(ns); + do { + ERR_RETURN(ns_longer(ns)); + node_t *t = ns->stack[ns->len - 1]; + if (!isbranch(t)) + return KNOT_EOK; + int lasti = bitmap_weight(t->branch.bitmap) - 1; + assert(lasti >= 0); + ns->stack[ns->len++] = twig(t, lasti); + } while (true); +} + +/*! + * \brief Advance the node stack to the first leaf in the subtree. + * + * \return KNOT_EOK or KNOT_ENOMEM. + */ +static int ns_first_leaf(nstack_t *ns) +{ + assert(ns && ns->len); + do { + ERR_RETURN(ns_longer(ns)); + node_t *t = ns->stack[ns->len - 1]; + if (!isbranch(t)) + return KNOT_EOK; + ns->stack[ns->len++] = twig(t, 0); + } while (true); +} + +/*! + * \brief Advance the node stack to the leaf that is previous to the current node. + * + * \note Prefix leaf under the current node DOES count (if present; perhaps questionable). + * \return KNOT_EOK on success, KNOT_ENOENT on not-found, or possibly KNOT_ENOMEM. + */ +static int ns_prev_leaf(nstack_t *ns) +{ + assert(ns && ns->len > 0); + + node_t *t = ns->stack[ns->len - 1]; + if (hastwig(t, 1 << 0)) { // the prefix leaf + t = twig(t, 0); + ERR_RETURN(ns_longer(ns)); + ns->stack[ns->len++] = t; + return KNOT_EOK; + } + + do { + if (ns->len < 2) + return KNOT_ENOENT; // root without empty key has no previous leaf + t = ns->stack[ns->len - 1]; + node_t *p = ns->stack[ns->len - 2]; + int pindex = t - p->branch.twigs; // index in parent via pointer arithmetic + assert(pindex >= 0 && pindex <= 16); + if (pindex > 0) { // t isn't the first child -> go down the previous one + ns->stack[ns->len - 1] = twig(p, pindex - 1); + return ns_last_leaf(ns); + } + // we've got to go up again + --ns->len; + } while (true); +} + +/*! + * \brief Advance the node stack to the leaf that is successor to the current node. + * + * \note Prefix leaf or anything else under the current node DOES count. + * \return KNOT_EOK on success, KNOT_ENOENT on not-found, or possibly KNOT_ENOMEM. + */ +static int ns_next_leaf(nstack_t *ns) +{ + assert(ns && ns->len > 0); + + node_t *t = ns->stack[ns->len - 1]; + if (isbranch(t)) + return ns_first_leaf(ns); + do { + if (ns->len < 2) + return KNOT_ENOENT; // not found, as no more parent is available + t = ns->stack[ns->len - 1]; + node_t *p = ns->stack[ns->len - 2]; + int pindex = t - p->branch.twigs; // index in parent via pointer arithmetic + assert(pindex >= 0 && pindex <= 16); + int pcount = bitmap_weight(p->branch.bitmap); + if (pindex + 1 < pcount) { // t isn't the last child -> go down the next one + ns->stack[ns->len - 1] = twig(p, pindex + 1); + return ns_first_leaf(ns); + } + // we've got to go up again + --ns->len; + } while (true); +} + +int trie_get_leq(trie_t *tbl, const char *key, uint32_t len, trie_val_t **val) +{ + assert(tbl && val); + *val = NULL; // so on failure we can just return; + if (tbl->weight == 0) + return KNOT_ENOENT; + { // Intentionally un-indented; until end of function, to bound cleanup attr. + // First find a key with longest-matching prefix + __attribute__((cleanup(ns_cleanup))) + nstack_t ns_local; + ns_init(&ns_local, tbl); + nstack_t *ns = &ns_local; + branch_t bp; + int un_leaf; // first unmatched character in the leaf + ERR_RETURN(ns_find_branch(ns, key, len, &bp, &un_leaf)); + int un_key = bp.index < len ? key[bp.index] : -256; + node_t *t = ns->stack[ns->len - 1]; + if (bp.flags == 0) { // found exact match + *val = &t->leaf.val; + return KNOT_EOK; + } + // Get t: the last node on matching path + if (isbranch(t) && t->branch.index == bp.index && t->branch.flags == bp.flags) { + // t is OK + } else { + // the top of the stack was the first unmatched node -> step up + if (ns->len == 1) { + // root was unmatched already + if (un_key < un_leaf) + return KNOT_ENOENT; + ERR_RETURN(ns_last_leaf(ns)); + goto success; + } + --ns->len; + t = ns->stack[ns->len - 1]; + } + // Now we re-do the first "non-matching" step in the trie + // but try the previous child if key was less (it may not exist) + bitmap_t b = twigbit(t, key, len); + int i = hastwig(t, b) + ? twigoff(t, b) - (un_key < un_leaf) + : twigoff(t, b) - 1 /*twigoff returns successor when !hastwig*/; + if (i >= 0) { + ERR_RETURN(ns_longer(ns)); + ns->stack[ns->len++] = twig(t, i); + ERR_RETURN(ns_last_leaf(ns)); + } else { + ERR_RETURN(ns_prev_leaf(ns)); + } +success: + assert(!isbranch(ns->stack[ns->len - 1])); + *val = &ns->stack[ns->len - 1]->leaf.val; + return 1; + } +} + +/*! \brief Initialize a new leaf, copying the key, and returning failure code. */ +static int mk_leaf(node_t *leaf, const char *key, uint32_t len, knot_mm_t *mm) +{ + tkey_t *k = mm_alloc(mm, sizeof(tkey_t) + len); + #if FLAGS_HACK + assert(((uintptr_t)k) % 4 == 0); // we need an aligned pointer + #endif + if (unlikely(!k)) + return KNOT_ENOMEM; + k->len = len; + memcpy(k->chars, key, len); + leaf->leaf = (leaf_t){ + #if !FLAGS_HACK + .flags = 0, + #endif + .val = NULL, + .key = k + }; + return KNOT_EOK; +} + +trie_val_t* trie_get_ins(trie_t *tbl, const char *key, uint32_t len) +{ + assert(tbl); + // First leaf in an empty tbl? + if (unlikely(!tbl->weight)) { + if (unlikely(mk_leaf(&tbl->root, key, len, &tbl->mm))) + return NULL; + ++tbl->weight; + return &tbl->root.leaf.val; + } + { // Intentionally un-indented; until end of function, to bound cleanup attr. + // Find the branching-point + __attribute__((cleanup(ns_cleanup))) + nstack_t ns_local; + ns_init(&ns_local, tbl); + nstack_t *ns = &ns_local; + branch_t bp; // branch-point: index and flags signifying the longest common prefix + int k2; // the first unmatched character in the leaf + if (unlikely(ns_find_branch(ns, key, len, &bp, &k2))) + return NULL; + node_t *t = ns->stack[ns->len - 1]; + if (bp.flags == 0) // the same key was already present + return &t->leaf.val; + node_t leaf; + if (unlikely(mk_leaf(&leaf, key, len, &tbl->mm))) + return NULL; + + if (isbranch(t) && bp.index == t->branch.index && bp.flags == t->branch.flags) { + // The node t needs a new leaf child. + bitmap_t b1 = twigbit(t, key, len); + assert(!hastwig(t, b1)); + uint s, m; TWIGOFFMAX(s, m, t, b1); // new child position and original child count + node_t *twigs = mm_realloc(&tbl->mm, t->branch.twigs, + sizeof(node_t) * (m + 1), sizeof(node_t) * m); + if (unlikely(!twigs)) + goto err_leaf; + memmove(twigs + s + 1, twigs + s, sizeof(node_t) * (m - s)); + twigs[s] = leaf; + t->branch.twigs = twigs; + t->branch.bitmap |= b1; + ++tbl->weight; + return &twigs[s].leaf.val; + } else { + // We need to insert a new binary branch with leaf at *t. + // Note: it works the same for the case where we insert above root t. + #ifndef NDEBUG + if (ns->len > 1) { + node_t *pt = ns->stack[ns->len - 2]; + assert(hastwig(pt, twigbit(pt, key, len))); + } + #endif + node_t *twigs = mm_alloc(&tbl->mm, sizeof(node_t) * 2); + if (unlikely(!twigs)) + goto err_leaf; + node_t t2 = *t; // Save before overwriting t. + t->branch.flags = bp.flags; + t->branch.index = bp.index; + t->branch.twigs = twigs; + bitmap_t b1 = twigbit(t, key, len); + bitmap_t b2 = unlikely(k2 == -256) ? (1 << 0) : nibbit(k2, bp.flags); + t->branch.bitmap = b1 | b2; + *twig(t, twigoff(t, b1)) = leaf; + *twig(t, twigoff(t, b2)) = t2; + ++tbl->weight; + return &twig(t, twigoff(t, b1))->leaf.val; + }; +err_leaf: + mm_free(&tbl->mm, leaf.leaf.key); + return NULL; + } +} + +/*! \brief Apply a function to every trie_val_t*, in order; a recursive solution. */ +static int apply_trie(node_t *t, int (*f)(trie_val_t *, void *), void *d) +{ + assert(t); + if (!isbranch(t)) + return f(&t->leaf.val, d); + int child_count = bitmap_weight(t->branch.bitmap); + for (int i = 0; i < child_count; ++i) + ERR_RETURN(apply_trie(twig(t, i), f, d)); + return KNOT_EOK; +} + +int trie_apply(trie_t *tbl, int (*f)(trie_val_t *, void *), void *d) +{ + assert(tbl && f); + if (!tbl->weight) + return KNOT_EOK; + return apply_trie(&tbl->root, f, d); +} + +/* These are all thin wrappers around static Tns* functions. */ +trie_it_t* trie_it_begin(trie_t *tbl) +{ + assert(tbl); + trie_it_t *it = malloc(sizeof(nstack_t)); + if (!it) + return NULL; + ns_init(it, tbl); + if (it->len == 0) // empty tbl + return it; + if (ns_first_leaf(it)) { + ns_cleanup(it); + free(it); + return NULL; + } + return it; +} + +void trie_it_next(trie_it_t *it) +{ + assert(it && it->len); + if (ns_next_leaf(it) != KNOT_EOK) + it->len = 0; +} + +bool trie_it_finished(trie_it_t *it) +{ + assert(it); + return it->len == 0; +} + +void trie_it_free(trie_it_t *it) +{ + if (!it) + return; + ns_cleanup(it); + free(it); +} + +const char* trie_it_key(trie_it_t *it, size_t *len) +{ + assert(it && it->len); + node_t *t = it->stack[it->len - 1]; + assert(!isbranch(t)); + tkey_t *key = t->leaf.key; + if (len) + *len = key->len; + return key->chars; +} + +trie_val_t* trie_it_val(trie_it_t *it) +{ + assert(it && it->len); + node_t *t = it->stack[it->len - 1]; + assert(!isbranch(t)); + return &t->leaf.val; +} diff --git a/src/contrib/qp-trie/qp.h b/src/contrib/qp-trie/qp.h new file mode 100644 index 0000000000000000000000000000000000000000..df208e4dcc27ced2eac470c523d6a4bae8576fef --- /dev/null +++ b/src/contrib/qp-trie/qp.h @@ -0,0 +1,109 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include <stdbool.h> +#include <stdint.h> + +#include "libknot/mm_ctx.h" + +/*! + * \file \brief Native API of QP-tries: + * + * - keys are char strings, not necessarily zero-terminated, + * the structure copies the contents of the passed keys + * - values are void* pointers, typically you get an ephemeral pointer to it + * - key lengths are limited by 2^32-1 ATM + */ + +/*! \brief Element value. */ +typedef void* trie_val_t; + +/*! \brief Opaque structure holding a QP-trie. */ +typedef struct trie trie_t; + +/*! \brief Opaque type for holding a QP-trie iterator. */ +typedef struct trie_it trie_it_t; + +/*! \brief Create a trie instance. */ +trie_t* trie_create(knot_mm_t *mm); + +/*! \brief Free a trie instance. */ +void trie_free(trie_t *tbl); + +/*! \brief Clear a trie instance (make it empty). */ +void trie_clear(trie_t *tbl); + +/*! \brief Return the number of keys in the trie. */ +size_t trie_weight(const trie_t *tbl); + +/*! \brief Search the trie, returning NULL on failure. */ +trie_val_t* trie_get_try(trie_t *tbl, const char *key, uint32_t len); + +/*! \brief Search the trie, inserting NULL trie_val_t on failure. */ +trie_val_t* trie_get_ins(trie_t *tbl, const char *key, uint32_t len); + +/*! + * \brief Search for less-or-equal element. + * + * \param val must be valid; it will be set to NULL if not found or errored. + * \return KNOT_EOK for exact match, 1 for previous, KNOT_ENOENT for not-found, + * or KNOT_E*. + */ +int trie_get_leq(trie_t *tbl, const char *key, uint32_t len, trie_val_t **val); + +/*! + * \brief Apply a function to every trie_val_t, in order. + * + * \return KNOT_EOK if success or KNOT_E* if error. + */ +int trie_apply(trie_t *tbl, int (*f)(trie_val_t *, void *), void *d); + +/*! + * \brief Remove an item, returning KNOT_EOK if succeeded or KNOT_ENOENT if not found. + * + * If val!=NULL and deletion succeeded, the deleted value is set. + */ +int trie_del(trie_t *tbl, const char *key, uint32_t len, trie_val_t *val); + +/*! \brief Create a new iterator pointing to the first element (if any). */ +trie_it_t* trie_it_begin(trie_t *tbl); + +/*! + * \brief Advance the iterator to the next element. + * + * Iteration is in ascending lexicographical order. + * In particular, the empty string would be considered as the very first. + */ +void trie_it_next(trie_it_t *it); + +/*! \brief Test if the iterator has gone past the last element. */ +bool trie_it_finished(trie_it_t *it); + +/*! \brief Free any resources of the iterator. It's OK to call it on NULL. */ +void trie_it_free(trie_it_t *it); + +/*! + * \brief Return pointer to the key of the current element. + * + * \note The len is uint32_t internally but size_t is better for our usage + * as it is without an additional type conversion. + */ +const char* trie_it_key(trie_it_t *it, size_t *len); + +/*! \brief Return pointer to the value of the current element (writable). */ +trie_val_t* trie_it_val(trie_it_t *it); diff --git a/src/contrib/sockaddr.h b/src/contrib/sockaddr.h index a58d7d4c0ea02a6998a1da6b88a6b023184bbfcf..533d3d001233f32f5f50682d75adcbf879424f6c 100644 --- a/src/contrib/sockaddr.h +++ b/src/contrib/sockaddr.h @@ -18,7 +18,7 @@ /* BSD IPv6 */ #ifndef __POSIX_VISIBLE -#define __POSIX_VISIBLE = 200112 +#define __POSIX_VISIBLE 200112 #endif #include <stdbool.h> diff --git a/src/contrib/wire.h b/src/contrib/wire.h index 333e117ff8cf6c9177852e7b664f849dd6af5223..b70dcc01036a3d6b14017b82109234a0b0864bf6 100644 --- a/src/contrib/wire.h +++ b/src/contrib/wire.h @@ -38,7 +38,9 @@ */ inline static uint16_t wire_read_u16(const uint8_t *pos) { - return be16toh(*(uint16_t *)pos); + uint16_t result; + memcpy(&result, pos, sizeof(result)); + return be16toh(result); } /*! @@ -50,7 +52,9 @@ inline static uint16_t wire_read_u16(const uint8_t *pos) */ inline static uint32_t wire_read_u32(const uint8_t *pos) { - return be32toh(*(uint32_t *)pos); + uint32_t result; + memcpy(&result, pos, sizeof(result)); + return be32toh(result); } /*! @@ -76,7 +80,9 @@ inline static uint64_t wire_read_u48(const uint8_t *pos) */ inline static uint64_t wire_read_u64(const uint8_t *pos) { - return be64toh(*(uint64_t *)pos); + uint64_t result; + memcpy(&result, pos, sizeof(result)); + return be64toh(result); } /*! @@ -89,7 +95,8 @@ inline static uint64_t wire_read_u64(const uint8_t *pos) */ inline static void wire_write_u16(uint8_t *pos, uint16_t data) { - *(uint16_t *)pos = htobe16(data); + uint16_t beval = htobe16(data); + memcpy(pos, &beval, sizeof(beval)); } /*! @@ -102,7 +109,8 @@ inline static void wire_write_u16(uint8_t *pos, uint16_t data) */ inline static void wire_write_u32(uint8_t *pos, uint32_t data) { - *(uint32_t *)pos = htobe32(data); + uint32_t beval = htobe32(data); + memcpy(pos, &beval, sizeof(beval)); } /*! @@ -129,7 +137,8 @@ inline static void wire_write_u48(uint8_t *pos, uint64_t data) */ inline static void wire_write_u64(uint8_t *pos, uint64_t data) { - *(uint64_t *)pos = htobe64(data); + uint64_t beval = htobe64(data); + memcpy(pos, &beval, sizeof(beval)); } /*! @} */ diff --git a/src/contrib/wire_ctx.h b/src/contrib/wire_ctx.h index a416400bc2b317c13163689594da926e7cf765dc..d8df799ef724d9e32e4e948d406411ad0cbc0dd3 100644 --- a/src/contrib/wire_ctx.h +++ b/src/contrib/wire_ctx.h @@ -187,222 +187,131 @@ static inline int wire_ctx_can_write(wire_ctx_t *ctx, size_t size) return KNOT_EOK; } -static inline uint8_t wire_ctx_read_u8(wire_ctx_t *ctx) + +static inline void wire_ctx_read(wire_ctx_t *ctx, void *data, size_t size) { assert(ctx); + assert(data); if (ctx->error != KNOT_EOK) { - return 0; + /* Avoid leaving data uninitialized. */ + memset(data, 0, size); + return; } - int ret = wire_ctx_can_read(ctx, sizeof(uint8_t)); + int ret = wire_ctx_can_read(ctx, size); if (ret != KNOT_EOK) { ctx->error = ret; - return 0; + memset(data, 0, size); + return; } - uint8_t result = *ctx->position; - ctx->position += sizeof(uint8_t); + memcpy(data, ctx->position, size); + ctx->position += size; +} + +static inline uint8_t wire_ctx_read_u8(wire_ctx_t *ctx) +{ + uint8_t result; + wire_ctx_read(ctx, &result, sizeof(result)); return result; } static inline uint16_t wire_ctx_read_u16(wire_ctx_t *ctx) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return 0; - } - - int ret = wire_ctx_can_read(ctx, sizeof(uint16_t)); - if (ret != KNOT_EOK) { - ctx->error = ret; - return 0; - } - - uint16_t result = *((uint16_t *)ctx->position); - ctx->position += sizeof(uint16_t); + uint16_t result; + wire_ctx_read(ctx, &result, sizeof(result)); return be16toh(result); } static inline uint32_t wire_ctx_read_u32(wire_ctx_t *ctx) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return 0; - } - - int ret = wire_ctx_can_read(ctx, sizeof(uint32_t)); - if (ret != KNOT_EOK) { - ctx->error = ret; - return 0; - } - - uint32_t result = *((uint32_t *)ctx->position); - ctx->position += sizeof(uint32_t); + uint32_t result; + wire_ctx_read(ctx, &result, sizeof(result)); return be32toh(result); } static inline uint64_t wire_ctx_read_u48(wire_ctx_t *ctx) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return 0; - } - - int ret = wire_ctx_can_read(ctx, 6); - if (ret != KNOT_EOK) { - ctx->error = ret; - return 0; - } - + /* This case is slightly tricky. */ uint64_t result = 0; - memcpy((uint8_t *)&result + 1, ctx->position, 6); - ctx->position += 6; + wire_ctx_read(ctx, (uint8_t *)&result + 1, 6); return be64toh(result) >> 8; } static inline uint64_t wire_ctx_read_u64(wire_ctx_t *ctx) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return 0; - } - - int ret = wire_ctx_can_read(ctx, sizeof(uint64_t)); - if (ret != KNOT_EOK) { - ctx->error = ret; - return 0; - } - - uint64_t result = *((uint64_t *)ctx->position); - ctx->position += sizeof(uint64_t); + uint64_t result; + wire_ctx_read(ctx, &result, sizeof(result)); return be64toh(result); } -static inline void wire_ctx_read(wire_ctx_t *ctx, uint8_t *data, size_t size) + +static inline void wire_ctx_write(wire_ctx_t *ctx, const void *data, size_t size) { assert(ctx); - assert(data); if (ctx->error != KNOT_EOK) { return; } - int ret = wire_ctx_can_read(ctx, size); + if (size == 0) { + return; + } + + assert(data); + + int ret = wire_ctx_can_write(ctx, size); if (ret != KNOT_EOK) { ctx->error = ret; return; } - memcpy(data, ctx->position, size); + memcpy(ctx->position, data, size); ctx->position += size; } static inline void wire_ctx_write_u8(wire_ctx_t *ctx, uint8_t value) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return; - } - - int ret = wire_ctx_can_write(ctx, sizeof(uint8_t)); - if (ret != KNOT_EOK) { - ctx->error = ret; - return; - } - - *ctx->position = value; - ctx->position += sizeof(uint8_t); + wire_ctx_write(ctx, &value, sizeof(value)); } static inline void wire_ctx_write_u16(wire_ctx_t *ctx, uint16_t value) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return; - } - - int ret = wire_ctx_can_write(ctx, sizeof(uint16_t)); - if (ret != KNOT_EOK) { - ctx->error = ret; - return; - } - - *((uint16_t *)ctx->position) = htobe16(value); - ctx->position += sizeof(uint16_t); + uint16_t beval = htobe16(value); + wire_ctx_write(ctx, &beval, sizeof(beval)); } static inline void wire_ctx_write_u32(wire_ctx_t *ctx, uint32_t value) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return; - } - - int ret = wire_ctx_can_write(ctx, sizeof(uint32_t)); - if (ret != KNOT_EOK) { - ctx->error = ret; - return; - } - - *((uint32_t *)ctx->position) = htobe32(value); - ctx->position += sizeof(uint32_t); + uint32_t beval = htobe32(value); + wire_ctx_write(ctx, &beval, sizeof(beval)); } static inline void wire_ctx_write_u48(wire_ctx_t *ctx, uint64_t value) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return; - } - - int ret = wire_ctx_can_write(ctx, 6); - if (ret != KNOT_EOK) { - ctx->error = ret; - return; - } - + /* This case is slightly tricky. */ uint64_t swapped = htobe64(value << 8); - memcpy(ctx->position, (uint8_t *)&swapped + 1, 6); - ctx->position += 6; + wire_ctx_write(ctx, (uint8_t *)&swapped + 1, 6); } static inline void wire_ctx_write_u64(wire_ctx_t *ctx, uint64_t value) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return; - } - - int ret = wire_ctx_can_write(ctx, sizeof(uint64_t)); - if (ret != KNOT_EOK) { - ctx->error = ret; - return; - } - - *((uint64_t *)ctx->position) = htobe64(value); - ctx->position += sizeof(uint64_t); + uint64_t beval = htobe64(value); + wire_ctx_write(ctx, &beval, sizeof(beval)); } -static inline void wire_ctx_write(wire_ctx_t *ctx, const uint8_t *data, size_t size) + +static inline void wire_ctx_memset(wire_ctx_t *dst, int value, size_t size) { - assert(ctx); + assert(dst); - if (ctx->error != KNOT_EOK) { + if (dst->error != KNOT_EOK) { return; } @@ -410,34 +319,19 @@ static inline void wire_ctx_write(wire_ctx_t *ctx, const uint8_t *data, size_t s return; } - assert(data); - - int ret = wire_ctx_can_write(ctx, size); + int ret = wire_ctx_can_write(dst, size); if (ret != KNOT_EOK) { - ctx->error = ret; + dst->error = ret; return; } - memcpy(ctx->position, data, size); - ctx->position += size; + memset(dst->position, value, size); + dst->position += size; } static inline void wire_ctx_clear(wire_ctx_t *ctx, size_t size) { - assert(ctx); - - if (ctx->error != KNOT_EOK) { - return; - } - - int ret = wire_ctx_can_write(ctx, size); - if (ret != KNOT_EOK) { - ctx->error = ret; - return; - } - - memset(ctx->position, 0, size); - ctx->position += size; + wire_ctx_memset(ctx, 0, size); } static inline void wire_ctx_copy(wire_ctx_t *dst, wire_ctx_t *src, size_t size) @@ -465,24 +359,3 @@ static inline void wire_ctx_copy(wire_ctx_t *dst, wire_ctx_t *src, size_t size) src->position += size; } -static inline void wire_ctx_memset(wire_ctx_t *dst, int value, size_t size) -{ - assert(dst); - - if (dst->error != KNOT_EOK) { - return; - } - - if (size == 0) { - return; - } - - int ret = wire_ctx_can_write(dst, size); - if (ret != KNOT_EOK) { - dst->error = ret; - return; - } - - memset(dst->position, value, size); - dst->position += size; -} diff --git a/src/dnssec/Makefile.am b/src/dnssec/Makefile.am index 38fe0b83641b95769bce7f9405bd7eaf7bb754b9..13ac2c45e93ff3980e69fc112b65bd1bee1b398c 100644 --- a/src/dnssec/Makefile.am +++ b/src/dnssec/Makefile.am @@ -63,7 +63,9 @@ include_dnssec_HEADERS = \ lib/dnssec/kasp.h \ lib/dnssec/key.h \ lib/dnssec/keyid.h \ + lib/dnssec/keystate.h \ lib/dnssec/keystore.h \ + lib/dnssec/keyusage.h \ lib/dnssec/keytag.h \ lib/dnssec/list.h \ lib/dnssec/nsec.h \ @@ -82,7 +84,6 @@ libdnssec_la_SOURCES = \ lib/event/action/zsk_rollover.c \ lib/event/event.c \ lib/event/keystate.c \ - lib/event/keystate.h \ lib/event/utils.c \ lib/event/utils.h \ lib/kasp/dir/dir.c \ @@ -124,6 +125,7 @@ libdnssec_la_SOURCES = \ lib/keystore/pkcs11.c \ lib/keystore/pkcs8.c \ lib/keystore/pkcs8_dir.c \ + lib/keyusage/keyusage.c \ lib/list/list.c \ lib/list/ucw_clists.h \ lib/nsec/bitmap.c \ diff --git a/src/dnssec/doc/coding.md b/src/dnssec/doc/coding.md index bc7240d7b6787b5247ecdc71eeb9be3275e4cc87..2d679b8a0570bd7dc92a660f44885cb712bc6beb 100644 --- a/src/dnssec/doc/coding.md +++ b/src/dnssec/doc/coding.md @@ -3,7 +3,7 @@ ## Components Location - library: `lib` (public headers in `lib/dnssec`) -- shared: `shared` (shared code for library and utilities, inaccesible from the library) +- shared: `shared` (shared code for library and utilities, inaccessible from the library) - tests: `tests` - utilities: `utils` diff --git a/src/dnssec/lib/dnssec/dnssec.h b/src/dnssec/lib/dnssec/dnssec.h index 7bb37072d943ca2cb46d53488514b64b9fed78d8..6f8620a660311dcca1bfab1044a9438141b00a0e 100644 --- a/src/dnssec/lib/dnssec/dnssec.h +++ b/src/dnssec/lib/dnssec/dnssec.h @@ -109,8 +109,10 @@ #include <dnssec/kasp.h> #include <dnssec/key.h> #include <dnssec/keyid.h> +#include <dnssec/keystate.h> #include <dnssec/keystore.h> #include <dnssec/keytag.h> +#include <dnssec/keyusage.h> #include <dnssec/list.h> #include <dnssec/nsec.h> #include <dnssec/random.h> diff --git a/src/dnssec/lib/dnssec/kasp.h b/src/dnssec/lib/dnssec/kasp.h index 51e09dcf39fa97973de1da298d63ff0f1edf537b..dd04d366fb8ddc6ed42cd8bc04c6d2af5383a33f 100644 --- a/src/dnssec/lib/dnssec/kasp.h +++ b/src/dnssec/lib/dnssec/kasp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -299,6 +299,7 @@ typedef struct dnssec_kasp_policy { uint16_t zsk_size; uint32_t dnskey_ttl; uint32_t zsk_lifetime; + bool singe_type_signing; // RRSIG uint32_t rrsig_lifetime; uint32_t rrsig_refresh_before; diff --git a/src/dnssec/lib/dnssec/key.h b/src/dnssec/lib/dnssec/key.h index 8403b699f66d172db525342b9222cbcc9ff954ae..6048bd4f0aa93311046eb74dbaed48ca976d9dac 100644 --- a/src/dnssec/lib/dnssec/key.h +++ b/src/dnssec/lib/dnssec/key.h @@ -92,6 +92,8 @@ typedef enum dnssec_key_algorithm { DNSSEC_KEY_ALGORITHM_RSA_SHA512 = 10, DNSSEC_KEY_ALGORITHM_ECDSA_P256_SHA256 = 13, DNSSEC_KEY_ALGORITHM_ECDSA_P384_SHA384 = 14, + DNSSEC_KEY_ALGORITHM_ED25519 = 15, + DNSSEC_KEY_ALGORITHM_ED448 = 16, } dnssec_key_algorithm_t; struct dnssec_key; diff --git a/src/dnssec/lib/event/keystate.h b/src/dnssec/lib/dnssec/keystate.h similarity index 92% rename from src/dnssec/lib/event/keystate.h rename to src/dnssec/lib/dnssec/keystate.h index 26f87cef9bf5b354e940e2d0e87e246dca573216..e843c37921e8b5fbcd525d24d27ed40249b34c4a 100644 --- a/src/dnssec/lib/event/keystate.h +++ b/src/dnssec/lib/dnssec/keystate.h @@ -30,4 +30,4 @@ enum key_state { typedef enum key_state key_state_t; -key_state_t get_key_state(const dnssec_kasp_key_t *key, time_t moment); +key_state_t dnssec_get_key_state(const dnssec_kasp_key_t *key, time_t moment); diff --git a/src/dnssec/lib/dnssec/keystore.h b/src/dnssec/lib/dnssec/keystore.h index 118af1200f5da3fd02663a2212cb1d4c380672b5..67240b23c3cde5d4cb1dcfaba392f858ef4ab242 100644 --- a/src/dnssec/lib/dnssec/keystore.h +++ b/src/dnssec/lib/dnssec/keystore.h @@ -27,7 +27,7 @@ * * PKCS #8 uses unencrypted PEM, and allows implementation of custom stores. * - * PKCS #11 allows to access Hardware Security Modules. + * PKCS #11 provides access Hardware Security Modules. * * Example of using default PKCS #8 and to generate an RSA key: * diff --git a/src/dnssec/lib/dnssec/keyusage.h b/src/dnssec/lib/dnssec/keyusage.h new file mode 100644 index 0000000000000000000000000000000000000000..be08ad71538494162296b52674a635538d4035ee --- /dev/null +++ b/src/dnssec/lib/dnssec/keyusage.h @@ -0,0 +1,43 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once + +#include <dnssec/list.h> +#include "kasp.h" + +typedef struct record { + char *key_id; + dnssec_list_t *zones; +} record_keyusage_t; + +typedef dnssec_list_t dnssec_keyusage_t; + +char *dnssec_keyusage_path(dnssec_kasp_t *kasp); + +int dnssec_keyusage_add(dnssec_keyusage_t *keyusage, const char *key_id, char *zone); + +int dnssec_keyusage_remove(dnssec_keyusage_t *keyusage, const char *key_id, char *zone); + +bool dnssec_keyusage_is_used(dnssec_keyusage_t *keyusage, const char *key_id); + +int dnssec_keyusage_load(dnssec_keyusage_t *keyusage, const char *filename); + +int dnssec_keyusage_save(dnssec_keyusage_t *keyusage, const char *filename); + +dnssec_keyusage_t *dnssec_keyusage_new(void); + +void dnssec_keyusage_free(dnssec_keyusage_t *keyusage); diff --git a/src/dnssec/lib/error.c b/src/dnssec/lib/error.c index 4a4cc0600833da668202dc8fae805cba8013335c..796e7f03d627aab78c4524daa78a29b275bc1e40 100644 --- a/src/dnssec/lib/error.c +++ b/src/dnssec/lib/error.c @@ -32,7 +32,7 @@ static const error_message_t ERROR_MESSAGES[] = { { DNSSEC_ENOENT, "no such file or directory" }, { DNSSEC_ERROR, "unspecified error" }, - { DNSSEC_NOT_IMPLEMENTED_ERROR, "not implemeted" }, + { DNSSEC_NOT_IMPLEMENTED_ERROR, "not implemented" }, { DNSSEC_MALFORMED_DATA, "malformed data" }, { DNSSEC_OUT_OF_RANGE, "value out of range" }, { DNSSEC_NOT_FOUND, "not found" }, diff --git a/src/dnssec/lib/event/action/initial_key.c b/src/dnssec/lib/event/action/initial_key.c index bbe7fcb4d17e43aee59f6e4134a0723a6baff8c4..74f9de9af32242cacf8d1ea89253c55f5341feee 100644 --- a/src/dnssec/lib/event/action/initial_key.c +++ b/src/dnssec/lib/event/action/initial_key.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -22,6 +22,7 @@ #include "shared.h" #include "event/action.h" #include "event/utils.h" +#include "dnssec/keyusage.h" /*! * Scan zone keys and check if ZSK and KSK key exists. @@ -58,6 +59,19 @@ static int generate_initial_key(dnssec_event_ctx_t *ctx, bool ksk) return r; } + if (!ksk) { + char *path = dnssec_keyusage_path(ctx->kasp); + if (path == NULL) { + return DNSSEC_ENOMEM; + } + dnssec_keyusage_t *keyusage = dnssec_keyusage_new(); + dnssec_keyusage_load(keyusage, path); + dnssec_keyusage_add(keyusage, key->id, ctx->zone->name); + dnssec_keyusage_save(keyusage, path); + dnssec_keyusage_free(keyusage); + free(path); + } + key->timing.active = ctx->now; key->timing.publish = ctx->now; @@ -77,7 +91,7 @@ static int plan(dnssec_event_ctx_t *ctx, dnssec_event_t *event) bool has_ksk, has_zsk; scan_keys(ctx->zone, &has_ksk, &has_zsk); - if (!has_ksk || !has_zsk) { + if (!has_zsk || (!ctx->policy->singe_type_signing && !has_ksk)) { event->type = DNSSEC_EVENT_GENERATE_INITIAL_KEY; event->time = ctx->now; } else { @@ -100,7 +114,7 @@ static int exec(dnssec_event_ctx_t *ctx, const dnssec_event_t *event) int r = DNSSEC_EOK; - if (!has_ksk) { + if (!ctx->policy->singe_type_signing && !has_ksk) { r = generate_initial_key(ctx, true); } diff --git a/src/dnssec/lib/event/action/nsec3_resalt.c b/src/dnssec/lib/event/action/nsec3_resalt.c index 0c25f6bb3f7f4fec2b62a7ab29c1f394a09b11a4..cac05fcc6a996d34cfcaf057c41a49fd7b54e4e5 100644 --- a/src/dnssec/lib/event/action/nsec3_resalt.c +++ b/src/dnssec/lib/event/action/nsec3_resalt.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 diff --git a/src/dnssec/lib/event/action/zsk_rollover.c b/src/dnssec/lib/event/action/zsk_rollover.c index 416d52c04aba3c59206e8a641887a526d0c86d7e..5db4348dd9f00d4935af57caf8d9d6ef79ec672f 100644 --- a/src/dnssec/lib/event/action/zsk_rollover.c +++ b/src/dnssec/lib/event/action/zsk_rollover.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -18,8 +18,9 @@ #include "dnssec/error.h" #include "dnssec/event.h" +#include "dnssec/keyusage.h" #include "event/action.h" -#include "event/keystate.h" +#include "dnssec/keystate.h" #include "event/utils.h" #include "key/internal.h" #include "shared.h" @@ -45,7 +46,7 @@ static bool newer_key(const dnssec_kasp_key_t *prev, const dnssec_kasp_key_t *cu static bool zsk_match(const dnssec_kasp_key_t *key, time_t now, key_state_t state) { return dnssec_key_get_flags(key->key) == DNSKEY_FLAGS_ZSK && - get_key_state(key, now) == state; + dnssec_get_key_state(key, now) == state; } static dnssec_kasp_key_t *last_key(dnssec_event_ctx_t *ctx, key_state_t state) @@ -87,6 +88,12 @@ static int plan(dnssec_event_ctx_t *ctx, dnssec_event_t *event) assert(ctx); assert(event); + // Not supported with Single-Type signing. + if (ctx->policy->singe_type_signing) { + event->type = DNSSEC_EVENT_NONE; + return DNSSEC_EOK; + } + /* * We should not start another rollover, if there is a rollover * in progress. Therefore we will check the keys in reverse order @@ -169,6 +176,17 @@ static int exec_new_signatures(dnssec_event_ctx_t *ctx) active->timing.retire = ctx->now; rolling->timing.active = ctx->now; + char *path = dnssec_keyusage_path(ctx->kasp); + if (path == NULL) { + return DNSSEC_ENOMEM; + } + dnssec_keyusage_t *keyusage = dnssec_keyusage_new(); + dnssec_keyusage_load(keyusage, path); + dnssec_keyusage_add(keyusage, rolling->id, ctx->zone->name); + dnssec_keyusage_save(keyusage, path); + dnssec_keyusage_free(keyusage); + free(path); + return dnssec_kasp_zone_save(ctx->kasp, ctx->zone); } @@ -179,7 +197,32 @@ static int exec_remove_old_key(dnssec_event_ctx_t *ctx) return DNSSEC_EINVAL; } + char *path = dnssec_keyusage_path(ctx->kasp); + if (path == NULL) { + return DNSSEC_ENOMEM; + } + dnssec_keyusage_t *keyusage = dnssec_keyusage_new(); + dnssec_keyusage_load(keyusage, path); + dnssec_keyusage_remove(keyusage, retired->id, ctx->zone->name); + dnssec_keyusage_save(keyusage, path); + retired->timing.remove = ctx->now; + dnssec_list_foreach(item, ctx->zone->keys) { + dnssec_kasp_key_t *key = dnssec_item_get(item); + if (key->id == retired->id) { + dnssec_list_remove(item); + } + } + + if (dnssec_keyusage_is_used(keyusage, retired->id)) { + dnssec_keyusage_free(keyusage); + free(path); + return dnssec_kasp_zone_save(ctx->kasp, ctx->zone); + } + dnssec_keyusage_free(keyusage); + free(path); + + dnssec_keystore_remove_key(ctx->keystore, retired->id); return dnssec_kasp_zone_save(ctx->kasp, ctx->zone); } diff --git a/src/dnssec/lib/event/keystate.c b/src/dnssec/lib/event/keystate.c index 5f161d32d70f58b8c0ece61757a561ad34f7063d..409f756a77270c9fda0f4f125e1ddfaea2d5e75c 100644 --- a/src/dnssec/lib/event/keystate.c +++ b/src/dnssec/lib/event/keystate.c @@ -16,14 +16,19 @@ #include <assert.h> #include <time.h> +#include <string.h> #include "dnssec/kasp.h" -#include "event/keystate.h" +#include "dnssec/keystate.h" +#include "shared.h" -key_state_t get_key_state(const dnssec_kasp_key_t *key, time_t moment) +_public_ +key_state_t dnssec_get_key_state(const dnssec_kasp_key_t *key, time_t moment) { - assert(key); - assert(time > 0); + if (!key || moment <= 0) + { + return DNSSEC_KEY_STATE_INVALID; + } /* * The meaning of unset timing parameter is different for key diff --git a/src/dnssec/lib/kasp/dir/dir.c b/src/dnssec/lib/kasp/dir/dir.c index 4ebf5c94195fdce5ae74c78c31d066faec11b630..1e3e272de3a8249345fc2c9d94f18789beddf88b 100644 --- a/src/dnssec/lib/kasp/dir/dir.c +++ b/src/dnssec/lib/kasp/dir/dir.c @@ -101,17 +101,17 @@ static int entity_list(const char *entity, void *_ctx, dnssec_list_t *names) return DNSSEC_NOT_FOUND; } - int error; - struct dirent entry, *result; - while (error = readdir_r(dir, &entry, &result), error == 0 && result) { - char *zone = file_to_entity(entity, entry.d_name); + errno = 0; + struct dirent *result; + while ((result = readdir(dir)) != NULL) { + char *zone = file_to_entity(entity, result->d_name); if (zone) { dnssec_list_append(names, zone); } } - if (error != 0) { - return dnssec_errno_to_error(error); + if (errno != 0) { + return dnssec_errno_to_error(errno); } return DNSSEC_EOK; diff --git a/src/dnssec/lib/kasp/dir/json.c b/src/dnssec/lib/kasp/dir/json.c index a9f35c5c464dd6dfd34feddbc824c47519bb4394..3b2411a5e335ac4d100511e05ddd213ba2924c93 100644 --- a/src/dnssec/lib/kasp/dir/json.c +++ b/src/dnssec/lib/kasp/dir/json.c @@ -73,7 +73,7 @@ int encode_keyid(const void *value, json_t **result) } /*! - * Decode bounded interger value from JSON. + * Decode bounded integer value from JSON. */ static int decode_int(const json_int_t min, const json_int_t max, const json_t *value, json_int_t *result) diff --git a/src/dnssec/lib/key/algorithm.c b/src/dnssec/lib/key/algorithm.c index 0cfe9d54c6dbc728666abb4481d43d5e2f644356..e4d0894d71adc24ca03a5f60736f73ac96dba701 100644 --- a/src/dnssec/lib/key/algorithm.c +++ b/src/dnssec/lib/key/algorithm.c @@ -68,6 +68,18 @@ static const struct limits *get_limits(dnssec_key_algorithm_t algorithm) .def = 384, }; + static const struct limits ED25519 = { + .min = 256, + .max = 256, + .def = 256, + }; + + static const struct limits ED448 = { + .min = 456, + .max = 456, + .def = 456, + }; + switch (algorithm) { case DNSSEC_KEY_ALGORITHM_DSA_SHA1: case DNSSEC_KEY_ALGORITHM_DSA_SHA1_NSEC3: @@ -82,6 +94,10 @@ static const struct limits *get_limits(dnssec_key_algorithm_t algorithm) return &EC256; case DNSSEC_KEY_ALGORITHM_ECDSA_P384_SHA384: return &EC384; + case DNSSEC_KEY_ALGORITHM_ED25519: + return &ED25519; + case DNSSEC_KEY_ALGORITHM_ED448: + return &ED448; default: return NULL; } @@ -103,6 +119,8 @@ gnutls_pk_algorithm_t algorithm_to_gnutls(dnssec_key_algorithm_t dnssec) case DNSSEC_KEY_ALGORITHM_ECDSA_P256_SHA256: case DNSSEC_KEY_ALGORITHM_ECDSA_P384_SHA384: return GNUTLS_PK_EC; + case DNSSEC_KEY_ALGORITHM_ED25519: + case DNSSEC_KEY_ALGORITHM_ED448: default: return GNUTLS_PK_UNKNOWN; } diff --git a/src/dnssec/lib/keystore/pkcs8_dir.c b/src/dnssec/lib/keystore/pkcs8_dir.c index fe094201c05cca44a6bd273403a915bf18e1e811..f1b4d4ae79bbebb49a97b634e74aa0ad35aea57d 100644 --- a/src/dnssec/lib/keystore/pkcs8_dir.c +++ b/src/dnssec/lib/keystore/pkcs8_dir.c @@ -315,18 +315,18 @@ static int pkcs8_dir_list(void *_handle, dnssec_list_t **list_ptr) return DNSSEC_ENOMEM; } - int error; - struct dirent entry, *result; - while (error = readdir_r(dir, &entry, &result), error == 0 && result) { - char *keyid = filename_to_keyid(entry.d_name); + errno = 0; + struct dirent *result; + while ((result = readdir(dir)) != NULL) { + char *keyid = filename_to_keyid(result->d_name); if (keyid) { dnssec_list_append(list, keyid); } } - if (error != 0) { + if (errno != 0) { dnssec_list_free_full(list, NULL, NULL); - return dnssec_errno_to_error(error); + return dnssec_errno_to_error(errno); } *list_ptr = list; diff --git a/src/dnssec/lib/keyusage/keyusage.c b/src/dnssec/lib/keyusage/keyusage.c new file mode 100644 index 0000000000000000000000000000000000000000..b5dfff773d6153dd5382cfd07c721548d35b8f51 --- /dev/null +++ b/src/dnssec/lib/keyusage/keyusage.c @@ -0,0 +1,326 @@ +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <assert.h> +#include <string.h> + +#include "dnssec.h" +#include "error.h" +#include "kasp/dir/json.h" +#include "kasp/internal.h" +#include "shared.h" + +char *dnssec_keyusage_path(dnssec_kasp_t *kasp) +{ + char *res; + if (asprintf(&res, "%s/keyusage.json", kasp->functions->base_path(kasp->ctx)) == -1) { + res = NULL; + } + return res; +} + +int dnssec_keyusage_add(dnssec_keyusage_t *keyusage, const char *key_id, char *zone) +{ + char *lzone = strdup(zone); + dnssec_list_foreach(item, keyusage) { + + record_keyusage_t *record = dnssec_item_get(item); + if (strcmp(record->key_id, key_id) == 0) { + + if (!dnssec_list_contains(record->zones, lzone)) { + dnssec_list_append(record->zones, lzone); + } + + return DNSSEC_EOK; + } + } + + record_keyusage_t *record = malloc(sizeof(*record)); + record->key_id = strdup(key_id); + record->zones = dnssec_list_new(); + + dnssec_list_append(record->zones, lzone); + dnssec_list_append(keyusage, record); + + return DNSSEC_EOK; +} + +int dnssec_keyusage_remove(dnssec_keyusage_t *keyusage, const char *key_id, char *zone) +{ + dnssec_list_foreach(item, keyusage) { + record_keyusage_t *record = dnssec_item_get(item); + + if (strcmp(record->key_id, key_id) == 0) { + dnssec_list_foreach(item2, record->zones) { + + char *tmp = dnssec_item_get(item2); + + if (strcmp(tmp, zone) == 0) { + + free(tmp); + dnssec_list_remove(item2); + + if (dnssec_list_is_empty(record->zones)) { + free(record->key_id); + dnssec_list_free(record->zones); + free(record); + dnssec_list_remove(item); + } + + return DNSSEC_EOK; + } + } + } + } + + return DNSSEC_ENOENT; +} + +bool dnssec_keyusage_is_used(dnssec_keyusage_t *keyusage, const char *key_id) +{ + if (dnssec_list_is_empty(keyusage)) { + return false; + } + + dnssec_list_foreach(item, keyusage) { + record_keyusage_t *record = dnssec_item_get(item); + + if (record == NULL || record->key_id == NULL) { + return false; + } + + if (strcmp(record->key_id, key_id) == 0) { + return !dnssec_list_is_empty(record->zones); + } + } + return false; +} + +static int import_keyusage(dnssec_keyusage_t *keyusage, const json_t *json) +{ + json_t *jrecord = NULL; + int a, b; + + if (!json_is_array(json)) { + if (json_is_null(json)) { + return DNSSEC_EOK; + } else { + return DNSSEC_CONFIG_MALFORMED; + } + } + + json_array_foreach(json, a, jrecord) { + json_t *jkey_id = NULL; + jkey_id = json_object_get(jrecord, "key_id"); + + record_keyusage_t *record = malloc(sizeof(*record)); + if (record == NULL) { + return DNSSEC_ENOMEM; + } + + int r = decode_string(jkey_id, &record->key_id); + if (r != DNSSEC_EOK) { + free(record); + return r; + } + + json_t *jzones = NULL, *jzone = NULL; + jzones = json_object_get(jrecord, "zones"); + record->zones = dnssec_list_new(); + + json_array_foreach(jzones, b, jzone) { + char *zone; + int r = decode_string(jzone, &zone); + if (r != DNSSEC_EOK) { + free(record); + return r; + } + dnssec_list_append(record->zones, zone); + } + dnssec_list_append(keyusage, record); + } + + return DNSSEC_EOK; +} + +static int export_keyusage(dnssec_keyusage_t *keyusage, json_t **json) +{ + assert(keyusage); + assert(json); + record_keyusage_t *record; + int r; + + if (dnssec_list_is_empty(keyusage)) { + return DNSSEC_EOK; + } + + json_t *jrecords = json_array(); + if (!jrecords) { + return DNSSEC_ENOMEM; + } + + json_t *jkey_id = NULL; + json_t *jzone = NULL; + json_t *jzones = NULL; + + dnssec_list_foreach(item, keyusage) { + record = dnssec_item_get(item); + + json_t *jzones = json_array(); + if (!jzones) { + json_array_clear(jrecords); + return DNSSEC_ENOMEM; + } + + r = encode_string(&record->key_id, &jkey_id); + if (r != DNSSEC_EOK) { + json_decref(jkey_id); + goto error; + } + dnssec_list_foreach(item, record->zones) { + + const char *zone = dnssec_item_get(item); + r = encode_string(&zone, &jzone); + + if (r != DNSSEC_EOK) { + json_decref(jzone); + goto error; + } + + if (json_array_append_new(jzones, jzone)) { + r = DNSSEC_ENOMEM; + goto error; + } + } + json_t *jrecord = json_object(); + if (!jrecord) { + r = DNSSEC_ENOMEM; + goto error; + } + + if (json_object_set(jrecord, "key_id", jkey_id)) { + json_object_clear(jrecord); + r = DNSSEC_ENOMEM; + goto error; + } + json_decref(jkey_id); + + if (json_object_set(jrecord, "zones", jzones)) { + json_object_clear(jrecord); + r = DNSSEC_ENOMEM; + goto error; + } + json_decref(jzones); + + if (json_array_append_new(jrecords, jrecord)) { + json_object_clear(jrecord); + r = DNSSEC_ENOMEM; + goto error; + } + } + *json = jrecords; + + return DNSSEC_EOK; +error: + json_array_clear(jzones); + json_array_clear(jrecords); + return r; +} + +int dnssec_keyusage_load(dnssec_keyusage_t *keyusage, const char *filename) +{ + assert(keyusage); + assert(filename); + + dnssec_list_clear(keyusage); + + _cleanup_fclose_ FILE *file = fopen(filename, "r"); + if (!file) { + return DNSSEC_NOT_FOUND; + } + + json_error_t error = { 0 }; + _json_cleanup_ json_t *json = json_loadf(file, JSON_LOAD_OPTIONS, &error); + if (!json) { + if (error.position != 1) { + return DNSSEC_CONFIG_MALFORMED; + } else { + return DNSSEC_EOK; + } + } + + return import_keyusage(keyusage, json); +} + +int dnssec_keyusage_save(dnssec_keyusage_t *keyusage, const char *filename) +{ + assert(keyusage); + assert(filename); + + _json_cleanup_ json_t *json = NULL; + int r = export_keyusage(keyusage, &json); + if (r != DNSSEC_EOK) { + return r; + } + + _cleanup_fclose_ FILE *file = fopen(filename, "w"); + if (!file) { + return DNSSEC_NOT_FOUND; + } + + if (json) { + r = json_dumpf(json, file, JSON_DUMP_OPTIONS); + if (r != DNSSEC_EOK) { + return r; + } + } + + fputc('\n', file); + return DNSSEC_EOK; +} + +/* -- public API ----------------------------------------------------------- */ + +_public_ +dnssec_keyusage_t *dnssec_keyusage_new() +{ + dnssec_keyusage_t *keyusage = dnssec_list_new(); + return keyusage; +} + +_public_ +void dnssec_keyusage_free(dnssec_keyusage_t *keyusage) +{ + if (keyusage == NULL) { + return; + } + + if (!dnssec_list_is_empty(keyusage)) { + dnssec_list_foreach(item, keyusage) { + record_keyusage_t *record = dnssec_item_get(item); + + free(record->key_id); + dnssec_list_foreach(item2, record->zones) { + char *zone = dnssec_item_get(item2); + free(zone); + } + dnssec_list_free(record->zones); + free(record); + } + } + dnssec_list_free(keyusage); + keyusage = NULL; +} diff --git a/src/dnssec/lib/sign/sign.c b/src/dnssec/lib/sign/sign.c index 60cba347bd5e38dd43e33099bfbafc2f9cfaeccd..03f727ffdf0e937461c844b482455dd840a17d14 100644 --- a/src/dnssec/lib/sign/sign.c +++ b/src/dnssec/lib/sign/sign.c @@ -266,6 +266,8 @@ static const algorithm_functions_t *get_functions(const dnssec_key_t *key) case DNSSEC_KEY_ALGORITHM_ECDSA_P256_SHA256: case DNSSEC_KEY_ALGORITHM_ECDSA_P384_SHA384: return &ecdsa_functions; + case DNSSEC_KEY_ALGORITHM_ED25519: + case DNSSEC_KEY_ALGORITHM_ED448: default: return NULL; } @@ -291,6 +293,8 @@ static gnutls_digest_algorithm_t get_digest_algorithm(const dnssec_key_t *key) return GNUTLS_DIG_SHA512; case DNSSEC_KEY_ALGORITHM_ECDSA_P384_SHA384: return GNUTLS_DIG_SHA384; + case DNSSEC_KEY_ALGORITHM_ED25519: + case DNSSEC_KEY_ALGORITHM_ED448: default: return GNUTLS_DIG_UNKNOWN; } diff --git a/src/dnssec/tests/.gitignore b/src/dnssec/tests/.gitignore index bdbb8facbb25f061778b53b874d9b526967700ae..5075e739c2e7c3b1b4b0a6d28519d537cdcf2f71 100644 --- a/src/dnssec/tests/.gitignore +++ b/src/dnssec/tests/.gitignore @@ -9,6 +9,7 @@ /event_nsec3_resalt /kasp_dir_escape /kasp_dir_file +/keyusage /kasp_policy /kasp_store /key diff --git a/src/dnssec/tests/Makefile.am b/src/dnssec/tests/Makefile.am index 2821b55c3f8ca692bf6a67bfe28434ff7f8cfca2..6f3fed12f8715ce48607089dc869b7eec0d84cfc 100644 --- a/src/dnssec/tests/Makefile.am +++ b/src/dnssec/tests/Makefile.am @@ -34,6 +34,7 @@ check_PROGRAMS = \ keystore_pkcs8 \ keystore_pkcs8_dir \ keytag \ + keyusage \ list \ nsec_bitmap \ nsec_hash \ diff --git a/src/dnssec/tests/event_keystate.c b/src/dnssec/tests/event_keystate.c index da0efb9c8eb9f709e3ef659169211ebe59ebcc31..b14768d07f760b1a82c4d84313b4d5628bf37527 100644 --- a/src/dnssec/tests/event_keystate.c +++ b/src/dnssec/tests/event_keystate.c @@ -17,7 +17,7 @@ #include <tap/basic.h> #include <string.h> -#include "event/keystate.h" +#include "dnssec/keystate.h" #define PAST 1426852710 #define NOW 1426852711 @@ -40,28 +40,28 @@ int main(int argc, char *argv[]) // valid states key.timing.publish = PAST; - ok(get_key_state(&key, NOW) == DNSSEC_KEY_STATE_PUBLISHED, "published"); + ok(dnssec_get_key_state(&key, NOW) == DNSSEC_KEY_STATE_PUBLISHED, "published"); key.timing.active = PAST; - ok(get_key_state(&key, NOW) == DNSSEC_KEY_STATE_ACTIVE, "active"); + ok(dnssec_get_key_state(&key, NOW) == DNSSEC_KEY_STATE_ACTIVE, "active"); key.timing.retire = PAST; - ok(get_key_state(&key, NOW) == DNSSEC_KEY_STATE_RETIRED, "retired"); + ok(dnssec_get_key_state(&key, NOW) == DNSSEC_KEY_STATE_RETIRED, "retired"); key.timing.remove = PAST; - ok(get_key_state(&key, NOW) == DNSSEC_KEY_STATE_REMOVED, "removed"); + ok(dnssec_get_key_state(&key, NOW) == DNSSEC_KEY_STATE_REMOVED, "removed"); memset(&key.timing, 0, sizeof(key.timing)); - ok(get_key_state(&key, NOW) == DNSSEC_KEY_STATE_ACTIVE, "default (active)"); + ok(dnssec_get_key_state(&key, NOW) == DNSSEC_KEY_STATE_ACTIVE, "default (active)"); // currently unsupported key.timing = INITIAL_TIMING; - ok(get_key_state(&key, NOW) == DNSSEC_KEY_STATE_INVALID, "created"); + ok(dnssec_get_key_state(&key, NOW) == DNSSEC_KEY_STATE_INVALID, "created"); key.timing.publish = FUTURE; key.timing.active = PAST; - ok(get_key_state(&key, NOW) == DNSSEC_KEY_STATE_INVALID, "signature pre-publish"); + ok(dnssec_get_key_state(&key, NOW) == DNSSEC_KEY_STATE_INVALID, "signature pre-publish"); return 0; } diff --git a/src/dnssec/tests/keyusage.c b/src/dnssec/tests/keyusage.c new file mode 100644 index 0000000000000000000000000000000000000000..59a3dd2506bc7d47f1b093dbc16eafa8d58767eb --- /dev/null +++ b/src/dnssec/tests/keyusage.c @@ -0,0 +1,124 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <tap/basic.h> +#include <tap/files.h> +#include <string.h> +#include <stdio.h> + +#include "dnssec.h" + +static void test_keyusage_empty(const char *json_file) +{ + diag("%s", __func__); + + dnssec_keyusage_t *k = dnssec_keyusage_new(); + + ok(dnssec_keyusage_load(k, json_file)== DNSSEC_NOT_FOUND, "keyusage_load empty, no keyusage"); + + ok(dnssec_list_is_empty(k), "List of records is empty."); + + ok(dnssec_keyusage_save(k, json_file) == DNSSEC_EOK , "keyusage_save empty"); + + ok(dnssec_keyusage_load(k, json_file)== DNSSEC_EOK , "keyusage_load empty"); + + ok(dnssec_list_is_empty(k), "List of records is empty."); + + dnssec_keyusage_free(k); +} + +static void test_keyusage_basic(void) +{ + diag("%s", __func__); + + dnssec_keyusage_t *k = NULL; + + k = dnssec_keyusage_new(); + ok(dnssec_list_is_empty(k), "List of records is empty."); + + dnssec_keyusage_add(k, "prvni", "zona"); + + ok(!dnssec_list_is_empty(k), "List of records is not empty."); + // Check added key being used + ok(dnssec_keyusage_is_used(k, "prvni"), "Key is used."); + // Remove added key and check empty record + dnssec_keyusage_remove(k, "prvni", "zona"); + ok(dnssec_list_is_empty(k), "List of records is empty."); + ok(!dnssec_keyusage_is_used(k, "prvni"), "Key is not used."); + // Check if key is used when one of zones is deleted + dnssec_keyusage_add(k, "prvni", "zona"); + dnssec_keyusage_add(k, "prvni", "zona2"); + dnssec_keyusage_remove(k, "prvni", "zona"); + ok(dnssec_keyusage_is_used(k, "prvni"), "Key is used."); + + // Check if key is unused after deleting both zones + dnssec_keyusage_remove(k, "prvni", "zona2"); + ok(!dnssec_keyusage_is_used(k, "prvni"), "Key is not used."); + + dnssec_keyusage_free(k); +} + +static void test_keyusage_file(const char *json_file) +{ + dnssec_keyusage_t *k = NULL; + k = dnssec_keyusage_new(); + dnssec_keyusage_add(k, "prvni", "zona"); + dnssec_keyusage_add(k, "prvni", "zona2"); + dnssec_keyusage_add(k, "druhy", "zona"); + + ok(dnssec_keyusage_save(k, json_file) == DNSSEC_EOK , "kayusage_save"); + + dnssec_keyusage_free(k); + k = dnssec_keyusage_new(); + + ok(!dnssec_keyusage_is_used(k, "prvni"), "Key is not used - freed succesfully."); + ok(!dnssec_keyusage_is_used(k, "druhy"), "Key is not used - freed succesfully."); + + ok(dnssec_keyusage_load(k, json_file)== DNSSEC_EOK , "kayusage_load"); + + ok(dnssec_keyusage_is_used(k, "prvni"), "Key is used - loaded succesfully."); + ok(dnssec_keyusage_is_used(k, "druhy"), "Key is used - loaded succesfully."); + + dnssec_keyusage_free(k); +} + +int main(void) +{ + plan_lazy(); + + char *json_path = NULL, *json_file = NULL; + + json_path = test_mkdtemp(); + if (!json_path) { + fprintf(stderr, "Failed to create teporary path."); + return -1; + } + + int r = asprintf(&json_file, "%s/keyusage.json", json_path); + if (r == -1) { + fprintf(stderr, "Failed to create teporary file path."); + return -1; + } + + test_keyusage_empty(json_file); + test_keyusage_basic(); + test_keyusage_file(json_file); + + test_rm_rf(json_path); + free(json_path); + + return 0; +} diff --git a/src/knot/common/log.c b/src/knot/common/log.c index 9bf114167e368683a7a6b5547d4577c17af7cdaf..390efd48923f328d89de3c2ca7ef7602f1588fe7 100644 --- a/src/knot/common/log.c +++ b/src/knot/common/log.c @@ -43,11 +43,11 @@ int use_journal = 0; /*! Log context. */ typedef struct { - size_t facility_count; /*!< Log sink count. */ - int *facility; /*!< Log sinks. */ - size_t file_count; /*!< Open files count. */ - FILE **file; /*!< Open files. */ - logflag_t flags; /*!< Formatting flags. */ + size_t target_count; /*!< Log target count. */ + int *target; /*!< Log targets. */ + size_t file_count; /*!< Open files count. */ + FILE **file; /*!< Open files. */ + log_flag_t flags; /*!< Formatting flags. */ } log_t; /*! Log singleton. */ @@ -68,13 +68,13 @@ static void sink_free(log_t *log) for (int i = 0; i < log->file_count; ++i) { fclose(log->file[i]); } - free(log->facility); + free(log->target); free(log->file); free(log); } /*! - * \brief Create logging facilities respecting their canonical order. + * \brief Create logging targets respecting their canonical order. * * Facilities ordering: Syslog, Stderr, Stdout, File0... */ @@ -86,20 +86,20 @@ static log_t *sink_setup(size_t file_count) } memset(log, 0, sizeof(*log)); - // Reserve space for facilities. - log->facility_count = LOGT_FILE + file_count; - log->facility = malloc(LOG_ANY * sizeof(int) * log->facility_count); - if (!log->facility) { + // Reserve space for targets. + log->target_count = LOG_TARGET_FILE + file_count; + log->target = malloc(LOG_SOURCE_ANY * sizeof(int) * log->target_count); + if (!log->target) { free(log); return NULL; } - memset(log->facility, 0, LOG_ANY * sizeof(int) * log->facility_count); + memset(log->target, 0, LOG_SOURCE_ANY * sizeof(int) * log->target_count); // Reserve space for log files. if (file_count > 0) { log->file = malloc(sizeof(FILE *) * file_count); if (!log->file) { - free(log->facility); + free(log->target); free(log); return NULL; } @@ -117,34 +117,34 @@ static void sink_publish(log_t *log) sink_free(old_log); } -static int *src_levels(log_t *log, logfacility_t facility, logsrc_t src) +static int *src_levels(log_t *log, log_target_t target, log_source_t src) { - assert(src < LOG_ANY); - return &log->facility[LOG_ANY * facility + src]; + assert(src < LOG_SOURCE_ANY); + return &log->target[LOG_SOURCE_ANY * target + src]; } -static void sink_levels_set(log_t *log, logfacility_t facility, logsrc_t src, int levels) +static void sink_levels_set(log_t *log, log_target_t target, log_source_t src, int levels) { // Assign levels to the specified source. - if (src != LOG_ANY) { - *src_levels(log, facility, src) = levels; + if (src != LOG_SOURCE_ANY) { + *src_levels(log, target, src) = levels; } else { // ANY ~ set levels to all sources. - for (int i = 0; i < LOG_ANY; ++i) { - *src_levels(log, facility, i) = levels; + for (int i = 0; i < LOG_SOURCE_ANY; ++i) { + *src_levels(log, target, i) = levels; } } } -static void sink_levels_add(log_t *log, logfacility_t facility, logsrc_t src, int levels) +static void sink_levels_add(log_t *log, log_target_t target, log_source_t src, int levels) { // Add levels to the specified source. - if (src != LOG_ANY) { - *src_levels(log, facility, src) |= levels; + if (src != LOG_SOURCE_ANY) { + *src_levels(log, target, src) |= levels; } else { // ANY ~ add levels to all sources. - for (int i = 0; i < LOG_ANY; ++i) { - *src_levels(log, facility, i) |= levels; + for (int i = 0; i < LOG_SOURCE_ANY; ++i) { + *src_levels(log, target, i) |= levels; } } } @@ -167,9 +167,9 @@ void log_init(void) use_journal = sd_booted(); #endif - sink_levels_set(log, LOGT_SYSLOG, LOG_ANY, emask); - sink_levels_set(log, LOGT_STDERR, LOG_ANY, emask); - sink_levels_set(log, LOGT_STDOUT, LOG_ANY, imask); + sink_levels_set(log, LOG_TARGET_SYSLOG, LOG_SOURCE_ANY, emask); + sink_levels_set(log, LOG_TARGET_STDERR, LOG_SOURCE_ANY, emask); + sink_levels_set(log, LOG_TARGET_STDOUT, LOG_SOURCE_ANY, imask); sink_publish(log); setlogmask(LOG_UPTO(LOG_DEBUG)); @@ -186,34 +186,34 @@ void log_close(void) closelog(); } -void log_flag_set(logflag_t flag) +void log_flag_set(log_flag_t flag) { if (log_isopen()) { s_log->flags |= flag; } } -void log_levels_set(logfacility_t facility, logsrc_t src, int levels) +void log_levels_set(log_target_t target, log_source_t src, int levels) { if (log_isopen()) { - sink_levels_set(s_log, facility, src, levels); + sink_levels_set(s_log, target, src, levels); } } -void log_levels_add(logfacility_t facility, logsrc_t src, int levels) +void log_levels_add(log_target_t target, log_source_t src, int levels) { if (log_isopen()) { - sink_levels_add(s_log, facility, src, levels); + sink_levels_add(s_log, target, src, levels); } } -static void emit_log_msg(int level, const char *zone, size_t zone_len, const char *msg) +static void emit_log_msg(int level, log_source_t src, const char *zone, + size_t zone_len, const char *msg) { log_t *log = s_log; - logsrc_t src = zone ? LOG_ZONE : LOG_SERVER; - // Syslog facility. - if (*src_levels(log, LOGT_SYSLOG, src) & LOG_MASK(level)) { + // Syslog target. + if (*src_levels(log, LOG_TARGET_SYSLOG, src) & LOG_MASK(level)) { #ifdef ENABLE_SYSTEMD if (use_journal) { char *zone_fmt = zone ? "ZONE=%.*s" : NULL; @@ -230,7 +230,7 @@ static void emit_log_msg(int level, const char *zone, size_t zone_len, const cha // Prefix date and time. char tstr[LOG_BUFLEN] = { 0 }; - if (!(s_log->flags & LOG_FNO_TIMESTAMP)) { + if (!(s_log->flags & LOG_FLAG_NOTIMESTAMP)) { struct tm lt; struct timeval tv; gettimeofday(&tv, NULL); @@ -240,14 +240,14 @@ static void emit_log_msg(int level, const char *zone, size_t zone_len, const cha } } - // Other log facilities. - for (int i = LOGT_STDERR; i < LOGT_FILE + log->file_count; ++i) { + // Other log targets. + for (int i = LOG_TARGET_STDERR; i < LOG_TARGET_FILE + log->file_count; ++i) { if (*src_levels(log, i, src) & LOG_MASK(level)) { FILE *stream; switch (i) { - case LOGT_STDERR: stream = stderr; break; - case LOGT_STDOUT: stream = stdout; break; - default: stream = log->file[i - LOGT_FILE]; break; + case LOG_TARGET_STDERR: stream = stderr; break; + case LOG_TARGET_STDOUT: stream = stdout; break; + default: stream = log->file[i - LOG_TARGET_FILE]; break; } // Print the message. @@ -289,7 +289,8 @@ static int log_msg_add(char **write, size_t *capacity, const char *fmt, ...) return KNOT_EOK; } -static void log_msg_text(int level, const char *zone, const char *fmt, va_list args) +static void log_msg_text(int level, log_source_t src, const char *zone, + const char *fmt, va_list args) { if (!log_isopen()) { return; @@ -303,7 +304,7 @@ static void log_msg_text(int level, const char *zone, const char *fmt, va_list a rcu_read_lock(); // Prefix error level. - if (level != LOG_INFO || !(s_log->flags & LOG_FNO_INFO)) { + if (level != LOG_INFO || !(s_log->flags & LOG_FLAG_NOINFO)) { const char *prefix = level_prefix(level); int ret = log_msg_add(&write, &capacity, "%s: ", prefix); if (ret != KNOT_EOK) { @@ -315,13 +316,10 @@ static void log_msg_text(int level, const char *zone, const char *fmt, va_list a // Prefix zone name. size_t zone_len = 0; if (zone != NULL) { - // Strip terminating dot (unless root zone). zone_len = strlen(zone); - if (zone_len > 1 && zone[zone_len - 1] == '.') { - zone_len -= 1; - } + const char *trailing_dot = zone[zone_len - 1] == '.' ? "" : "."; - int ret = log_msg_add(&write, &capacity, "[%.*s] ", zone_len, zone); + int ret = log_msg_add(&write, &capacity, "[%.*s%s] ", zone_len, zone, trailing_dot); if (ret != KNOT_EOK) { rcu_read_unlock(); return; @@ -331,37 +329,46 @@ static void log_msg_text(int level, const char *zone, const char *fmt, va_list a // Compile log message. int ret = vsnprintf(write, capacity, fmt, args); if (ret >= 0) { - // Send to logging facilities. - emit_log_msg(level, zone, zone_len, buff); + // Send to logging targets. + emit_log_msg(level, src, zone, zone_len, buff); } rcu_read_unlock(); } -void log_msg(int priority, const char *fmt, ...) +void log_fmt(int priority, log_source_t src, const char *fmt, ...) { va_list args; va_start(args, fmt); - log_msg_text(priority, NULL, fmt, args); + log_msg_text(priority, src, NULL, fmt, args); va_end(args); } -void log_msg_zone(int priority, const knot_dname_t *zone, const char *fmt, ...) +void log_fmt_zone(int priority, log_source_t src, const knot_dname_t *zone, + const char *fmt, ...) { char buff[KNOT_DNAME_TXT_MAXLEN + 1]; char *zone_str = knot_dname_to_str(buff, zone, sizeof(buff)); + if (zone_str == NULL) { + zone_str = NULL_ZONE_STR; + } va_list args; va_start(args, fmt); - log_msg_text(priority, zone_str ? zone_str : NULL_ZONE_STR, fmt, args); + log_msg_text(priority, src, zone_str, fmt, args); va_end(args); } -void log_msg_zone_str(int priority, const char *zone, const char *fmt, ...) +void log_fmt_zone_str(int priority, log_source_t src, const char *zone, + const char *fmt, ...) { + if (zone == NULL) { + zone = NULL_ZONE_STR; + } + va_list args; va_start(args, fmt); - log_msg_text(priority, zone ? zone : NULL_ZONE_STR, fmt, args); + log_msg_text(priority, src, zone, fmt, args); va_end(args); } @@ -380,24 +387,24 @@ int log_update_privileges(int uid, int gid) return KNOT_EOK; } -static logfacility_t get_logtype(const char *logname) +static log_target_t get_logtype(const char *logname) { assert(logname); if (strcasecmp(logname, "syslog") == 0) { - return LOGT_SYSLOG; + return LOG_TARGET_SYSLOG; } else if (strcasecmp(logname, "stderr") == 0) { - return LOGT_STDERR; + return LOG_TARGET_STDERR; } else if (strcasecmp(logname, "stdout") == 0) { - return LOGT_STDOUT; + return LOG_TARGET_STDOUT; } else { - return LOGT_FILE; + return LOG_TARGET_FILE; } } static int log_open_file(log_t *log, const char *filename) { - assert(LOGT_FILE + log->file_count < log->facility_count); + assert(LOG_TARGET_FILE + log->file_count < log->target_count); // Open the file. log->file[log->file_count] = fopen(filename, "a"); @@ -408,7 +415,7 @@ static int log_open_file(log_t *log, const char *filename) // Disable buffering. setvbuf(log->file[log->file_count], NULL, _IONBF, 0); - return LOGT_FILE + log->file_count++; + return LOG_TARGET_FILE + log->file_count++; } void log_reconfigure(conf_t *conf) @@ -420,12 +427,12 @@ void log_reconfigure(conf_t *conf) return; } - // Find maximum log facility id. + // Find maximum log target id. unsigned files = 0; for (conf_iter_t iter = conf_iter(conf, C_LOG); iter.code == KNOT_EOK; conf_iter_next(conf, &iter)) { conf_val_t id = conf_iter_id(conf, &iter); - if (get_logtype(conf_str(&id)) == LOGT_FILE) { + if (get_logtype(conf_str(&id)) == LOG_TARGET_FILE) { ++files; } } @@ -443,13 +450,13 @@ void log_reconfigure(conf_t *conf) conf_val_t id = conf_iter_id(conf, &iter); const char *logname = conf_str(&id); - // Get facility. - int facility = get_logtype(logname); - if (facility == LOGT_FILE) { - facility = log_open_file(log, logname); - if (facility < 0) { + // Get target. + int target = get_logtype(logname); + if (target == LOG_TARGET_FILE) { + target = log_open_file(log, logname); + if (target < 0) { log_error("failed to open log, file '%s' (%s)", - logname, knot_strerror(facility)); + logname, knot_strerror(target)); continue; } } @@ -460,17 +467,22 @@ void log_reconfigure(conf_t *conf) // Set SERVER logging. levels_val = conf_id_get(conf, C_LOG, C_SERVER, &id); levels = conf_opt(&levels_val); - sink_levels_add(log, facility, LOG_SERVER, levels); + sink_levels_add(log, target, LOG_SOURCE_SERVER, levels); + + // Set CONTROL logging. + levels_val = conf_id_get(conf, C_LOG, C_CTL, &id); + levels = conf_opt(&levels_val); + sink_levels_add(log, target, LOG_SOURCE_CONTROL, levels); // Set ZONE logging. levels_val = conf_id_get(conf, C_LOG, C_ZONE, &id); levels = conf_opt(&levels_val); - sink_levels_add(log, facility, LOG_ZONE, levels); + sink_levels_add(log, target, LOG_SOURCE_ZONE, levels); // Set ANY logging. levels_val = conf_id_get(conf, C_LOG, C_ANY, &id); levels = conf_opt(&levels_val); - sink_levels_add(log, facility, LOG_ANY, levels); + sink_levels_add(log, target, LOG_SOURCE_ANY, levels); } sink_publish(log); diff --git a/src/knot/common/log.h b/src/knot/common/log.h index 18746dd685864cd6d3ec655800b1bc5d3f85f745..3fb3d0cc5ca9389decc5541480b194756283e223 100644 --- a/src/knot/common/log.h +++ b/src/knot/common/log.h @@ -40,26 +40,27 @@ /*! \brief Format for timestamps in log files. */ #define KNOT_LOG_TIME_FORMAT "%Y-%m-%dT%H:%M:%S" -/*! \brief Logging facility types. */ +/*! \brief Logging targets. */ typedef enum { - LOGT_SYSLOG = 0, /*!< Logging to syslog(3) facility. */ - LOGT_STDERR = 1, /*!< Print log messages to the stderr. */ - LOGT_STDOUT = 2, /*!< Print log messages to the stdout. */ - LOGT_FILE = 3 /*!< Generic logging to (unbuffered) file on the disk. */ -} logfacility_t; + LOG_TARGET_SYSLOG = 0, /*!< System log. */ + LOG_TARGET_STDERR = 1, /*!< Standard error stream. */ + LOG_TARGET_STDOUT = 2, /*!< Standard output stream. */ + LOG_TARGET_FILE = 3 /*!< Generic logging to a file (unbuffered). */ +} log_target_t; /*! \brief Logging sources. */ typedef enum { - LOG_SERVER = 0, /*!< Server module. */ - LOG_ZONE = 1, /*!< Zone manipulation module. */ - LOG_ANY = 2 /*!< Any module. */ -} logsrc_t; + LOG_SOURCE_SERVER = 0, /*!< Server module. */ + LOG_SOURCE_CONTROL = 1, /*!< Server control module. */ + LOG_SOURCE_ZONE = 2, /*!< Zone manipulation module. */ + LOG_SOURCE_ANY = 3 /*!< Any module. */ +} log_source_t; /*! \brief Logging format flags. */ typedef enum { - LOG_FNO_TIMESTAMP = 1 << 0, /*!< Don't print timestamp prefix. */ - LOG_FNO_INFO = 1 << 1 /*!< Don't print info level prefix. */ -} logflag_t; + LOG_FLAG_NOTIMESTAMP = 1 << 0, /*!< Don't print timestamp prefix. */ + LOG_FLAG_NOINFO = 1 << 1 /*!< Don't print info level prefix. */ +} log_flag_t; /*! * \brief Setup logging subsystem. @@ -74,28 +75,28 @@ void log_close(void); /*! * \brief Set logging format flag. */ -void log_flag_set(logflag_t flag); +void log_flag_set(log_flag_t flag); /*! - * \brief Set log levels for given facility. + * \brief Set log levels for given target. * - * \param facility Logging facility index (LOGT_SYSLOG...). - * \param src Logging source (LOG_SERVER...LOG_ANY). - * \param levels Bitmask of specified log levels. + * \param target Logging target index (LOG_TARGET_SYSLOG...). + * \param src Logging source (LOG_SOURCE_SERVER...LOG_SOURCE_ANY). + * \param levels Bitmask of specified log levels. */ -void log_levels_set(logfacility_t facility, logsrc_t src, int levels); +void log_levels_set(log_target_t target, log_source_t src, int levels); /*! - * \brief Add log levels to a given facility. + * \brief Add log levels to a given target. * * New levels are added on top of existing, the resulting levels set is * "old_levels OR new_levels". * - * \param facility Logging facility index (LOGT_SYSLOG...). - * \param src Logging source (LOG_SERVER...LOG_ANY). - * \param levels Bitmask of specified log levels. + * \param target Logging target index (LOG_TARGET_SYSLOG...). + * \param src Logging source (LOG_SOURCE_SERVER...LOG_SOURCE_ANY). + * \param levels Bitmask of specified log levels. */ -void log_levels_add(logfacility_t facility, logsrc_t src, int levels); +void log_levels_add(log_target_t target, log_source_t src, int levels); /*! * \brief Log message into server category. @@ -103,54 +104,71 @@ void log_levels_add(logfacility_t facility, logsrc_t src, int levels); * Function follows printf() format. * * \param priority Message priority. + * \param src Message source. * \param fmt Content of the logged message. */ -void log_msg(int priority, const char *fmt, ...) - __attribute__((format(printf, 2, 3))); +void log_fmt(int priority, log_source_t src, const char *fmt, ...) +__attribute__((format(printf, 3, 4))); /*! * \brief Log message into zone category. * - * \see log_msg + * \see log_fmt * * \param zone Zone name in wire format. */ -void log_msg_zone(int priority, const knot_dname_t *zone, const char *fmt, ...) - __attribute__((format(printf, 3, 4))); +void log_fmt_zone(int priority, log_source_t src, const knot_dname_t *zone, const char *fmt, ...) +__attribute__((format(printf, 4, 5))); /*! * \brief Log message into zone category. * - * \see log_msg + * \see log_fmt * * \param zone Zone name as an ASCII string. */ -void log_msg_zone_str(int priority, const char *zone, const char *fmt, ...) - __attribute__((format(printf, 3, 4))); +void log_fmt_zone_str(int priority, log_source_t src, const char *zone, const char *fmt, ...) +__attribute__((format(printf, 4, 5))); + +/* Compatibility wrappers. */ +#define log_msg(priority, fmt, ...) log_fmt(priority, LOG_SOURCE_SERVER, fmt, ##__VA_ARGS__) +#define log_msg_zone(priority, zone, fmt, ...) log_fmt_zone(priority, LOG_SOURCE_ZONE, zone, fmt, ##__VA_ARGS__) +#define log_msg_zone_str(priority, zone, fmt, ...) log_fmt_zone_str(priority, LOG_SOURCE_ZONE, zone, fmt, ##__VA_ARGS__) /*! * \brief Convenient logging macros. */ -#define log_fatal(msg, ...) log_msg(LOG_CRIT, msg, ##__VA_ARGS__) -#define log_error(msg, ...) log_msg(LOG_ERR, msg, ##__VA_ARGS__) -#define log_warning(msg, ...) log_msg(LOG_WARNING, msg, ##__VA_ARGS__) -#define log_notice(msg, ...) log_msg(LOG_NOTICE, msg, ##__VA_ARGS__) -#define log_info(msg, ...) log_msg(LOG_INFO, msg, ##__VA_ARGS__) -#define log_debug(msg, ...) log_msg(LOG_DEBUG, msg, ##__VA_ARGS__) - -#define log_zone_fatal(zone, msg, ...) log_msg_zone(LOG_CRIT, zone, msg, ##__VA_ARGS__) -#define log_zone_error(zone, msg, ...) log_msg_zone(LOG_ERR, zone, msg, ##__VA_ARGS__) -#define log_zone_warning(zone, msg, ...) log_msg_zone(LOG_WARNING, zone, msg, ##__VA_ARGS__) -#define log_zone_notice(zone, msg, ...) log_msg_zone(LOG_NOTICE, zone, msg, ##__VA_ARGS__) -#define log_zone_info(zone, msg, ...) log_msg_zone(LOG_INFO, zone, msg, ##__VA_ARGS__) -#define log_zone_debug(zone, msg, ...) log_msg_zone(LOG_DEBUG, zone, msg, ##__VA_ARGS__) - -#define log_zone_str_fatal(zone, msg, ...) log_msg_zone_str(LOG_CRIT, zone, msg, ##__VA_ARGS__) -#define log_zone_str_error(zone, msg, ...) log_msg_zone_str(LOG_ERR, zone, msg, ##__VA_ARGS__) -#define log_zone_str_warning(zone, msg, ...) log_msg_zone_str(LOG_WARNING, zone, msg, ##__VA_ARGS__) -#define log_zone_str_notice(zone, msg, ...) log_msg_zone_str(LOG_NOTICE, zone, msg, ##__VA_ARGS__) -#define log_zone_str_info(zone, msg, ...) log_msg_zone_str(LOG_INFO, zone, msg, ##__VA_ARGS__) -#define log_zone_str_debug(zone, msg, ...) log_msg_zone_str(LOG_DEBUG, zone, msg, ##__VA_ARGS__) +#define log_fatal(msg, ...) log_fmt(LOG_CRIT, LOG_SOURCE_SERVER, msg, ##__VA_ARGS__) +#define log_error(msg, ...) log_fmt(LOG_ERR, LOG_SOURCE_SERVER, msg, ##__VA_ARGS__) +#define log_warning(msg, ...) log_fmt(LOG_WARNING, LOG_SOURCE_SERVER, msg, ##__VA_ARGS__) +#define log_notice(msg, ...) log_fmt(LOG_NOTICE, LOG_SOURCE_SERVER, msg, ##__VA_ARGS__) +#define log_info(msg, ...) log_fmt(LOG_INFO, LOG_SOURCE_SERVER, msg, ##__VA_ARGS__) +#define log_debug(msg, ...) log_fmt(LOG_DEBUG, LOG_SOURCE_SERVER, msg, ##__VA_ARGS__) + +#define log_ctl_fatal(msg, ...) log_fmt(LOG_CRIT, LOG_SOURCE_CONTROL, msg, ##__VA_ARGS__) +#define log_ctl_error(msg, ...) log_fmt(LOG_ERR, LOG_SOURCE_CONTROL, msg, ##__VA_ARGS__) +#define log_ctl_warning(msg, ...) log_fmt(LOG_WARNING, LOG_SOURCE_CONTROL, msg, ##__VA_ARGS__) +#define log_ctl_notice(msg, ...) log_fmt(LOG_NOTICE, LOG_SOURCE_CONTROL, msg, ##__VA_ARGS__) +#define log_ctl_info(msg, ...) log_fmt(LOG_INFO, LOG_SOURCE_CONTROL, msg, ##__VA_ARGS__) +#define log_ctl_debug(msg, ...) log_fmt(LOG_DEBUG, LOG_SOURCE_CONTROL, msg, ##__VA_ARGS__) + +#define log_ctl_zone_str_error(zone, msg, ...) log_fmt_zone_str(LOG_ERR, LOG_SOURCE_CONTROL, zone, msg, ##__VA_ARGS__) +#define log_ctl_zone_str_info(zone, msg, ...) log_fmt_zone_str(LOG_INFO, LOG_SOURCE_CONTROL, zone, msg, ##__VA_ARGS__) +#define log_ctl_zone_str_debug(zone, msg, ...) log_fmt_zone_str(LOG_DEBUG, LOG_SOURCE_CONTROL, zone, msg, ##__VA_ARGS__) + +#define log_zone_fatal(zone, msg, ...) log_fmt_zone(LOG_CRIT, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_error(zone, msg, ...) log_fmt_zone(LOG_ERR, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_warning(zone, msg, ...) log_fmt_zone(LOG_WARNING, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_notice(zone, msg, ...) log_fmt_zone(LOG_NOTICE, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_info(zone, msg, ...) log_fmt_zone(LOG_INFO, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_debug(zone, msg, ...) log_fmt_zone(LOG_DEBUG, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) + +#define log_zone_str_fatal(zone, msg, ...) log_fmt_zone_str(LOG_CRIT, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_str_error(zone, msg, ...) log_fmt_zone_str(LOG_ERR, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_str_warning(zone, msg, ...) log_fmt_zone_str(LOG_WARNING, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_str_notice(zone, msg, ...) log_fmt_zone_str(LOG_NOTICE, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_str_info(zone, msg, ...) log_fmt_zone_str(LOG_INFO, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) +#define log_zone_str_debug(zone, msg, ...) log_fmt_zone_str(LOG_DEBUG, LOG_SOURCE_ZONE, zone, msg, ##__VA_ARGS__) /*! * \brief Update open files ownership. diff --git a/src/knot/common/stats.c b/src/knot/common/stats.c new file mode 100644 index 0000000000000000000000000000000000000000..2c507f9fe92b5b2585f6b2cb1ec972297ca660c2 --- /dev/null +++ b/src/knot/common/stats.c @@ -0,0 +1,277 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <inttypes.h> +#include <sys/stat.h> +#include <time.h> +#include <unistd.h> +#include <urcu.h> + +#include "contrib/files.h" +#include "knot/common/stats.h" +#include "knot/common/log.h" +#include "knot/nameserver/query_module.h" + +struct { + bool active_dumper; + pthread_t dumper; + uint32_t timer; + server_t *server; +} stats = { 0 }; + +#define DUMP_STR(fd, level, name, ...) do { \ + fprintf(fd, "%-.*s"name": %s\n", level, " ", ##__VA_ARGS__); \ + } while (0) +#define DUMP_CTR(fd, level, name, ...) do { \ + fprintf(fd, "%-.*s"name": %"PRIu64"\n", level, " ", ##__VA_ARGS__); \ + } while (0) + +uint64_t server_zone_count(server_t *server) +{ + return knot_zonedb_size(server->zone_db); +} + +const stats_item_t server_stats[] = { + { "zone-count", server_zone_count }, + { 0 } +}; + +static void dump_counters(FILE *fd, int level, mod_ctr_t *ctr) +{ + for (uint32_t j = 0; j < ctr->count; j++) { + // Skip empty counters. + if (ctr->counters[j] == 0) { + continue; + } + + if (ctr->idx_to_str != NULL) { + char *str = ctr->idx_to_str(j, ctr->count); + if (str != NULL) { + DUMP_CTR(fd, level, "%s", str, ctr->counters[j]); + free(str); + } + } else { + DUMP_CTR(fd, level, "%u", j, ctr->counters[j]); + } + } +} + +static void dump_modules(FILE *fd, list_t *query_modules, const knot_dname_t *zone) +{ + static int level = 0; + struct query_module *mod = NULL; + WALK_LIST(mod, *query_modules) { + // Skip modules without statistics. + if (mod->stats_count == 0) { + continue; + } + + // Dump zone name. + if (zone != NULL) { + // Prevent from zone section override. + if (level == 0) { + DUMP_STR(fd, level++, "zone", ""); + } else { + level = 1; + } + + char name[KNOT_DNAME_TXT_MAXLEN + 1]; + if (knot_dname_to_str(name, zone, sizeof(name)) == NULL) { + return; + } + DUMP_STR(fd, level++, "\"%s\"", name, ""); + } else { + level = 0; + } + + // Dump module counters. + DUMP_STR(fd, level, "%s", mod->id->name + 1, ""); + for (int i = 0; i < mod->stats_count; i++) { + mod_ctr_t *ctr = mod->stats + i; + if (ctr->name == NULL) { + // Empty counter. + continue; + } + if (ctr->count == 1) { + // Simple counter. + DUMP_CTR(fd, level + 1, "%s", ctr->name, ctr->counter); + } else { + // Array of counters. + DUMP_STR(fd, level + 1, "%s", ctr->name, ""); + dump_counters(fd, level + 2, ctr); + } + } + } +} + +static void zone_stats_dump(zone_t *zone, FILE *fd) +{ + if (EMPTY_LIST(zone->query_modules)) { + return; + } + + dump_modules(fd, &zone->query_modules, zone->name); +} + +static void dump_to_file(FILE *fd, server_t *server) +{ + char date[64] = ""; + + // Get formated current time string. + struct tm tm; + time_t now = time(NULL); + localtime_r(&now, &tm); + strftime(date, sizeof(date), "%Y-%m-%dT%H:%M:%S%z", &tm); + + // Get the server identity. + conf_val_t val = conf_get(conf(), C_SRV, C_IDENT); + const char *ident = conf_str(&val); + if (val.code != KNOT_EOK || ident[0] == '\0') { + ident = conf()->hostname; + } + + // Dump record header. + fprintf(fd, + "---\n" + "time: %s\n" + "identity: %s\n", + date, ident); + + // Dump server statistics. + DUMP_STR(fd, 0, "server", ""); + for (const stats_item_t *item = server_stats; item->name != NULL; item++) { + DUMP_CTR(fd, 1, "%s", item->name, item->val(server)); + } + + // Dump global statistics. + dump_modules(fd, &conf()->query_modules, NULL); + + // Dump zone statistics. + knot_zonedb_foreach(server->zone_db, zone_stats_dump, fd); +} + +static void dump_stats(server_t *server) +{ + conf_val_t val = conf_get(conf(), C_SRV, C_RUNDIR); + char *rundir = conf_abs_path(&val, NULL); + val = conf_get(conf(), C_STATS, C_FILE); + char *file_name = conf_abs_path(&val, rundir); + free(rundir); + + val = conf_get(conf(), C_STATS, C_APPEND); + bool append = conf_bool(&val); + + // Open or create output file. + FILE *fd = NULL; + char *tmp_name = NULL; + if (append) { + fd = fopen(file_name, "a"); + if (fd == NULL) { + log_error("stats, failed to append file '%s' (%s)", + file_name, knot_strerror(knot_map_errno())); + free(file_name); + return; + } + } else { + int ret = open_tmp_file(file_name, &tmp_name, &fd, + S_IRUSR | S_IWUSR | S_IRGRP); + if (ret != KNOT_EOK) { + log_error("stats, failed to open file '%s' (%s)", + file_name, knot_strerror(ret)); + free(file_name); + return; + } + } + assert(fd); + + // Dump stats into the file. + dump_to_file(fd, server); + + fflush(fd); + fclose(fd); + + // Switch the file contents. + if (!append) { + int ret = rename(tmp_name, file_name); + if (ret != 0) { + log_error("stats, failed to access file '%s' (%s)", + file_name, knot_strerror(knot_map_errno())); + unlink(tmp_name); + } + free(tmp_name); + } + + log_debug("stats, dumped into file '%s'", file_name); + free(file_name); +} + +static void *dumper(void *data) +{ + while (true) { + assert(stats.timer > 0); + sleep(stats.timer); + + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); + rcu_read_lock(); + dump_stats(stats.server); + rcu_read_unlock(); + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); + } + + return NULL; +} + +void stats_reconfigure(conf_t *conf, server_t *server) +{ + if (conf == NULL || server == NULL) { + return; + } + + // Update server context. + stats.server = server; + + conf_val_t val = conf_get(conf, C_STATS, C_TIMER); + stats.timer = conf_int(&val); + if (stats.timer > 0) { + // Check if dumping is already running. + if (stats.active_dumper) { + return; + } + + int ret = pthread_create(&stats.dumper, NULL, dumper, NULL); + if (ret != 0) { + log_error("stats, failed to launch periodic dumping (%s)", + knot_strerror(knot_map_errno_code(ret))); + } else { + stats.active_dumper = true; + } + // Stop current dumping. + } else if (stats.active_dumper) { + pthread_cancel(stats.dumper); + pthread_join(stats.dumper, NULL); + stats.active_dumper = false; + } +} + +void stats_deinit(void) +{ + if (stats.active_dumper) { + pthread_cancel(stats.dumper); + pthread_join(stats.dumper, NULL); + } + + memset(&stats, 0, sizeof(stats)); +} diff --git a/src/knot/common/stats.h b/src/knot/common/stats.h new file mode 100644 index 0000000000000000000000000000000000000000..9cbdd8b2d0e9f30c45c9f3a4bd1c2c42b666bae8 --- /dev/null +++ b/src/knot/common/stats.h @@ -0,0 +1,44 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "knot/server/server.h" + +typedef uint64_t (*stats_val_f)(server_t *server); + +/*! + * \brief Statistics metrics item. + */ +typedef struct { + const char *name; /*!< Metrics name. */ + stats_val_f val; /*!< Metrics value getter. */ +} stats_item_t; + +/*! + * \brief Basic server metrics. + */ +extern const stats_item_t server_stats[]; + +/*! + * \brief Reconfigures the statistics facility. + */ +void stats_reconfigure(conf_t *conf, server_t *server); + +/*! + * \brief Deinitializes the statistics facility. + */ +void stats_deinit(void); diff --git a/src/knot/conf/base.c b/src/knot/conf/base.c index a940253ef684a542486c3c61ecfdc61c314becc6..c595668abe296cce49cb462689fa3cdc69c92bf0 100644 --- a/src/knot/conf/base.c +++ b/src/knot/conf/base.c @@ -133,15 +133,10 @@ static void init_cache( val = conf_get(conf, C_SRV, C_MAX_TCP_CLIENTS); conf->cache.srv_max_tcp_clients = conf_int(&val); - val = conf_get(conf, C_SRV, C_RATE_LIMIT_SLIP); - conf->cache.srv_rate_limit_slip = conf_int(&val); - val = conf_get(conf, C_CTL, C_TIMEOUT); conf->cache.ctl_timeout = conf_int(&val) * 1000; conf->cache.srv_nsid = conf_get(conf, C_SRV, C_NSID); - - conf->cache.srv_rate_limit_whitelist = conf_get(conf, C_SRV, C_RATE_LIMIT_WHITELIST); } int conf_new( @@ -180,6 +175,7 @@ int conf_new( out->api = knot_db_lmdb_api(); struct knot_db_lmdb_opts lmdb_opts = KNOT_DB_LMDB_OPTS_INITIALIZER; lmdb_opts.mapsize = (size_t)CONF_MAPSIZE * 1024 * 1024; + lmdb_opts.maxreaders = CONF_MAX_DB_READERS; lmdb_opts.flags.env = KNOT_DB_LMDB_NOTLS; // Open the database. @@ -309,11 +305,22 @@ int conf_clone( } void conf_update( - conf_t *conf) + conf_t *conf, + conf_update_flag_t flags) { // Remove the clone flag for new master configuration. if (conf != NULL) { conf->is_clone = false; + + if ((flags & CONF_UPD_FCONFIO) && s_conf != NULL) { + conf->io.flags = s_conf->io.flags; + conf->io.zones = s_conf->io.zones; + } + if ((flags & CONF_UPD_FMODULES) && s_conf != NULL) { + list_dup(&conf->query_modules, &s_conf->query_modules, + sizeof(struct query_module)); + conf->query_plan = s_conf->query_plan; + } } conf_t **current_conf = &s_conf; @@ -324,6 +331,15 @@ void conf_update( if (old_conf != NULL) { // Remove the clone flag if a single configuration. old_conf->is_clone = (conf != NULL) ? true : false; + + if (flags & CONF_UPD_FCONFIO) { + old_conf->io.zones = NULL; + } + if (flags & CONF_UPD_FMODULES) { + init_list(&old_conf->query_modules); + old_conf->query_plan = NULL; + } + conf_free(old_conf); } } @@ -343,6 +359,10 @@ void conf_free( if (conf->io.txn != NULL) { conf->api->txn_abort(conf->io.txn_stack); } + if (conf->io.zones != NULL) { + hattrie_free(conf->io.zones); + mm_free(conf->mm, conf->io.zones); + } conf_deactivate_modules(&conf->query_modules, &conf->query_plan); @@ -355,6 +375,10 @@ void conf_free( free(conf); } +#define LOG_ARGS(mod_id, msg, ...) "module '%s%s%.*s', " msg, \ + mod_id->name + 1, (mod_id->len > 0) ? "/" : "", (int)mod_id->len, \ + mod_id->data + void conf_activate_modules( conf_t *conf, const knot_dname_t *zone_name, @@ -381,6 +405,7 @@ void conf_activate_modules( case KNOT_EOK: break; case KNOT_ENOENT: // Check if a module is configured at all. + case KNOT_YP_EINVAL_ID: return; default: ret = val.code; @@ -406,7 +431,8 @@ void conf_activate_modules( } // Open the module. - struct query_module *mod = query_module_open(conf, mod_id, conf->mm); + struct query_module *mod = query_module_open(conf, mod_id, *query_plan, + zone_name, conf->mm); if (mod == NULL) { ret = KNOT_ENOMEM; goto activate_error; @@ -416,14 +442,9 @@ void conf_activate_modules( if ((zone_name == NULL && (mod->scope & MOD_SCOPE_GLOBAL) == 0) || (zone_name != NULL && (mod->scope & MOD_SCOPE_ZONE) == 0)) { if (zone_name != NULL) { - log_zone_warning(zone_name, - "out of scope module '%s/%.*s'", - mod_id->name + 1, (int)mod_id->len, - mod_id->data); + log_zone_warning(zone_name, LOG_ARGS(mod_id, "out of scope")); } else { - log_warning("out of scope module '%s/%.*s'", - mod_id->name + 1, (int)mod_id->len, - mod_id->data); + log_warning(LOG_ARGS(mod_id, "out of scope")); } query_module_close(mod); conf_val_next(&val); @@ -431,17 +452,12 @@ void conf_activate_modules( } // Load the module. - ret = mod->load(*query_plan, mod, zone_name); + ret = mod->load(mod); if (ret != KNOT_EOK) { if (zone_name != NULL) { - log_zone_error(zone_name, - "failed to load module '%s/%.*s' (%s)", - mod_id->name + 1, (int)mod_id->len, - mod_id->data, knot_strerror(ret)); + log_zone_error(zone_name, LOG_ARGS(mod_id, "failed to load")); } else { - log_error("failed to load global module '%s/%.*s' (%s)", - mod_id->name + 1, (int)mod_id->len, - mod_id->data, knot_strerror(ret)); + log_error(LOG_ARGS(mod_id, "failed to load")); } query_module_close(mod); conf_val_next(&val); diff --git a/src/knot/conf/base.h b/src/knot/conf/base.h index 27f39a4b89719a7c62119111f10835fe967f0129..4cd69f8570f8e81c2873c166ec49ab88c6a4d1b0 100644 --- a/src/knot/conf/base.h +++ b/src/knot/conf/base.h @@ -27,6 +27,7 @@ #include "libknot/libknot.h" #include "libknot/yparser/ypscheme.h" +#include "contrib/hat-trie/hat-trie.h" #include "contrib/ucw/lists.h" /*! Default template identifier. */ @@ -37,12 +38,18 @@ #define CONF_DEFAULT_DBDIR (STORAGE_DIR "/confdb") /*! Maximum depth of nested transactions. */ #define CONF_MAX_TXN_DEPTH 5 +/*! Maximum number of concurrent DB readers. */ +#define CONF_MAX_DB_READERS 630 /*! Configuration specific logging. */ #define CONF_LOG(severity, msg, ...) do { \ log_msg(severity, "config, " msg, ##__VA_ARGS__); \ } while (0) +#define CONF_LOG_ZONE(severity, zone, msg, ...) do { \ + log_msg_zone(severity, zone, "config, " msg, ##__VA_ARGS__); \ + } while (0) + /*! Configuration getter output. */ typedef struct { /*! Item description. */ @@ -81,6 +88,10 @@ typedef struct { knot_db_txn_t *txn; /*! Stack of nested writing transactions. */ knot_db_txn_t txn_stack[CONF_MAX_TXN_DEPTH]; + /*! Master transaction flags. */ + yp_flag_t flags; + /*! Changed zones. */ + hattrie_t *zones; } io; /*! Current config file (for reload if started with config file). */ @@ -97,10 +108,8 @@ typedef struct { int32_t srv_tcp_idle_timeout; int32_t srv_tcp_reply_timeout; int32_t srv_max_tcp_clients; - int32_t srv_rate_limit_slip; int32_t ctl_timeout; conf_val_t srv_nsid; - conf_val_t srv_rate_limit_whitelist; } cache; /*! List of active query modules. */ @@ -119,6 +128,15 @@ typedef enum { CONF_FNOHOSTNAME = 1 << 2, /*!< Don't set the hostname. */ } conf_flag_t; +/*! + * Configuration update flags. + */ +typedef enum { + CONF_UPD_FNONE = 0, /*!< Empty flag. */ + CONF_UPD_FMODULES = 1 << 0, /*!< Reuse previous global modules. */ + CONF_UPD_FCONFIO = 1 << 1, /*!< Reuse previous cofio reload context. */ +} conf_update_flag_t; + /*! * Returns the active configuration. */ @@ -177,10 +195,12 @@ int conf_clone( /*! * Replaces the active configuration with the specified one. * - * \param[in] conf New configuration. + * \param[in] conf New configuration. + * \param[in] flags Update flags. */ void conf_update( - conf_t *conf + conf_t *conf, + conf_update_flag_t flags ); /*! diff --git a/src/knot/conf/conf.c b/src/knot/conf/conf.c index 02a0a6b4c1e6395871b6f4e9b66e8e8443a4de58..44eb2c48bc703935b1dc535ebac731823d9e5820 100644 --- a/src/knot/conf/conf.c +++ b/src/knot/conf/conf.c @@ -30,15 +30,6 @@ #include "contrib/wire_ctx.h" #include "contrib/openbsd/strlcat.h" -/*! Configuration specific logging. */ -#define CONF_LOG(severity, msg, ...) do { \ - log_msg(severity, "config, " msg, ##__VA_ARGS__); \ - } while (0) - -#define CONF_LOG_ZONE(severity, zone, msg, ...) do { \ - log_msg_zone(severity, zone, "config, " msg, ##__VA_ARGS__); \ - } while (0) - conf_val_t conf_get_txn( conf_t *conf, knot_db_txn_t *txn, @@ -89,6 +80,7 @@ conf_val_t conf_rawid_get_txn( // FALLTHROUGH case KNOT_EOK: case KNOT_ENOENT: + case KNOT_YP_EINVAL_ID: return val; } } @@ -119,6 +111,7 @@ conf_val_t conf_id_get_txn( // FALLTHROUGH case KNOT_EOK: case KNOT_ENOENT: + case KNOT_YP_EINVAL_ID: return val; } } @@ -146,6 +139,7 @@ conf_val_t conf_mod_get_txn( // FALLTHROUGH case KNOT_EOK: case KNOT_ENOENT: + case KNOT_YP_EINVAL_ID: return val; } } @@ -204,6 +198,7 @@ conf_val_t conf_zone_get_txn( // FALLTHROUGH case KNOT_EOK: case KNOT_ENOENT: + case KNOT_YP_EINVAL_ID: break; } @@ -232,6 +227,7 @@ conf_val_t conf_default_get_txn( // FALLTHROUGH case KNOT_EOK: case KNOT_ENOENT: + case KNOT_YP_EINVAL_ID: break; } @@ -285,6 +281,7 @@ bool conf_id_exists_txn( CONF_LOG(LOG_ERR, "failed to check '%s' for identifier (%s)", key0_name + 1, knot_strerror(ret)); // FALLTHROUGH + case KNOT_ENOENT: case KNOT_YP_EINVAL_ID: return false; } @@ -841,9 +838,10 @@ static void replace_slashes( } } - // Remove trailing dot if not root zone. - if (remove_dot && ch - name > 1) { - *(--ch) = '\0'; + // Remove trailing dot. + if (remove_dot && ch > name) { + assert(*(ch - 1) == '.'); + *(ch - 1) = '\0'; } } @@ -858,10 +856,8 @@ static int str_char( return KNOT_EINVAL; } - // Remove the trailing dot. size_t zone_len = strlen(buff); assert(zone_len > 0); - buff[zone_len--] = '\0'; // Get the block length. size_t len = index2 - index1 + 1; @@ -1054,16 +1050,45 @@ char* conf_zonefile_txn( return get_filename(conf, txn, zone, file); } -char* conf_journalfile_txn( +char* conf_old_journalfile( conf_t *conf, - knot_db_txn_t *txn, const knot_dname_t *zone) { if (zone == NULL) { return NULL; } - return get_filename(conf, txn, zone, "%s.db"); + conf_val_t val = conf_zone_get(conf, C_JOURNAL, zone); + const char *journal = conf_str(&val); + + // Use default journalfile name pattern if not specified. + if (journal == NULL) { + journal = "%s.db"; + } else { + CONF_LOG_ZONE(LOG_NOTICE, zone, "obsolete configuration 'journal', " + "use 'template.journal-db'' instead"); + } + + val = conf_zone_get(conf, C_MAX_JOURNAL_SIZE, zone); + if (val.code == KNOT_EOK) { + CONF_LOG_ZONE(LOG_NOTICE, zone, "obsolete configuration 'max-journal-size', " + "use 'max-journal-usage' and 'template.journal-db' instead"); + } + + return get_filename(conf, &conf->read_txn, zone, journal); +} + +char* conf_journalfile_txn( + conf_t *conf, + knot_db_txn_t *txn) +{ + conf_val_t val = conf_default_get_txn(conf, txn, C_STORAGE); + char *storage = conf_abs_path(&val, NULL); + val = conf_default_get_txn(conf, txn, C_JOURNAL_DB); + char *journaldir = conf_abs_path(&val, storage); + free(storage); + + return journaldir; } size_t conf_udp_threads_txn( diff --git a/src/knot/conf/conf.h b/src/knot/conf/conf.h index 713ca233eebcec58468f759a483fbf0a21da9d0b..6cfa6cfa2f464a5c345c90ccaa028cb084881165 100644 --- a/src/knot/conf/conf.h +++ b/src/knot/conf/conf.h @@ -580,22 +580,23 @@ static inline char* conf_zonefile( * * \param[in] conf Configuration. * \param[in] txn Configuration DB transaction. - * \param[in] zone Zone name. * * \return Absolute journal file path string pointer. */ char* conf_journalfile_txn( conf_t *conf, - knot_db_txn_t *txn, - const knot_dname_t *zone -); + knot_db_txn_t *txn); static inline char* conf_journalfile( - conf_t *conf, - const knot_dname_t *zone) + conf_t *conf) { - return conf_journalfile_txn(conf, &conf->read_txn, zone); + return conf_journalfile_txn(conf, &conf->read_txn); } +char* conf_old_journalfile( + conf_t *conf, + const knot_dname_t *zone +); + /*! * Gets the configured number of UDP threads. * diff --git a/src/knot/conf/confio.c b/src/knot/conf/confio.c index d9ccf82837d64ec93a560ef8a613e9b17c96d2be..422d10ea87aadc4202d9b1a8266951103e22fbbb 100644 --- a/src/knot/conf/confio.c +++ b/src/knot/conf/confio.c @@ -79,6 +79,14 @@ int conf_io_begin( conf()->io.txn = txn; + // Reset master transaction flags. + if (!child) { + conf()->io.flags = CONF_IO_FACTIVE; + if (conf()->io.zones != NULL) { + hattrie_clear(conf()->io.zones); + } + } + return KNOT_EOK; } @@ -117,6 +125,14 @@ void conf_io_abort( // Abort the writing transaction. conf()->api->txn_abort(txn); conf()->io.txn = child ? txn - 1 : NULL; + + // Reset master transaction flags. + if (!child) { + conf()->io.flags = YP_FNONE; + if (conf()->io.zones != NULL) { + hattrie_clear(conf()->io.zones); + } + } } static int list_section( @@ -334,6 +350,114 @@ static int diff_section( return KNOT_EOK; } +static int diff_iter_section( + conf_io_t *io) +{ + // First compare the section with the old and common identifiers. + conf_iter_t iter; + int ret = conf_db_iter_begin(conf(), &conf()->read_txn, io->key0->name, + &iter); + switch (ret) { + case KNOT_EOK: + break; + case KNOT_ENOENT: + return KNOT_EOK; + default: + return ret; + } + + while (ret == KNOT_EOK) { + ret = conf_db_iter_id(conf(), &iter, &io->id, &io->id_len); + if (ret != KNOT_EOK) { + conf_db_iter_finish(conf(), &iter); + return ret; + } + + ret = diff_section(io); + if (ret != KNOT_EOK) { + conf_db_iter_finish(conf(), &iter); + return ret; + } + + ret = conf_db_iter_next(conf(), &iter); + } + if (ret != KNOT_EOF) { + return ret; + } + + // Second compare the section with the new identifiers. + ret = conf_db_iter_begin(conf(), conf()->io.txn, io->key0->name, &iter); + switch (ret) { + case KNOT_EOK: + break; + case KNOT_ENOENT: + return KNOT_EOK; + default: + return ret; + } + + while (ret == KNOT_EOK) { + ret = conf_db_iter_id(conf(), &iter, &io->id, &io->id_len); + if (ret != KNOT_EOK) { + conf_db_iter_finish(conf(), &iter); + return ret; + } + + // Ignore old and common identifiers. + ret = conf_db_get(conf(), &conf()->read_txn, io->key0->name, + NULL, io->id, io->id_len, NULL); + switch (ret) { + case KNOT_EOK: + ret = conf_db_iter_next(conf(), &iter); + continue; + case KNOT_ENOENT: + case KNOT_YP_EINVAL_ID: + break; + default: + conf_db_iter_finish(conf(), &iter); + return ret; + } + + ret = diff_section(io); + if (ret != KNOT_EOK) { + conf_db_iter_finish(conf(), &iter); + return ret; + } + + ret = conf_db_iter_next(conf(), &iter); + } + if (ret != KNOT_EOF) { + return ret; + } + + return KNOT_EOK; +} + +static int diff_zone_section( + conf_io_t *io) +{ + assert(io->key0->flags & CONF_IO_FZONE); + + if (conf()->io.zones == NULL) { + return KNOT_EOK; + } + + hattrie_iter_t *it = hattrie_iter_begin(conf()->io.zones); + for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { + io->id = (const uint8_t *)hattrie_iter_key(it, &io->id_len); + + // Get the difference for specific zone. + int ret = diff_section(io); + if (ret != KNOT_EOK) { + hattrie_iter_free(it); + return ret; + } + } + hattrie_iter_free(it); + + return KNOT_EOK; +} + int conf_io_diff( const char *key0, const char *key1, @@ -410,79 +534,22 @@ int conf_io_diff( // Compare the section with all identifiers by default. if ((io->key0->flags & YP_FMULTI) != 0 && io->id_len == 0) { - // First compare the section with the old and common identifiers. - conf_iter_t iter; - ret = conf_db_iter_begin(conf(), &conf()->read_txn, - io->key0->name, &iter); - switch (ret) { - case KNOT_EOK: - case KNOT_ENOENT: - break; - default: - goto diff_error; - } - - while (ret == KNOT_EOK) { - // Set the section identifier. - ret = conf_db_iter_id(conf(), &iter, &io->id, &io->id_len); - if (ret != KNOT_EOK) { - conf_db_iter_finish(conf(), &iter); - return ret; + // The zone section has an optimized diff. + if (io->key0->flags & CONF_IO_FZONE) { + // Full diff by default. + if (!(conf()->io.flags & CONF_IO_FACTIVE)) { + ret = diff_iter_section(io); + // Full diff if all zones changed. + } else if (conf()->io.flags & CONF_IO_FDIFF_ZONES) { + ret = diff_iter_section(io); + // Optimized diff for specific zones. + } else { + ret = diff_zone_section(io); } - - ret = diff_section(io); - if (ret != KNOT_EOK) { - conf_db_iter_finish(conf(), &iter); - return ret; - } - - ret = conf_db_iter_next(conf(), &iter); - } - - // Second compare the section with the new identifiers. - ret = conf_db_iter_begin(conf(), conf()->io.txn, io->key0->name, - &iter); - switch (ret) { - case KNOT_EOK: - case KNOT_ENOENT: - break; - default: - goto diff_error; - } - - while (ret == KNOT_EOK) { - // Set the section identifier. - ret = conf_db_iter_id(conf(), &iter, &io->id, &io->id_len); - if (ret != KNOT_EOK) { - conf_db_iter_finish(conf(), &iter); - return ret; - } - - // Ignore old and common identifiers. - ret = conf_db_get(conf(), &conf()->read_txn, io->key0->name, - NULL, io->id, io->id_len, NULL); - switch (ret) { - case KNOT_EOK: - ret = conf_db_iter_next(conf(), &iter); - continue; - case KNOT_ENOENT: - case KNOT_YP_EINVAL_ID: - break; - default: - conf_db_iter_finish(conf(), &iter); - return ret; - } - - ret = diff_section(io); - if (ret != KNOT_EOK) { - conf_db_iter_finish(conf(), &iter); - return ret; - } - - ret = conf_db_iter_next(conf(), &iter); + } else { + ret = diff_iter_section(io); } - ret = KNOT_EOK; goto diff_error; } @@ -709,6 +776,95 @@ get_error: return ret; } +static void upd_changes( + const conf_io_t *io, + conf_io_type_t type, + yp_flag_t flags, + bool any_id) +{ + // Update common flags. + conf()->io.flags |= flags; + + // Return if not important change. + if (type == CONF_IO_TNONE) { + return; + } + + // Update reference item. + if (flags & CONF_IO_FREF) { + // Expected an identifier, which cannot be changed. + assert(type != CONF_IO_TCHANGE); + + // Re-check and reload all zones if a reference has been removed. + if (type == CONF_IO_TUNSET) { + conf()->io.flags |= CONF_IO_FCHECK_ZONES | CONF_IO_FRLD_ZONES; + } + return; + // Return if no specific zone operation. + } else if (!(flags & CONF_IO_FZONE)) { + return; + } + + // Don't process each zone individually, process all instead. + if (any_id) { + // Diff all zone changes. + conf()->io.flags |= CONF_IO_FCHECK_ZONES | CONF_IO_FDIFF_ZONES; + + // Reload just with important changes. + if (flags & CONF_IO_FRLD_ZONE) { + conf()->io.flags |= CONF_IO_FRLD_ZONES; + } + return; + } + + // Prepare zone changes storage if it doesn't exist. + hattrie_t *zones = conf()->io.zones; + if (zones == NULL) { + zones = hattrie_create(conf()->mm); + if (zones == NULL) { + return; + } + conf()->io.zones = zones; + } + + // Get zone status or create new. + value_t *val = hattrie_get(zones, (const char *)io->id, io->id_len); + conf_io_type_t *current = (conf_io_type_t *)val; + + switch (type) { + case CONF_IO_TSET: + // Revert remove zone, but don't remove (probably changed). + if (*current & CONF_IO_TUNSET) { + *current &= ~CONF_IO_TUNSET; + } else { + // Must be a new zone. + assert(*current == CONF_IO_TNONE); + // Mark added zone. + *current = type; + } + break; + case CONF_IO_TUNSET: + if (*current & CONF_IO_TSET) { + // Remove inserted zone -> no change. + hattrie_del(zones, (const char *)io->id, io->id_len, NULL); + } else { + // Remove existing zone. + *current |= type; + } + break; + case CONF_IO_TCHANGE: + *current |= type; + // Mark zone to reload if required. + if (flags & CONF_IO_FRLD_ZONE) { + *current |= CONF_IO_TRELOAD; + } + break; + case CONF_IO_TRELOAD: + default: + assert(0); + } +} + static int set_item( conf_io_t *io) { @@ -720,42 +876,28 @@ static int set_item( } // Postpone group callbacks to config check. - if (io->key0->type != YP_TGRP) { - conf_check_t args = { - .conf = conf(), - .txn = conf()->io.txn, - .item = (io->key1 != NULL) ? io->key1 : io->key0, - .id = io->id, - .id_len = io->id_len, - .data = io->data.bin, - .data_len = io->data.bin_len - }; - - // Call the item callbacks. - io->error.code = conf_exec_callbacks(&args); - if (io->error.code != KNOT_EOK) { - io->error.str = args.err_str; - ret = FCN(io); - if (ret == KNOT_EOK) { - ret = io->error.code; - } - } + if (io->key0->type == YP_TGRP) { + return KNOT_EOK; } - return ret; + conf_check_t args = { + .conf = conf(), + .txn = conf()->io.txn, + .item = (io->key1 != NULL) ? io->key1 : io->key0, + .data = io->data.bin, + .data_len = io->data.bin_len + }; + + // Call the item callbacks (include). + return conf_exec_callbacks(&args); } int conf_io_set( const char *key0, const char *key1, const char *id, - const char *data, - conf_io_t *io) + const char *data) { - if (io == NULL) { - return KNOT_EINVAL; - } - assert(conf() != NULL); if (conf()->io.txn == NULL) { @@ -781,9 +923,16 @@ int conf_io_set( yp_node_t *node = &ctx->nodes[ctx->current]; yp_node_t *parent = node->parent; + yp_flag_t upd_flags = node->item->flags; + conf_io_type_t upd_type = CONF_IO_TNONE; + + conf_io_t io = { NULL }; + // Key1 is not a group identifier. if (parent != NULL) { - io_reset_bin(io, parent->item, node->item, parent->id, + upd_type = CONF_IO_TCHANGE; + upd_flags |= parent->item->flags; + io_reset_bin(&io, parent->item, node->item, parent->id, parent->id_len, node->data, node->data_len); // No key1 but a group identifier. } else if (node->id_len != 0) { @@ -791,11 +940,13 @@ int conf_io_set( (node->item->flags & YP_FMULTI) != 0); assert(node->data_len == 0); - io_reset_bin(io, node->item, node->item->var.g.id, node->id, + upd_type = CONF_IO_TSET; + upd_flags |= node->item->var.g.id->flags; + io_reset_bin(&io, node->item, node->item->var.g.id, node->id, node->id_len, NULL, 0); // Ensure some data for non-group items (include). } else if (node->item->type == YP_TGRP || node->data_len != 0) { - io_reset_bin(io, node->item, NULL, node->id, node->id_len, + io_reset_bin(&io, node->item, NULL, node->id, node->id_len, node->data, node->data_len); // Non-group without data. } else { @@ -804,10 +955,10 @@ int conf_io_set( } // Set the item for all identifiers by default. - if (io->key0->type == YP_TGRP && io->key1 != NULL && - (io->key0->flags & YP_FMULTI) != 0 && io->id_len == 0) { + if (io.key0->type == YP_TGRP && io.key1 != NULL && + (io.key0->flags & YP_FMULTI) != 0 && io.id_len == 0) { conf_iter_t iter; - ret = conf_db_iter_begin(conf(), conf()->io.txn, io->key0->name, + ret = conf_db_iter_begin(conf(), conf()->io.txn, io.key0->name, &iter); switch (ret) { case KNOT_EOK: @@ -821,14 +972,14 @@ int conf_io_set( while (ret == KNOT_EOK) { // Get the identifier. - ret = conf_db_iter_id(conf(), &iter, &io->id, &io->id_len); + ret = conf_db_iter_id(conf(), &iter, &io.id, &io.id_len); if (ret != KNOT_EOK) { conf_db_iter_finish(conf(), &iter); goto set_error; } // Set the data. - ret = set_item(io); + ret = set_item(&io); if (ret != KNOT_EOK) { conf_db_iter_finish(conf(), &iter); goto set_error; @@ -840,12 +991,18 @@ int conf_io_set( goto set_error; } + upd_changes(&io, upd_type, upd_flags, true); + ret = KNOT_EOK; goto set_error; } // Set the item with a possible identifier. - ret = set_item(io); + ret = set_item(&io); + + if (ret == KNOT_EOK) { + upd_changes(&io, upd_type, upd_flags, false); + } set_error: yp_scheme_check_deinit(ctx); @@ -855,14 +1012,14 @@ set_error: static int unset_section_data( conf_io_t *io) { - // Delete the value for the specified item. + // Unset the value for the specified item. if (io->key1 != NULL) { return conf_db_unset(conf(), conf()->io.txn, io->key0->name, io->key1->name, io->id, io->id_len, io->data.bin, io->data.bin_len, false); } - // Delete the whole section by default. + // Unset the whole section by default. for (yp_item_t *i = io->key0->sub_items; i->name != NULL; i++) { // Skip the identifier item. if ((io->key0->flags & YP_FMULTI) != 0 && io->key0->var.g.id == i) { @@ -887,7 +1044,7 @@ static int unset_section_data( static int unset_section( const yp_item_t *key0) { - // Delete the section items. + // Unset the section items. for (yp_item_t *i = key0->sub_items; i->name != NULL; i++) { // Skip the identifier item. if ((key0->flags & YP_FMULTI) != 0 && key0->var.g.id == i) { @@ -905,7 +1062,7 @@ static int unset_section( } } - // Delete the section. + // Unset the section. int ret = conf_db_unset(conf(), conf()->io.txn, key0->name, NULL, NULL, 0, NULL, 0, false); switch (ret) { @@ -929,7 +1086,7 @@ int conf_io_unset( return KNOT_TXN_ENOTEXISTS; } - // Delete all sections by default. + // Unset all sections by default. if (key0 == NULL) { for (yp_item_t *i = conf()->scheme; i->name != NULL; i++) { // Skip non-group item. @@ -964,12 +1121,26 @@ int conf_io_unset( yp_node_t *node = &ctx->nodes[ctx->current]; yp_node_t *parent = node->parent; + yp_flag_t upd_flags = node->item->flags; + conf_io_type_t upd_type = CONF_IO_TNONE; + conf_io_t io = { NULL }; + // Key1 is not a group identifier. if (parent != NULL) { + upd_type = CONF_IO_TCHANGE; + upd_flags |= parent->item->flags; io_reset_bin(&io, parent->item, node->item, parent->id, parent->id_len, node->data, node->data_len); + // No key1 but a group identifier or whole group. } else { + if (node->id_len != 0) { + assert(node->item->type == YP_TGRP && + (node->item->flags & YP_FMULTI) != 0); + + upd_type = CONF_IO_TUNSET; + upd_flags |= node->item->var.g.id->flags; + } io_reset_bin(&io, node->item, NULL, node->id, node->id_len, node->data, node->data_len); } @@ -980,7 +1151,7 @@ int conf_io_unset( goto unset_error; } - // Delete the section with all identifiers by default. + // Unset the section with all identifiers by default. if ((io.key0->flags & YP_FMULTI) != 0 && io.id_len == 0) { conf_iter_t iter; ret = conf_db_iter_begin(conf(), conf()->io.txn, io.key0->name, @@ -1003,7 +1174,7 @@ int conf_io_unset( goto unset_error; } - // Delete the section data. + // Unset the section data. ret = unset_section_data(&io); switch (ret) { case KNOT_EOK: @@ -1021,7 +1192,7 @@ int conf_io_unset( } if (io.key1 == NULL) { - // Delete all identifiers. + // Unset all identifiers. ret = conf_db_iter_begin(conf(), conf()->io.txn, io.key0->name, &iter); switch (ret) { @@ -1047,32 +1218,34 @@ int conf_io_unset( goto unset_error; } - // Delete the section. + // Unset the section. ret = unset_section(io.key0); if (ret != KNOT_EOK) { goto unset_error; } } + upd_changes(&io, upd_type, upd_flags, true); + ret = KNOT_EOK; goto unset_error; } - // Delete the section data. + // Unset the section data. ret = unset_section_data(&io); if (ret != KNOT_EOK) { goto unset_error; } if (io.key1 == NULL) { - // Delete the identifier. + // Unset the identifier. if (io.id_len != 0) { ret = conf_db_unset(conf(), conf()->io.txn, io.key0->name, NULL, io.id, io.id_len, NULL, 0, false); if (ret != KNOT_EOK) { goto unset_error; } - // Delete the section. + // Unset the section. } else { ret = unset_section(io.key0); if (ret != KNOT_EOK) { @@ -1080,6 +1253,10 @@ int conf_io_unset( } } } + + if (ret == KNOT_EOK) { + upd_changes(&io, upd_type, upd_flags, false); + } unset_error: yp_scheme_check_deinit(ctx); @@ -1171,6 +1348,80 @@ check_section_error: return ret; } +static int check_iter_section( + const yp_item_t *item, + conf_io_t *io) +{ + // Iterate over all identifiers. + conf_iter_t iter; + int ret = conf_db_iter_begin(conf(), conf()->io.txn, item->name, &iter); + switch (ret) { + case KNOT_EOK: + break; + case KNOT_ENOENT: + return KNOT_EOK; + default: + return ret; + } + + while (ret == KNOT_EOK) { + size_t id_len; + const uint8_t *id; + ret = conf_db_iter_id(conf(), &iter, &id, &id_len); + if (ret != KNOT_EOK) { + conf_db_iter_finish(conf(), &iter); + return ret; + } + + // Check specific section item. + ret = check_section(item, id, id_len, io); + if (ret != KNOT_EOK) { + conf_db_iter_finish(conf(), &iter); + return ret; + } + + ret = conf_db_iter_next(conf(), &iter); + } + if (ret != KNOT_EOF) { + return ret; + } + + return KNOT_EOK; +} + +static int check_zone_section( + const yp_item_t *item, + conf_io_t *io) +{ + assert(item->flags & CONF_IO_FZONE); + + if (conf()->io.zones == NULL) { + return KNOT_EOK; + } + + hattrie_iter_t *it = hattrie_iter_begin(conf()->io.zones); + for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { + size_t id_len; + const uint8_t *id = (const uint8_t *)hattrie_iter_key(it, &id_len); + + conf_io_type_t type = (conf_io_type_t)(*hattrie_iter_val(it)); + if (type == CONF_IO_TUNSET) { + // Nothing to check. + continue; + } + + // Check specific zone. + int ret = check_section(item, id, id_len, io); + if (ret != KNOT_EOK) { + hattrie_iter_free(it); + return ret; + } + } + hattrie_iter_free(it); + + return KNOT_EOK; +} + int conf_io_check( conf_io_t *io) { @@ -1199,41 +1450,25 @@ int conf_io_check( if (ret != KNOT_EOK) { goto check_error; } - - continue; - } - - // Iterate over all identifiers. - conf_iter_t iter; - ret = conf_db_iter_begin(conf(), conf()->io.txn, item->name, &iter); - switch (ret) { - case KNOT_EOK: - break; - case KNOT_ENOENT: continue; - default: - goto check_error; } - while (ret == KNOT_EOK) { - const uint8_t *id; - size_t id_len; - ret = conf_db_iter_id(conf(), &iter, &id, &id_len); - if (ret != KNOT_EOK) { - conf_db_iter_finish(conf(), &iter); - goto check_error; + // The zone section has an optimized check. + if (item->flags & CONF_IO_FZONE) { + // Full check by default. + if (!(conf()->io.flags & CONF_IO_FACTIVE)) { + ret = check_iter_section(item, io); + // Full check if all zones changed. + } else if (conf()->io.flags & CONF_IO_FCHECK_ZONES) { + ret = check_iter_section(item, io); + // Optimized check for specific zones. + } else { + ret = check_zone_section(item, io); } - - // Check group with identifiers. - ret = check_section(item, id, id_len, io); - if (ret != KNOT_EOK) { - conf_db_iter_finish(conf(), &iter); - goto check_error; - } - - ret = conf_db_iter_next(conf(), &iter); + } else { + ret = check_iter_section(item, io); } - if (ret != KNOT_EOF) { + if (ret != KNOT_EOK) { goto check_error; } } diff --git a/src/knot/conf/confio.h b/src/knot/conf/confio.h index 49c09c396921508ba8519141d71b4e1bd0eeb8ff..cf3a043a151c226ad0bc5fd6a70a957e1b234ad3 100644 --- a/src/knot/conf/confio.h +++ b/src/knot/conf/confio.h @@ -27,6 +27,29 @@ #include "knot/conf/conf.h" +/*! Configuration schema additional flags for dynamic changes. */ +#define CONF_IO_FACTIVE YP_FUSR1 /*!< Active confio transaction indicator. */ +#define CONF_IO_FZONE YP_FUSR2 /*!< Zone section indicator. */ +#define CONF_IO_FREF YP_FUSR3 /*!< Possibly referenced id from a zone. */ +#define CONF_IO_FDIFF_ZONES YP_FUSR4 /*!< All zones config has changed. */ +#define CONF_IO_FCHECK_ZONES YP_FUSR5 /*!< All zones config needs to check. */ +#define CONF_IO_FRLD_SRV YP_FUSR6 /*!< Reload server. */ +#define CONF_IO_FRLD_LOG YP_FUSR7 /*!< Reload logging. */ +#define CONF_IO_FRLD_MOD YP_FUSR8 /*!< Reload global modules. */ +#define CONF_IO_FRLD_ZONE YP_FUSR9 /*!< Reload a specific zone. */ +#define CONF_IO_FRLD_ZONES YP_FUSR10 /*!< Reload all zones. */ +#define CONF_IO_FRLD_ALL (CONF_IO_FRLD_SRV | CONF_IO_FRLD_LOG | \ + CONF_IO_FRLD_MOD | CONF_IO_FRLD_ZONES) + +/*! Zone configuration change type. */ +typedef enum { + CONF_IO_TNONE = 0, /*!< Unspecified. */ + CONF_IO_TSET = 1 << 0, /*!< Zone added. */ + CONF_IO_TUNSET = 1 << 1, /*!< Zone removed. */ + CONF_IO_TCHANGE = 1 << 2, /*!< Zone has changed configuration. */ + CONF_IO_TRELOAD = 1 << 3, /*!< Zone must be reloaded. */ +} conf_io_type_t; + /*! Configuration interface output. */ typedef struct conf_io conf_io_t; struct conf_io { @@ -165,7 +188,6 @@ int conf_io_get( * \param[in] key1 Item name (NULL to add identifier only). * \param[in] id Section identifier name (NULL to consider all section identifiers). * \param[in] data Item data to set/add. - * \param[out] io Operation output (callback error output). * * \return Error code, KNOT_EOK if success. */ @@ -173,8 +195,7 @@ int conf_io_set( const char *key0, const char *key1, const char *id, - const char *data, - conf_io_t *io + const char *data ); /*! diff --git a/src/knot/conf/migration.c b/src/knot/conf/migration.c new file mode 100644 index 0000000000000000000000000000000000000000..08099ce3e4bf2b9f66977ef4b54c3e4818d0424f --- /dev/null +++ b/src/knot/conf/migration.c @@ -0,0 +1,133 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "knot/common/log.h" +#include "knot/conf/migration.h" +#include "knot/conf/confdb.h" + +static void try_unset(conf_t *conf, knot_db_txn_t *txn, yp_name_t *key0, yp_name_t *key1) +{ + int ret = conf_db_unset(conf, txn, key0, key1, NULL, 0, NULL, 0, true); + if (ret != KNOT_EOK && ret != KNOT_ENOENT) { + log_warning("conf, migration, failed to unset '%s%s%s' (%s)", + key0 + 1, + (key1 != NULL) ? "/" : "", + (key1 != NULL) ? key1 + 1 : "", + knot_strerror(ret)); + } +} + +#define check_set(conf, txn, key0, key1, id, id_len, data, data_len) \ + ret = conf_db_set(conf, txn, key0, key1, id, id_len, data, data_len); \ + if (ret != KNOT_EOK && ret != KNOT_CONF_EREDEFINE) { \ + log_error("conf, migration, failed to set '%s%s%s' (%s)", \ + key0 + 1, \ + (key1 != NULL) ? "/" : "", \ + (key1 != NULL) ? key1 + 1 : "", \ + knot_strerror(ret)); \ + return ret; \ + } + +static int migrate_rrl( + conf_t *conf, + knot_db_txn_t *txn) +{ + #define MOD_RRL "\x07""mod-rrl" + #define MOD_RATE_LIMIT "\x0A""rate-limit" + #define MOD_SLIP "\x04""slip" + #define MOD_TBL_SIZE "\x0A""table-size" + #define MOD_WHITELIST "\x09""whitelist" + + const uint8_t *id = CONF_DEFAULT_ID + 1; + const size_t id_len = CONF_DEFAULT_ID[0]; + const uint8_t *dflt_rrl = (const uint8_t *)MOD_RRL "default\0"; + const size_t dflt_rrl_len = 16; + + conf_val_t val; + int ret = conf_db_get(conf, txn, C_SRV, C_RATE_LIMIT, NULL, 0, &val); + + // Migrate old configuration if RRL enabled. + if (ret == KNOT_EOK && conf_int(&val) > 0) { + log_notice("config, migrating RRL configuration from server to mod-rrl"); + + // Create equivalent mod-rrl configuration. + check_set(conf, txn, MOD_RRL, C_ID, id, id_len, NULL, 0); + check_set(conf, txn, MOD_RRL, MOD_RATE_LIMIT, id, id_len, + val.data, val.len); + + conf_db_get(conf, txn, C_SRV, C_RATE_LIMIT_SLIP, NULL, 0, &val); + if (val.code == KNOT_EOK) { + conf_val(&val); + check_set(conf, txn, MOD_RRL, MOD_SLIP, id, id_len, + val.data, val.len); + } + + conf_db_get(conf, txn, C_SRV, C_RATE_LIMIT_TBL_SIZE, NULL, 0, &val); + if (val.code == KNOT_EOK) { + conf_val(&val); + check_set(conf, txn, MOD_RRL, MOD_TBL_SIZE, id, id_len, + val.data, val.len); + } + + conf_db_get(conf, txn, C_SRV, C_RATE_LIMIT_WHITELIST, NULL, 0, &val); + while (val.code == KNOT_EOK) { + conf_val(&val); + check_set(conf, txn, MOD_RRL, MOD_WHITELIST, id, id_len, + val.data, val.len); + conf_val_next(&val); + } + + // Create default template and assing global module. + check_set(conf, txn, C_TPL, C_ID, id, id_len, NULL, 0); + check_set(conf, txn, C_TPL, C_GLOBAL_MODULE, id, id_len, + dflt_rrl, dflt_rrl_len); + } + + // Drop old RRL configuration. + try_unset(conf, txn, C_SRV, C_RATE_LIMIT); + try_unset(conf, txn, C_SRV, C_RATE_LIMIT_SLIP); + try_unset(conf, txn, C_SRV, C_RATE_LIMIT_TBL_SIZE); + try_unset(conf, txn, C_SRV, C_RATE_LIMIT_WHITELIST); + + return KNOT_EOK; +} + +int conf_migrate( + conf_t *conf) +{ + if (conf == NULL) { + return KNOT_EINVAL; + } + + knot_db_txn_t txn; + int ret = conf->api->txn_begin(conf->db, &txn, 0); + if (ret != KNOT_EOK) { + return ret; + } + + ret = migrate_rrl(conf, &txn); + if (ret != KNOT_EOK) { + conf->api->txn_abort(&txn); + return ret; + } + + ret = conf->api->txn_commit(&txn); + if (ret != KNOT_EOK) { + return ret; + } + + return conf_refresh_txn(conf); +} diff --git a/src/knot/conf/migration.h b/src/knot/conf/migration.h new file mode 100644 index 0000000000000000000000000000000000000000..dd7912f70d09cd5bd1e2fa6a50a2f37efc467159 --- /dev/null +++ b/src/knot/conf/migration.h @@ -0,0 +1,30 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once + +#include "knot/conf/base.h" + +/*! + * Migrates from an old configuration schema. + * + * \param[in] conf Configuration. + * + * \return Error code, KNOT_EOK if success. + */ +int conf_migrate( + conf_t *conf +); diff --git a/src/knot/conf/scheme.c b/src/knot/conf/scheme.c index 2a074fa4c0e416d11dd50137994e4e6672b35c7d..1dfd68ea96f6507ff45b1f814388939a524dbbd3 100644 --- a/src/knot/conf/scheme.c +++ b/src/knot/conf/scheme.c @@ -20,29 +20,42 @@ #include <stdint.h> #include "knot/conf/scheme.h" +#include "knot/conf/confio.h" #include "knot/conf/tools.h" #include "knot/common/log.h" -#include "knot/server/rrl.h" #include "knot/updates/acl.h" #include "libknot/rrtype/opt.h" #include "dnssec/lib/dnssec/tsig.h" #include "dnssec/lib/dnssec/key.h" -#include "knot/modules/synth_record.h" -#include "knot/modules/dnsproxy.h" -#include "knot/modules/online_sign/module.h" +#include "knot/modules/rrl/rrl.h" +#include "knot/modules/stats/stats.h" +#include "knot/modules/synth_record/synth_record.h" +#include "knot/modules/dnsproxy/dnsproxy.h" +#include "knot/modules/online_sign/online_sign.h" #ifdef HAVE_ROSEDB -#include "knot/modules/rosedb.h" +#include "knot/modules/rosedb/rosedb.h" #endif #if USE_DNSTAP -#include "knot/modules/dnstap.h" +#include "knot/modules/dnstap/dnstap.h" #endif -#include "knot/modules/whoami.h" -#include "knot/modules/noudp.h" +#include "knot/modules/whoami/whoami.h" +#include "knot/modules/noudp/noudp.h" #define HOURS(x) ((x) * 3600) #define DAYS(x) ((x) * HOURS(24)) +#define KILO(x) (1024LLU * (x)) +#define MEGA(x) (KILO(1024) * (x)) +#define GIGA(x) (MEGA(1024) * (x)) +#define TERA(x) (GIGA(1024) * (x)) + +#define VIRT_MEM_TOP_32BIT GIGA(2) +#define VIRT_MEM_LIMIT(x) (((sizeof(void *) < 8) && ((x) > VIRT_MEM_TOP_32BIT)) \ + ? VIRT_MEM_TOP_32BIT : (x)) + +#define FMOD (YP_FMULTI | CONF_IO_FRLD_MOD | CONF_IO_FRLD_ZONES) + static const knot_lookup_t keystore_backends[] = { { KEYSTORE_BACKEND_PEM, "pem" }, { KEYSTORE_BACKEND_PKCS11, "pkcs11" }, @@ -118,13 +131,14 @@ static const yp_item_t desc_server[] = { { C_MAX_IPV6_UDP_PAYLOAD, YP_TINT, YP_VINT = { KNOT_EDNS_MIN_UDP_PAYLOAD, KNOT_EDNS_MAX_UDP_PAYLOAD, 4096, YP_SSIZE } }, + { C_LISTEN, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI }, + { C_COMMENT, YP_TSTR, YP_VNONE }, + /* Obsolete items. */ { C_RATE_LIMIT, YP_TINT, YP_VINT = { 0, INT32_MAX, 0 } }, - { C_RATE_LIMIT_SLIP, YP_TINT, YP_VINT = { 0, RRL_SLIP_MAX, 1 } }, + { C_RATE_LIMIT_SLIP, YP_TINT, YP_VINT = { 0, 100, 1 } }, { C_RATE_LIMIT_TBL_SIZE, YP_TINT, YP_VINT = { 1, INT32_MAX, 393241 } }, { C_RATE_LIMIT_WHITELIST, YP_TDATA, YP_VDATA = { 0, NULL, addr_range_to_bin, addr_range_to_txt }, YP_FMULTI }, - { C_LISTEN, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI }, - { C_COMMENT, YP_TSTR, YP_VNONE }, { NULL } }; @@ -138,37 +152,57 @@ static const yp_item_t desc_control[] = { static const yp_item_t desc_log[] = { { C_TARGET, YP_TSTR, YP_VNONE }, { C_SERVER, YP_TOPT, YP_VOPT = { log_severities, 0 } }, + { C_CTL, YP_TOPT, YP_VOPT = { log_severities, 0 } }, { C_ZONE, YP_TOPT, YP_VOPT = { log_severities, 0 } }, { C_ANY, YP_TOPT, YP_VOPT = { log_severities, 0 } }, { C_COMMENT, YP_TSTR, YP_VNONE }, { NULL } }; +static const yp_item_t desc_stats[] = { + { C_TIMER, YP_TINT, YP_VINT = { 1, UINT32_MAX, 0, YP_STIME } }, + { C_FILE, YP_TSTR, YP_VSTR = { "stats.yaml" } }, + { C_APPEND, YP_TBOOL, YP_VNONE }, + { NULL } +}; + static const yp_item_t desc_keystore[] = { { C_ID, YP_TSTR, YP_VNONE }, - { C_BACKEND, YP_TOPT, YP_VOPT = { keystore_backends, KEYSTORE_BACKEND_PEM } }, - { C_CONFIG, YP_TSTR, YP_VSTR = { "keys" } }, + { C_BACKEND, YP_TOPT, YP_VOPT = { keystore_backends, KEYSTORE_BACKEND_PEM }, + CONF_IO_FRLD_ZONES }, + { C_CONFIG, YP_TSTR, YP_VSTR = { "keys" }, CONF_IO_FRLD_ZONES }, { C_COMMENT, YP_TSTR, YP_VNONE }, { NULL } }; static const yp_item_t desc_policy[] = { - { C_ID, YP_TSTR, YP_VNONE }, - { C_KEYSTORE, YP_TREF, YP_VREF = { C_KEYSTORE }, YP_FNONE, { check_ref_dflt } }, - { C_MANUAL, YP_TBOOL, YP_VNONE }, + { C_ID, YP_TSTR, YP_VNONE, CONF_IO_FREF }, + { C_KEYSTORE, YP_TREF, YP_VREF = { C_KEYSTORE }, CONF_IO_FRLD_ZONES, + { check_ref_dflt } }, + { C_MANUAL, YP_TBOOL, YP_VNONE, CONF_IO_FRLD_ZONES }, + { C_SINGLE_TYPE_SIGNING, YP_TBOOL, YP_VNONE, CONF_IO_FRLD_ZONES }, { C_ALG, YP_TOPT, YP_VOPT = { dnssec_key_algs, - DNSSEC_KEY_ALGORITHM_ECDSA_P256_SHA256 } }, - { C_KSK_SIZE, YP_TINT, YP_VINT = { 0, UINT16_MAX, YP_NIL, YP_SSIZE } }, - { C_ZSK_SIZE, YP_TINT, YP_VINT = { 0, UINT16_MAX, YP_NIL, YP_SSIZE } }, - { C_DNSKEY_TTL, YP_TINT, YP_VINT = { 0, UINT32_MAX, 0, YP_STIME } }, - { C_ZSK_LIFETIME, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(30), YP_STIME } }, - { C_RRSIG_LIFETIME, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(14), YP_STIME } }, - { C_RRSIG_REFRESH, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(7), YP_STIME } }, - { C_NSEC3, YP_TBOOL, YP_VNONE }, - { C_NSEC3_ITER, YP_TINT, YP_VINT = { 0, UINT16_MAX, 10 } }, - { C_NSEC3_SALT_LEN, YP_TINT, YP_VINT = { 0, UINT8_MAX, 8 } }, - { C_NSEC3_SALT_LIFETIME, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(30), YP_STIME } }, - { C_PROPAG_DELAY, YP_TINT, YP_VINT = { 0, UINT32_MAX, HOURS(1), YP_STIME } }, + DNSSEC_KEY_ALGORITHM_ECDSA_P256_SHA256 }, + CONF_IO_FRLD_ZONES }, + { C_KSK_SIZE, YP_TINT, YP_VINT = { 0, UINT16_MAX, YP_NIL, YP_SSIZE }, + CONF_IO_FRLD_ZONES }, + { C_ZSK_SIZE, YP_TINT, YP_VINT = { 0, UINT16_MAX, YP_NIL, YP_SSIZE }, + CONF_IO_FRLD_ZONES }, + { C_DNSKEY_TTL, YP_TINT, YP_VINT = { 0, UINT32_MAX, 0, YP_STIME }, + CONF_IO_FRLD_ZONES }, + { C_ZSK_LIFETIME, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(30), YP_STIME }, + CONF_IO_FRLD_ZONES }, + { C_PROPAG_DELAY, YP_TINT, YP_VINT = { 0, UINT32_MAX, HOURS(1), YP_STIME }, + CONF_IO_FRLD_ZONES }, + { C_RRSIG_LIFETIME, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(14), YP_STIME }, + CONF_IO_FRLD_ZONES }, + { C_RRSIG_REFRESH, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(7), YP_STIME }, + CONF_IO_FRLD_ZONES }, + { C_NSEC3, YP_TBOOL, YP_VNONE, CONF_IO_FRLD_ZONES }, + { C_NSEC3_ITER, YP_TINT, YP_VINT = { 0, UINT16_MAX, 10 }, CONF_IO_FRLD_ZONES }, + { C_NSEC3_SALT_LEN, YP_TINT, YP_VINT = { 0, UINT8_MAX, 8 }, CONF_IO_FRLD_ZONES }, + { C_NSEC3_SALT_LIFETIME, YP_TINT, YP_VINT = { 1, UINT32_MAX, DAYS(30), YP_STIME }, + CONF_IO_FRLD_ZONES }, { C_COMMENT, YP_TSTR, YP_VNONE }, { NULL } }; @@ -182,7 +216,7 @@ static const yp_item_t desc_key[] = { }; static const yp_item_t desc_acl[] = { - { C_ID, YP_TSTR, YP_VNONE }, + { C_ID, YP_TSTR, YP_VNONE, CONF_IO_FREF }, { C_ADDR, YP_TDATA, YP_VDATA = { 0, NULL, addr_range_to_bin, addr_range_to_txt }, YP_FMULTI }, { C_KEY, YP_TREF, YP_VREF = { C_KEY }, YP_FMULTI, { check_ref } }, @@ -193,7 +227,7 @@ static const yp_item_t desc_acl[] = { }; static const yp_item_t desc_remote[] = { - { C_ID, YP_TSTR, YP_VNONE }, + { C_ID, YP_TSTR, YP_VNONE, CONF_IO_FREF }, { C_ADDR, YP_TADDR, YP_VADDR = { 53 }, YP_FMULTI }, { C_VIA, YP_TADDR, YP_VNONE, YP_FMULTI }, { C_KEY, YP_TREF, YP_VREF = { C_KEY }, YP_FNONE, { check_ref } }, @@ -201,72 +235,84 @@ static const yp_item_t desc_remote[] = { { NULL } }; -#define ZONE_ITEMS \ - { C_FILE, YP_TSTR, YP_VNONE }, \ - { C_STORAGE, YP_TSTR, YP_VSTR = { STORAGE_DIR } }, \ +#define ZONE_ITEMS(FLAGS) \ + { C_STORAGE, YP_TSTR, YP_VSTR = { STORAGE_DIR }, FLAGS }, \ + { C_FILE, YP_TSTR, YP_VNONE, FLAGS }, \ { C_MASTER, YP_TREF, YP_VREF = { C_RMT }, YP_FMULTI, { check_ref } }, \ { C_DDNS_MASTER, YP_TREF, YP_VREF = { C_RMT }, YP_FNONE, { check_ref } }, \ { C_NOTIFY, YP_TREF, YP_VREF = { C_RMT }, YP_FMULTI, { check_ref } }, \ { C_ACL, YP_TREF, YP_VREF = { C_ACL }, YP_FMULTI, { check_ref } }, \ - { C_SEM_CHECKS, YP_TBOOL, YP_VNONE }, \ + { C_SEM_CHECKS, YP_TBOOL, YP_VNONE, FLAGS }, \ { C_DISABLE_ANY, YP_TBOOL, YP_VNONE }, \ { C_ZONEFILE_SYNC, YP_TINT, YP_VINT = { -1, INT32_MAX, 0, YP_STIME } }, \ { C_IXFR_DIFF, YP_TBOOL, YP_VNONE }, \ - { C_MAX_JOURNAL_SIZE, YP_TINT, YP_VINT = { 0, INT64_MAX, INT64_MAX, YP_SSIZE } }, \ - { C_MAX_ZONE_SIZE, YP_TINT, YP_VINT = { 0, INT64_MAX, INT64_MAX, YP_SSIZE } }, \ - { C_KASP_DB, YP_TSTR, YP_VSTR = { "keys" } }, \ - { C_DNSSEC_SIGNING, YP_TBOOL, YP_VNONE }, \ - { C_DNSSEC_POLICY, YP_TREF, YP_VREF = { C_POLICY }, YP_FNONE, { check_ref_dflt } }, \ + { C_MAX_ZONE_SIZE, YP_TINT, YP_VINT = { 0, INT64_MAX, INT64_MAX, YP_SSIZE }, FLAGS }, \ + { C_MAX_JOURNAL_USAGE, YP_TINT, YP_VINT = { KILO(40), INT64_MAX, MEGA(100), YP_SSIZE } }, \ + { C_MAX_JOURNAL_DEPTH, YP_TINT, YP_VINT = { 2, INT64_MAX, INT64_MAX } }, \ + { C_KASP_DB, YP_TSTR, YP_VSTR = { "keys" }, FLAGS }, \ + { C_DNSSEC_SIGNING, YP_TBOOL, YP_VNONE, FLAGS }, \ + { C_DNSSEC_POLICY, YP_TREF, YP_VREF = { C_POLICY }, FLAGS, { check_ref_dflt } }, \ { C_SERIAL_POLICY, YP_TOPT, YP_VOPT = { serial_policies, SERIAL_POLICY_INCREMENT } }, \ { C_REQUEST_EDNS_OPTION, YP_TDATA, YP_VDATA = { 0, NULL, edns_opt_to_bin, edns_opt_to_txt } }, \ { C_MODULE, YP_TDATA, YP_VDATA = { 0, NULL, mod_id_to_bin, mod_id_to_txt }, \ - YP_FMULTI, { check_modref } }, \ - { C_COMMENT, YP_TSTR, YP_VNONE }, + YP_FMULTI | FLAGS, { check_modref } }, \ + { C_COMMENT, YP_TSTR, YP_VNONE }, \ + /* Obsolete, old journal items. */ \ + { C_JOURNAL, YP_TSTR, YP_VNONE, FLAGS }, \ + { C_MAX_JOURNAL_SIZE, YP_TINT, YP_VINT = { 0, INT64_MAX, INT64_MAX, YP_SSIZE }, FLAGS }, \ static const yp_item_t desc_template[] = { - { C_ID, YP_TSTR, YP_VNONE }, - ZONE_ITEMS - { C_TIMER_DB, YP_TSTR, YP_VSTR = { "timers" } }, \ - { C_GLOBAL_MODULE, YP_TDATA, YP_VDATA = { 0, NULL, mod_id_to_bin, mod_id_to_txt }, \ - YP_FMULTI, { check_modref } }, \ + { C_ID, YP_TSTR, YP_VNONE, CONF_IO_FREF }, + ZONE_ITEMS(CONF_IO_FRLD_ZONES) + { C_TIMER_DB, YP_TSTR, YP_VSTR = { "timers" }, CONF_IO_FRLD_ZONES }, + { C_GLOBAL_MODULE, YP_TDATA, YP_VDATA = { 0, NULL, mod_id_to_bin, mod_id_to_txt }, + YP_FMULTI | CONF_IO_FRLD_MOD, { check_modref } }, + { C_JOURNAL_DB, YP_TSTR, YP_VSTR = { "journal" }, CONF_IO_FRLD_SRV }, + { C_MAX_JOURNAL_DB_SIZE, YP_TINT, YP_VINT = { JOURNAL_MIN_FSLIMIT, VIRT_MEM_LIMIT(TERA(100)), + VIRT_MEM_LIMIT(GIGA(20)), YP_SSIZE }, + CONF_IO_FRLD_SRV }, { NULL } }; static const yp_item_t desc_zone[] = { - { C_DOMAIN, YP_TDNAME, YP_VNONE }, - { C_TPL, YP_TREF, YP_VREF = { C_TPL }, YP_FNONE, { check_ref } }, - ZONE_ITEMS + { C_DOMAIN, YP_TDNAME, YP_VNONE, CONF_IO_FRLD_ZONE }, + { C_TPL, YP_TREF, YP_VREF = { C_TPL }, CONF_IO_FRLD_ZONE, { check_ref } }, + ZONE_ITEMS(CONF_IO_FRLD_ZONE) { NULL } }; const yp_item_t conf_scheme[] = { - { C_SRV, YP_TGRP, YP_VGRP = { desc_server } }, + { C_SRV, YP_TGRP, YP_VGRP = { desc_server }, CONF_IO_FRLD_SRV, { check_server } }, { C_CTL, YP_TGRP, YP_VGRP = { desc_control } }, - { C_LOG, YP_TGRP, YP_VGRP = { desc_log }, YP_FMULTI }, + { C_LOG, YP_TGRP, YP_VGRP = { desc_log }, YP_FMULTI | CONF_IO_FRLD_LOG }, + { C_STATS, YP_TGRP, YP_VGRP = { desc_stats }, CONF_IO_FRLD_SRV }, { C_KEYSTORE, YP_TGRP, YP_VGRP = { desc_keystore }, YP_FMULTI, { check_keystore } }, { C_POLICY, YP_TGRP, YP_VGRP = { desc_policy }, YP_FMULTI, { check_policy } }, { C_KEY, YP_TGRP, YP_VGRP = { desc_key }, YP_FMULTI, { check_key } }, { C_ACL, YP_TGRP, YP_VGRP = { desc_acl }, YP_FMULTI, { check_acl } }, { C_RMT, YP_TGRP, YP_VGRP = { desc_remote }, YP_FMULTI, { check_remote } }, /* MODULES */ - { C_MOD_SYNTH_RECORD, YP_TGRP, YP_VGRP = { scheme_mod_synth_record }, YP_FMULTI, - { check_mod_synth_record } }, - { C_MOD_DNSPROXY, YP_TGRP, YP_VGRP = { scheme_mod_dnsproxy }, YP_FMULTI, - { check_mod_dnsproxy } }, + { C_MOD_RRL, YP_TGRP, YP_VGRP = { scheme_mod_rrl }, FMOD, + { check_mod_rrl } }, + { C_MOD_STATS, YP_TGRP, YP_VGRP = { scheme_mod_stats }, FMOD }, + { C_MOD_SYNTH_RECORD, YP_TGRP, YP_VGRP = { scheme_mod_synth_record }, FMOD, + { check_mod_synth_record } }, + { C_MOD_DNSPROXY, YP_TGRP, YP_VGRP = { scheme_mod_dnsproxy }, FMOD, + { check_mod_dnsproxy } }, #if HAVE_ROSEDB - { C_MOD_ROSEDB, YP_TGRP, YP_VGRP = { scheme_mod_rosedb }, YP_FMULTI, - { check_mod_rosedb } }, + { C_MOD_ROSEDB, YP_TGRP, YP_VGRP = { scheme_mod_rosedb }, FMOD, + { check_mod_rosedb } }, #endif #if USE_DNSTAP - { C_MOD_DNSTAP, YP_TGRP, YP_VGRP = { scheme_mod_dnstap }, YP_FMULTI, - { check_mod_dnstap } }, + { C_MOD_DNSTAP, YP_TGRP, YP_VGRP = { scheme_mod_dnstap }, FMOD, + { check_mod_dnstap } }, #endif - { C_MOD_ONLINE_SIGN, YP_TGRP, YP_VGRP = { scheme_mod_online_sign }, YP_FMULTI }, - { C_MOD_WHOAMI, YP_TGRP, YP_VGRP = { scheme_mod_whoami }, YP_FMULTI }, - { C_MOD_NOUDP, YP_TGRP, YP_VGRP = { scheme_mod_noudp }, YP_FMULTI }, + { C_MOD_ONLINE_SIGN, YP_TGRP, YP_VGRP = { scheme_mod_online_sign }, FMOD }, + { C_MOD_WHOAMI, YP_TGRP, YP_VGRP = { scheme_mod_whoami }, FMOD }, + { C_MOD_NOUDP, YP_TGRP, YP_VGRP = { scheme_mod_noudp }, FMOD }, /***********/ - { C_TPL, YP_TGRP, YP_VGRP = { desc_template }, YP_FMULTI, { check_template } }, - { C_ZONE, YP_TGRP, YP_VGRP = { desc_zone }, YP_FMULTI, { check_zone } }, - { C_INCL, YP_TSTR, YP_VNONE, YP_FNONE, { include_file } }, + { C_TPL, YP_TGRP, YP_VGRP = { desc_template }, YP_FMULTI, { check_template } }, + { C_ZONE, YP_TGRP, YP_VGRP = { desc_zone }, YP_FMULTI | CONF_IO_FZONE, { check_zone } }, + { C_INCL, YP_TSTR, YP_VNONE, CONF_IO_FDIFF_ZONES | CONF_IO_FRLD_ALL, { include_file } }, { NULL } }; diff --git a/src/knot/conf/scheme.h b/src/knot/conf/scheme.h index 963763a90558bf64ef5e6995ef73629f493ec9d3..89dba2cab4241319d79a0280d3808216b5d02ad5 100644 --- a/src/knot/conf/scheme.h +++ b/src/knot/conf/scheme.h @@ -33,6 +33,7 @@ #define C_ADDR "\x07""address" #define C_ALG "\x09""algorithm" #define C_ANY "\x03""any" +#define C_APPEND "\x06""append" #define C_ASYNC_START "\x0B""async-start" #define C_BACKEND "\x07""backend" #define C_BG_WORKERS "\x12""background-workers" @@ -52,6 +53,8 @@ #define C_IDENT "\x08""identity" #define C_INCL "\x07""include" #define C_IXFR_DIFF "\x15""ixfr-from-differences" +#define C_JOURNAL "\x07""journal" /* obsolete, old journal compat */ +#define C_JOURNAL_DB "\x0A""journal-db" #define C_KASP_DB "\x07""kasp-db" #define C_KEY "\x03""key" #define C_KEYSTORE "\x08""keystore" @@ -60,7 +63,10 @@ #define C_LOG "\x03""log" #define C_MANUAL "\x06""manual" #define C_MASTER "\x06""master" -#define C_MAX_JOURNAL_SIZE "\x10""max-journal-size" +#define C_MAX_JOURNAL_SIZE "\x10""max-journal-size" /* obsolete, old journal compat */ +#define C_MAX_JOURNAL_DB_SIZE "\x13""max-journal-db-size" +#define C_MAX_JOURNAL_USAGE "\x11""max-journal-usage" +#define C_MAX_JOURNAL_DEPTH "\x11""max-journal-depth" #define C_MAX_TCP_CLIENTS "\x0F""max-tcp-clients" #define C_MAX_UDP_PAYLOAD "\x0F""max-udp-payload" #define C_MAX_ZONE_SIZE "\x0D""max-zone-size" @@ -89,7 +95,10 @@ #define C_SEM_CHECKS "\x0F""semantic-checks" #define C_SERIAL_POLICY "\x0D""serial-policy" #define C_SERVER "\x06""server" +#define C_SINGLE_TYPE_SIGNING "\x13""single-type-signing" #define C_SRV "\x06""server" +#define C_STATS "\x0A""statistics" +#define C_TIMER "\x05""timer" #define C_STORAGE "\x07""storage" #define C_TARGET "\x06""target" #define C_TCP_HSHAKE_TIMEOUT "\x15""tcp-handshake-timeout" diff --git a/src/knot/conf/tools.c b/src/knot/conf/tools.c index ad6469766ed8910924abe457face9306e48c7c1e..a3c88f4a660ee814ef605876b3b7f04cd99f7504 100644 --- a/src/knot/conf/tools.c +++ b/src/knot/conf/tools.c @@ -34,6 +34,7 @@ #include "knot/conf/conf.h" #include "knot/conf/scheme.h" #include "knot/common/log.h" +#include "knot/nameserver/query_module.h" #include "libknot/errcode.h" #include "libknot/yparser/yptrafo.h" #include "contrib/wire_ctx.h" @@ -77,33 +78,31 @@ int mod_id_to_bin( // Check for "mod_name/mod_id" format. const uint8_t *pos = (uint8_t *)strchr((char *)in->position, '/'); - if (pos == NULL || pos >= stop) { - return KNOT_EINVAL; - } - - // Check for missing module name. if (pos == in->position) { + // Missing module name. + return KNOT_EINVAL; + } else if (pos >= stop - 1) { + // Missing module identifier after slash. return KNOT_EINVAL; } // Write mod_name in the yp_name_t format. - uint8_t name_len = pos - in->position; + uint8_t name_len = (pos != NULL) ? (pos - in->position) : + wire_ctx_available(in); wire_ctx_write_u8(out, name_len); wire_ctx_write(out, in->position, name_len); wire_ctx_skip(in, name_len); - // Skip the separator. - wire_ctx_skip(in, sizeof(uint8_t)); - - // Check for missing id. - if (wire_ctx_available(in) == 0) { - return KNOT_EINVAL; - } + // Check for mod_id. + if (pos != NULL) { + // Skip the separator. + wire_ctx_skip(in, sizeof(uint8_t)); - // Write mod_id as a zero terminated string. - int ret = yp_str_to_bin(in, out, stop); - if (ret != KNOT_EOK) { - return ret; + // Write mod_id as a zero terminated string. + int ret = yp_str_to_bin(in, out, stop); + if (ret != KNOT_EOK) { + return ret; + } } YP_CHECK_RET; @@ -119,13 +118,16 @@ int mod_id_to_txt( wire_ctx_write(out, in->position, name_len); wire_ctx_skip(in, name_len); - // Write the separator. - wire_ctx_write_u8(out, '/'); + // Check for mod_id. + if (wire_ctx_available(in) > 0) { + // Write the separator. + wire_ctx_write_u8(out, '/'); - // Write mod_id. - int ret = yp_str_to_txt(in, out); - if (ret != KNOT_EOK) { - return ret; + // Write mod_id. + int ret = yp_str_to_txt(in, out); + if (ret != KNOT_EOK) { + return ret; + } } YP_CHECK_RET; @@ -332,6 +334,16 @@ int check_modref( const uint8_t *id = args->data + 1 + args->data[0]; size_t id_len = args->data_len - 1 - args->data[0]; + // Check if the module requires some configuration. + if (id_len == 0) { + static_module_t *mod = find_module(mod_name); + if (mod == NULL) { + return KNOT_EINVAL; + } + + return mod->opt_conf ? KNOT_EOK : KNOT_YP_ENOID; + } + // Try to find a module with the id. if (!conf_rawid_exists_txn(args->conf, args->txn, mod_name, id, id_len)) { args->err_str = "invalid module reference"; @@ -341,6 +353,40 @@ int check_modref( return KNOT_EOK; } +int check_server( + conf_check_t *args) +{ + bool present = false; + + conf_val_t val; + val = conf_get_txn(args->conf, args->txn, C_SRV, C_RATE_LIMIT); + if (val.code == KNOT_EOK) { + present = true; + } + + val = conf_get_txn(args->conf, args->txn, C_SRV, C_RATE_LIMIT_SLIP); + if (val.code == KNOT_EOK) { + present = true; + } + + val = conf_get_txn(args->conf, args->txn, C_SRV, C_RATE_LIMIT_TBL_SIZE); + if (val.code == KNOT_EOK) { + present = true; + } + + val = conf_get_txn(args->conf, args->txn, C_SRV, C_RATE_LIMIT_WHITELIST); + if (val.code == KNOT_EOK) { + present = true; + } + + if (present) { + CONF_LOG(LOG_NOTICE, "obsolete RRL configuration in the server, " + "use module mod-rrl instead"); + } + + return KNOT_EOK; +} + int check_keystore( conf_check_t *args) { @@ -449,24 +495,19 @@ int check_template( return KNOT_EOK; } - // Check global-module. - conf_val_t g_module = conf_rawid_get_txn(args->conf, args->txn, C_TPL, - C_GLOBAL_MODULE, args->id, - args->id_len); - - if (g_module.code == KNOT_EOK) { - args->err_str = "global module in non-default template"; - return KNOT_EINVAL; - } - - // Check timer-db. - conf_val_t timer_db = conf_rawid_get_txn(args->conf, args->txn, C_TPL, - C_TIMER_DB, args->id, args->id_len); + conf_val_t val; + #define CHECK_DFLT(item, name) \ + val = conf_rawid_get_txn(args->conf, args->txn, C_TPL, item, \ + args->id, args->id_len); \ + if (val.code == KNOT_EOK) { \ + args->err_str = name " in non-default template"; \ + return KNOT_EINVAL; \ + } - if (timer_db.code == KNOT_EOK) { - args->err_str = "timer database location in non-default template"; - return KNOT_EINVAL; - } + CHECK_DFLT(C_TIMER_DB, "timer database"); + CHECK_DFLT(C_GLOBAL_MODULE, "global module"); + CHECK_DFLT(C_JOURNAL_DB, "journal database path"); + CHECK_DFLT(C_MAX_JOURNAL_DB_SIZE, "journal database maximum size"); return KNOT_EOK; } @@ -491,8 +532,8 @@ int check_zone( C_DNSSEC_POLICY, args->id); if (conf_bool(&signing) && policy.code != KNOT_EOK) { CONF_LOG(LOG_NOTICE, "DNSSEC policy settings in KASP database " - "is obsolete and will be removed in the next major release. " - "Use zone.dnssec-policy in server configuration instead."); + "is obsolete and will be removed in the next major release, " + "use zone.dnssec-policy in server configuration instead"); } return KNOT_EOK; diff --git a/src/knot/conf/tools.h b/src/knot/conf/tools.h index 8378a0b42d0d5a6617fa2991d2b349011b1be036..041d360e5efa4d1841d28fde4e487913f82564bf 100644 --- a/src/knot/conf/tools.h +++ b/src/knot/conf/tools.h @@ -84,6 +84,10 @@ int check_modref( conf_check_t *args ); +int check_server( + conf_check_t *args +); + int check_keystore( conf_check_t *args ); diff --git a/src/knot/ctl/commands.c b/src/knot/ctl/commands.c index 4148a6be7a1a751c8b5b485927eadf8de614fa0b..91a0ef670984c9a92c91307681b59ea804ca8ea8 100644 --- a/src/knot/ctl/commands.c +++ b/src/knot/ctl/commands.c @@ -18,16 +18,20 @@ #include <unistd.h> #include "knot/common/log.h" +#include "knot/common/stats.h" #include "knot/conf/confio.h" #include "knot/ctl/commands.h" #include "knot/events/handlers.h" +#include "knot/nameserver/query_module.h" #include "knot/updates/zone-update.h" +#include "knot/zone/timers.h" #include "libknot/libknot.h" #include "libknot/yparser/yptrafo.h" #include "contrib/macros.h" #include "contrib/mempattern.h" #include "contrib/string.h" #include "zscanner/scanner.h" +#include "contrib/strtonum.h" void ctl_log_data(knot_ctl_data_t *data) { @@ -40,15 +44,25 @@ void ctl_log_data(knot_ctl_data_t *data) const char *item = (*data)[KNOT_CTL_IDX_ITEM]; const char *id = (*data)[KNOT_CTL_IDX_ID]; + if (section == NULL) { + return; + } + if (zone != NULL) { - log_debug("control, zone '%s'", zone); - } else if (section != NULL) { - log_debug("control, item '%s%s%s%s%s%s'", section, - (id != NULL ? "[" : ""), - (id != NULL ? id : ""), - (id != NULL ? "]" : ""), - (item != NULL ? "." : ""), - (item != NULL ? item : "")); + log_ctl_zone_str_debug(zone, + "control, item '%s%s%s%s%s%s'", section, + (id != NULL ? "[" : ""), + (id != NULL ? id : ""), + (id != NULL ? "]" : ""), + (item != NULL ? "." : ""), + (item != NULL ? item : "")); + } else { + log_ctl_debug("control, item '%s%s%s%s%s%s'", section, + (id != NULL ? "[" : ""), + (id != NULL ? id : ""), + (id != NULL ? "]" : ""), + (item != NULL ? "." : ""), + (item != NULL ? item : "")); } } @@ -61,7 +75,7 @@ static void send_error(ctl_args_t *args, const char *msg) int ret = knot_ctl_send(args->ctl, KNOT_CTL_TYPE_DATA, &data); if (ret != KNOT_EOK) { - log_debug("control, failed to send error (%s)", knot_strerror(ret)); + log_ctl_debug("control, failed to send error (%s)", knot_strerror(ret)); } } @@ -107,8 +121,8 @@ static int zones_apply(ctl_args_t *args, int (*fcn)(zone_t *, ctl_args_t *)) ret = fcn(zone, args); } if (ret != KNOT_EOK) { - log_zone_str_debug(args->data[KNOT_CTL_IDX_ZONE], - "control, (%s)", knot_strerror(ret)); + log_ctl_zone_str_error(args->data[KNOT_CTL_IDX_ZONE], + "control, error (%s)", knot_strerror(ret)); send_error(args, knot_strerror(ret)); } @@ -338,6 +352,11 @@ static int zone_txn_commit(zone_t *zone, ctl_args_t *args) int ret = zone_update_commit(conf(), zone->control_update); if (ret != KNOT_EOK) { + /* Invalidate the transaction if aborted. */ + if (zone->control_update->zone == NULL) { + free(zone->control_update); + zone->control_update = NULL; + } return ret; } @@ -548,7 +567,7 @@ static int zone_read(zone_t *zone, ctl_args_t *args) ret = send_node((zone_node_t *)node, ctx); } else if (zone->contents != NULL) { - ret = zone_contents_tree_apply_inorder(zone->contents, send_node, ctx); + ret = zone_contents_apply(zone->contents, send_node, ctx); } zone_read_failed: @@ -645,8 +664,7 @@ static int send_changeset_part(changeset_t *ch, send_ctx_t *ctx, bool from) // Send other records. changeset_iter_t it; - int ret = from ? changeset_iter_rem(&it, ch, true) : - changeset_iter_add(&it, ch, true); + int ret = from ? changeset_iter_rem(&it, ch) : changeset_iter_add(&it, ch); if (ret != KNOT_EOK) { return ret; } @@ -903,6 +921,9 @@ static int zone_purge(zone_t *zone, ctl_args_t *args) // Abort possible editing transaction. (void)zone_txn_abort(zone, args); + // Purge the zone timers. + memset(&zone->timers, 0, sizeof(zone->timers)); + // Expire the zone. event_expire(conf(), zone); @@ -912,15 +933,157 @@ static int zone_purge(zone_t *zone, ctl_args_t *args) free(zonefile); // Purge the zone journal. - char *journalfile = conf_journalfile(conf(), zone->name); - (void)unlink(journalfile); - free(journalfile); + if (journal_open(zone->journal, zone->journal_db, zone->name) == KNOT_EOK) { + (void)scrape_journal(zone->journal); + } + + return KNOT_EOK; +} + +static int send_stats_ctr(mod_ctr_t *ctr, ctl_args_t *args, knot_ctl_data_t *data) +{ + char index[128]; + char value[32]; + + if (ctr->count == 1) { + int ret = snprintf(value, sizeof(value), "%"PRIu64, ctr->counter); + if (ret <= 0 || ret >= sizeof(value)) { + return ret; + } - // TODO: Purge the zone timers (after zone events refactoring). + (*data)[KNOT_CTL_IDX_ID] = NULL; + (*data)[KNOT_CTL_IDX_DATA] = value; + + ret = knot_ctl_send(args->ctl, KNOT_CTL_TYPE_DATA, data); + if (ret != KNOT_EOK) { + return ret; + } + } else { + bool force = ctl_has_flag(args->data[KNOT_CTL_IDX_FLAGS], + CTL_FLAG_FORCE); + + for (uint32_t i = 0; i < ctr->count; i++) { + // Skip empty counters. + if (ctr->counters[i] == 0 && !force) { + continue; + } + + int ret; + if (ctr->idx_to_str) { + char *str = ctr->idx_to_str(i, ctr->count); + if (str == NULL) { + continue; + } + ret = snprintf(index, sizeof(index), "%s", str); + free(str); + } else { + ret = snprintf(index, sizeof(index), "%u", i); + } + if (ret <= 0 || ret >= sizeof(index)) { + return ret; + } + + ret = snprintf(value, sizeof(value), "%"PRIu64, + ctr->counters[i]); + if (ret <= 0 || ret >= sizeof(value)) { + return ret; + } + + (*data)[KNOT_CTL_IDX_ID] = index; + (*data)[KNOT_CTL_IDX_DATA] = value; + + knot_ctl_type_t type = (i == 0) ? KNOT_CTL_TYPE_DATA : + KNOT_CTL_TYPE_EXTRA; + ret = knot_ctl_send(args->ctl, type, data); + if (ret != KNOT_EOK) { + return ret; + } + } + } return KNOT_EOK; } +static int modules_stats(list_t *query_modules, ctl_args_t *args, knot_dname_t *zone) +{ + if (query_modules == NULL) { + return KNOT_EOK; + } + + const char *section = args->data[KNOT_CTL_IDX_SECTION]; + const char *item = args->data[KNOT_CTL_IDX_ITEM]; + + char name[KNOT_DNAME_TXT_MAXLEN + 1] = { 0 }; + knot_ctl_data_t data = { 0 }; + + bool section_found = (section == NULL) ? true : false; + bool item_found = (item == NULL) ? true : false; + + struct query_module *mod = NULL; + WALK_LIST(mod, *query_modules) { + // Skip modules without statistics. + if (mod->stats_count == 0) { + continue; + } + + // Check for specific module. + if (section != NULL) { + if (section_found) { + break; + } else if (strcasecmp(mod->id->name + 1, section) == 0) { + section_found = true; + } else { + continue; + } + } + + data[KNOT_CTL_IDX_SECTION] = mod->id->name + 1; + + for (int i = 0; i < mod->stats_count; i++) { + mod_ctr_t *ctr = mod->stats + i; + + // Skip empty counter. + if (ctr->name == NULL) { + continue; + } + + // Check for specific counter. + if (item != NULL) { + if (item_found) { + break; + } else if (strcasecmp(ctr->name, item) == 0) { + item_found = true; + } else { + continue; + } + } + + // Prepare zone name if not already prepared. + if (zone != NULL && name[0] == '\0') { + if (knot_dname_to_str(name, zone, sizeof(name)) == NULL) { + return KNOT_EINVAL; + } + data[KNOT_CTL_IDX_ZONE] = name; + } + + data[KNOT_CTL_IDX_ITEM] = ctr->name; + + // Send the counters. + int ret = send_stats_ctr(ctr, args, &data); + if (ret != KNOT_EOK) { + return ret; + } + } + } + + return (section_found && item_found) ? KNOT_EOK : KNOT_ENOENT; +} + +static int zone_stats(zone_t *zone, ctl_args_t *args) +{ + return modules_stats(&zone->query_modules, args, zone->name); +} + static int ctl_zone(ctl_args_t *args, ctl_cmd_t cmd) { switch (cmd) { @@ -954,6 +1117,8 @@ static int ctl_zone(ctl_args_t *args, ctl_cmd_t cmd) return zones_apply(args, zone_txn_unset); case CTL_ZONE_PURGE: return zones_apply(args, zone_purge); + case CTL_ZONE_STATS: + return zones_apply(args, zone_stats); default: assert(0); return KNOT_EINVAL; @@ -972,7 +1137,7 @@ static int ctl_server(ctl_args_t *args, ctl_cmd_t cmd) ret = KNOT_CTL_ESTOP; break; case CTL_RELOAD: - ret = server_reload(args->server, conf()->filename, true); + ret = server_reload(args->server); if (ret != KNOT_EOK) { send_error(args, knot_strerror(ret)); } @@ -985,6 +1150,69 @@ static int ctl_server(ctl_args_t *args, ctl_cmd_t cmd) return ret; } +static int ctl_stats(ctl_args_t *args, ctl_cmd_t cmd) +{ + const char *section = args->data[KNOT_CTL_IDX_SECTION]; + const char *item = args->data[KNOT_CTL_IDX_ITEM]; + + bool found = (section == NULL) ? true : false; + + // Process server metrics. + if (section == NULL || strcasecmp(section, "server") == 0) { + char value[32]; + knot_ctl_data_t data = { + [KNOT_CTL_IDX_SECTION] = "server", + [KNOT_CTL_IDX_DATA] = value + }; + + for (const stats_item_t *i = server_stats; i->name != NULL; i++) { + if (item != NULL) { + if (found) { + break; + } else if (strcmp(i->name, item) == 0) { + found = true; + } else { + continue; + } + } else { + found = true; + } + + data[KNOT_CTL_IDX_ITEM] = i->name; + int ret = snprintf(value, sizeof(value), "%"PRIu64, + i->val(args->server)); + if (ret <= 0 || ret >= sizeof(value)) { + send_error(args, knot_strerror(ret)); + return ret; + } + + ret = knot_ctl_send(args->ctl, KNOT_CTL_TYPE_DATA, &data); + if (ret != KNOT_EOK) { + send_error(args, knot_strerror(ret)); + return ret; + } + } + } + + // Process modules metrics. + if (section == NULL || strncasecmp(section, "mod-", strlen("mod-")) == 0) { + int ret = modules_stats(&conf()->query_modules, args, NULL); + if (ret != KNOT_EOK) { + send_error(args, knot_strerror(ret)); + return ret; + } + + found = true; + } + + if (!found) { + send_error(args, knot_strerror(KNOT_EINVAL)); + return KNOT_EINVAL; + } + + return KNOT_EOK; +} + static int send_block_data(conf_io_t *io, knot_ctl_data_t *data) { knot_ctl_t *ctl = (knot_ctl_t *)io->misc; @@ -1125,7 +1353,7 @@ static int ctl_conf_txn(ctl_args_t *args, ctl_cmd_t cmd) break; } - ret = server_reload(args->server, NULL, false); + ret = server_reload(args->server); break; default: assert(0); @@ -1188,11 +1416,6 @@ static int ctl_conf_read(ctl_args_t *args, ctl_cmd_t cmd) static int ctl_conf_modify(ctl_args_t *args, ctl_cmd_t cmd) { - conf_io_t io = { - .fcn = send_block, - .misc = args->ctl - }; - // Start child transaction. int ret = conf_io_begin(true); if (ret != KNOT_EOK) { @@ -1208,7 +1431,7 @@ static int ctl_conf_modify(ctl_args_t *args, ctl_cmd_t cmd) switch (cmd) { case CTL_CONF_SET: - ret = conf_io_set(key0, key1, id, data, &io); + ret = conf_io_set(key0, key1, id, data); break; case CTL_CONF_UNSET: ret = conf_io_unset(key0, key1, id, data); @@ -1254,6 +1477,7 @@ static const desc_t cmd_table[] = { [CTL_STATUS] = { "status", ctl_server }, [CTL_STOP] = { "stop", ctl_server }, [CTL_RELOAD] = { "reload", ctl_server }, + [CTL_STATS] = { "stats", ctl_stats }, [CTL_ZONE_STATUS] = { "zone-status", ctl_zone }, [CTL_ZONE_RELOAD] = { "zone-reload", ctl_zone }, @@ -1271,6 +1495,7 @@ static const desc_t cmd_table[] = { [CTL_ZONE_SET] = { "zone-set", ctl_zone }, [CTL_ZONE_UNSET] = { "zone-unset", ctl_zone }, [CTL_ZONE_PURGE] = { "zone-purge", ctl_zone }, + [CTL_ZONE_STATS] = { "zone-stats", ctl_zone }, [CTL_CONF_LIST] = { "conf-list", ctl_conf_read }, [CTL_CONF_READ] = { "conf-read", ctl_conf_read }, diff --git a/src/knot/ctl/commands.h b/src/knot/ctl/commands.h index 204bb17d604f0ed572fcd60415baf7037e304074..430fc8212281ba6883c34e0cd86c445ae9a50ff4 100644 --- a/src/knot/ctl/commands.h +++ b/src/knot/ctl/commands.h @@ -38,6 +38,7 @@ typedef enum { CTL_STATUS, CTL_STOP, CTL_RELOAD, + CTL_STATS, CTL_ZONE_STATUS, CTL_ZONE_RELOAD, @@ -45,6 +46,7 @@ typedef enum { CTL_ZONE_RETRANSFER, CTL_ZONE_FLUSH, CTL_ZONE_SIGN, + CTL_ZONE_STATS, CTL_ZONE_READ, CTL_ZONE_BEGIN, diff --git a/src/knot/ctl/process.c b/src/knot/ctl/process.c index 30eeca106e98a386143750a7df7aa9814b23c2a3..d845bed91e27276ee99cf3ea0f5d4a54ac97c111 100644 --- a/src/knot/ctl/process.c +++ b/src/knot/ctl/process.c @@ -42,8 +42,8 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) // Receive data unit. int ret = knot_ctl_receive(args.ctl, &args.type, &args.data); if (ret != KNOT_EOK) { - log_debug("control, failed to receive (%s)", - knot_strerror(ret)); + log_ctl_debug("control, failed to receive (%s)", + knot_strerror(ret)); mp_delete(args.mm.ctx); return ret; } @@ -73,16 +73,22 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) } const char *cmd_name = args.data[KNOT_CTL_IDX_CMD]; + const char *zone_name = args.data[KNOT_CTL_IDX_ZONE]; ctl_cmd_t cmd = ctl_str_to_cmd(cmd_name); if (cmd != CTL_NONE) { - log_info("control, received command '%s'", cmd_name); + if (zone_name != NULL) { + log_ctl_zone_str_info(zone_name, + "control, received command '%s'", cmd_name); + } else { + log_ctl_info("control, received command '%s'", cmd_name); + } ctl_log_data(&args.data); } else if (cmd_name != NULL){ - log_debug("control, invalid command '%s'", cmd_name); + log_ctl_debug("control, invalid command '%s'", cmd_name); continue; } else { - log_debug("control, empty command"); + log_ctl_debug("control, empty command"); continue; } @@ -94,16 +100,16 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) case KNOT_CTL_ESTOP: break; default: - log_debug("control, command '%s' (%s)", cmd_name, - knot_strerror(cmd_ret)); + log_ctl_debug("control, command '%s' (%s)", cmd_name, + knot_strerror(cmd_ret)); break; } // Finalize the answer block. ret = knot_ctl_send(ctl, KNOT_CTL_TYPE_BLOCK, NULL); if (ret != KNOT_EOK) { - log_debug("control, failed to reply (%s)", - knot_strerror(ret)); + log_ctl_debug("control, failed to reply (%s)", + knot_strerror(ret)); } // Stop if required. @@ -111,8 +117,8 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) // Finalize the answer message. ret = knot_ctl_send(ctl, KNOT_CTL_TYPE_END, NULL); if (ret != KNOT_EOK) { - log_debug("control, failed to reply (%s)", - knot_strerror(ret)); + log_ctl_debug("control, failed to reply (%s)", + knot_strerror(ret)); } mp_delete(args.mm.ctx); diff --git a/src/knot/dnssec/context.c b/src/knot/dnssec/context.c index 020f87aa06a9ebc43746307bac7badfc54464dde..bd080fff989971d51190025274293d2af54bd58b 100644 --- a/src/knot/dnssec/context.c +++ b/src/knot/dnssec/context.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -59,6 +59,9 @@ static int policy_load(void *ctx, dnssec_kasp_policy_t *policy) val = conf_rawid_get(conf(), C_POLICY, C_MANUAL, id, id_len); policy->manual = conf_bool(&val); + val = conf_rawid_get(conf(), C_POLICY, C_SINGLE_TYPE_SIGNING, id, id_len); + policy->singe_type_signing = conf_bool(&val); + val = conf_rawid_get(conf(), C_POLICY, C_ALG, id, id_len); policy->algorithm = conf_opt(&val); @@ -78,6 +81,9 @@ static int policy_load(void *ctx, dnssec_kasp_policy_t *policy) val = conf_rawid_get(conf(), C_POLICY, C_ZSK_LIFETIME, id, id_len); policy->zsk_lifetime = conf_int(&val); + val = conf_rawid_get(conf(), C_POLICY, C_PROPAG_DELAY, id, id_len); + policy->propagation_delay = conf_int(&val); + val = conf_rawid_get(conf(), C_POLICY, C_RRSIG_LIFETIME, id, id_len); policy->rrsig_lifetime = conf_int(&val); @@ -96,9 +102,6 @@ static int policy_load(void *ctx, dnssec_kasp_policy_t *policy) val = conf_rawid_get(conf(), C_POLICY, C_NSEC3_SALT_LIFETIME, id, id_len); policy->nsec3_salt_lifetime = conf_int(&val); - val = conf_rawid_get(conf(), C_POLICY, C_PROPAG_DELAY, id, id_len); - policy->propagation_delay = conf_int(&val); - return DNSSEC_EOK; } @@ -200,6 +203,12 @@ int kdnssec_kasp_init(kdnssec_ctx_t *ctx, const char *kasp_path, const char *zon return r; } + // Overide policy name if provided. + if (ctx->policy_name != NULL) { + free(ctx->zone->policy); + ctx->zone->policy = strdup(ctx->policy_name); + } + r = dnssec_kasp_policy_load(ctx->kasp, ctx->zone->policy, &ctx->policy); if (r != DNSSEC_EOK) { return r; @@ -215,6 +224,7 @@ void kdnssec_ctx_deinit(kdnssec_ctx_t *ctx) return; } + free(ctx->policy_name); dnssec_keystore_deinit(ctx->keystore); dnssec_kasp_policy_free(ctx->policy); dnssec_kasp_zone_free(ctx->zone); @@ -223,26 +233,29 @@ void kdnssec_ctx_deinit(kdnssec_ctx_t *ctx) memset(ctx, 0, sizeof(*ctx)); } -int kdnssec_ctx_init(kdnssec_ctx_t *ctx, const knot_dname_t *zone_name) +int kdnssec_ctx_init(kdnssec_ctx_t *ctx, const knot_dname_t *zone_name, + conf_val_t *policy, bool disable_legacy) { if (ctx == NULL || zone_name == NULL) { return KNOT_EINVAL; } - // Check for legacy configuration. - conf_val_t val = conf_zone_get(conf(), C_DNSSEC_POLICY, zone_name); - bool legacy = val.code != KNOT_EOK; - - kdnssec_ctx_t new_ctx = { - .legacy = legacy - }; - char zone_str[KNOT_DNAME_TXT_MAXLEN + 1]; if (knot_dname_to_str(zone_str, zone_name, sizeof(zone_str)) == NULL) { return KNOT_ENOMEM; } - val = conf_zone_get(conf(), C_STORAGE, zone_name); + kdnssec_ctx_t new_ctx = { 0 }; + + if (!disable_legacy && policy->code != KNOT_EOK) { + new_ctx.legacy = true; + } + + if (conf_str(policy) != NULL) { + new_ctx.policy_name = strdup(conf_str(policy)); + } + + conf_val_t val = conf_zone_get(conf(), C_STORAGE, zone_name); char *storage = conf_abs_path(&val, NULL); val = conf_zone_get(conf(), C_KASP_DB, zone_name); char *kasp_path = conf_abs_path(&val, storage); diff --git a/src/knot/dnssec/context.h b/src/knot/dnssec/context.h index b6fe72fcfaa1e66b3916bf3caebd565e6c4a365e..ad944a45c091c02b653b0104611ed9455067f7aa 100644 --- a/src/knot/dnssec/context.h +++ b/src/knot/dnssec/context.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -21,6 +21,7 @@ #include <dnssec/kasp.h> #include <dnssec/keystore.h> +#include "knot/conf/conf.h" #include "libknot/dname.h" /*! @@ -30,6 +31,8 @@ struct kdnssec_ctx { time_t now; bool legacy; + char *policy_name; + dnssec_kasp_t *kasp; dnssec_kasp_zone_t *zone; dnssec_kasp_policy_t *policy; @@ -57,10 +60,13 @@ int kdnssec_kasp_init(kdnssec_ctx_t *ctx, const char *kasp_path, const char *zon /*! * \brief Initialize DNSSEC signing context. * - * \param ctx Signing context to be initialized. - * \param zone_name Name of the zone. + * \param ctx Signing context to be initialized. + * \param zone_name Name of the zone. + * \param policy DNSSEC policy configuration reference. + * \param disable_legacy Disable legacy detection indication. */ -int kdnssec_ctx_init(kdnssec_ctx_t *ctx, const knot_dname_t *zone_name); +int kdnssec_ctx_init(kdnssec_ctx_t *ctx, const knot_dname_t *zone_name, + conf_val_t *policy, bool disable_legacy); /*! * \brief Cleanup DNSSEC signing context. diff --git a/src/knot/dnssec/nsec-chain.c b/src/knot/dnssec/nsec-chain.c index 5ddd1b1a24f75a6140151acdb340f51a2ab313e5..18a8390c00975ada8fa81cb39b1b88a255dce43c 100644 --- a/src/knot/dnssec/nsec-chain.c +++ b/src/knot/dnssec/nsec-chain.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -162,9 +162,7 @@ int knot_nsec_chain_iterate_create(zone_tree_t *nodes, assert(nodes); assert(callback); - bool sorted = true; - hattrie_iter_t *it = hattrie_iter_begin(nodes, sorted); - + hattrie_iter_t *it = hattrie_iter_begin(nodes); if (!it) { return KNOT_ENOMEM; } diff --git a/src/knot/dnssec/nsec3-chain.c b/src/knot/dnssec/nsec3-chain.c index 3cecf2b4358f1ac58c31850fae29604747e78c91..ee65ef8bc82ba7bed3e728ca8069e96d42e7fce4 100644 --- a/src/knot/dnssec/nsec3-chain.c +++ b/src/knot/dnssec/nsec3-chain.c @@ -112,7 +112,7 @@ static int shallow_copy_signature(const zone_node_t *from, zone_node_t *to) /*! * \brief Reuse signatatures by shallow copying them from one tree to another. */ -static int copy_signatures(const zone_tree_t *from, zone_tree_t *to) +static int copy_signatures(zone_tree_t *from, zone_tree_t *to) { if (zone_tree_is_empty(from)) { return KNOT_EOK; @@ -120,8 +120,7 @@ static int copy_signatures(const zone_tree_t *from, zone_tree_t *to) assert(to); - bool sorted = false; - hattrie_iter_t *it = hattrie_iter_begin(from, sorted); + hattrie_iter_t *it = hattrie_iter_begin(from); for (/* NOP */; !hattrie_iter_finished(it); hattrie_iter_next(it)) { zone_node_t *node_from = (zone_node_t *)*hattrie_iter_val(it); @@ -155,8 +154,7 @@ static void free_nsec3_tree(zone_tree_t *nodes) { assert(nodes); - bool sorted = false; - hattrie_iter_t *it = hattrie_iter_begin(nodes, sorted); + hattrie_iter_t *it = hattrie_iter_begin(nodes); for (/* NOP */; !hattrie_iter_finished(it); hattrie_iter_next(it)) { zone_node_t *node = (zone_node_t *)*hattrie_iter_val(it); // newly allocated NSEC3 nodes @@ -430,8 +428,7 @@ static int create_nsec3_nodes(const zone_contents_t *zone, int result = KNOT_EOK; - const bool sorted = false; - hattrie_iter_t *it = hattrie_iter_begin(zone->nodes, sorted); + hattrie_iter_t *it = hattrie_iter_begin(zone->nodes); while (!hattrie_iter_finished(it)) { zone_node_t *node = (zone_node_t *)*hattrie_iter_val(it); @@ -469,9 +466,6 @@ static int create_nsec3_nodes(const zone_contents_t *zone, hattrie_iter_free(it); - /* Rebuild index over nsec3 nodes. */ - hattrie_build_index(nsec3_nodes); - return result; } diff --git a/src/knot/dnssec/zone-events.c b/src/knot/dnssec/zone-events.c index 5bb87bc8e33d92d226b86e4027d4ed8d214647cc..aa3abc1bd7e7309ba08f11b9a969e2ce33a78356 100644 --- a/src/knot/dnssec/zone-events.c +++ b/src/knot/dnssec/zone-events.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -38,7 +38,9 @@ static int sign_init(const zone_contents_t *zone, int flags, kdnssec_ctx_t *ctx) const knot_dname_t *zone_name = zone->apex->owner; - int r = kdnssec_ctx_init(ctx, zone_name); + conf_val_t policy = conf_zone_get(conf(), C_DNSSEC_POLICY, zone_name); + + int r = kdnssec_ctx_init(ctx, zone_name, &policy, false); if (r != KNOT_EOK) { return r; } @@ -77,9 +79,13 @@ static dnssec_event_ctx_t kctx2ctx(const kdnssec_ctx_t *kctx) return ctx; } -static int sign_process_events(const knot_dname_t *zone_name, - const kdnssec_ctx_t *kctx) +int knot_dnssec_sign_process_events(const kdnssec_ctx_t *kctx, + const knot_dname_t *zone_name) { + if (kctx == NULL || zone_name == NULL) { + return KNOT_EINVAL; + } + dnssec_event_t event = { 0 }; dnssec_event_ctx_t ctx = kctx2ctx(kctx); @@ -166,7 +172,7 @@ int knot_dnssec_zone_sign(zone_contents_t *zone, changeset_t *out_ch, goto done; } - result = sign_process_events(zone_name, &ctx); + result = knot_dnssec_sign_process_events(&ctx, zone_name); if (result != KNOT_EOK) { log_zone_error(zone_name, "DNSSEC, failed to process events (%s)", knot_strerror(result)); diff --git a/src/knot/dnssec/zone-events.h b/src/knot/dnssec/zone-events.h index e163eb8be8342c690fa1481c270fb0bcc895b8b6..3a661d819c887044d66023175a46df01f266ad04 100644 --- a/src/knot/dnssec/zone-events.h +++ b/src/knot/dnssec/zone-events.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -13,23 +13,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/*! - * \file zone-events.h - * - * \author Jan Vcelak <jan.vcelak@nic.cz> - * \author Lubos Slovak <lubos.slovak@nic.cz> - * \author Jan Kadlec <jan.kadlec@nic.cz> - * - * \brief DNSSEC operations triggered on zone events. - * - * \addtogroup dnssec - * @{ - */ #pragma once #include "knot/zone/zone.h" #include "knot/updates/changesets.h" +#include "knot/dnssec/context.h" enum zone_sign_flags { ZONE_SIGN_NONE = 0, @@ -39,6 +28,17 @@ enum zone_sign_flags { typedef enum zone_sign_flags zone_sign_flags_t; +/*! + * \brief Generate/rollover keys in keystore as needed. + * + * \param kctx Pointers to the keytore, policy, etc. + * \param zone_name Zone name. + * + * \return Error code, KNOT_EOK if successful. + */ +int knot_dnssec_sign_process_events(const kdnssec_ctx_t *kctx, + const knot_dname_t *zone_name); + /*! * \brief DNSSEC resign zone, store new records into changeset. Valid signatures * and NSEC(3) records will not be changed. @@ -67,5 +67,3 @@ int knot_dnssec_sign_changeset(const zone_contents_t *zone, const changeset_t *in_ch, changeset_t *out_ch, uint32_t *refresh_at); - -/*! @} */ diff --git a/src/knot/dnssec/zone-nsec.c b/src/knot/dnssec/zone-nsec.c index b090a4cb6df1839f99815480b011c09f81018416..07b042c52f5299c04228157d93785677d866497c 100644 --- a/src/knot/dnssec/zone-nsec.c +++ b/src/knot/dnssec/zone-nsec.c @@ -97,7 +97,7 @@ static int mark_removed_nsec3(const zone_contents_t *zone, changeset_t *ch) } changeset_iter_t itt; - changeset_iter_rem(&itt, ch, false); + changeset_iter_rem(&itt, ch); knot_rrset_t rr = changeset_iter_next(&itt); while (!knot_rrset_empty(&rr)) { diff --git a/src/knot/dnssec/zone-sign.c b/src/knot/dnssec/zone-sign.c index 8a6652e81939e8953363470373ee37b68afec305..0f79051ab09a21bcccd8d80c6f4f038bc1444d1a 100644 --- a/src/knot/dnssec/zone-sign.c +++ b/src/knot/dnssec/zone-sign.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -1239,7 +1239,7 @@ int knot_zone_sign_changeset(const zone_contents_t *zone, .zone_keys = zone_keys, .dnssec_ctx = dnssec_ctx, .changeset = out_ch, - .signed_tree = hattrie_create() + .signed_tree = hattrie_create(NULL) }; if (args.signed_tree == NULL) { @@ -1247,7 +1247,7 @@ int knot_zone_sign_changeset(const zone_contents_t *zone, } changeset_iter_t itt; - changeset_iter_all(&itt, in_ch, false); + changeset_iter_all(&itt, in_ch); knot_rrset_t rr = changeset_iter_next(&itt); while (!knot_rrset_empty(&rr)) { @@ -1275,7 +1275,7 @@ int knot_zone_sign_nsecs_in_changeset(const zone_keyset_t *zone_keys, } changeset_iter_t itt; - changeset_iter_add(&itt, changeset, false); + changeset_iter_add(&itt, changeset); knot_rrset_t rr = changeset_iter_next(&itt); while (!knot_rrset_empty(&rr)) { diff --git a/src/knot/events/handlers/notify.c b/src/knot/events/handlers/notify.c index f99e12dfc57eec1d8a6ee45ba97ef3c1d93c9cb9..baf57ad1d985defab36144c1fd7e6208e504f7b1 100644 --- a/src/knot/events/handlers/notify.c +++ b/src/knot/events/handlers/notify.c @@ -31,7 +31,6 @@ struct notify_data { const knot_rrset_t *soa; const struct sockaddr *remote; struct query_edns_data edns; - uint16_t response_rcode; }; static int notify_begin(knot_layer_t *layer, void *params) @@ -64,13 +63,6 @@ static int notify_produce(knot_layer_t *layer, knot_pkt_t *pkt) static int notify_consume(knot_layer_t *layer, knot_pkt_t *pkt) { - struct notify_data *data = layer->data; - - data->response_rcode = knot_pkt_get_ext_rcode(pkt); - if (data->response_rcode != KNOT_RCODE_NOERROR) { - return KNOT_STATE_FAIL; - } - return KNOT_STATE_DONE; } @@ -80,8 +72,12 @@ static const knot_layer_api_t NOTIFY_API = { .consume = notify_consume, }; +#define NOTIFY_LOG(priority, zone, remote, fmt, ...) \ + ns_log(priority, zone, LOG_OPERATION_NOTIFY, LOG_DIRECTION_OUT, remote, \ + fmt, ## __VA_ARGS__) + static int send_notify(conf_t *conf, zone_t *zone, const knot_rrset_t *soa, - const conf_remote_t *slave, int timeout, uint16_t *rcode) + const conf_remote_t *slave, int timeout) { struct notify_data data = { .zone = zone->name, @@ -110,35 +106,23 @@ static int send_notify(conf_t *conf, zone_t *zone, const knot_rrset_t *soa, } int ret = knot_requestor_exec(&requestor, req, timeout); - knot_request_free(req, NULL); - knot_requestor_clear(&requestor); - - *rcode = data.response_rcode; - - return ret; -} - -#define NOTIFY_LOG(priority, zone, remote, fmt, ...) \ - ns_log(priority, zone, LOG_OPERATION_NOTIFY, LOG_DIRECTION_OUT, remote, \ - fmt, ## __VA_ARGS__) - -static void log_notify_result(int ret, uint16_t rcode, const knot_dname_t *zone, - const struct sockaddr_storage *_remote, uint32_t serial) -{ - const struct sockaddr *remote = (struct sockaddr *)_remote; if (ret == KNOT_EOK) { - NOTIFY_LOG(LOG_INFO, zone, remote, "serial %u", serial); - } else if (rcode == 0) { - NOTIFY_LOG(LOG_WARNING, zone, remote, "failed (%s)", knot_strerror(ret)); + NOTIFY_LOG(LOG_INFO, zone->name, dst, + "serial %d", knot_soa_serial(&soa->rrs)); + } else if (knot_pkt_ext_rcode(req->resp) == 0) { + NOTIFY_LOG(LOG_WARNING, zone->name, dst, + "failed (%s)", knot_strerror(ret)); } else { - const knot_lookup_t *lut = knot_lookup_by_id(knot_rcode_names, rcode); - if (lut) { - NOTIFY_LOG(LOG_WARNING, zone, remote, "server responded with %s", lut->name); - } else { - NOTIFY_LOG(LOG_WARNING, zone, remote, "server responded with RCODE %u", rcode); - } + NOTIFY_LOG(LOG_WARNING, zone->name, dst, + "server responded withi error '%s", + knot_pkt_ext_rcode_name(req->resp)); } + + knot_request_free(req, NULL); + knot_requestor_clear(&requestor); + + return ret; } int event_notify(conf_t *conf, zone_t *zone) @@ -152,7 +136,6 @@ int event_notify(conf_t *conf, zone_t *zone) // NOTIFY content int timeout = conf->cache.srv_tcp_reply_timeout * 1000; knot_rrset_t soa = node_rrset(zone->contents->apex, KNOT_RRTYPE_SOA); - uint32_t serial = zone_contents_serial(zone->contents); // send NOTIFY to each remote, use working address conf_val_t notify = conf_zone_get(conf, C_NOTIFY, zone->name); @@ -161,10 +144,8 @@ int event_notify(conf_t *conf, zone_t *zone) size_t addr_count = conf_val_count(&addr); for (int i = 0; i < addr_count; i++) { - uint16_t rcode = 0; conf_remote_t slave = conf_remote(conf, ¬ify, i); - int ret = send_notify(conf, zone, &soa, &slave, timeout, &rcode); - log_notify_result(ret, rcode, zone->name, &slave.addr, serial); + int ret = send_notify(conf, zone, &soa, &slave, timeout); if (ret == KNOT_EOK) { break; } diff --git a/src/knot/events/handlers/refresh.c b/src/knot/events/handlers/refresh.c index 57eaefd6a017043911d3af97c202648ce824896d..054933815c83d584d2f6f1017bfd46e004df86b8 100644 --- a/src/knot/events/handlers/refresh.c +++ b/src/knot/events/handlers/refresh.c @@ -116,12 +116,6 @@ struct refresh_data { knot_mm_t *mm; // TODO: This used to be used in IXFR. Remove or reuse. }; -static const char *rcode_name(uint16_t rcode) -{ - const knot_lookup_t *lut = knot_lookup_by_id(knot_rcode_names, rcode); - return lut ? lut->name : "unknown RCODE"; -} - static bool serial_is_current(uint32_t local_serial, uint32_t remote_serial) { return serial_compare(local_serial, remote_serial) >= 0; @@ -270,10 +264,10 @@ static int axfr_consume(knot_pkt_t *pkt, struct refresh_data *data) assert(data); // Check RCODE - uint16_t rcode = knot_pkt_get_ext_rcode(pkt); - if (rcode != KNOT_RCODE_NOERROR) { + if (knot_pkt_ext_rcode(pkt) != KNOT_RCODE_NOERROR) { AXFRIN_LOG(LOG_WARNING, data->zone->name, data->remote, - "server responded with %s", rcode_name(rcode)); + "server responded with error '%s'", + knot_pkt_ext_rcode_name(pkt)); return KNOT_STATE_FAIL; } @@ -595,13 +589,10 @@ static int ixfr_consume(knot_pkt_t *pkt, struct refresh_data *data) assert(data); // Check RCODE - uint8_t rcode = knot_wire_get_rcode(pkt->wire); - if (rcode != KNOT_RCODE_NOERROR) { - const knot_lookup_t *lut = knot_lookup_by_id(knot_rcode_names, rcode); - if (lut != NULL) { - IXFRIN_LOG(LOG_WARNING, data->zone->name, data->remote, - "server responded with %s", lut->name); - } + if (knot_pkt_ext_rcode(pkt) != KNOT_RCODE_NOERROR) { + IXFRIN_LOG(LOG_WARNING, data->zone->name, data->remote, + "server responded with error '%s'", + knot_pkt_ext_rcode_name(pkt)); return KNOT_STATE_FAIL; } @@ -669,10 +660,10 @@ static int soa_query_consume(knot_layer_t *layer, knot_pkt_t *pkt) { struct refresh_data *data = layer->data; - uint16_t rcode = knot_pkt_get_ext_rcode(pkt); - if (rcode != KNOT_RCODE_NOERROR) { + if (knot_pkt_ext_rcode(pkt) != KNOT_RCODE_NOERROR) { REFRESH_LOG(LOG_WARNING, data->zone->name, data->remote, - "server responded with %s", rcode_name(rcode)); + "server responded with error '%s'", + knot_pkt_ext_rcode_name(pkt)); return KNOT_STATE_FAIL; } diff --git a/src/knot/journal/journal.c b/src/knot/journal/journal.c new file mode 100644 index 0000000000000000000000000000000000000000..efcb1b4ec012e5fc1de22d676c183b788a931845 --- /dev/null +++ b/src/knot/journal/journal.c @@ -0,0 +1,1823 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <limits.h> +#include <sys/stat.h> +#include <stdarg.h> + +#include "knot/journal/journal.h" +#include "knot/zone/serial.h" +#include "knot/common/log.h" +#include "contrib/files.h" +#include "contrib/endian.h" + +/*! \brief Journal version. */ +#define JOURNAL_VERSION "1.0" +/*! \brief Changeset chunk size. */ +#define CHUNK_MAX (70 * 1024) +/*! \brief Max number of concurrent DB readers. */ +#define JOURNAL_MAX_READERS 630 + +/*! \brief Various metadata DB key strings. Also hardcoded in macro txn_commit()! */ +#define MDKEY_GLOBAL_VERSION "version" +#define MDKEY_GLOBAL_JOURNAL_COUNT "journal_count" +#define MDKEY_GLOBAL_LAST_TOTAL_OCCUPIED "last_total_occupied" +#define MDKEY_GLOBAL_LAST_INSERTER_ZONE "last_inserter_zone" +#define MDKEY_PERZONE_OCCUPIED "occupied" +#define MDKEY_PERZONE_FLAGS "flags" + +/*! \brief The number of unused bytes in DB key. */ +#define DB_KEY_UNUSED_ZERO (4) + +/*! \brief Metadata inserted on the beginning of each chunk: + * uint32_t serial_to + uint32_t chunk_count + 24B unused */ +#define JOURNAL_HEADER_SIZE (32) + +enum { + LAST_FLUSHED_VALID = 1 << 0, /* "last flush is valid" flag. */ + SERIAL_TO_VALID = 1 << 1, /* "last serial_to is valid" flag. */ + MERGED_SERIAL_VALID = 1 << 2, /* "serial_from" of merged changeset. */ + DIRTY_SERIAL_VALID = 1 << 3, /* "dirty_serial" is present in the DB. */ +}; + +static bool journal_flush_allowed(journal_t *j) { + conf_val_t val = conf_zone_get(conf(), C_ZONEFILE_SYNC, j->zone); + return conf_int(&val) >= 0; +} + +static bool journal_merge_allowed(journal_t *j) { + return !journal_flush_allowed(j); // TODO think of other behaviour, e.g. setting +} + +static size_t journal_max_usage(journal_t *j) +{ + conf_val_t val = conf_zone_get(conf(), C_MAX_JOURNAL_USAGE, j->zone); + return conf_int(&val); +} + +static size_t journal_max_changesets(journal_t *j) +{ + conf_val_t val = conf_zone_get(conf(), C_MAX_JOURNAL_DEPTH, j->zone); + return conf_int(&val); +} + +static float journal_tofree_factor(journal_t *j) +{ + return 2.0f; +} + +static float journal_minfree_factor(journal_t *j) +{ + return 0.33f; +} + +static float journal_max_txn(journal_t *j) +{ + return 0.05f; +} + +/* + * ***************************** PART I ******************************* + * + * Transaction manipulation functions + * + * ******************************************************************** + */ + +typedef struct { + uint32_t first_serial; // Serial_from of the first changeset. + uint32_t last_serial; // Serial_from of the last changeset. + uint32_t last_serial_to; // Serial_to of the last changeset. + uint32_t last_flushed; // Serial_from of the last flushed (or merged) chengeset. + uint32_t merged_serial; // "serial_from" of merged changeset. + uint32_t dirty_serial; // Serial_from of an incompletely inserted changeset which shall be deleted (see DB_MAX_INSERT_TXN). + uint32_t changeset_count; // Number of changesets in this journal. + uint32_t flags; // LAST_FLUSHED_VALID, SERIAL_TO_VALID, MERGED_SERIAL_VALID. +} metadata_t; + +typedef struct { + journal_t *j; + knot_db_txn_t *txn; + int ret; + + bool is_rw; + + knot_db_iter_t *iter; + + knot_db_val_t key; + knot_db_val_t val; + uint8_t key_raw[512]; + + metadata_t shadow_md; +} txn_t; + +static void md_get(txn_t *txn, const knot_dname_t *zone, const char *mdkey, uint32_t *res); +static void md_set(txn_t *txn, const knot_dname_t *zone, const char *mdkey, uint32_t val); + +static void txn_init(txn_t *txn, knot_db_txn_t *db_txn, journal_t *j) +{ + txn->j = j; + txn->txn = db_txn; + txn->ret = KNOT_ESEMCHECK; + txn->iter = NULL; + txn->key.len = 0; + txn->key.data = &txn->key_raw; + txn->val.len = 0; + txn->val.data = NULL; +} + +#define local_txn_t(txn_name, journal) \ + knot_db_txn_t __db_txn_ ## txn_name; \ + txn_t __local_txn_ ## txn_name; \ + txn_t *txn_name = &__local_txn_ ## txn_name; \ + txn_init(txn_name, &__db_txn_ ## txn_name, (journal)) + +/* + * Structure of the DB key: + * Metadata: + * | [ zone_name | \0 ] | unused zero 4B | metadata_key | \0 | + * + * Changeset: + * | zone_name | \0 | unused zero 4B | (be32)serial_from | (be32)chunk_index | + * + * Structure of the changeset: + * | (be32)serial_to | (be32)#of_chunks | unused zero 24B | serialized_changeset... + * + */ + +static void txn_key_str(txn_t *txn, const knot_dname_t *zone, const char *key) +{ + size_t zone_size = 0; + if (zone != NULL) zone_size = knot_dname_size(zone); + txn->key.len = zone_size + DB_KEY_UNUSED_ZERO + strlen(key) + 1; + if (txn->key.len > 512) { + txn->ret = KNOT_ERROR; + return; + } + if (zone != NULL) memcpy(txn->key.data, zone, zone_size); + memset(txn->key.data + zone_size, 0, DB_KEY_UNUSED_ZERO); + strcpy(txn->key.data + zone_size + DB_KEY_UNUSED_ZERO, key); +} + +static void txn_key_2u32(txn_t *txn, const knot_dname_t *zone, uint32_t key1, uint32_t key2) +{ + size_t zone_size = 0; + if (zone != NULL) zone_size = knot_dname_size(zone); + txn->key.len = zone_size + DB_KEY_UNUSED_ZERO + 2*sizeof(uint32_t); + if (txn->key.len > 512) { + txn->ret = KNOT_ERROR; + return; + } + if (zone != NULL) memcpy(txn->key.data, zone, zone_size); + memset(txn->key.data + zone_size, 0, DB_KEY_UNUSED_ZERO); + uint32_t key_be1 = htobe32(key1); + uint32_t key_be2 = htobe32(key2); + memcpy(txn->key.data + zone_size + DB_KEY_UNUSED_ZERO, &key_be1, sizeof(uint32_t)); + memcpy(txn->key.data + zone_size + DB_KEY_UNUSED_ZERO + sizeof(uint32_t), + &key_be2, sizeof(uint32_t)); +} + +static int txn_cmpkey(txn_t *txn, knot_db_val_t *key2) +{ + if (txn->key.len != key2->len) { + return (txn->key.len < key2->len ? -1 : 1); + } + if (key2->len == 0) { + return 0; + } + return memcmp(txn->key.data, key2->data, key2->len); +} + +static void txn_val_u32(txn_t *txn, uint32_t *res) +{ + if (txn->ret != KNOT_EOK) { + return; + } + if (txn->val.len != sizeof(uint32_t)) { + txn->ret = KNOT_EMALF; + } + uint32_t beval; + memcpy(&beval, (uint32_t *)txn->val.data, sizeof(beval)); + *res = be32toh(beval); +} + +#define txn_begin_md(md) md_get(txn, txn->j->zone, #md, &txn->shadow_md.md) +#define txn_commit_md(md) md_set(txn, txn->j->zone, #md, txn->shadow_md.md) + +#define txn_check(txn) if ((txn)->ret != KNOT_EOK) return +#define txn_check_ret(txn) if ((txn)->ret != KNOT_EOK) return ((txn)->ret) +#define txn_ret(txn) return ((txn)->ret == KNOT_ESEMCHECK ? KNOT_EOK : (txn)->ret) + +#define txn_finished_ok(txn) ((txn)->ret == KNOT_ESEMCHECK || (txn)->ret == KNOT_EOK) + +static void txn_begin(txn_t *txn, bool write_allowed) +{ + if (txn->ret != KNOT_ESEMCHECK) { + txn->ret = KNOT_EINVAL; + return; + } + + txn->ret = txn->j->db->db_api->txn_begin(txn->j->db->db, txn->txn, + (write_allowed ? 0 : KNOT_DB_RDONLY)); + + txn->is_rw = write_allowed; + + txn_begin_md(first_serial); + txn_begin_md(last_serial); + txn_begin_md(last_serial_to); + txn_begin_md(last_flushed); + txn_begin_md(merged_serial); + txn_begin_md(dirty_serial); + txn_begin_md(changeset_count); + txn_begin_md(flags); +} + +static void txn_find_force(txn_t *txn) +{ + if (txn->ret == KNOT_EOK) { + txn->ret = txn->j->db->db_api->find(txn->txn, &txn->key, &txn->val, 0); + } +} + +static int txn_find(txn_t *txn) +{ + if (txn->ret != KNOT_EOK) { + return 0; + } + txn_find_force(txn); + if (txn->ret == KNOT_ENOENT) { + txn->ret = KNOT_EOK; + return 0; + } + return (txn->ret == KNOT_EOK ? 1 : 0); +} + +static void txn_insert(txn_t *txn) +{ + if (txn->ret == KNOT_EOK) { + txn->ret = txn->j->db->db_api->insert(txn->txn, &txn->key, &txn->val, 0); + } +} + +static void txn_del(txn_t *txn) +{ + if (txn->ret == KNOT_EOK) { + txn->ret = txn->j->db->db_api->del(txn->txn, &txn->key); + } +} + +static void txn_iter_begin(txn_t *txn) +{ + txn_check(txn); + txn->iter = txn->j->db->db_api->iter_begin(txn->txn, KNOT_DB_FIRST); + if (txn->iter == NULL) { + txn->ret = KNOT_ENOMEM; + } +} + +#define txn_check_iter if (txn->iter == NULL && txn->ret == KNOT_EOK) txn->ret = KNOT_EINVAL; \ + if (txn->ret != KNOT_EOK) return; + +static void txn_iter_seek(txn_t *txn) +{ + txn_check_iter + txn->iter = txn->j->db->db_api->iter_seek(txn->iter, &txn->key, 0); + if (txn->iter == NULL) { + txn->ret = KNOT_ENOENT; + } +} + +static void txn_iter_key(txn_t *txn, knot_db_val_t *at_key) +{ + txn_check_iter + txn->ret = txn->j->db->db_api->iter_key(txn->iter, at_key); +} + +static void txn_iter_val(txn_t *txn) +{ + txn_check_iter + txn->ret = txn->j->db->db_api->iter_val(txn->iter, &txn->val); +} + +static void txn_iter_next(txn_t *txn) +{ + txn_check_iter + txn->iter = txn->j->db->db_api->iter_next(txn->iter); + if (txn->iter == NULL) { + txn->ret = KNOT_ENOENT; + } +} + +static void txn_iter_finish(txn_t *txn) +{ + if (txn->iter != NULL) { + txn->j->db->db_api->iter_finish(txn->iter); + } + txn->iter = NULL; +} + +static void txn_abort(txn_t *txn) +{ + if (txn->ret == KNOT_ESEMCHECK) { + return; + } + txn_iter_finish(txn); + txn->j->db->db_api->txn_abort(txn->txn); + if (txn->ret == KNOT_EOK) { + txn->ret = KNOT_ESEMCHECK; + } +} + +static void txn_commit(txn_t *txn) +{ + if (txn->is_rw) { + txn_commit_md(first_serial); + txn_commit_md(last_serial); + txn_commit_md(last_serial_to); + txn_commit_md(last_flushed); + txn_commit_md(merged_serial); + txn_commit_md(dirty_serial); + txn_commit_md(changeset_count); + txn_commit_md(flags); + } + + if (txn->ret != KNOT_EOK) { + txn_abort(txn); + return; + } + + txn_iter_finish(txn); + txn->ret = txn->j->db->db_api->txn_commit(txn->txn); + + if (txn->ret == KNOT_EOK) { + txn->ret = KNOT_ESEMCHECK; + } + txn_abort(txn); // no effect if all ok +} + +static void txn_restart(txn_t *txn) +{ + txn_commit(txn); + if (txn->ret == KNOT_ESEMCHECK) { + txn_begin(txn, txn->is_rw); + } +} + +static void txn_reuse(txn_t **txn, txn_t *to_reuse, bool write_allowed) +{ + if (to_reuse == NULL) { + txn_begin(*txn, write_allowed); + } + else { + *txn = to_reuse; + } +} + +static void txn_unreuse(txn_t **txn, txn_t *reused) +{ + if (reused == NULL) { + txn_commit(*txn); + } +} + +#define reuse_txn(name, journal, to_reuse, wa) local_txn_t(name, journal); txn_reuse(&name, to_reuse, wa) +#define unreuse_txn(name, reused) txn_unreuse(&name, reused) + +/* + * ***************************** PART II ****************************** + * + * DB metadata manip. and Chunk metadata headers + * + * ******************************************************************** + */ + +static void md_get(txn_t *txn, const knot_dname_t *zone, const char *mdkey, uint32_t *res) +{ + txn_check(txn); + txn_key_str(txn, zone, mdkey); + uint32_t res1 = 0; + if (txn_find(txn)) { + txn_val_u32(txn, &res1); + } + *res = res1; +} + +// allocates res +static void md_get_common_last_inserter_zone(txn_t *txn, knot_dname_t **res) +{ + txn_check(txn); + txn_key_str(txn, NULL, MDKEY_GLOBAL_LAST_INSERTER_ZONE); + if (txn_find(txn)) { + *res = knot_dname_copy(txn->val.data, NULL); + } + else { + *res = NULL; + } +} + +static int md_set_common_last_inserter_zone(txn_t *txn, knot_dname_t *zone) +{ + txn_check_ret(txn); + txn_key_str(txn, NULL, MDKEY_GLOBAL_LAST_INSERTER_ZONE); + txn->val.len = knot_dname_size(zone); + txn->val.data = zone; + txn_insert(txn); + return txn->ret; +} + +static void md_get_common_last_occupied(txn_t *txn, size_t *res) +{ + uint32_t sres = 0; + md_get(txn, NULL, MDKEY_GLOBAL_LAST_TOTAL_OCCUPIED, &sres); + *res = (size_t) sres; +} + +static void md_set(txn_t *txn, const knot_dname_t *zone, const char *mdkey, uint32_t val) +{ + txn_key_str(txn, zone, mdkey); + uint32_t val1 = htobe32(val); + txn->val.len = sizeof(uint32_t); + txn->val.data = &val1; + txn_insert(txn); +} + +static bool md_flag(txn_t *txn, int flag) +{ + return (txn->shadow_md.flags & flag); +} + +/*! \brief Marks metadata as flushed */ +static void md_flush(txn_t *txn) +{ + if (md_flag(txn, SERIAL_TO_VALID)) { + txn->shadow_md.last_flushed = txn->shadow_md.last_serial; + txn->shadow_md.flags |= LAST_FLUSHED_VALID; + } +} + +static int md_flushed(txn_t *txn) +{ + return (!md_flag(txn, SERIAL_TO_VALID) || + (md_flag(txn, LAST_FLUSHED_VALID) && + serial_compare(txn->shadow_md.last_flushed, txn->shadow_md.last_serial) == 0)); +} + +static void make_header(knot_db_val_t *to, uint32_t serial_to, int chunk_count) +{ + assert(to->len >= JOURNAL_HEADER_SIZE); + assert(chunk_count > 0); + + uint32_t be_serial_to = htobe32(serial_to); + uint32_t be_chunk_count = htobe32((uint32_t)chunk_count); + + memcpy(to->data, &be_serial_to, sizeof(be_serial_to)); + memcpy(to->data + sizeof(be_serial_to), &be_chunk_count, sizeof(be_chunk_count)); + memset(to->data + sizeof(be_serial_to) + sizeof(be_chunk_count), 0, + JOURNAL_HEADER_SIZE - sizeof(be_serial_to) - sizeof(be_chunk_count)); +} + +/*! \brief read properties from chunk header "from". All the output params are optional */ +static void unmake_header(const knot_db_val_t *from, uint32_t *serial_to, + int *chunk_count, size_t *header_size) +{ + assert(from->len >= JOURNAL_HEADER_SIZE); + + uint32_t be_serial_to, be_chunk_count; + if (serial_to != NULL) { + memcpy(&be_serial_to, from->data, sizeof(be_serial_to)); + *serial_to = be32toh(be_serial_to); + } + if (chunk_count != NULL) { + memcpy(&be_chunk_count, from->data + sizeof(be_serial_to), sizeof(be_chunk_count)); + assert(be32toh(be_chunk_count) <= INT_MAX); + *chunk_count = (int)be32toh(be_chunk_count); + } + if (header_size != NULL) { + *header_size = JOURNAL_HEADER_SIZE; + } +} + +static int first_digit(char * of) +{ + return atoi(of); +} + +static void md_update_journal_count(txn_t * txn, int change_amount) +{ + uint32_t jcnt = 0; + md_get(txn, NULL, MDKEY_GLOBAL_JOURNAL_COUNT, &jcnt); + md_set(txn, NULL, MDKEY_GLOBAL_JOURNAL_COUNT, jcnt + change_amount); +} + +static int initial_md_check(journal_t *j, bool *dirty_present) +{ + *dirty_present = 0; + + bool something_updated = false; + + local_txn_t(txn, j); + txn_begin(txn, true); + txn_key_str(txn, NULL, MDKEY_GLOBAL_VERSION); + if (!txn_find(txn)) { + txn->val.len = strlen(JOURNAL_VERSION) + 1; + txn->val.data = JOURNAL_VERSION; + txn_insert(txn); + something_updated = true; + } + else { + char * jver = txn->val.data; + if (first_digit(jver) != first_digit(JOURNAL_VERSION)) { + txn_abort(txn); + return KNOT_ENOTSUP; + } + } + txn_key_str(txn, j->zone, MDKEY_PERZONE_FLAGS); + if (!txn_find(txn)) { + md_update_journal_count(txn, +1); + something_updated = true; + } + *dirty_present = md_flag(txn, DIRTY_SERIAL_VALID); + + if (something_updated) { + txn_commit(txn); + } + else { // abort to gain up speed when opening a lot of zones + txn_abort(txn); + } + + txn_ret(txn); +} + +/* + * **************************** PART III ****************************** + * + * DB iteration + * + * ******************************************************************** + */ + +enum { + JOURNAL_ITERATION_CHUNKS, // call the iteration callback for each chunk read, with just the chunk in ctx->val + JOURNAL_ITERATION_CHANGESETS // call the iteration callback after the last chunk of a changeset read, with all its chunks in ctx->val +}; + +typedef struct { + txn_t *txn; // DB txn not to be touched by callback, just contains journal pointer + uint32_t serial; // serial-from of current changeset + uint32_t serial_to; // serial-to of current changeset + const int method; // JOURNAL_ITERATION_CHUNKS or JOURNAL_ITERATION_CHANGESETS, to be set by the caller of iterate() + int chunk_index; // index of current chunk + int chunk_count; // # of chunks of current changeset + knot_db_val_t *val; // one val if JOURNAL_ITERATION_CHUNKS; chunk_count vals if JOURNAL_ITERATION_CHANGESETS + knot_db_iter_t *iter; // DB iteration context, not to be touched by callback + void *iter_context; // anything to send to the callback by the caller of iterate(), untouched by iterate() +} iteration_ctx_t; + +/*! + * \brief Move iter to next changeset chunk. + * + * Try optimisticly fast move to next DB item. But the changeset can be out of order, + * so if we don't succeed (different serial or end of DB), we lookup next serial slowly. + */ +static void get_iter_next(txn_t *txn, uint32_t expect_serial, int expect_chunk) +{ + knot_db_val_t other_key = { 0 }; + + txn_check(txn); + txn_iter_next(txn); + txn_iter_key(txn, &other_key); + txn_key_2u32(txn, txn->j->zone, expect_serial, (uint32_t)expect_chunk); + if (txn->ret == KNOT_ENOENT || + (txn->ret == KNOT_EOK && txn_cmpkey(txn, &other_key) != 0)) { + txn_iter_seek(txn); + } +} + +typedef int (*iteration_cb_t)(iteration_ctx_t *ctx); + +static int iterate(journal_t *j, txn_t *_txn, iteration_cb_t cb, int method, + void *iter_context, uint32_t first, uint32_t last) +{ + reuse_txn(txn, j, _txn, true); + + iteration_ctx_t ctx = { + .method = method, + .iter_context = iter_context, + .txn = txn, + .serial = first, + .chunk_index = 0 + }; + + knot_db_val_t *vals = NULL; + + txn_iter_begin(txn); + + txn_key_2u32(txn, j->zone, ctx.serial, ctx.chunk_index); + txn_iter_seek(txn); + + ctx.val = &txn->val; + + while (true) { + txn_iter_val(txn); + if (txn->ret != KNOT_EOK) { + break; + } + + unmake_header(&txn->val, &ctx.serial_to, &ctx.chunk_count, NULL); + + if (method == JOURNAL_ITERATION_CHANGESETS) { + if (ctx.chunk_index == 0) { + if (vals != NULL) free(vals); + vals = malloc(ctx.chunk_count * sizeof(knot_db_val_t)); + if (vals == NULL) { + txn->ret = KNOT_ENOMEM; + break; + } + ctx.val = vals; + } + memcpy(vals + ctx.chunk_index, &txn->val, sizeof(knot_db_val_t)); + } + + if (method == JOURNAL_ITERATION_CHUNKS) { + txn->ret = cb(&ctx); + } + + if (ctx.chunk_index == ctx.chunk_count - 1) { // hit last chunk of current changeset + if (method == JOURNAL_ITERATION_CHANGESETS) { + txn->ret = cb(&ctx); + } + + if (ctx.serial == last) { + break; // standard loop exit here + } + + ctx.serial = ctx.serial_to; + ctx.chunk_index = 0; + } + else { + ctx.chunk_index++; + } + + get_iter_next(txn, ctx.serial, ctx.chunk_index); + } + + if (vals != NULL) { + free(vals); + } + txn_iter_finish(txn); + + unreuse_txn(txn, _txn); + + txn_ret(txn); +} + +/* + * ***************************** PART IV ****************************** + * + * Reading changesets + * + * ******************************************************************** + */ + +/*! \brief Deserialize changeset from chunks (in vals) */ +static int vals_to_changeset(knot_db_val_t *vals, int nvals, + const knot_dname_t *zone_name, changeset_t **ch) +{ + uint8_t *valps[nvals]; + size_t vallens[nvals]; + for (int i = 0; i < nvals; i++) { + valps[i] = vals[i].data + JOURNAL_HEADER_SIZE; + vallens[i] = vals[i].len - JOURNAL_HEADER_SIZE; + } + + changeset_t *t_ch = changeset_new(zone_name); + if (t_ch == NULL) { + return KNOT_ENOMEM; + } + + int ret = changeset_deserialize(t_ch, valps, vallens, nvals); + + if (ret != KNOT_EOK) { + changeset_free(t_ch); + return ret; + } + *ch = t_ch; + return KNOT_EOK; +} + +static int load_one_itercb(iteration_ctx_t *ctx) +{ + changeset_t *ch = NULL, **targ = ctx->iter_context; + if (*targ != NULL) { + return KNOT_EINVAL; + } + + int ret = vals_to_changeset(ctx->val, ctx->chunk_count, ctx->txn->j->zone, &ch); + if (ret == KNOT_EOK) *targ = ch; + return ret; +} + +static int load_list_itercb(iteration_ctx_t *ctx) +{ + changeset_t *ch = NULL; + list_t *chlist = *(list_t **) ctx->iter_context; + + int ret = vals_to_changeset(ctx->val, ctx->chunk_count, ctx->txn->j->zone, &ch); + + if (ret == KNOT_EOK) { + add_tail(chlist, &ch->n); + } + return ret; +} + +/*! \brief Load one changeset (with serial) from DB */ +static int load_one(journal_t *j, txn_t *_txn, uint32_t serial, changeset_t **ch) +{ + reuse_txn(txn, j, _txn, false); + changeset_t *rch = NULL; + iterate(j, txn, load_one_itercb, JOURNAL_ITERATION_CHANGESETS, &rch, serial, serial); + unreuse_txn(txn, _txn); + if (txn_finished_ok(txn)) { + if (rch == NULL) txn->ret = KNOT_ENOENT; + else *ch = rch; + } + txn_ret(txn); +} + +static int load_merged_changeset(journal_t *j, txn_t *_txn, changeset_t **mch, + const uint32_t *only_if_serial) +{ + assert(*mch == NULL); + + reuse_txn(txn, j, _txn, false); + txn_check_ret(txn); + uint32_t ms = txn->shadow_md.merged_serial, fl = txn->shadow_md.flags; + + if ((fl & MERGED_SERIAL_VALID) && + (only_if_serial == NULL || serial_compare(ms, *only_if_serial) == 0)) { + load_one(j, txn, ms, mch); + } + unreuse_txn(txn, _txn); + + txn_ret(txn); +} + +/*! \brief API: load all changesets since "from" serial into dst. */ +int journal_load_changesets(journal_t *j, list_t *dst, uint32_t from) +{ + if (j == NULL || j->db == NULL || dst == NULL) return KNOT_EINVAL; + + local_txn_t(txn, j); + txn_begin(txn, false); + + changeset_t *mch = NULL; + load_merged_changeset(j, txn, &mch, &from); + if (mch != NULL) { + add_tail(dst, &mch->n); + from = knot_soa_serial(&mch->soa_to->rrs); + } + + uint32_t ls = txn->shadow_md.last_serial; + iterate(j, txn, load_list_itercb, JOURNAL_ITERATION_CHANGESETS, &dst, from, ls); + txn_commit(txn); + + txn_ret(txn); +} + +/* + * ***************************** PART V ******************************* + * + * Deleting changesets + * + * ******************************************************************** + */ + +typedef struct { + size_t freed_approx; + size_t to_be_freed; +} delete_status_t; + +static int del_upto_itercb(iteration_ctx_t *ctx) +{ + txn_key_2u32(ctx->txn, ctx->txn->j->zone, ctx->serial, ctx->chunk_index); + txn_del(ctx->txn); + txn_check_ret(ctx->txn); + + // one whole changeset has been deleted => update metadata. + // We are sure that the deleted changeset is first at this time. + // If it's not merged changeset, point first_serial to next one + if (ctx->chunk_index == ctx->chunk_count - 1) { + if (!md_flag(ctx->txn, MERGED_SERIAL_VALID) || + serial_compare(ctx->txn->shadow_md.merged_serial,ctx->serial) != 0) { + ctx->txn->shadow_md.first_serial = ctx->serial_to; + ctx->txn->shadow_md.changeset_count--; + } + if (serial_compare(ctx->txn->shadow_md.last_flushed, ctx->serial) == 0) { + ctx->txn->shadow_md.flags &= ~LAST_FLUSHED_VALID; + } + if (serial_compare(ctx->txn->shadow_md.last_serial, ctx->serial) == 0) { + ctx->txn->shadow_md.flags &= ~SERIAL_TO_VALID; + } + if (serial_compare(ctx->txn->shadow_md.merged_serial,ctx->serial) == 0) { + ctx->txn->shadow_md.flags &= ~MERGED_SERIAL_VALID; + } + } + return KNOT_EOK; +} + +/*! \brief Delete from beginning of DB up to "last" changeset including. + * Please ensure (dbfirst == j->metadata.first_serial) */ +static int delete_upto(journal_t *j, txn_t *txn, uint32_t dbfirst, uint32_t last) +{ + return iterate(j, txn, del_upto_itercb, JOURNAL_ITERATION_CHUNKS, NULL, dbfirst, last); +} + +static int delete_merged_changeset(journal_t *j, txn_t *t) +{ + reuse_txn(txn, j, t, true); + txn_check_ret(txn); + if (!md_flag(txn, MERGED_SERIAL_VALID)) { + txn->ret = KNOT_ENOENT; + } + else { + delete_upto(j, txn, txn->shadow_md.merged_serial, txn->shadow_md.merged_serial); + } + unreuse_txn(txn, t); + txn_ret(txn); +} + +static int drop_journal(journal_t *j, txn_t *_txn) +{ + reuse_txn(txn, j, _txn, true); + txn_check_ret(txn); + if (md_flag(txn, MERGED_SERIAL_VALID)) { + delete_merged_changeset(j, txn); + } + if (md_flag(txn, SERIAL_TO_VALID)) { + delete_upto(j, txn, txn->shadow_md.first_serial, txn->shadow_md.last_serial); + } + unreuse_txn(txn, _txn); + txn_ret(txn); +} + +static int del_tofree_itercb(iteration_ctx_t *ctx) +{ + delete_status_t *ds = ctx->iter_context; + + if (ds->to_be_freed == 0) { + return KNOT_EOK; // all done, just running through the rest of records w/o change + } + + txn_key_2u32(ctx->txn, ctx->txn->j->zone, ctx->serial, ctx->chunk_index); + txn_del(ctx->txn); + txn_check_ret(ctx->txn); + + ds->freed_approx += /*4096 + */ctx->val->len; + + // when whole changeset deleted, check target and update metadata + if (ctx->chunk_index == ctx->chunk_count - 1) { + ctx->txn->shadow_md.first_serial = ctx->serial_to; + ctx->txn->shadow_md.changeset_count--; + if (serial_compare(ctx->txn->shadow_md.last_flushed, ctx->serial) == 0) { + ctx->txn->shadow_md.flags &= ~LAST_FLUSHED_VALID; + ds->to_be_freed = 0; // prevents deleting unflushed changesets + } + if (serial_compare(ctx->txn->shadow_md.last_serial, ctx->serial) == 0) { + ctx->txn->shadow_md.flags &= ~SERIAL_TO_VALID; + } + if (ds->freed_approx >= ds->to_be_freed) { + ds->to_be_freed = 0; + } + } + + return KNOT_EOK; +} + +/*! + * \brief Deletes from j->db oldest changesets to free up space + * + * It tries deleting olny flushed changesets, preserves all unflushed ones. + * + * \retval KNOT_EOK if no error, even if too little or nothing deleted (check really_freed for result); KNOT_E* if error + */ +static int delete_tofree(journal_t *j, txn_t *_txn, size_t to_be_freed, size_t *really_freed) +{ + reuse_txn(txn, j, _txn, true); + txn_check_ret(txn); + + if (!md_flag(txn, LAST_FLUSHED_VALID)) { + *really_freed = 0; + return KNOT_EOK; + } + delete_status_t ds = { .freed_approx = 0, .to_be_freed = to_be_freed }; + iterate(j, txn, del_tofree_itercb, JOURNAL_ITERATION_CHUNKS, &ds, + txn->shadow_md.first_serial, txn->shadow_md.last_serial); + unreuse_txn(txn, _txn); + + if (txn_finished_ok(txn)) *really_freed = ds.freed_approx; + txn_ret(txn); +} + +static int del_count_itercb(iteration_ctx_t *ctx) +{ + delete_status_t *ds = ctx->iter_context; + if (ds->freed_approx >= ds->to_be_freed) { + return KNOT_EOK; + } + txn_key_2u32(ctx->txn, ctx->txn->j->zone, ctx->serial, ctx->chunk_index); + txn_del(ctx->txn); + txn_check_ret(ctx->txn); + + // when whole changeset deleted, check target and update metadata + if (ctx->chunk_index == ctx->chunk_count - 1) { + ctx->txn->shadow_md.first_serial = ctx->serial_to; + ctx->txn->shadow_md.changeset_count--; + if (serial_compare(ctx->txn->shadow_md.last_flushed, ctx->serial) == 0) { + ctx->txn->shadow_md.flags &= ~LAST_FLUSHED_VALID; + ds->to_be_freed = ds->freed_approx; // prevents deleting unflushed changesets + } + if (serial_compare(ctx->txn->shadow_md.last_serial, ctx->serial) == 0) { + ctx->txn->shadow_md.flags &= ~SERIAL_TO_VALID; + } + ds->freed_approx++; + } + return KNOT_EOK; +} + +/*! + * \brief Deletes specified number of changesets + * + * It tries deleting olny flushed changesets, preserves all unflushed ones. + * + * \retval KNOT_EOK if no error, even if too little or nothing deleted (check really_deleted for result) + * \return KNOT_E* if error + */ +static int delete_count(journal_t *j, txn_t *_txn, size_t to_be_deleted, size_t *really_deleted) +{ + reuse_txn(txn, j, _txn, true); + txn_check_ret(txn); + + if (!md_flag(txn, LAST_FLUSHED_VALID)) { + *really_deleted = 0; + return KNOT_EOK; + } + delete_status_t ds = { .freed_approx = 0, .to_be_freed = to_be_deleted }; + iterate(j, txn, del_count_itercb, JOURNAL_ITERATION_CHUNKS, &ds, + txn->shadow_md.first_serial, txn->shadow_md.last_serial); + unreuse_txn(txn, _txn); + + if (txn_finished_ok(txn)) *really_deleted = ds.freed_approx; + txn_ret(txn); +} + +static int delete_dirty_serial(journal_t *j, txn_t *_txn) +{ + reuse_txn(txn, j, _txn, true); + txn_check_ret(txn); + + if (!md_flag(txn, DIRTY_SERIAL_VALID)) return KNOT_EOK; + + uint32_t ds = txn->shadow_md.dirty_serial, chunk = 0; + + txn_key_2u32(txn, j->zone, ds, chunk); + while (txn_find(txn)) { + txn_del(txn); + txn_key_2u32(txn, j->zone, ds, ++chunk); + } + unreuse_txn(txn, _txn); + if (txn_finished_ok(txn)) { + txn->shadow_md.flags &= ~DIRTY_SERIAL_VALID; + } + txn_ret(txn); +} + +/* + * ***************************** PART VI ****************************** + * + * Writing changesets + * + * ******************************************************************** + */ + +static int merge_itercb(iteration_ctx_t *ctx) +{ + changeset_t *ch = NULL, *mch = *(changeset_t **)ctx->iter_context; + + int ret = vals_to_changeset(ctx->val, ctx->chunk_count, ctx->txn->j->zone, &ch); + if (ret == KNOT_EOK) { + ret = changeset_merge(mch, ch); + changeset_free(ch); + } + return ret; +} + +static int merge_unflushed_changesets(journal_t *j, txn_t *_txn, changeset_t **mch) +{ + reuse_txn(txn, j, _txn, false); + txn_check_ret(txn); + *mch = NULL; + if (md_flushed(txn)) { + goto m_u_ch_end; + } + bool was_merged = md_flag(txn, MERGED_SERIAL_VALID); + bool was_flushed = md_flag(txn, LAST_FLUSHED_VALID); + uint32_t from = was_merged ? txn->shadow_md.merged_serial : + (was_flushed ? txn->shadow_md.last_flushed : + txn->shadow_md.first_serial); + txn->ret = load_one(j, txn, from, mch); + if (!was_merged && was_flushed && txn->ret == KNOT_EOK) { + from = knot_soa_serial(&(*mch)->soa_to->rrs); + changeset_free(*mch); + *mch = NULL; + txn->ret = load_one(j, txn, from, mch); + } + if (txn->ret != KNOT_EOK) { + goto m_u_ch_end; + } + from = knot_soa_serial(&(*mch)->soa_to->rrs); + + txn->ret = iterate(j, txn, merge_itercb, JOURNAL_ITERATION_CHANGESETS, + mch, from, txn->shadow_md.last_serial); + +m_u_ch_end: + unreuse_txn(txn, _txn); + if (!txn_finished_ok(txn) && *mch != NULL) { + changeset_free(*mch); + *mch = NULL; + } + txn_ret(txn); +} + +// uses local context, e.g.: j, txn, changesets, nchs, serialized_size_total, store_changeset_cleanup, inserting_merged +#define try_flush \ + if (!md_flushed(txn)) { \ + if (journal_merge_allowed(j)) { \ + changeset_t *merged; \ + merge_unflushed_changesets(j, txn, &merged); \ + add_tail(changesets, &merged->n); \ + nchs++; \ + serialized_size_total += changeset_serialized_size(merged); \ + md_flush(txn); \ + inserting_merged = true; \ + } \ + else { \ + txn->ret = KNOT_EBUSY; \ + goto store_changeset_cleanup; \ + } \ + } + +static int store_changesets(journal_t *j, list_t *changesets) +{ + // PART 1 : initializers, compute serialized_sizes, transaction start + changeset_t *ch; + + size_t nchs = 0, serialized_size_total = 0, inserted_size = 0, insert_txn_count = 1; + + uint8_t *allchunks = NULL; + uint8_t **chunkptrs = NULL; + size_t *chunksizes = NULL; + knot_db_val_t *vals = NULL; + + int inserting_merged = false; + + WALK_LIST(ch, *changesets) { + nchs++; + serialized_size_total += changeset_serialized_size(ch); + } + + local_txn_t(txn, j); + txn_begin(txn, true); + + // if you're tempted to add dirty_serial deletion somewhere here, you're wrong. Don't do it. + + // PART 2 : recalculating the previous insert's occupy change + size_t occupied_last, occupied_now; + md_get_common_last_occupied(txn, &occupied_last); + occupied_now = knot_db_lmdb_get_usage(j->db->db); + md_set(txn, NULL, MDKEY_GLOBAL_LAST_TOTAL_OCCUPIED, occupied_now); + if (occupied_now != occupied_last) { + knot_dname_t *last_zone = NULL; + uint32_t lz_occupied; + md_get_common_last_inserter_zone(txn, &last_zone); + md_get(txn, last_zone, MDKEY_PERZONE_OCCUPIED, &lz_occupied); + lz_occupied += occupied_now - occupied_last; + md_set(txn, last_zone, MDKEY_PERZONE_OCCUPIED, lz_occupied); + free(last_zone); + } + md_set_common_last_inserter_zone(txn, j->zone); + + // PART 3 : check if we exceeded designed occupation and delete some + uint32_t occupied = 0, occupied_max; + md_get(txn, j->zone, MDKEY_PERZONE_OCCUPIED, &occupied); + occupied_max = journal_max_usage(j); + occupied += serialized_size_total; + if (occupied > occupied_max) { + size_t freed; + size_t tofree = (occupied - occupied_max) * journal_tofree_factor(j); + size_t free_min = tofree * journal_minfree_factor(j); + delete_tofree(j, txn, tofree, &freed); + if (freed < free_min) { + tofree -= freed; + free_min -= freed; + try_flush + delete_tofree(j, txn, tofree, &freed); + if (freed < free_min) { + txn->ret = KNOT_ESPACE; + log_zone_warning(j->zone, "journal: unable to make free space for insert"); + goto store_changeset_cleanup; + } + } + } + + // PART 3.5 : check if we exceeded history depth + long over_limit = (long)txn->shadow_md.changeset_count - journal_max_changesets(j) + + list_size(changesets) - (inserting_merged ? 1 : 0); + if (over_limit > 0) { + size_t deled; + delete_count(j, txn, over_limit, &deled); + over_limit -= deled; + if (over_limit > 0) { + try_flush + delete_count(j, txn, over_limit, &deled); + // ignore further errors here, the limit is not so important + } + } + + // PART 4: continuity and duplicity check + changeset_t * chs_head = (HEAD(*changesets)); + uint32_t serial = knot_soa_serial(&chs_head->soa_from->rrs); + if (md_flag(txn, SERIAL_TO_VALID) && serial_compare(txn->shadow_md.last_serial_to, serial) != 0) { + log_zone_warning(j->zone, "discontinuity in chages history (%u -> %u), dropping older changesets", + txn->shadow_md.last_serial_to, serial); + try_flush + drop_journal(j, txn); + txn_restart(txn); + } + WALK_LIST(ch, *changesets) { + uint32_t serial_to = knot_soa_serial(&ch->soa_to->rrs); + if (inserting_merged && ch == TAIL(*changesets)) { + continue; + } + txn_key_2u32(txn, j->zone, serial_to, 0); + if (txn_find(txn)) { + log_zone_warning(j->zone, "duplicite changeset serial (%u), dropping older changesets", + serial_to); + try_flush + delete_upto(j, txn, txn->shadow_md.first_serial, serial_to); + txn_restart(txn); + } + } + + // PART 5: serializing into chunks + WALK_LIST(ch, *changesets) { + if (txn->ret != KNOT_EOK) { + break; + } + + // Twice chsize seems like enough room to store all chunks together. + size_t maxchunks = changeset_serialized_size(ch) * 2 / CHUNK_MAX + 1, chunks; + allchunks = malloc(maxchunks * CHUNK_MAX); + chunkptrs = malloc(maxchunks * sizeof(uint8_t *)); + chunksizes = malloc(maxchunks * sizeof(size_t)); + vals = malloc(maxchunks * sizeof(knot_db_val_t)); + if (allchunks == NULL || chunkptrs == NULL || chunksizes == NULL || vals == NULL) { + txn->ret = KNOT_ENOMEM; + break; + } + for (int i = 0; i < maxchunks; i++) { + chunkptrs[i] = allchunks + i*CHUNK_MAX + JOURNAL_HEADER_SIZE; + } + txn->ret = changeset_serialize(ch, chunkptrs, CHUNK_MAX - JOURNAL_HEADER_SIZE, + maxchunks, chunksizes, &chunks); + if (txn->ret != KNOT_EOK) { + break; + } + + uint32_t serial = knot_soa_serial(&ch->soa_from->rrs); + uint32_t serial_to = knot_soa_serial(&ch->soa_to->rrs); + + for (int i = 0; i < chunks; i++) { + vals[i].data = allchunks + i*CHUNK_MAX; + vals[i].len = JOURNAL_HEADER_SIZE + chunksizes[i]; + make_header(vals + i, serial_to, chunks); + } + + // PART 6: inserting vals into db + for (int i = 0; i < chunks; i++) { + if (txn->ret != KNOT_EOK) break; + txn_key_2u32(txn, j->zone, serial, i); + txn->val = vals[i]; + txn_insert(txn); + inserted_size += (vals+i)->len; + if ((float)inserted_size > journal_max_txn(j) * (float)j->db->fslimit) { // insert txn too large + inserted_size = 0; + txn->shadow_md.dirty_serial = serial; + txn->shadow_md.flags |= DIRTY_SERIAL_VALID; + txn_restart(txn); + insert_txn_count++; + txn->shadow_md.flags &= ~DIRTY_SERIAL_VALID; + } + } + + // PART 7: metadata update + if (txn->ret != KNOT_EOK) { + break; + } + if (inserting_merged && ch == TAIL(*changesets)) { + txn->shadow_md.flags |= MERGED_SERIAL_VALID; + txn->shadow_md.merged_serial = serial; + } + else { + if (!md_flag(txn, SERIAL_TO_VALID)) { + txn->shadow_md.first_serial = serial; + } + txn->shadow_md.flags |= SERIAL_TO_VALID; + txn->shadow_md.last_serial = serial; + txn->shadow_md.last_serial_to = serial_to; + txn->shadow_md.changeset_count++; + } + + free(allchunks); + free(chunkptrs); + free(chunksizes); + free(vals); + allchunks = NULL; + chunkptrs = NULL; + chunksizes = NULL; + vals = NULL; + } + + // PART X : finalization and cleanup + +store_changeset_cleanup: + + txn_commit(txn); + + if (txn->ret != KNOT_ESEMCHECK) { + local_txn_t(ddtxn, j); + txn_begin(ddtxn, true); + if (md_flag(ddtxn, DIRTY_SERIAL_VALID)) { + delete_dirty_serial(j, ddtxn); + } + txn_commit(ddtxn); + } + + if (allchunks != NULL) free(allchunks); + if (chunkptrs != NULL) free(chunkptrs); + if (chunksizes != NULL) free(chunksizes); + if (vals != NULL) free(vals); + + changeset_t *dbgchst = TAIL(*changesets); + + if (inserting_merged) { + // free the merged changeset + rem_node(&dbgchst->n); + changeset_free(dbgchst); + } + + txn_ret(txn); +} +#undef try_flush + +int journal_store_changeset(journal_t *journal, changeset_t *ch) +{ + if (journal == NULL || journal->db == NULL || ch == NULL) return KNOT_EINVAL; + + changeset_t *ch_shallowcopy = malloc(sizeof(changeset_t)); + if (ch_shallowcopy == NULL) { + return KNOT_ENOMEM; + } + memcpy(ch_shallowcopy, ch, sizeof(changeset_t)); // we need to copy the changeset_t sructure not to break ch->n + + list_t list; + init_list(&list); + add_tail(&list, &ch_shallowcopy->n); + int ret = store_changesets(journal, &list); + + free(ch_shallowcopy); + return ret; +} + +int journal_store_changesets(journal_t *journal, list_t *src) +{ + if (journal == NULL || journal->db == NULL || src == NULL) return KNOT_EINVAL; + return store_changesets(journal, src); +} + +/* + * **************************** PART VII ****************************** + * + * Journal initialization and global manipulation + * + * ******************************************************************** + */ + +journal_t *journal_new() +{ + journal_t *j = malloc(sizeof(*j)); + if (j != NULL) { + memset(j, 0, sizeof(*j)); + } + return j; +} + +void journal_free(journal_t **j) +{ + if (j == NULL || *j == NULL) return; + + if ((*j)->zone != NULL) { + free((knot_dname_t *)(*j)->zone); + } + free(*j); + *j = NULL; +} + +static int open_journal_db_unsafe(journal_db_t **db) +{ + if ((*db)->db != NULL) return KNOT_EOK; + + struct knot_db_lmdb_opts opts = KNOT_DB_LMDB_OPTS_INITIALIZER; + opts.path = (*db)->path; + opts.mapsize = (*db)->fslimit; + opts.maxdbs = 1; + opts.maxreaders = JOURNAL_MAX_READERS; + + int ret = (*db)->db_api->init(&(*db)->db, NULL, &opts); + if (ret != KNOT_EOK) { + (*db)->db = NULL; + return ret; + } + + size_t real_fslimit = knot_db_lmdb_get_mapsize((*db)->db); + (*db)->fslimit = real_fslimit; + + return KNOT_EOK; +} + +static int open_journal_db(journal_db_t **db) +{ + if (*db == NULL) return KNOT_EINVAL; + pthread_mutex_lock(&(*db)->db_mutex); + int ret = open_journal_db_unsafe(db); + pthread_mutex_unlock(&(*db)->db_mutex); + return ret; +} + +/*! \brief Open/create the journal based on the filesystem path to LMDB directory */ +int journal_open(journal_t *j, journal_db_t **db, const knot_dname_t *zone_name) +{ + int ret = KNOT_EOK; + + if (j == NULL || (*db) == NULL) return KNOT_EINVAL; + if (j->db != NULL) { + return KNOT_EOK; + } + + // open shared journal DB if not already + if ((*db)->db == NULL) { + ret = open_journal_db(db); + } + if (ret != KNOT_EOK) { + return ret; + } + j->db = *db; + + j->zone = knot_dname_copy(zone_name, NULL); + if (j->zone == NULL) { + return KNOT_ENOMEM; + } + + bool dirty_serial_valid; + ret = initial_md_check(j, &dirty_serial_valid); + + if (ret == KNOT_EOK && dirty_serial_valid) { + delete_dirty_serial(j, NULL); + } + + return ret; +} + +void journal_close(journal_t *j) +{ + j->db = NULL; + free(j->zone); + j->zone = NULL; +} + +int journal_db_init(journal_db_t **db, const char *lmdb_dir_path, size_t lmdb_fslimit) +{ + if (*db != NULL) { + return KNOT_EOK; + } + *db = malloc(sizeof(journal_db_t)); + if (*db == NULL) { + return KNOT_ENOMEM; + } + journal_db_t dbinit = { + .db = NULL, + .db_api = knot_db_lmdb_api(), + .path = strdup(lmdb_dir_path), + .fslimit = ((lmdb_fslimit < JOURNAL_MIN_FSLIMIT) ? JOURNAL_MIN_FSLIMIT : lmdb_fslimit) + }; + memcpy(*db, &dbinit, sizeof(journal_db_t)); + pthread_mutex_init(&(*db)->db_mutex, NULL); + return KNOT_EOK; +} + +static void destroy_journal_db(journal_db_t **db) +{ + assert((*db)->db == NULL); + + pthread_mutex_destroy(&(*db)->db_mutex); + free((*db)->path); + free((*db)); + *db = NULL; +} + +void journal_db_close(journal_db_t **db) +{ + if (db == NULL || *db == NULL) { + return; + } + + pthread_mutex_lock(&(*db)->db_mutex); + if ((*db)->db != NULL) { + (*db)->db_api->deinit((*db)->db); + (*db)->db = NULL; + } + pthread_mutex_unlock(&(*db)->db_mutex); + + destroy_journal_db(db); +} + +int journal_flush(journal_t *journal) +{ + if (journal == NULL || journal->db == NULL) { + return KNOT_EINVAL; + } + + local_txn_t(txn, journal); + txn_begin(txn, true); + md_flush(txn); + txn_commit(txn); + txn_ret(txn); +} + +bool journal_exists(journal_db_t **db, knot_dname_t *zone_name) +{ + if (db == NULL || *db == NULL || zone_name == NULL) { + return false; + } + + if ((*db)->db == NULL) { + struct stat st; + if (stat((*db)->path, &st) != 0 || st.st_size == 0) { + return false; + } + int ret = open_journal_db(db); + if (ret != KNOT_EOK) { + return false; + } + } + + journal_t fake_journal = { .db = *db, .zone = zone_name }; + local_txn_t(txn, &fake_journal); + txn_begin(txn, false); + txn_key_str(txn, zone_name, MDKEY_PERZONE_FLAGS); + int res = txn_find(txn); + txn_abort(txn); + + return (res == 1); +} + +static knot_db_val_t *dbval_copy(const knot_db_val_t *from) +{ + knot_db_val_t *to = malloc(sizeof(knot_db_val_t) + from->len); + if (to != NULL) { + memcpy(to, from, sizeof(knot_db_val_t)); + to->data = to + 1; // == ((uit8_t *)to) + sizeof(knot_db_val_t) + memcpy(to->data, from->data, from->len); + } + return to; +} // TODO think of moving this fun into different place/lib + +int scrape_journal(journal_t *j) +{ + if (j->db == NULL) return KNOT_EINVAL; + local_txn_t(txn, j); + txn_begin(txn, true); + txn_check_ret(txn); + + knot_db_val_t key = { .len = 0, .data = "" }; + + list_t to_del; + init_list(&to_del); + + txn_iter_begin(txn); + while (txn->ret == KNOT_EOK && txn->iter != NULL) { + txn_iter_key(txn, &key); + if (knot_dname_is_equal((const knot_dname_t *) key.data, j->zone)) { + knot_db_val_t * inskey = dbval_copy(&key); + if (inskey == NULL) { + txn->ret = KNOT_ENOMEM; + goto scrape_end; + } + ptrlist_add(&to_del, inskey, NULL); + } + txn_iter_next(txn); + } + if (txn->ret == KNOT_ENOENT) { + txn->ret = KNOT_EOK; + } + txn_iter_finish(txn); + + ptrnode_t *del_one; + if (txn->ret == KNOT_EOK) { + WALK_LIST(del_one, to_del) { + txn->ret = j->db->db_api->del(txn->txn, (knot_db_val_t *)del_one->d); + } + md_update_journal_count(txn, -1); + txn->ret = j->db->db_api->txn_commit(txn->txn); + } +scrape_end: + + WALK_LIST(del_one, to_del) { + free(del_one->d); + } + + ptrlist_free(&to_del, NULL); + + return txn->ret; +} + +void journal_metadata_info(journal_t *j, bool *is_empty, uint32_t *serial_from, uint32_t *serial_to) +{ + // NOTE: there is NEVER the situation that only merged changeset would be present and no common changeset in db. + + if (j == NULL || j->db == NULL) { + *is_empty = true; + return; + } + + local_txn_t(txn, j); + txn_begin(txn, false); + txn_check(txn); + + *is_empty = !md_flag(txn, SERIAL_TO_VALID); + *serial_from = txn->shadow_md.first_serial; + *serial_to = txn->shadow_md.last_serial_to; + + if (md_flag(txn, MERGED_SERIAL_VALID)) { + *serial_from = txn->shadow_md.merged_serial; + } + txn_abort(txn); +} + +int journal_db_list_zones(journal_db_t **db, list_t *zones) +{ + uint32_t expected_count; + + if (list_size(zones) > 0) { + return KNOT_EINVAL; + } + + if ((*db)->db == NULL) { + int ret = open_journal_db(db); + if (ret != KNOT_EOK) { + return ret; + } + } + + journal_t fake_journal = { .db = *db, .zone = (knot_dname_t *)"" }; + local_txn_t(txn, &fake_journal); + txn_begin(txn, false); + md_get(txn, NULL, MDKEY_GLOBAL_JOURNAL_COUNT, &expected_count); + txn_check_ret(txn); + + knot_db_val_t key; + txn_iter_begin(txn); + while (txn->ret == KNOT_EOK && txn->iter != NULL) { + txn_iter_key(txn, &key); + + int metaflag_len = strlen(MDKEY_PERZONE_FLAGS); + char *compare_metaflag = key.data; + compare_metaflag += key.len - 1; + if (txn->ret == KNOT_EOK && *compare_metaflag == '\0') { + compare_metaflag -= metaflag_len; + if (strcmp(compare_metaflag, MDKEY_PERZONE_FLAGS) == 0) { + char *found_zone = knot_dname_to_str_alloc((const knot_dname_t *)key.data); + ptrlist_add(zones, found_zone, NULL); + } + } + txn_iter_next(txn); + } + if (txn->ret == KNOT_ENOENT) { + txn->ret = KNOT_EOK; + } + txn_iter_finish(txn); + txn_abort(txn); + if (list_size(zones) < 1) { + txn->ret = KNOT_ENOENT; + } + if (list_size(zones) != expected_count) { + txn->ret = KNOT_EMALF; + } + txn_ret(txn); +} + +/* + * *************************** PART VIII ****************************** + * + * Journal check + * + * ******************************************************************** + */ + +static void _jch_print(const knot_dname_t *zname, int warn_level, const char *format, ...) +{ + static char buf[512]; + strcpy(buf, "journal check: "); + + va_list args; + va_start(args, format); + vsprintf(buf + strlen(buf), format, args); + va_end(args); + + switch (warn_level) { + case JOURNAL_CHECK_INFO: + log_zone_info(zname, "%s", buf); + break; + case JOURNAL_CHECK_WARN: + log_zone_error(zname, "%s", buf); + break; + default: + break; + } +} + +#define jch_print(wl, fmt_args...) if ((wl) <= warn_level) _jch_print(j->zone, wl, fmt_args) +#define jch_info(fmt_args...) jch_print(JOURNAL_CHECK_INFO, fmt_args) +#define jch_warn(fmt_args...) jch_print((allok = 0, JOURNAL_CHECK_WARN), fmt_args) +#define jch_txn(comment, fatal) do { if (txn->ret != KNOT_EOK && txn->ret != KNOT_ESEMCHECK) { \ + jch_warn("failed transaction: %s (%s)", (comment), knot_strerror(txn->ret)); \ + if (fatal) return txn->ret; } } while (0) + +int journal_check(journal_t *j, journal_check_level warn_level) +{ + int ret, allok = 1; + changeset_t *ch = NULL; + uint32_t sfrom, sto; + uint32_t first_unflushed; + uint32_t chcount; + + jch_info("started"); + + if (j->db == NULL) { + jch_warn("is not open"); + return KNOT_ESEMCHECK; + } + + local_txn_t(txn, j); + txn_begin(txn, true); + jch_txn("begin", true); + + jch_info("metadata: flags >> %d << fs %u ls %u lst %u lf %u ms %u ds %u cnt %u", + txn->shadow_md.flags, txn->shadow_md.first_serial, txn->shadow_md.last_serial, + txn->shadow_md.last_serial_to, txn->shadow_md.last_flushed, txn->shadow_md.merged_serial, + txn->shadow_md.dirty_serial, txn->shadow_md.changeset_count); + + chcount = txn->shadow_md.changeset_count; + first_unflushed = txn->shadow_md.first_serial; + + if (md_flag(txn, DIRTY_SERIAL_VALID)) { + jch_warn("there is some post-crash mess in the DB"); + } + + if (!md_flag(txn, SERIAL_TO_VALID)) { + if (md_flag(txn, LAST_FLUSHED_VALID)) { + jch_warn("journal flagged empty but last_flushed valid"); + } + if (md_flag(txn, MERGED_SERIAL_VALID)) { + jch_warn("no other than merged changeset present, this should not happen"); + } + goto check_merged; + } + + ret = load_one(j, txn, txn->shadow_md.first_serial, &ch); + if (ret != KNOT_EOK) { + jch_warn("can't read first changeset %u (%s)", + txn->shadow_md.first_serial, knot_strerror(ret)); + goto check_merged; + } + + sfrom = knot_soa_serial(&ch->soa_from->rrs), sto = knot_soa_serial(&ch->soa_to->rrs); + if (serial_compare(txn->shadow_md.first_serial, sfrom) != 0) { + jch_warn("first changeset's serial 'from' %u is not ok", sfrom); + } + + if (md_flag(txn, LAST_FLUSHED_VALID)) { + changeset_free(ch); + ret = load_one(j, txn, txn->shadow_md.last_flushed, &ch); + if (ret != KNOT_EOK) { + jch_warn("can't read last flushed changeset %u (%s)", + txn->shadow_md.last_flushed, knot_strerror(ret)); + } + else { + first_unflushed = knot_soa_serial(&ch->soa_to->rrs); + } + } + if (ret == KNOT_EOK) { + changeset_free(ch); + } + + if (serial_compare(txn->shadow_md.last_serial_to, sto) == 0) { + jch_info("there is just one changeset in the journal"); + goto check_merged; + } + ret = load_one(j, txn, sto, &ch); + if (ret != KNOT_EOK) { + jch_warn("can't read second changeset %u (%s)", sto, knot_strerror(ret)); + } + else { + sfrom = knot_soa_serial(&ch->soa_from->rrs); + if (serial_compare(sfrom, sto) != 0) { + jch_warn("second changeset's serial 'from' %u is not ok", sfrom); + } + changeset_free(ch); + } + + sfrom = txn->shadow_md.first_serial; + sto = txn->shadow_md.last_serial_to; + txn_commit(txn); + jch_txn("commit", true); + + list_t l; + init_list(&l); + ret = journal_load_changesets(j, &l, sfrom); + if (ret != KNOT_EOK) { + jch_warn("can't read all changesets %u -> %u (%s)", sfrom, sto, knot_strerror(ret)); + goto check_merged; + } + jch_info("listed %zu changesets", list_size(&l)); + if (list_size(&l) != chcount) { + jch_warn("expected %u changesets but found %zu", chcount, list_size(&l)); + } + + ch = HEAD(l); + if (serial_compare(sfrom, knot_soa_serial(&ch->soa_from->rrs)) != 0) { + jch_warn("first listed changeset's serial 'from' %u is not ok", + knot_soa_serial(&ch->soa_from->rrs)); + } + ch = TAIL(l); + if (serial_compare(sto, knot_soa_serial(&ch->soa_to->rrs)) != 0) { + jch_warn("last listed changeset's serial 'to' %u is not ok", + knot_soa_serial(&ch->soa_to->rrs)); + } + changesets_free(&l); + +check_merged: + if (txn->ret != KNOT_ESEMCHECK) txn_abort(txn); + txn_begin(txn, false); + jch_txn("begin2", true); + if (md_flag(txn, MERGED_SERIAL_VALID)) { + ch = NULL; + ret = load_merged_changeset(j, txn, &ch, NULL); + if (ret != KNOT_EOK) { + jch_warn("can't read merged changeset (%s)", knot_strerror(ret)); + } + else { + sfrom = knot_soa_serial(&ch->soa_from->rrs); + sto = knot_soa_serial(&ch->soa_to->rrs); + jch_info("merged changeset %u -> %u (size %zu)", sfrom, sto, + changeset_serialized_size(ch)); + if (serial_compare(sfrom, txn->shadow_md.merged_serial) != 0) { + jch_warn("merged changeset's serial 'from' is not ok"); + } + if (serial_compare(sto, first_unflushed) != 0) { + jch_warn("merged changeset's serial 'to' is not ok"); + } + changeset_free(ch); + } + } + txn_commit(txn); + jch_txn("commit2", true); + + if (allok) { + jch_info("passed without errors"); + } + + return (allok ? KNOT_EOK : KNOT_ERROR); +} diff --git a/src/knot/journal/journal.h b/src/knot/journal/journal.h new file mode 100644 index 0000000000000000000000000000000000000000..e21e6c7307b525822b3218c32aa70dae5320a212 --- /dev/null +++ b/src/knot/journal/journal.h @@ -0,0 +1,196 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include <pthread.h> + +#include "libknot/db/db.h" +#include "contrib/ucw/lists.h" +#include "knot/updates/changesets.h" +#include "knot/journal/serialization.h" + +/*! \brief Minimum journal size. */ +#define JOURNAL_MIN_FSLIMIT (1 * 1024 * 1024) + +typedef struct { + knot_db_t *db; + const knot_db_api_t *db_api; + char *path; + size_t fslimit; + pthread_mutex_t db_mutex; // please delete this once you move DB opening from journal_open to db_init +} journal_db_t; + +typedef struct { + journal_db_t *db; + knot_dname_t *zone; +} journal_t; + +typedef enum { + JOURNAL_CHECK_SILENT = 0, // No logging, just curious for return value. + JOURNAL_CHECK_WARN = 1, // Log journal inconsistencies. + JOURNAL_CHECK_INFO = 2 // Log journal state. +} journal_check_level; + +/*! + * \brief Initialize shared journal DB file. The DB will be open on first use. + * + * \param db Database to be initialized. Must be (*db == NULL) before! + * \param lmdb_dir_path Path to the directory with DB + * \param lmdb_fslimit Maximum size of DB data file + * + * \return KNOT_E* + */ +int journal_db_init(journal_db_t **db, const char *lmdb_dir_path, size_t lmdb_fslimit); + +/*! + * \brief Close shared journal DB file. + * + * \param db DB to close. + */ +void journal_db_close(journal_db_t **db); + +/*! + * \brief List the zones contained in journal DB. + * + * \param db[in] Shared journal DB + * \param zones[out] List of strings (char *) of zone names + * + * \return KNOT_EOK ok + * \retval KNOT_ENOMEM no zones found + * \retval KNOT_EMALF different # of zones found than expected + * \retval KNOT_E* other error + */ +int journal_db_list_zones(journal_db_t **db, list_t *zones); + +/*! + * \brief Allocate a new journal structure. + * + * \retval new journal instance if successful. + * \retval NULL on error. + */ +journal_t *journal_new(void); + +/*! + * \brief Free a journal structure. + * + * \param journal A journal structure to free. + */ +void journal_free(journal_t **journal); + +/*! + * \brief Open journal. + * + * \param j Journal struct to use. + * \param db Shared journal database + * \param zone_name Name of the zone this journal belongs to. + * + * \retval KNOT_EOK on success. + * \return < KNOT_EOK on other errors. + */ +int journal_open(journal_t *j, journal_db_t **db, const knot_dname_t *zone_name); + +/*! + * \brief Close journal. + * + * \param journal Journal to close. + */ +void journal_close(journal_t *journal); + +/*! + * \brief Load changesets from journal. + * + * \param journal Journal to load from. + * \param dst Store changesets here. + * \param from Start serial. + * + * \retval KNOT_EOK on success. + * \retval KNOT_ENOENT when the lookup of the first entry fails. + * \return < KNOT_EOK on other error. + */ +int journal_load_changesets(journal_t *journal, list_t *dst, uint32_t from); + +/*! + * \brief Store changesets in journal. + * + * \param journal Journal to store in. + * \param src Changesets to store. + * + * \retval KNOT_EOK on success. + * \retval KNOT_EBUSY when full, asking zone to flush itself to zonefile + * to allow cleaning up history and freeing up space + * \retval KNOT_ESPACE when full and not able to free up any space + * \return < KNOT_EOK on other errors. + */ +int journal_store_changesets(journal_t *journal, list_t *src); + +/*! + * \brief Store changesets in journal. + * + * \param journal Journal to store in. + * \param change Changeset to store. + * + * \retval (same as for journal_store_changesets()) + */ +int journal_store_changeset(journal_t *journal, changeset_t *change); + +/*! + * \brief Check if this (zone's) journal is present in shared journal DB. + * + * \param db Shared journal DB + * \param zone_name Name of the zone of the journal in question + * + * \return true or false + */ +bool journal_exists(journal_db_t **db, knot_dname_t *zone_name); + +/*! \brief Tell the journal that zone has been flushed. + * + * \param journal Journal to flush. + * + * \return KNOT_E* + */ +int journal_flush(journal_t *journal); + +/*! \brief Remove completely this (zone's) journal from shared journal DB. + * + * This must be called with opened journal. + * + * \param j Journal to be deleted + * + * \return KNOT_E* + */ +int scrape_journal(journal_t *j); + +/*! \brief Obtain public information from journal metadata + * + * \param[in] j Journal + * \param[out] is_empty True if j contains no changesets + * \param[out] serial_from [if !is_empty] starting serial of changesets history + * \param[out] serial_to [if !is_empty] ending serial of changesets history + */ +void journal_metadata_info(journal_t *j, bool *is_empty, uint32_t *serial_from, uint32_t *serial_to); + +/*! \brief Check the journal consistency, errors to stderr. + * + * \param journal Journal to check. + * \param warn_level Journal check level. + * + * \return KNOT_E* + */ +int journal_check(journal_t *j, journal_check_level warn_level); + +/*! @} */ diff --git a/src/knot/journal/old_journal.c b/src/knot/journal/old_journal.c new file mode 100644 index 0000000000000000000000000000000000000000..bb9366a228c924453a496c330b5ef7dba69fb345 --- /dev/null +++ b/src/knot/journal/old_journal.c @@ -0,0 +1,548 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <sys/mman.h> +#include <assert.h> + +#include "knot/common/log.h" +#include "contrib/files.h" +#include "knot/journal/old_journal.h" +#include "knot/journal/serialization.h" +#include "libknot/libknot.h" + +static int deserialize_rr(knot_rrset_t *rrset, const uint8_t *stream, uint32_t rdata_size) +{ + uint32_t ttl; + memcpy(&ttl, stream, sizeof(uint32_t)); + return knot_rrset_add_rdata(rrset, stream + sizeof(uint32_t), + rdata_size - sizeof(uint32_t), ttl, NULL); +} + +static int rrset_deserialize(const uint8_t *stream, size_t *stream_size, + knot_rrset_t *rrset) +{ + if (stream == NULL || stream_size == NULL || rrset == NULL) { + return KNOT_EINVAL; + } + + if (sizeof(uint64_t) > *stream_size) { + return KNOT_ESPACE; + } + uint64_t rrset_length = 0; + memcpy(&rrset_length, stream, sizeof(uint64_t)); + if (rrset_length > *stream_size) { + return KNOT_ESPACE; + } + + size_t offset = sizeof(uint64_t); + uint16_t rdata_count = 0; + memcpy(&rdata_count, stream + offset, sizeof(uint16_t)); + offset += sizeof(uint16_t); + /* Read owner from the stream. */ + unsigned owner_size = knot_dname_size(stream + offset); + knot_dname_t *owner = knot_dname_copy_part(stream + offset, owner_size, NULL); + assert(owner); + offset += owner_size; + /* Read type. */ + uint16_t type = 0; + memcpy(&type, stream + offset, sizeof(uint16_t)); + offset += sizeof(uint16_t); + /* Read class. */ + uint16_t rclass = 0; + memcpy(&rclass, stream + offset, sizeof(uint16_t)); + offset += sizeof(uint16_t); + + /* Create new RRSet. */ + knot_rrset_init(rrset, owner, type, rclass); + + /* Read RRs. */ + for (uint16_t i = 0; i < rdata_count; i++) { + /* + * There's always size of rdata in the beginning. + * Needed because of remainders. + */ + uint32_t rdata_size = 0; + memcpy(&rdata_size, stream + offset, sizeof(uint32_t)); + offset += sizeof(uint32_t); + int ret = deserialize_rr(rrset, stream + offset, rdata_size); + if (ret != KNOT_EOK) { + knot_rrset_clear(rrset, NULL); + return ret; + } + offset += rdata_size; + } + + *stream_size = *stream_size - offset; + + return KNOT_EOK; +} + + + +typedef enum { + JOURNAL_NULL = 0 << 0, /*!< Invalid journal entry. */ + JOURNAL_FREE = 1 << 0, /*!< Free journal entry. */ + JOURNAL_VALID = 1 << 1, /*!< Valid journal entry. */ + JOURNAL_DIRTY = 1 << 2 /*!< Journal entry cannot be evicted. */ +} journal_flag_t; + +typedef struct { + uint64_t id; /*!< Node ID. */ + uint16_t flags; /*!< Node flags. */ + uint16_t next; /*!< UNUSED */ + uint32_t pos; /*!< Position in journal file. */ + uint32_t len; /*!< Entry data length. */ +} journal_node_t; + +typedef struct { + int fd; + char *path; /*!< Path to journal file. */ + uint16_t tmark; /*!< Transaction start mark. */ + uint16_t max_nodes; /*!< Number of nodes. */ + uint16_t qhead; /*!< Node queue head. */ + uint16_t qtail; /*!< Node queue tail. */ + uint16_t bflags; /*!< Initial flags for each written node. */ + size_t fsize; /*!< Journal file size. */ + size_t fslimit; /*!< File size limit. */ + journal_node_t free; /*!< Free segment. */ + journal_node_t *nodes; /*!< Array of nodes. */ +} old_journal_t; + +#define JOURNAL_NCOUNT 1024 /*!< Default node count. */ +#define JOURNAL_MAGIC {'k', 'n', 'o', 't', '1', '5', '2'} +#define MAGIC_LENGTH 7 +/* HEADER = magic, crc, max_entries, qhead, qtail */ +#define JOURNAL_HSIZE (MAGIC_LENGTH + sizeof(uint32_t) + sizeof(uint16_t) * 3) + +/*! \brief Infinite file size limit. */ +#define FSLIMIT_INF (~((size_t)0)) + +/*! \brief Next node. */ +#define jnode_next(j, i) (((i) + 1) % (j)->max_nodes) + +/*! \brief Previous node. */ +#define jnode_prev(j, i) (((i) == 0) ? (j)->max_nodes - 1 : (i) - 1) + +/*! \bref Starting node data position. */ +#define jnode_base_pos(max_nodes) (JOURNAL_HSIZE + (max_nodes + 1) * sizeof(journal_node_t)) + +static inline int sfread(void *dst, size_t len, int fd) +{ + return read(fd, dst, len) == len; +} + +/*! \brief Return 'serial_from' part of the key. */ +static inline uint32_t journal_key_from(uint64_t k) +{ + return (uint32_t)(k & ((uint64_t)0x00000000ffffffff)); +} + +/*! \brief Compare function to match entries with starting serial. */ +static inline int journal_key_from_cmp(uint64_t k, uint64_t from) +{ + return ((uint64_t)journal_key_from(k)) - from; +} + +/*! \brief Open journal file for r/w (returns error if not exists). */ +static int old_journal_open_file(old_journal_t *j) +{ + assert(j != NULL); + + int ret = KNOT_EOK; + j->fd = open(j->path, O_RDWR); + if (j->fd < 0) { + return knot_map_errno(); + } + + /* File lock. */ + struct flock lock = { .l_type = F_WRLCK, .l_whence = SEEK_SET, + .l_start = 0, .l_len = 0, .l_pid = 0 }; + /* Attempt to lock. */ + ret = fcntl(j->fd, F_SETLKW, &lock); + if (ret < 0) { + return knot_map_errno(); + } + + /* Read magic bytes. */ + const char magic_req[MAGIC_LENGTH] = JOURNAL_MAGIC; + char magic[MAGIC_LENGTH]; + if (!sfread(magic, MAGIC_LENGTH, j->fd)) { + goto open_file_error; + } + if (memcmp(magic, magic_req, MAGIC_LENGTH) != 0) { + log_warning("old journal '%s', version too old", j->path); + close(j->fd); + j->fd = -1; + return KNOT_ENOTSUP; + } + + /* Skip CRC */ + if (lseek(j->fd, MAGIC_LENGTH + sizeof(uint32_t), SEEK_SET) < 0) { + goto open_file_error; + } + + /* Get journal file size. */ + struct stat st; + if (fstat(j->fd, &st) < 0) { + goto open_file_error; + } + + /* Set file size. */ + j->fsize = st.st_size; + + /* Read maximum number of entries. */ + if (!sfread(&j->max_nodes, sizeof(uint16_t), j->fd)) { + goto open_file_error; + } + + /* Allocate nodes. */ + const size_t node_len = sizeof(journal_node_t); + j->nodes = malloc(j->max_nodes * node_len); + if (j->nodes == NULL) { + goto open_file_error; + } else { + memset(j->nodes, 0, j->max_nodes * node_len); + } + + /* Load node queue state. */ + j->qhead = j->qtail = 0; + if (!sfread(&j->qhead, sizeof(uint16_t), j->fd)) { + goto open_file_error; + } + + /* Load queue tail. */ + if (!sfread(&j->qtail, sizeof(uint16_t), j->fd)) { + goto open_file_error; + } + + /* Load empty segment descriptor. */ + if (!sfread(&j->free, node_len, j->fd)) { + goto open_file_error; + } + + /* Read journal descriptors table. */ + if (!sfread(j->nodes, j->max_nodes * node_len, j->fd)) { + goto open_file_error; + } + + /* Save file lock and return. */ + return KNOT_EOK; + + /* Unlock and close file and return error. */ +open_file_error: + free(j->nodes); + j->nodes = NULL; + close(j->fd); + j->fd = -1; + return KNOT_ERROR; +} + +/*! \brief Close journal file. */ +static int old_journal_close_file(old_journal_t *journal) +{ + /* Close file. */ + if (journal->fd > 0) { + close(journal->fd); + journal->fd = -1; + } + + /* Free nodes. */ + free(journal->nodes); + journal->nodes = NULL; + + return KNOT_EOK; +} + +static int old_journal_close(old_journal_t *journal) +{ + /* Check journal. */ + if (journal == NULL) { + return KNOT_EINVAL; + } + + /* Close file. */ + old_journal_close_file(journal); + + /* Free allocated resources. */ + free(journal->path); + free(journal); + + return KNOT_EOK; +} + +static int old_journal_open(old_journal_t **journal, const char *path, size_t fslimit) +{ + if (journal == NULL || path == NULL) { + return KNOT_EINVAL; + } + + old_journal_t *j = malloc(sizeof(*j)); + if (j == NULL) { + return KNOT_ENOMEM; + } + + memset(j, 0, sizeof(*j)); + j->bflags = JOURNAL_DIRTY; + j->fd = -1; + + j->fslimit = fslimit; + + /* Copy path. */ + j->path = strdup(path); + if (j->path == NULL) { + free(j); + return KNOT_ENOMEM; + } + + /* Open journal file. */ + int ret = old_journal_open_file(j); + if (ret != KNOT_EOK) { + log_error("old journal '%s', failed to open (%s)", path, + knot_strerror(ret)); + old_journal_close(j); + return ret; + } + + *journal = j; + + return KNOT_EOK; +} + +typedef int (*journal_cmp_t)(uint64_t k1, uint64_t k2); + +static int old_journal_fetch(old_journal_t *journal, uint64_t id, + journal_cmp_t cf, journal_node_t** dst) +{ + if (journal == NULL || dst == NULL) { + return KNOT_EINVAL; + } + + size_t i = jnode_prev(journal, journal->qtail); + size_t endp = jnode_prev(journal, journal->qhead); + for(; i != endp; i = jnode_prev(journal, i)) { + journal_node_t *n = journal->nodes + i; + + /* Skip invalid nodes. */ + if (!(n->flags & JOURNAL_VALID)) { + continue; + } + + if (cf(n->id, id) == 0) { + *dst = journal->nodes + i; + return KNOT_EOK; + } + } + + return KNOT_ENOENT; +} + +static int old_journal_read_node(old_journal_t *journal, journal_node_t *n, char *dst) +{ + /* Check valid flag. */ + if (!(n->flags & JOURNAL_VALID)) { + return KNOT_EINVAL; + } + + /* Seek journal node. */ + int seek_ret = lseek(journal->fd, n->pos, SEEK_SET); + + /* Read journal node content. */ + if (seek_ret < 0 || !sfread(dst, n->len, journal->fd)) { + return KNOT_ERROR; + } + + return KNOT_EOK; +} + +bool old_journal_exists(const char *path) +{ + if (path == NULL) { + return false; + } + struct stat st; + return stat(path, &st) == 0; +} + +/*! \brief No doc here. Moved from zones.h (@mvavrusa) */ +static int changesets_unpack(changeset_t *chs) +{ + /* Read changeset flags. */ + if (chs->data == NULL) { + return KNOT_EMALF; + } + size_t remaining = chs->size; + + /* Read initial changeset RRSet - SOA. */ + uint8_t *stream = chs->data + (chs->size - remaining); + knot_rrset_t rrset; + int ret = rrset_deserialize(stream, &remaining, &rrset); + if (ret != KNOT_EOK) { + return KNOT_EMALF; + } + + assert(rrset.type == KNOT_RRTYPE_SOA); + chs->soa_from = knot_rrset_copy(&rrset, NULL); + knot_rrset_clear(&rrset, NULL); + if (chs->soa_from == NULL) { + return KNOT_ENOMEM; + } + + /* Read remaining RRSets */ + bool in_remove_section = true; + while (remaining > 0) { + + /* Parse next RRSet. */ + stream = chs->data + (chs->size - remaining); + knot_rrset_init_empty(&rrset); + ret = rrset_deserialize(stream, &remaining, &rrset); + if (ret != KNOT_EOK) { + return KNOT_EMALF; + } + + /* Check for next SOA. */ + if (rrset.type == KNOT_RRTYPE_SOA) { + /* Move to ADD section if in REMOVE. */ + if (in_remove_section) { + chs->soa_to = knot_rrset_copy(&rrset, NULL); + if (chs->soa_to == NULL) { + ret = KNOT_ENOMEM; + break; + } + in_remove_section = false; + } else { + /* Final SOA, no-op. */ + ; + } + } else { + /* Remove RRSets. */ + if (in_remove_section) { + ret = changeset_add_removal(chs, &rrset, 0); + } else { + /* Add RRSets. */ + ret = changeset_add_addition(chs, &rrset, 0); + } + } + knot_rrset_clear(&rrset, NULL); + if (ret != KNOT_EOK) { + break; + } + } + return ret; +} + +/*! \brief Helper for iterating journal (this is temporary until #80) */ +typedef int (*journal_apply_t)(old_journal_t *, journal_node_t *, const knot_dname_t *, list_t *); +static int old_journal_walk(const char *fn, uint32_t from, uint32_t to, + journal_apply_t cb, const knot_dname_t *zone, list_t *chgs) +{ + /* Open journal for reading. */ + old_journal_t *journal = NULL; + int ret = old_journal_open(&journal, fn, FSLIMIT_INF); + if (ret != KNOT_EOK) { + return ret; + } + /* Read entries from starting serial until finished. */ + uint32_t found_to = from; + journal_node_t *n = 0; + ret = old_journal_fetch(journal, from, journal_key_from_cmp, &n); + if (ret != KNOT_EOK) { + goto finish; + } + + size_t i = n - journal->nodes; + assert(i < journal->max_nodes); + + for (; i != journal->qtail; i = jnode_next(journal, i)) { + journal_node_t *n = journal->nodes + i; + + if (!(n->flags & JOURNAL_VALID)) { + continue; + } + if (to == found_to) { + break; + } + ret = cb(journal, n, zone, chgs); + if (ret != KNOT_EOK) { + break; + } + } + +finish: + old_journal_close(journal); + return ret; +} + +static int load_changeset(old_journal_t *journal, journal_node_t *n, + const knot_dname_t *zone, list_t *chgs) +{ + changeset_t *ch = changeset_new(zone); + if (ch == NULL) { + return KNOT_ENOMEM; + } + + /* Initialize changeset. */ + ch->data = malloc(n->len); + if (!ch->data) { + return KNOT_ENOMEM; + } + + /* Read journal entry. */ + int ret = old_journal_read_node(journal, n, (char*)ch->data); + if (ret != KNOT_EOK) { + return ret; + } + + /* Update changeset binary size. */ + ch->size = n->len; + + /* Insert into changeset list. */ + add_tail(chgs, &ch->n); + + return KNOT_EOK; +} + +int old_journal_load_changesets(const char *path, const knot_dname_t *zone, + list_t *dst, uint32_t from, uint32_t to) +{ + int ret = old_journal_walk(path, from, to, &load_changeset, zone, dst); + if (ret != KNOT_EOK) { + return ret; + } + + assert(dst != NULL); + + changeset_t* chs = NULL; + WALK_LIST(chs, *dst) { + ret = changesets_unpack(chs); + if (ret != KNOT_EOK) { + return ret; + } + } + + /* Check for complete history. */ + changeset_t *last = TAIL(*dst); + if (to != knot_soa_serial(&last->soa_to->rrs)) { + return KNOT_ERANGE; + } + + return KNOT_EOK; +} diff --git a/src/knot/journal/old_journal.h b/src/knot/journal/old_journal.h new file mode 100644 index 0000000000000000000000000000000000000000..57e07dda69c5d0f0194f71e75fa1932c490d4e89 --- /dev/null +++ b/src/knot/journal/old_journal.h @@ -0,0 +1,46 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include <stdint.h> + +#include "contrib/ucw/lists.h" + +/*! + * \brief Check if the journal file is used or not. + * + * \param path Journal file. + * + * \return true or false + */ +bool old_journal_exists(const char *path); + +/*! + * \brief Load changesets from journal. + * + * \param path Path to journal file. + * \param zone Corresponding zone. + * \param dst Store changesets here. + * \param from Start serial. + * \param to End serial. + * + * \retval KNOT_EOK on success. + * \retval KNOT_ERANGE if given entry was not found. + * \return < KNOT_EOK on error. + */ +int old_journal_load_changesets(const char *path, const knot_dname_t *zone, + list_t *dst, uint32_t from, uint32_t to); diff --git a/src/knot/journal/serialization.c b/src/knot/journal/serialization.c new file mode 100644 index 0000000000000000000000000000000000000000..38fa302cc540bd03e9f38e5081454392baea8c52 --- /dev/null +++ b/src/knot/journal/serialization.c @@ -0,0 +1,332 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <assert.h> + +#include "knot/journal/serialization.h" +#include "libknot/libknot.h" +#include "contrib/wire_ctx.h" + +#define SERIALIZE_RRSET_INIT (-1) +#define SERIALIZE_RRSET_DONE ((1L<<16)+1) + +static int serialize_rrset(wire_ctx_t *wire, const knot_rrset_t *rrset, long *phase) +{ + assert(wire != NULL && rrset != NULL && phase != NULL); + assert(*phase >= SERIALIZE_RRSET_INIT && *phase < SERIALIZE_RRSET_DONE); + + if (*phase == SERIALIZE_RRSET_INIT) { + // write owner, type, class, rrcnt + int size = knot_dname_to_wire(wire->position, rrset->owner, + wire_ctx_available(wire)); + if (size < 0 || wire_ctx_available(wire) < size + 3 * sizeof(uint16_t)) { + return KNOT_EOK; + } + wire_ctx_skip(wire, size); + wire_ctx_write_u16(wire, rrset->type); + wire_ctx_write_u16(wire, rrset->rclass); + wire_ctx_write_u16(wire, rrset->rrs.rr_count); + (*phase)++; + } + + for ( ; *phase < rrset->rrs.rr_count; (*phase)++) { + const knot_rdata_t *rr = knot_rdataset_at(&rrset->rrs, *phase); + assert(rr); + uint16_t rdlen = knot_rdata_rdlen(rr); + if (wire_ctx_available(wire) < sizeof(uint32_t) + sizeof(uint16_t) + rdlen) { + return KNOT_EOK; + } + wire_ctx_write_u32(wire, knot_rdata_ttl(rr)); + wire_ctx_write_u16(wire, rdlen); + wire_ctx_write(wire, knot_rdata_data(rr), rdlen); + } + + *phase = SERIALIZE_RRSET_DONE; + return KNOT_EOK; +} + +static int deserialize_rrset(wire_ctx_t *wire, knot_rrset_t *rrset, long *phase) +{ + assert(wire != NULL && rrset != NULL && phase != NULL); + assert(*phase >= SERIALIZE_RRSET_INIT && *phase < SERIALIZE_RRSET_DONE); + + if (*phase == SERIALIZE_RRSET_INIT && wire_ctx_available(wire) > 0) { + // Read owner, rtype, rclass and RR count. + int size = knot_dname_size(wire->position); + if (size < 0) { + return size; + } + knot_dname_t *owner = knot_dname_copy_part(wire->position, size, NULL); + if (owner == NULL || wire_ctx_available(wire) < size + 3 * sizeof(uint16_t)) { + return KNOT_EMALF; + } + wire_ctx_skip(wire, size); + uint16_t type = wire_ctx_read_u16(wire); + uint16_t rclass = wire_ctx_read_u16(wire); + uint16_t rrcount = wire_ctx_read_u16(wire); + (*phase) = rrcount; + if (wire->error != KNOT_EOK) { + return wire->error; + } + knot_rrset_init(rrset, owner, type, rclass); + } + + for ( ; *phase > 0 && wire_ctx_available(wire) > 0; (*phase)--) { + uint32_t ttl = wire_ctx_read_u32(wire); + uint32_t rdata_size = wire_ctx_read_u16(wire); + if (wire->error != KNOT_EOK || + wire_ctx_available(wire) < rdata_size || + knot_rrset_add_rdata(rrset, wire->position, rdata_size, + ttl, NULL) != KNOT_EOK) { + knot_rrset_clear(rrset, NULL); + return KNOT_EMALF; + } + wire_ctx_skip(wire, rdata_size); + } + + if (*phase == 0) { + *phase = SERIALIZE_RRSET_DONE; + } + return KNOT_EOK; +} + +static int serialize_rrset_chunks(wire_ctx_t *wire, const knot_rrset_t *rrset, + uint8_t *dst_chunks[], size_t chunk_size, + size_t chunks_count, size_t *chunks_real_sizes, + size_t *cur_chunk) +{ + long phase = SERIALIZE_RRSET_INIT; + while (1) { + int ret = serialize_rrset(wire, rrset, &phase); + if (ret != KNOT_EOK || phase == SERIALIZE_RRSET_DONE) { + return ret; + } + // now the rrset didn't fit whole to this chunk + if (*cur_chunk >= chunks_count - 1) { + return KNOT_ESPACE; + } + if (wire->error != KNOT_EOK) { + return wire->error; + } + chunks_real_sizes[*cur_chunk] = wire_ctx_offset(wire); + (*cur_chunk)++; + *wire = wire_ctx_init(dst_chunks[*cur_chunk], chunk_size); + } +} + +static int deserialize_rrset_chunks(wire_ctx_t *wire, knot_rrset_t *rrset, + uint8_t *src_chunks[], const size_t *chunk_sizes, + size_t chunks_count, size_t *cur_chunk) +{ + long phase = SERIALIZE_RRSET_INIT; + while (1) { + int ret = deserialize_rrset(wire, rrset, &phase); + if (ret != KNOT_EOK || phase == SERIALIZE_RRSET_DONE) { + return ret; + } + // now the rrset wasn't whole on this chunk + if (*cur_chunk >= chunks_count - 1) { + return KNOT_EMALF; + } + if (wire->error != KNOT_EOK) { + return wire->error; + } + (*cur_chunk)++; + assert(chunk_sizes[*cur_chunk] > 0); + *wire = wire_ctx_init(src_chunks[*cur_chunk], chunk_sizes[*cur_chunk]); + } +} + +static uint64_t rrset_binary_size(const knot_rrset_t *rrset) +{ + if (rrset == NULL || rrset->rrs.rr_count == 0) { + return 0; + } + + // Owner size + type + class + RR count. + uint64_t size = knot_dname_size(rrset->owner) + 3 * sizeof(uint16_t); + + // RRs. + for (uint16_t i = 0; i < rrset->rrs.rr_count; i++) { + const knot_rdata_t *rr = knot_rdataset_at(&rrset->rrs, i); + assert(rr); + + // TTL + RR size + RR. + size += sizeof(uint32_t) + sizeof(uint16_t) + knot_rdata_rdlen(rr); + } + + return size; +} + +size_t changeset_serialized_size(const changeset_t *ch) +{ + if (ch == NULL) { + return 0; + } + + size_t soa_from_size = rrset_binary_size(ch->soa_from); + size_t soa_to_size = rrset_binary_size(ch->soa_to); + + changeset_iter_t it; + changeset_iter_all(&it, ch); + + size_t change_size = 0; + knot_rrset_t rrset = changeset_iter_next(&it); + while (!knot_rrset_empty(&rrset)) { + change_size += rrset_binary_size(&rrset); + rrset = changeset_iter_next(&it); + } + + changeset_iter_clear(&it); + + return soa_from_size + soa_to_size + change_size; +} + +int changeset_serialize(const changeset_t *ch, uint8_t *dst_chunks[], + size_t chunk_size, size_t chunks_count, size_t *chunks_real_sizes, + size_t *chunks_real_count) +{ + if (ch == NULL || dst_chunks == NULL || chunk_size == 0 || chunks_count == 0 || + chunks_real_sizes == NULL || chunks_real_count == NULL) { + return KNOT_EINVAL; + } + + for (int i = 0; i < chunks_count; i++) { + chunks_real_sizes[i] = 0; + } + + wire_ctx_t wire = wire_ctx_init(dst_chunks[0], chunk_size); + size_t cur_chunk = 0; + + // Serialize SOA 'from'. + int ret = serialize_rrset_chunks(&wire, ch->soa_from, dst_chunks, chunk_size, + chunks_count, chunks_real_sizes, &cur_chunk); + if (ret != KNOT_EOK) { + return ret; + } + + // Serialize RRSets from the 'rem' section. + changeset_iter_t it; + ret = changeset_iter_rem(&it, ch); + if (ret != KNOT_EOK) { + return ret; + } + + knot_rrset_t rrset = changeset_iter_next(&it); + while (!knot_rrset_empty(&rrset)) { + ret = serialize_rrset_chunks(&wire, &rrset, dst_chunks, chunk_size, + chunks_count, chunks_real_sizes, &cur_chunk); + if (ret != KNOT_EOK) { + changeset_iter_clear(&it); + return ret; + } + rrset = changeset_iter_next(&it); + } + changeset_iter_clear(&it); + + // Serialize SOA 'to'. + ret = serialize_rrset_chunks(&wire, ch->soa_to, dst_chunks, chunk_size, + chunks_count, chunks_real_sizes, &cur_chunk); + if (ret != KNOT_EOK) { + return ret; + } + + // Serialize RRSets from the 'add' section. + ret = changeset_iter_add(&it, ch); + if (ret != KNOT_EOK) { + return ret; + } + + rrset = changeset_iter_next(&it); + while (!knot_rrset_empty(&rrset)) { + ret = serialize_rrset_chunks(&wire, &rrset, dst_chunks, chunk_size, + chunks_count, chunks_real_sizes, &cur_chunk); + if (ret != KNOT_EOK) { + changeset_iter_clear(&it); + + return ret; + } + rrset = changeset_iter_next(&it); + } + changeset_iter_clear(&it); + + chunks_real_sizes[cur_chunk] = wire_ctx_offset(&wire); + *chunks_real_count = cur_chunk + 1; + + return wire.error; +} + +int changeset_deserialize(changeset_t *ch, uint8_t *src_chunks[], + const size_t *chunks_sizes, size_t chunks_count) +{ + if (ch == NULL || src_chunks == NULL || chunks_sizes == NULL || + chunks_count == 0) { + return KNOT_EINVAL; + } + + size_t cur_chunk = 0; + wire_ctx_t wire = wire_ctx_init_const(src_chunks[0], chunks_sizes[0]); + + // Deserialize SOA 'from'. + knot_rrset_t rrset; + int ret = deserialize_rrset_chunks(&wire, &rrset, src_chunks, chunks_sizes, chunks_count, &cur_chunk); + if (ret != KNOT_EOK) { + return ret; + } + assert(rrset.type == KNOT_RRTYPE_SOA); + + ch->soa_from = knot_rrset_copy(&rrset, NULL); + knot_rrset_clear(&rrset, NULL); + if (ch->soa_from == NULL) { + return KNOT_ENOMEM; + } + + // Read remaining RRSets. + bool in_remove_section = true; + while (cur_chunk < chunks_count - 1 || wire_ctx_available(&wire) > 0) { + // Parse next RRSet. + ret = deserialize_rrset_chunks(&wire, &rrset, src_chunks, chunks_sizes, chunks_count, &cur_chunk); + if (ret != KNOT_EOK) { + break; + } + + // Check for next (and also last) SOA. + if (rrset.type == KNOT_RRTYPE_SOA) { + // Move to ADD section if in REMOVE. + assert(in_remove_section); + in_remove_section = false; + + ch->soa_to = knot_rrset_copy(&rrset, NULL); + if (ch->soa_to == NULL) { + ret = KNOT_ENOMEM; + } + } else { + if (in_remove_section) { + ret = changeset_add_removal(ch, &rrset, 0); + } else { + ret = changeset_add_addition(ch, &rrset, 0); + } + } + + knot_rrset_clear(&rrset, NULL); + + if (ret != KNOT_EOK) { + return ret; + } + } + + return wire.error; +} diff --git a/src/knot/journal/serialization.h b/src/knot/journal/serialization.h new file mode 100644 index 0000000000000000000000000000000000000000..0558bd72c5452dca20ce5b2fc36a67687c0160a5 --- /dev/null +++ b/src/knot/journal/serialization.h @@ -0,0 +1,59 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include <stdint.h> +#include "libknot/rrset.h" +#include "knot/updates/changesets.h" + +/*! + * \brief Returns size of changeset in serialized form. + * + * \param[in] ch Changeset whose size we want to compute. + * + * \return Size of the changeset. + */ +size_t changeset_serialized_size(const changeset_t *ch); + +/*! + * \brief Serializes given changeset into chunked area. + * + * \param[in] ch The changeset. + * \param[in] dst_chunks The chunks to serialize into. + * \param[in] chunk_size Maximum size of each chunk. + * \param[in] chunks_count Maximum number of used chunks. + * \param[out] chunks_real_sizes Real size of each chunk after serialization, or zeros for unused chunks. + * \param[out] chunks_real_count Real # of chunks after serialization. Can be wrong if error returned! + * + * \retval KNOT_E* + */ +int changeset_serialize(const changeset_t *ch, uint8_t *dst_chunks[], + size_t chunk_size, size_t chunks_count, size_t *chunks_real_sizes, + size_t *chunks_real_count); + +/*! + * \brief Deserializes chunked area into ch + * + * \param[out] ch The changeset. + * \param[in] src_chunks The chunks to deserialize. + * \param[in] chunks_sizes The size of each chunk. + * \param[in] chunks_count The number of chunks. + * + * \retval KNOT_E* + */ +int changeset_deserialize(changeset_t *ch, uint8_t *src_chunks[], + const size_t *chunks_sizes, size_t chunks_count); diff --git a/src/knot/modules/dnsproxy.c b/src/knot/modules/dnsproxy/dnsproxy.c similarity index 78% rename from src/knot/modules/dnsproxy.c rename to src/knot/modules/dnsproxy/dnsproxy.c index 14929f4f8977b96f16b58d7ef768eed33dfcdedb..fad149a30b651d75579b6f494dbcdf387a20d020 100644 --- a/src/knot/modules/dnsproxy.c +++ b/src/knot/modules/dnsproxy/dnsproxy.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,21 +14,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "knot/query/requestor.h" -#include "knot/common/log.h" -#include "knot/modules/dnsproxy.h" -#include "knot/query/capture.h" -#include "knot/nameserver/process_query.h" #include "contrib/mempattern.h" #include "contrib/net.h" +#include "knot/modules/dnsproxy/dnsproxy.h" +#include "knot/query/capture.h" +#include "knot/query/requestor.h" /* Module configuration scheme. */ #define MOD_REMOTE "\x06""remote" +#define MOD_TIMEOUT "\x07""timeout" #define MOD_CATCH_NXDOMAIN "\x0E""catch-nxdomain" const yp_item_t scheme_mod_dnsproxy[] = { { C_ID, YP_TSTR, YP_VNONE }, { MOD_REMOTE, YP_TREF, YP_VREF = { C_RMT }, YP_FNONE, { check_ref } }, + { MOD_TIMEOUT, YP_TINT, YP_VINT = { 0, INT32_MAX, 500 } }, { MOD_CATCH_NXDOMAIN, YP_TBOOL, YP_VNONE }, { C_COMMENT, YP_TSTR, YP_VNONE }, { NULL } @@ -46,19 +46,18 @@ int check_mod_dnsproxy(conf_check_t *args) return KNOT_EOK; } -struct dnsproxy { +typedef struct { conf_remote_t remote; bool catch_nxdomain; -}; + int timeout; +} dnsproxy_t; static int dnsproxy_fwd(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) { - if (pkt == NULL || qdata == NULL || ctx == NULL) { - return KNOT_STATE_FAIL; - } + assert(pkt && qdata && ctx); /* Forward only queries ending with REFUSED (no zone) or NXDOMAIN (if configured) */ - struct dnsproxy *proxy = ctx; + dnsproxy_t *proxy = ctx; if (!(qdata->rcode == KNOT_RCODE_REFUSED || (qdata->rcode == KNOT_RCODE_NXDOMAIN && proxy->catch_nxdomain))) { return state; @@ -88,8 +87,7 @@ static int dnsproxy_fwd(int state, knot_pkt_t *pkt, struct query_data *qdata, vo } /* Forward request. */ - int timeout = 1000 * conf()->cache.srv_tcp_reply_timeout; - ret = knot_requestor_exec(&re, req, timeout); + ret = knot_requestor_exec(&re, req, proxy->timeout); knot_request_free(req, re.mm); knot_requestor_clear(&re); @@ -103,36 +101,34 @@ static int dnsproxy_fwd(int state, knot_pkt_t *pkt, struct query_data *qdata, vo return KNOT_STATE_DONE; } -int dnsproxy_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone) +int dnsproxy_load(struct query_module *self) { - if (plan == NULL || self == NULL) { - return KNOT_EINVAL; - } + assert(self); - struct dnsproxy *proxy = mm_alloc(self->mm, sizeof(struct dnsproxy)); + dnsproxy_t *proxy = mm_alloc(self->mm, sizeof(*proxy)); if (proxy == NULL) { return KNOT_ENOMEM; } - memset(proxy, 0, sizeof(struct dnsproxy)); conf_val_t val = conf_mod_get(self->config, MOD_REMOTE, self->id); proxy->remote = conf_remote(self->config, &val, 0); + val = conf_mod_get(self->config, MOD_TIMEOUT, self->id); + proxy->timeout = conf_int(&val); + val = conf_mod_get(self->config, MOD_CATCH_NXDOMAIN, self->id); proxy->catch_nxdomain = conf_bool(&val); self->ctx = proxy; - return query_plan_step(plan, QPLAN_END, dnsproxy_fwd, self->ctx); + return query_module_step(self, QPLAN_END, dnsproxy_fwd); } -int dnsproxy_unload(struct query_module *self) +void dnsproxy_unload(struct query_module *self) { - if (self == NULL) { - return KNOT_EINVAL; - } + assert(self); - mm_free(self->mm, self->ctx); - return KNOT_EOK; + dnsproxy_t *ctx = self->ctx; + + mm_free(self->mm, ctx); } diff --git a/src/knot/modules/dnsproxy.h b/src/knot/modules/dnsproxy/dnsproxy.h similarity index 74% rename from src/knot/modules/dnsproxy.h rename to src/knot/modules/dnsproxy/dnsproxy.h index 8a6e675420489a4e1861087a25a09fb4be4468d8..b2b49d10755705928e560c28cd3e27f73082ecc6 100644 --- a/src/knot/modules/dnsproxy.h +++ b/src/knot/modules/dnsproxy/dnsproxy.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,19 +14,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*! - * \file - * - * \brief DNS proxy module - * - * Accepted configurations: - * * "<address>" - * * Module forwards all unsatisfied queries to the specified server in * order to solve them, and then sends the response back, i.e. a tiny * DNS proxy. - * - * \addtogroup query_processing - * @{ */ #pragma once @@ -39,8 +29,5 @@ extern const yp_item_t scheme_mod_dnsproxy[]; int check_mod_dnsproxy(conf_check_t *args); /*! \brief Module interface. */ -int dnsproxy_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone); -int dnsproxy_unload(struct query_module *self); - -/*! @} */ +int dnsproxy_load(struct query_module *self); +void dnsproxy_unload(struct query_module *self); diff --git a/src/knot/modules/dnstap.c b/src/knot/modules/dnstap/dnstap.c similarity index 87% rename from src/knot/modules/dnstap.c rename to src/knot/modules/dnstap/dnstap.c index 796a9a5cf8af6315d0dac56e4c0e5da6e85be810..8efd66a4bf7d22e0a6e05ad9290a79dfecf8106c 100644 --- a/src/knot/modules/dnstap.c +++ b/src/knot/modules/dnstap/dnstap.c @@ -16,16 +16,13 @@ #include <sys/stat.h> -#include "knot/common/log.h" -#include "knot/modules/dnstap.h" -#include "knot/nameserver/process_query.h" +#include "contrib/dnstap/dnstap.h" #include "contrib/dnstap/dnstap.pb-c.h" -#include "contrib/dnstap/writer.h" #include "contrib/dnstap/message.h" -#include "contrib/dnstap/dnstap.h" +#include "contrib/dnstap/writer.h" #include "contrib/mempattern.h" #include "contrib/time.h" -#include "libknot/libknot.h" +#include "knot/modules/dnstap/dnstap.h" /* Module configuration scheme. */ #define MOD_SINK "\x04""sink" @@ -68,11 +65,13 @@ typedef struct { static int log_message(int state, const knot_pkt_t *pkt, struct query_data *qdata, dnstap_ctx_t *ctx) { - if (pkt == NULL || qdata == NULL || ctx == NULL) { - return KNOT_STATE_FAIL; + assert(pkt && qdata && ctx); + + /* Skip empty packet. */ + if (pkt->size == 0) { + return state; } - int ret = KNOT_ERROR; struct fstrm_iothr_queue *ioq = fstrm_iothr_get_input_queue_idx(ctx->iothread, qdata->param->thread_id); @@ -94,17 +93,17 @@ static int log_message(int state, const knot_pkt_t *pkt, struct query_data *qdat /* Create a dnstap message. */ Dnstap__Message msg; - ret = dt_message_fill(&msg, msgtype, - (const struct sockaddr *)qdata->param->remote, - NULL, /* todo: fill me! */ - protocol, - pkt->wire, pkt->size, &tv, &tv); + int ret = dt_message_fill(&msg, msgtype, + (const struct sockaddr *)qdata->param->remote, + NULL, /* todo: fill me! */ + protocol, pkt->wire, pkt->size, &tv, &tv); if (ret != KNOT_EOK) { - return KNOT_STATE_FAIL; + return state; } + Dnstap__Dnstap dnstap = DNSTAP__DNSTAP__INIT; dnstap.type = DNSTAP__DNSTAP__TYPE__MESSAGE; - dnstap.message = (Dnstap__Message *)&msg; + dnstap.message = &msg; /* Set message version and identity. */ if (ctx->identity_len > 0) { @@ -123,7 +122,7 @@ static int log_message(int state, const knot_pkt_t *pkt, struct query_data *qdat size_t size = 0; dt_pack(&dnstap, &frame, &size); if (frame == NULL) { - return KNOT_STATE_FAIL; + return state; } /* Submit a request. */ @@ -131,7 +130,7 @@ static int log_message(int state, const knot_pkt_t *pkt, struct query_data *qdat fstrm_free_wrapper, NULL); if (res != fstrm_res_success) { free(frame); - state = KNOT_STATE_FAIL; + return state; } return state; @@ -141,9 +140,7 @@ static int log_message(int state, const knot_pkt_t *pkt, struct query_data *qdat static int dnstap_message_log_query(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) { - if (qdata == NULL) { - return KNOT_STATE_FAIL; - } + assert(qdata); return log_message(state, qdata->query, qdata, ctx); } @@ -223,12 +220,9 @@ static struct fstrm_writer* dnstap_writer(const char *path) return dnstap_file_writer(path); } -int dnstap_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone) +int dnstap_load(struct query_module *self) { - if (plan == NULL || self == NULL) { - return KNOT_EINVAL; - } + assert(self); /* Create dnstap context. */ dnstap_ctx_t *ctx = mm_alloc(self->mm, sizeof(*ctx)); @@ -292,10 +286,10 @@ int dnstap_load(struct query_plan *plan, struct query_module *self, /* Hook to the query plan. */ if (log_queries) { - query_plan_step(plan, QPLAN_BEGIN, dnstap_message_log_query, self->ctx); + query_module_step(self, QPLAN_BEGIN, dnstap_message_log_query); } if (log_responses) { - query_plan_step(plan, QPLAN_END, dnstap_message_log_response, self->ctx); + query_module_step(self, QPLAN_END, dnstap_message_log_response); } return KNOT_EOK; @@ -309,11 +303,9 @@ fail: return KNOT_ENOMEM; } -int dnstap_unload(struct query_module *self) +void dnstap_unload(struct query_module *self) { - if (self == NULL) { - return KNOT_EINVAL; - } + assert(self); dnstap_ctx_t *ctx = self->ctx; @@ -321,6 +313,4 @@ int dnstap_unload(struct query_module *self) free(ctx->identity); free(ctx->version); mm_free(self->mm, ctx); - - return KNOT_EOK; } diff --git a/src/knot/modules/dnstap.h b/src/knot/modules/dnstap/dnstap.h similarity index 75% rename from src/knot/modules/dnstap.h rename to src/knot/modules/dnstap/dnstap.h index 25df3c1dfc68e645718c171512e0cb73b74010d6..5873c8050bda16c3c5d63268299209e6827cf7ea 100644 --- a/src/knot/modules/dnstap.h +++ b/src/knot/modules/dnstap/dnstap.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -13,12 +13,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/*! - * \file - * - * \addtogroup query_processing - * @{ - */ #pragma once @@ -30,8 +24,5 @@ extern const yp_item_t scheme_mod_dnstap[]; int check_mod_dnstap(conf_check_t *args); /*! \brief Module interface. */ -int dnstap_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone); -int dnstap_unload(struct query_module *self); - -/*! @} */ +int dnstap_load(struct query_module *self); +void dnstap_unload(struct query_module *self); diff --git a/src/knot/modules/noudp.c b/src/knot/modules/noudp/noudp.c similarity index 78% rename from src/knot/modules/noudp.c rename to src/knot/modules/noudp/noudp.c index 8c4cb069f48c972463910e3893557e960111ff49..706fe7d2faec5cb7fc3f206846ca5455fab732fe 100644 --- a/src/knot/modules/noudp.c +++ b/src/knot/modules/noudp/noudp.c @@ -14,8 +14,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "knot/modules/noudp.h" -#include "knot/nameserver/process_query.h" +#include "knot/modules/noudp/noudp.h" const yp_item_t scheme_mod_noudp[] = { { C_ID, YP_TSTR, YP_VNONE }, @@ -29,6 +28,8 @@ static bool is_udp(struct query_data *qdata) int noudp_begin(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) { + assert(pkt && qdata); + if (is_udp(qdata)) { knot_wire_set_tc(pkt->wire); return KNOT_STATE_DONE; @@ -37,15 +38,14 @@ int noudp_begin(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) return state; } -int noudp_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone) +int noudp_load(struct query_module *self) { - query_plan_step(plan, QPLAN_BEGIN, noudp_begin, NULL); + query_module_step(self, QPLAN_BEGIN, noudp_begin); return KNOT_EOK; } -int noudp_unload(struct query_module *self) +void noudp_unload(struct query_module *self) { - return KNOT_EOK; + return; } diff --git a/src/knot/modules/noudp.h b/src/knot/modules/noudp/noudp.h similarity index 84% rename from src/knot/modules/noudp.h rename to src/knot/modules/noudp/noudp.h index 02242e00519266779bda77ea25940035b5221e4f..a2c3681c7534ddff54271ae05a19c58b73a66b06 100644 --- a/src/knot/modules/noudp.h +++ b/src/knot/modules/noudp/noudp.h @@ -22,7 +22,5 @@ extern const yp_item_t scheme_mod_noudp[]; -int noudp_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone); - -int noudp_unload(struct query_module *self); +int noudp_load(struct query_module *self); +void noudp_unload(struct query_module *self); diff --git a/src/knot/modules/online_sign/module.c b/src/knot/modules/online_sign/online_sign.c similarity index 77% rename from src/knot/modules/online_sign/module.c rename to src/knot/modules/online_sign/online_sign.c index c7a08cf0fa62973102cd0e0830f5ae20d219b6dd..6b03de852909a8ab5fdf82d13e8a416b3a34967f 100644 --- a/src/knot/modules/online_sign/module.c +++ b/src/knot/modules/online_sign/online_sign.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -15,22 +15,25 @@ */ #include <assert.h> +#include <stddef.h> -#include "knot/common/log.h" +#include "dnssec/error.h" -#include "knot/dnssec/rrset-sign.h" -#include "knot/modules/online_sign/module.h" +#include "contrib/string.h" +#include "knot/modules/online_sign/online_sign.h" #include "knot/modules/online_sign/nsec_next.h" -#include "knot/nameserver/internet.h" -#include "knot/nameserver/process_query.h" +#include "knot/dnssec/rrset-sign.h" +#include "knot/dnssec/zone-keys.h" +#include "knot/dnssec/zone-events.h" -#include "libknot/dname.h" -#include "contrib/string.h" +#define MOD_POLICY C_POLICY -#include "dnssec/error.h" -#include "dnssec/kasp.h" -#include "dnssec/sign.h" -#include "dnssec/nsec.h" +const yp_item_t scheme_mod_online_sign[] = { + { C_ID, YP_TSTR, YP_VNONE }, + { MOD_POLICY, YP_TREF, YP_VREF = { C_POLICY }, YP_FNONE, { check_ref_dflt } }, + { C_COMMENT, YP_TSTR, YP_VNONE }, + { NULL } +}; #define module_zone_error(zone, msg...) \ MODULE_ZONE_ERR(C_MOD_ONLINE_SIGN, zone, msg) @@ -72,16 +75,10 @@ static const uint16_t NSEC_FORCE_TYPES[] = { 0 }; -const yp_item_t scheme_mod_online_sign[] = { - { C_ID, YP_TSTR, YP_VNONE }, - { NULL } -}; - -struct online_sign_ctx { +typedef struct { dnssec_key_t *key; -}; - -typedef struct online_sign_ctx online_sign_ctx_t; + uint32_t rrsig_lifetime; +} online_sign_ctx_t; static bool want_dnssec(struct query_data *qdata) { @@ -255,7 +252,7 @@ static knot_rrset_t *sign_rrset(const knot_dname_t *owner, // compatible context dnssec_kasp_policy_t policy = { - .rrsig_lifetime = RRSIG_LIFETIME + .rrsig_lifetime = module_ctx->rrsig_lifetime }; kdnssec_ctx_t ksign_ctx = { @@ -429,63 +426,26 @@ static int synth_answer(int state, knot_pkt_t *pkt, struct query_data *qdata, vo return state; } -static int get_online_key(dnssec_key_t **key_ptr, const knot_dname_t *zone_name, - const char *kasp_path) +static int get_online_key(dnssec_key_t **key_ptr, struct query_module *module) { - dnssec_kasp_t *kasp = NULL; - dnssec_kasp_zone_t *zone = NULL; - dnssec_kasp_policy_t *policy = NULL; - dnssec_kasp_keystore_t *kasp_keystore = NULL; - dnssec_keystore_t *keystore = NULL; + kdnssec_ctx_t kctx = { 0 }; - // KASP database + conf_val_t policy = conf_mod_get(module->config, MOD_POLICY, module->id); - int r = dnssec_kasp_init_dir(&kasp); + int r = kdnssec_ctx_init(&kctx, module->zone, &policy, true); if (r != DNSSEC_EOK) { goto fail; } - r = dnssec_kasp_open(kasp, kasp_path); - if (r != DNSSEC_EOK) { - goto fail; - } - - // KASP zone + // Force Singe-Type signing scheme. + kctx.policy->singe_type_signing = true; - char *zone_str = knot_dname_to_str_alloc(zone_name); - if (!zone_str) { - r = KNOT_ENOMEM; - goto fail; - } - - r = dnssec_kasp_zone_load(kasp, zone_str, &zone); - free(zone_str); + r = knot_dnssec_sign_process_events(&kctx, module->zone); if (r != DNSSEC_EOK) { goto fail; } - // KASP keystore - - const char *policy_id = dnssec_kasp_zone_get_policy(zone); - r = dnssec_kasp_policy_load(kasp, policy_id, &policy); - if (r != DNSSEC_EOK) { - goto fail; - } - - r = dnssec_kasp_keystore_load(kasp, policy->keystore, &kasp_keystore); - if (r != DNSSEC_EOK) { - goto fail; - } - - r = dnssec_kasp_keystore_open(kasp, kasp_keystore->backend, - kasp_keystore->config, &keystore); - if (r != DNSSEC_EOK) { - goto fail; - } - - // DNSSEC key - - dnssec_list_t *list = dnssec_kasp_zone_get_keys(zone); + dnssec_list_t *list = dnssec_kasp_zone_get_keys(kctx.zone); assert(list); dnssec_item_t *item = dnssec_list_nth(list, 0); if (!item) { @@ -502,7 +462,7 @@ static int get_online_key(dnssec_key_t **key_ptr, const knot_dname_t *zone_name, goto fail; } - r = dnssec_key_import_keystore(key, keystore, kasp_key->id); + r = dnssec_key_import_keystore(key, kctx.keystore, kasp_key->id); if (r != DNSSEC_EOK) { dnssec_key_free(key); goto fail; @@ -511,11 +471,7 @@ static int get_online_key(dnssec_key_t **key_ptr, const knot_dname_t *zone_name, *key_ptr = key; fail: - dnssec_keystore_deinit(keystore); - dnssec_kasp_keystore_free(kasp_keystore); - dnssec_kasp_policy_free(policy); - dnssec_kasp_zone_free(zone); - dnssec_kasp_deinit(kasp); + kdnssec_ctx_deinit(&kctx); return r; } @@ -527,85 +483,70 @@ static void online_sign_ctx_free(online_sign_ctx_t *ctx) free(ctx); } -static int online_sign_ctx_new(online_sign_ctx_t **ctx_ptr, - const knot_dname_t *zone, const char *kasp_path) +static int online_sign_ctx_new(online_sign_ctx_t **ctx_ptr, struct query_module *module) { online_sign_ctx_t *ctx = calloc(1, sizeof(*ctx)); if (!ctx) { return KNOT_ENOMEM; } - int r = get_online_key(&ctx->key, zone, kasp_path); + int r = get_online_key(&ctx->key, module); if (r != KNOT_EOK) { online_sign_ctx_free(ctx); return r; } + ctx->rrsig_lifetime = RRSIG_LIFETIME; + conf_val_t policy = conf_mod_get(module->config, MOD_POLICY, module->id); + if (policy.code == KNOT_EOK) { + conf_val_t val = conf_id_get(module->config, C_POLICY, C_RRSIG_LIFETIME, &policy); + if (val.code == KNOT_EOK) { + ctx->rrsig_lifetime = conf_int(&val); + } + } + *ctx_ptr = ctx; return KNOT_EOK; } -static char *conf_kasp_path(const knot_dname_t *zone) -{ - conf_val_t val = { 0 }; - - val = conf_zone_get(conf(), C_STORAGE, zone); - char *storage = conf_abs_path(&val, NULL); - val = conf_zone_get(conf(), C_KASP_DB, zone); - char *kasp_db = conf_abs_path(&val, storage); - free(storage); - - return kasp_db; -} - -int online_sign_load(struct query_plan *plan, struct query_module *module, - const knot_dname_t *zone) +int online_sign_load(struct query_module *module) { - assert(plan); assert(module); - assert(zone); + assert(module->zone); - conf_val_t val = conf_zone_get(conf(), C_DNSSEC_SIGNING, zone); + conf_val_t val = conf_zone_get(module->config, C_DNSSEC_SIGNING, module->zone); if (conf_bool(&val)) { - module_zone_error(zone, "incompatible with automatic signing"); + module_zone_error(module->zone, "incompatible with automatic signing"); return KNOT_ENOTSUP; } - char *kasp_path = conf_kasp_path(zone); - if (!kasp_path) { - module_zone_error(zone, "KASP database is not configured"); - return KNOT_ERROR; - } - online_sign_ctx_t *ctx = NULL; - int r = online_sign_ctx_new(&ctx, zone, kasp_path); - free(kasp_path); + int r = online_sign_ctx_new(&ctx, module); if (r != KNOT_EOK) { - module_zone_error(zone, "failed to initialize signing key (%s)", + module_zone_error(module->zone, "failed to initialize signing key (%s)", dnssec_strerror(r)); return KNOT_ERROR; } - query_plan_step(plan, QPLAN_ANSWER, synth_answer, ctx); - query_plan_step(plan, QPLAN_ANSWER, sign_section, ctx); + module->ctx = ctx; - query_plan_step(plan, QPLAN_AUTHORITY, synth_authority, ctx); - query_plan_step(plan, QPLAN_AUTHORITY, sign_section, ctx); + query_module_step(module, QPLAN_ANSWER, synth_answer); + query_module_step(module, QPLAN_ANSWER, sign_section); - query_plan_step(plan, QPLAN_ADDITIONAL, sign_section, ctx); + query_module_step(module, QPLAN_AUTHORITY, synth_authority); + query_module_step(module, QPLAN_AUTHORITY, sign_section); - module->ctx = ctx; + query_module_step(module, QPLAN_ADDITIONAL, sign_section); return KNOT_EOK; } -int online_sign_unload(struct query_module *module) +void online_sign_unload(struct query_module *module) { assert(module); - online_sign_ctx_free(module->ctx); - module->ctx = NULL; + online_sign_ctx_t *ctx = module->ctx; - return KNOT_EOK; + online_sign_ctx_free(ctx); } diff --git a/src/knot/modules/online_sign/module.h b/src/knot/modules/online_sign/online_sign.h similarity index 77% rename from src/knot/modules/online_sign/module.h rename to src/knot/modules/online_sign/online_sign.h index 0cbdfb18be8db24ba3ec731f4d453a84385e6efd..c2b04dfaae8ce6353adec4d7d6f53eaa84a12cab 100644 --- a/src/knot/modules/online_sign/module.h +++ b/src/knot/modules/online_sign/online_sign.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -21,6 +21,5 @@ #define C_MOD_ONLINE_SIGN "\x0f""mod-online-sign" extern const yp_item_t scheme_mod_online_sign[]; -int online_sign_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone); -int online_sign_unload(struct query_module *self); +int online_sign_load(struct query_module *self); +void online_sign_unload(struct query_module *self); diff --git a/src/knot/modules/rosedb.c b/src/knot/modules/rosedb/rosedb.c similarity index 95% rename from src/knot/modules/rosedb.c rename to src/knot/modules/rosedb/rosedb.c index ebef9a3dfddc1f173b3e7d3d6c042ad1408fa016..6a1de5d8fc400d296f3427611a1ea589e59c2a75 100644 --- a/src/knot/modules/rosedb.c +++ b/src/knot/modules/rosedb/rosedb.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -17,13 +17,10 @@ #include <lmdb.h> #include "dnssec/random.h" -#include "knot/common/log.h" -#include "knot/modules/rosedb.h" -#include "knot/nameserver/process_query.h" -#include "libknot/libknot.h" #include "contrib/mempattern.h" #include "contrib/net.h" #include "contrib/wire.h" +#include "knot/modules/rosedb/rosedb.h" /* Module configuration scheme. */ #define MOD_DBDIR "\x05""dbdir" @@ -588,11 +585,10 @@ static int rosedb_query_txn(MDB_txn *txn, MDB_dbi dbi, knot_pkt_t *pkt, struct q return ret; } -static int rosedb_query(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) +static int rosedb_query(int state, knot_pkt_t *pkt, struct query_data *qdata, + void *ctx) { - if (pkt == NULL || qdata == NULL || ctx == NULL) { - return KNOT_STATE_FAIL; - } + assert(pkt && qdata && ctx); struct cache *cache = ctx; @@ -613,12 +609,9 @@ static int rosedb_query(int state, knot_pkt_t *pkt, struct query_data *qdata, vo return KNOT_STATE_DONE; } -int rosedb_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone) +int rosedb_load(struct query_module *self) { - if (plan == NULL || self == NULL) { - return KNOT_EINVAL; - } + assert(self); conf_val_t val = conf_mod_get(self->config, MOD_DBDIR, self->id); struct cache *cache = cache_open(conf_str(&val), 0, self->mm); @@ -629,15 +622,14 @@ int rosedb_load(struct query_plan *plan, struct query_module *self, self->ctx = cache; - return query_plan_step(plan, QPLAN_BEGIN, rosedb_query, self->ctx); + return query_module_step(self, QPLAN_BEGIN, rosedb_query); } -int rosedb_unload(struct query_module *self) +void rosedb_unload(struct query_module *self) { - if (self == NULL) { - return KNOT_EINVAL; - } + assert(self); - cache_close(self->ctx); - return KNOT_EOK; + struct cache *cache = self->ctx; + + cache_close(cache); } diff --git a/src/knot/modules/rosedb.h b/src/knot/modules/rosedb/rosedb.h similarity index 73% rename from src/knot/modules/rosedb.h rename to src/knot/modules/rosedb/rosedb.h index 2a74eed841b1c55541e8b5f2d29563deab485a34..eef7778d4d6563697b6f513d55b47017201c75cd 100644 --- a/src/knot/modules/rosedb.h +++ b/src/knot/modules/rosedb/rosedb.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,18 +14,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*! - * \file - * - * \brief Static resource records - * - * Accepted configurations: - * * "<path_to_database>" - * * The module provides a mean to override responses for certain queries before * the record is searched in the available zones. - * - * \addtogroup query_processing - * @{ */ #pragma once @@ -38,8 +28,5 @@ extern const yp_item_t scheme_mod_rosedb[]; int check_mod_rosedb(conf_check_t *args); /*! \brief Module interface. */ -int rosedb_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone); -int rosedb_unload(struct query_module *self); - -/*! @} */ +int rosedb_load(struct query_module *self); +void rosedb_unload(struct query_module *self); diff --git a/src/knot/modules/rosedb_tool.c b/src/knot/modules/rosedb/rosedb_tool.c similarity index 98% rename from src/knot/modules/rosedb_tool.c rename to src/knot/modules/rosedb/rosedb_tool.c index 1d0edd7bcd570c0e2976c5de5839a4dc9ed7a61d..86d41b020cd00698effbcb5ffd5e1645f963c517 100644 --- a/src/knot/modules/rosedb_tool.c +++ b/src/knot/modules/rosedb/rosedb_tool.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -19,10 +19,9 @@ #include <getopt.h> #include "contrib/getline.h" -#include "knot/modules/rosedb.c" -#include "zscanner/scanner.h" -#include "libknot/libknot.h" #include "contrib/string.h" +#include "zscanner/scanner.h" +#include "knot/modules/rosedb/rosedb.c" static int rosedb_add(struct cache *cache, MDB_txn *txn, int argc, char *argv[]); static int rosedb_del(struct cache *cache, MDB_txn *txn, int argc, char *argv[]); diff --git a/src/knot/server/rrl.c b/src/knot/modules/rrl/functions.c similarity index 91% rename from src/knot/server/rrl.c rename to src/knot/modules/rrl/functions.c index 27026f8a09a7500ca57d06a2378abbcb2816be32..b048a46efbd24d7fd0b56ceeb8d41cb64bb3c3bd 100644 --- a/src/knot/server/rrl.c +++ b/src/knot/modules/rrl/functions.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -17,13 +17,11 @@ #include <assert.h> #include <time.h> -#include "dnssec/random.h" -#include "knot/common/log.h" -#include "knot/server/rrl.h" -#include "knot/zone/zone.h" -#include "libknot/libknot.h" #include "contrib/murmurhash3/murmurhash3.h" #include "contrib/sockaddr.h" +#include "dnssec/random.h" +#include "knot/modules/rrl/functions.h" +#include "knot/common/log.h" /* Hopscotch defines. */ #define HOP_LEN (sizeof(unsigned)*8) @@ -33,7 +31,6 @@ #define RRL_V4_PREFIX ((uint32_t)0x00ffffff) /* /24 */ #define RRL_V6_PREFIX ((uint64_t)0x00ffffffffffffff) /* /56 */ /* Defaults */ -#define RRL_DEFAULT_RATE 100 #define RRL_CAPACITY 4 /* N seconds. */ #define RRL_SSTART 2 /* 1/Nth of the rate for slow start */ #define RRL_PSIZE_LARGE 1024 @@ -60,16 +57,16 @@ struct cls_name { }; static const struct cls_name rrl_cls_names[] = { - {CLS_NORMAL, "POSITIVE" }, - {CLS_ERROR, "ERROR" }, - {CLS_NXDOMAIN,"NXDOMAIN"}, - {CLS_EMPTY, "EMPTY"}, - {CLS_LARGE, "LARGE"}, - {CLS_WILDCARD,"WILDCARD"}, - {CLS_ANY, "ANY"}, - {CLS_DNSSEC, "DNSSEC"}, - {CLS_NULL, "NULL"}, - {CLS_NULL, NULL} + { CLS_NORMAL, "POSITIVE" }, + { CLS_ERROR, "ERROR" }, + { CLS_NXDOMAIN, "NXDOMAIN"}, + { CLS_EMPTY, "EMPTY"}, + { CLS_LARGE, "LARGE"}, + { CLS_WILDCARD, "WILDCARD"}, + { CLS_ANY, "ANY"}, + { CLS_DNSSEC, "DNSSEC"}, + { CLS_NULL, "NULL"}, + { CLS_NULL, NULL} }; static inline const char *rrl_clsstr(int code) @@ -134,15 +131,12 @@ static uint8_t rrl_clsid(rrl_req_t *p) return ret; } -static int rrl_clsname(char *dst, size_t maxlen, uint8_t cls, - rrl_req_t *req, const zone_t *zone) +static int rrl_clsname(char *dst, size_t maxlen, uint8_t cls, rrl_req_t *req, + const knot_dname_t *name) { - /* Fallback zone (for errors etc.) */ - const knot_dname_t *dn = (const knot_dname_t *)"\x00"; - - /* Found associated zone. */ - if (zone != NULL) { - dn = zone->name; + if (name == NULL) { + /* Fallback for errors etc. */ + name = (const knot_dname_t *)"\x00"; } switch (cls) { @@ -153,17 +147,17 @@ static int rrl_clsname(char *dst, size_t maxlen, uint8_t cls, default: /* Use QNAME */ if (req->query) { - dn = knot_pkt_qname(req->query); + name = knot_pkt_qname(req->query); } break; } /* Write to wire */ - return knot_dname_to_wire((uint8_t *)dst, dn, maxlen); + return knot_dname_to_wire((uint8_t *)dst, name, maxlen); } static int rrl_classify(char *dst, size_t maxlen, const struct sockaddr_storage *a, - rrl_req_t *p, const zone_t *z, uint32_t seed) + rrl_req_t *p, const knot_dname_t *z, uint32_t seed) { if (!dst || !p || !a || maxlen == 0) { return KNOT_EINVAL; @@ -295,7 +289,7 @@ static void rrl_log_state(const struct sockaddr_storage *ss, uint16_t flags, uin what = "enters"; } - log_notice("rate limiting, address '%s' class '%s' %s limiting", + log_notice("mod-rrl, address '%s' class '%s' %s limiting", addr_str, rrl_clsstr(cls), what); #endif } @@ -375,7 +369,7 @@ int rrl_setlocks(rrl_table_t *rrl, unsigned granularity) } rrl_item_t *rrl_hash(rrl_table_t *t, const struct sockaddr_storage *a, rrl_req_t *p, - const zone_t *zone, uint32_t stamp, int *lock) + const knot_dname_t *zone, uint32_t stamp, int *lock) { char buf[RRL_CLSBLK_MAXLEN]; int len = rrl_classify(buf, sizeof(buf), a, p, zone, t->seed); @@ -391,7 +385,8 @@ rrl_item_t *rrl_hash(rrl_table_t *t, const struct sockaddr_storage *a, rrl_req_t /* Find an exact match in <id, id + HOP_LEN). */ uint16_t *qname = (uint16_t *)(buf + sizeof(uint8_t) + sizeof(uint64_t)); rrl_item_t match = { - 0, *((uint64_t *)(buf + 1)), t->rate, /* hop, netblk, ntok */ + 0, *((uint64_t *)(buf + 1)), /* hop, netblk */ + t->rate * RRL_CAPACITY, /* ntok */ buf[0], RRL_BF_NULL, /* cls, flags */ hash((char *)(qname + 1), *qname), stamp /* qname, time */ }; @@ -437,7 +432,7 @@ rrl_item_t *rrl_hash(rrl_table_t *t, const struct sockaddr_storage *a, rrl_req_t } int rrl_query(rrl_table_t *rrl, const struct sockaddr_storage *a, rrl_req_t *req, - const zone_t *zone) + const knot_dname_t *zone) { if (!rrl || !req || !a) { return KNOT_EINVAL; diff --git a/src/knot/server/rrl.h b/src/knot/modules/rrl/functions.h similarity index 81% rename from src/knot/server/rrl.h rename to src/knot/modules/rrl/functions.h index 6d01ff0b0c70e77178a5c64a64776d404098bbca..a81fa02da59cae7a48d12aaba7e4f58a1b58a55b 100644 --- a/src/knot/server/rrl.h +++ b/src/knot/modules/rrl/functions.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -13,22 +13,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/*! - * \file rrl.h - * - * \author Marek Vavrusa <marek.vavusa@nic.cz> - * - * \brief Response-rate limiting API. - * - * \addtogroup network - * @{ - */ #pragma once #include <stdint.h> #include <pthread.h> #include <sys/socket.h> + +#include "libknot/dname.h" #include "libknot/packet/pkt.h" /* Defaults */ @@ -41,19 +33,17 @@ enum { RRL_WILDCARD = 1 << 1 /*!< Query to wildcard name. */ }; -struct zone; - /*! * \brief RRL hash bucket. */ -typedef struct rrl_item { +typedef struct { unsigned hop; /* Hop bitmap. */ uint64_t netblk; /* Prefix associated. */ - uint16_t ntok; /* Tokens available */ - uint8_t cls; /* Bucket class */ - uint8_t flags; /* Flags */ - uint32_t qname; /* imputed(QNAME) hash */ - uint32_t time; /* Timestamp */ + uint16_t ntok; /* Tokens available. */ + uint8_t cls; /* Bucket class. */ + uint8_t flags; /* Flags. */ + uint32_t qname; /* imputed(QNAME) hash. */ + uint32_t time; /* Timestamp. */ } rrl_item_t; /*! @@ -68,20 +58,20 @@ typedef struct rrl_item { * As of now lock K for bucket N is calculated as K = N % (num_buckets). */ -typedef struct rrl_table { - uint32_t rate; /* Configured RRL limit */ +typedef struct { + uint32_t rate; /* Configured RRL limit. */ uint32_t seed; /* Pseudorandom seed for hashing. */ pthread_mutex_t ll; - pthread_mutex_t *lk; /* Table locks. */ + pthread_mutex_t *lk; /* Table locks. */ unsigned lk_count; /* Table lock count (granularity). */ - size_t size; /* Number of buckets */ - rrl_item_t arr[]; /* Buckets */ + size_t size; /* Number of buckets. */ + rrl_item_t arr[]; /* Buckets. */ } rrl_table_t; /*! * \brief RRL request descriptor. */ -typedef struct rrl_req { +typedef struct { const uint8_t *w; uint16_t len; unsigned flags; @@ -128,13 +118,13 @@ int rrl_setlocks(rrl_table_t *rrl, unsigned granularity); * \param t RRL table. * \param a Source address. * \param p RRL request. - * \param zone Relate zone. + * \param zone Relate zone name. * \param stamp Timestamp (current time). * \param lock Held lock. * \return assigned bucket */ -rrl_item_t* rrl_hash(rrl_table_t *t, const struct sockaddr_storage *a, rrl_req_t *p, - const struct zone *zone, uint32_t stamp, int* lock); +rrl_item_t *rrl_hash(rrl_table_t *t, const struct sockaddr_storage *a, rrl_req_t *p, + const knot_dname_t *zone, uint32_t stamp, int *lock); /*! * \brief Query the RRL table for accept or deny, when the rate limit is reached. @@ -142,12 +132,12 @@ rrl_item_t* rrl_hash(rrl_table_t *t, const struct sockaddr_storage *a, rrl_req_t * \param rrl RRL table. * \param a Source address. * \param req RRL request (containing resp., flags and question). - * \param zone Zone related to the response (or NULL). + * \param zone Zone name related to the response (or NULL). * \retval KNOT_EOK if passed. * \retval KNOT_ELIMIT when the limit is reached. */ int rrl_query(rrl_table_t *rrl, const struct sockaddr_storage *a, rrl_req_t *req, - const struct zone *zone); + const knot_dname_t *zone); /*! * \brief Roll a dice whether answer slips or not. @@ -187,5 +177,3 @@ int rrl_lock(rrl_table_t *rrl, int lk_id); * \retval KNOT_ERROR */ int rrl_unlock(rrl_table_t *rrl, int lk_id); - -/*! @} */ diff --git a/src/knot/modules/rrl/rrl.c b/src/knot/modules/rrl/rrl.c new file mode 100644 index 0000000000000000000000000000000000000000..a511d3260171260d7bb465902e74cbeedfffdec8 --- /dev/null +++ b/src/knot/modules/rrl/rrl.c @@ -0,0 +1,228 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "contrib/sockaddr.h" +#include "contrib/mempattern.h" +#include "knot/modules/rrl/rrl.h" +#include "knot/modules/rrl/functions.h" + +/* Module configuration scheme. */ +#define MOD_RATE_LIMIT "\x0A""rate-limit" +#define MOD_SLIP "\x04""slip" +#define MOD_TBL_SIZE "\x0A""table-size" +#define MOD_WHITELIST "\x09""whitelist" + +const yp_item_t scheme_mod_rrl[] = { + { C_ID, YP_TSTR, YP_VNONE }, + { MOD_RATE_LIMIT, YP_TINT, YP_VINT = { 1, INT32_MAX } }, + { MOD_SLIP, YP_TINT, YP_VINT = { 0, RRL_SLIP_MAX, 1 } }, + { MOD_TBL_SIZE, YP_TINT, YP_VINT = { 1, INT32_MAX, 393241 } }, + { MOD_WHITELIST, YP_TDATA, YP_VDATA = { 0, NULL, addr_range_to_bin, + addr_range_to_txt }, YP_FMULTI }, + { C_COMMENT, YP_TSTR, YP_VNONE }, + { NULL } +}; + +int check_mod_rrl(conf_check_t *args) +{ + conf_val_t rl = conf_rawid_get_txn(args->conf, args->txn, C_MOD_RRL, + MOD_RATE_LIMIT, args->id, args->id_len); + if (rl.code != KNOT_EOK) { + args->err_str = "no rate limit specified"; + return KNOT_EINVAL; + } + + return KNOT_EOK; +} + +typedef struct { + mod_ctr_t *counters; + rrl_table_t *rrl; + int slip; + conf_val_t whitelist; +} rrl_ctx_t; + +static const knot_dname_t *name_from_rrsig(const knot_rrset_t *rr) +{ + if (rr == NULL) { + return NULL; + } + if (rr->type != KNOT_RRTYPE_RRSIG) { + return NULL; + } + + // This is a signature. + return knot_rrsig_signer_name(&rr->rrs, 0); +} + +static const knot_dname_t *name_from_authrr(const knot_rrset_t *rr) +{ + if (rr == NULL) { + return NULL; + } + if (rr->type != KNOT_RRTYPE_NS && rr->type != KNOT_RRTYPE_SOA) { + return NULL; + } + + // This is a valid authority RR. + return rr->owner; +} + +static int ratelimit_apply(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) +{ + assert(pkt && qdata && ctx); + + rrl_ctx_t *context = ctx; + + // Rate limit is not applied to TCP connections. + if (!(qdata->param->proc_flags & NS_QUERY_LIMIT_SIZE)) { + return state; + } + + // Exempt clients. + if (conf_addr_range_match(&context->whitelist, qdata->param->remote)) { + return state; + } + + rrl_req_t req = { + .w = pkt->wire, + .query = qdata->query + }; + + if (!EMPTY_LIST(qdata->wildcards)) { + req.flags = RRL_WILDCARD; + } + + // Take the zone name if known. + const knot_dname_t *zone_name = (qdata->zone != NULL) ? qdata->zone->name : NULL; + + // Take the signer name as zone name if there is an RRSIG. + if (zone_name == NULL) { + const knot_pktsection_t *ans = knot_pkt_section(pkt, KNOT_ANSWER); + for (int i = 0; i < ans->count; i++) { + zone_name = name_from_rrsig(knot_pkt_rr(ans, i)); + if (zone_name != NULL) { + break; + } + } + } + + // Take the NS or SOA owner name if there is no RRSIG. + if (zone_name == NULL) { + const knot_pktsection_t *auth = knot_pkt_section(pkt, KNOT_AUTHORITY); + for (int i = 0; i < auth->count; i++) { + zone_name = name_from_authrr(knot_pkt_rr(auth, i)); + if (zone_name != NULL) { + break; + } + } + } + + if (rrl_query(context->rrl, qdata->param->remote, &req, zone_name) == KNOT_EOK) { + // Rate limiting not applied. + return state; + } + + if (context->slip > 0 && rrl_slip_roll(context->slip)) { + // Slip the answer. + mod_ctr_incr(context->counters, 0, 1); + qdata->err_truncated = true; + return KNOT_STATE_FAIL; + } else { + // Drop the answer. + mod_ctr_incr(context->counters, 1, 1); + pkt->size = 0; + return KNOT_STATE_DONE; + } +} + +static void ctx_free(knot_mm_t *mm, rrl_ctx_t *ctx) +{ + assert(ctx); + + rrl_destroy(ctx->rrl); + mm_free(mm, ctx); +} + +int rrl_load(struct query_module *self) +{ + assert(self); + + // Create RRL context. + rrl_ctx_t *ctx = mm_alloc(self->mm, sizeof(rrl_ctx_t)); + if (ctx == NULL) { + return KNOT_ENOMEM; + } + memset(ctx, 0, sizeof(*ctx)); + + // Create table. + conf_val_t val = conf_mod_get(self->config, MOD_TBL_SIZE, self->id); + ctx->rrl = rrl_create(conf_int(&val)); + if (ctx->rrl == NULL) { + ctx_free(self->mm, ctx); + return KNOT_ENOMEM; + } + + // Set locks. + int ret = rrl_setlocks(ctx->rrl, RRL_LOCK_GRANULARITY); + if (ret != KNOT_EOK) { + ctx_free(self->mm, ctx); + return ret; + } + + // Set rate limit. + val = conf_mod_get(self->config, MOD_RATE_LIMIT, self->id); + ret = rrl_setrate(ctx->rrl, conf_int(&val)); + if (ret != KNOT_EOK) { + ctx_free(self->mm, ctx); + return ret; + } + + // Get whitelist. + val = conf_mod_get(self->config, MOD_WHITELIST, self->id); + ctx->whitelist = val; + + // Get slip. + val = conf_mod_get(self->config, MOD_SLIP, self->id); + ctx->slip = conf_int(&val); + + // Set up statistics counters. + ret = mod_stats_add(self, "slipped", 1, NULL); + if (ret != KNOT_EOK) { + ctx_free(self->mm, ctx); + return ret; + } + + ret = mod_stats_add(self, "dropped", 1, NULL); + if (ret != KNOT_EOK) { + ctx_free(self->mm, ctx); + return ret; + } + + ctx->counters = self->stats; + self->ctx = ctx; + + return query_module_step(self, QPLAN_END, ratelimit_apply); +} + +void rrl_unload(struct query_module *self) +{ + assert(self); + + rrl_ctx_t *ctx = self->ctx; + + ctx_free(self->mm, ctx); +} diff --git a/src/knot/modules/rrl/rrl.h b/src/knot/modules/rrl/rrl.h new file mode 100644 index 0000000000000000000000000000000000000000..47987f723ec6daa84a11d3fa0a082b1a500768ed --- /dev/null +++ b/src/knot/modules/rrl/rrl.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "knot/nameserver/query_module.h" + +/*! \brief Module scheme. */ +#define C_MOD_RRL "\x07""mod-rrl" +extern const yp_item_t scheme_mod_rrl[]; +int check_mod_rrl(conf_check_t *args); + +/*! \brief Module interface. */ +int rrl_load(struct query_module *self); +void rrl_unload(struct query_module *self); diff --git a/src/knot/modules/stats/stats.c b/src/knot/modules/stats/stats.c new file mode 100644 index 0000000000000000000000000000000000000000..0b52de330c193f039f7126bda0d0f9520d036231 --- /dev/null +++ b/src/knot/modules/stats/stats.c @@ -0,0 +1,566 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "contrib/mempattern.h" +#include "libknot/libknot.h" +#include "knot/modules/stats/stats.h" +#include "knot/nameserver/xfr.h" + +#define MOD_PROTOCOL "\x10""request-protocol" +#define MOD_OPERATION "\x10""server-operation" +#define MOD_REQ_BYTES "\x0D""request-bytes" +#define MOD_RESP_BYTES "\x0E""response-bytes" +#define MOD_EDNS "\x0D""edns-presence" +#define MOD_FLAG "\x0D""flag-presence" +#define MOD_RCODE "\x0D""response-code" +#define MOD_NODATA "\x0C""reply-nodata" +#define MOD_QTYPE "\x0A""query-type" +#define MOD_QSIZE "\x0A""query-size" +#define MOD_RSIZE "\x0A""reply-size" + +#define OTHER "other" + +const yp_item_t scheme_mod_stats[] = { + { C_ID, YP_TSTR, YP_VNONE }, + { MOD_PROTOCOL, YP_TBOOL, YP_VBOOL = { true } }, + { MOD_OPERATION, YP_TBOOL, YP_VBOOL = { true } }, + { MOD_REQ_BYTES, YP_TBOOL, YP_VBOOL = { true } }, + { MOD_RESP_BYTES, YP_TBOOL, YP_VBOOL = { true } }, + { MOD_EDNS, YP_TBOOL, YP_VNONE }, + { MOD_FLAG, YP_TBOOL, YP_VNONE }, + { MOD_RCODE, YP_TBOOL, YP_VBOOL = { true } }, + { MOD_NODATA, YP_TBOOL, YP_VNONE }, + { MOD_QTYPE, YP_TBOOL, YP_VNONE }, + { MOD_QSIZE, YP_TBOOL, YP_VNONE }, + { MOD_RSIZE, YP_TBOOL, YP_VNONE }, + { C_COMMENT, YP_TSTR, YP_VNONE }, + { NULL } +}; + +enum { + CTR_PROTOCOL, + CTR_OPERATION, + CTR_REQ_BYTES, + CTR_RESP_BYTES, + CTR_EDNS, + CTR_FLAG, + CTR_RCODE, + CTR_NODATA, + CTR_QTYPE, + CTR_QSIZE, + CTR_RSIZE, +}; + +typedef struct { + mod_ctr_t *counters; + bool protocol; + bool operation; + bool req_bytes; + bool resp_bytes; + bool edns; + bool flag; + bool rcode; + bool nodata; + bool qtype; + bool qsize; + bool rsize; +} stats_t; + +typedef struct { + yp_name_t *conf_name; + size_t conf_offset; + uint32_t count; + mod_idx_to_str_f fcn; +} ctr_desc_t; + +enum { + OPERATION_QUERY = 0, + OPERATION_UPDATE, + OPERATION_NOTIFY, + OPERATION_AXFR, + OPERATION_IXFR, + OPERATION_INVALID, + OPERATION__COUNT +}; + +static char *operation_to_str(uint32_t idx, uint32_t count) +{ + switch (idx) { + case OPERATION_QUERY: return strdup("query"); + case OPERATION_UPDATE: return strdup("update"); + case OPERATION_NOTIFY: return strdup("notify"); + case OPERATION_AXFR: return strdup("axfr"); + case OPERATION_IXFR: return strdup("ixfr"); + case OPERATION_INVALID: return strdup("invalid"); + default: assert(0); return NULL; + } +} + +enum { + PROTOCOL_UDP4 = 0, + PROTOCOL_TCP4, + PROTOCOL_UDP6, + PROTOCOL_TCP6, + PROTOCOL__COUNT +}; + +static char *protocol_to_str(uint32_t idx, uint32_t count) +{ + switch (idx) { + case PROTOCOL_UDP4: return strdup("udp4"); + case PROTOCOL_TCP4: return strdup("tcp4"); + case PROTOCOL_UDP6: return strdup("udp6"); + case PROTOCOL_TCP6: return strdup("tcp6"); + default: assert(0); return NULL; + } +} + +enum { + REQ_BYTES_QUERY = 0, + REQ_BYTES_UPDATE, + REQ_BYTES_OTHER, + REQ_BYTES__COUNT +}; + +static char *req_bytes_to_str(uint32_t idx, uint32_t count) +{ + switch (idx) { + case REQ_BYTES_QUERY: return strdup("query"); + case REQ_BYTES_UPDATE: return strdup("update"); + case REQ_BYTES_OTHER: return strdup(OTHER); + default: assert(0); return NULL; + } +} + +enum { + RESP_BYTES_REPLY = 0, + RESP_BYTES_TRANSFER, + RESP_BYTES_OTHER, + RESP_BYTES__COUNT +}; + +static char *resp_bytes_to_str(uint32_t idx, uint32_t count) +{ + switch (idx) { + case RESP_BYTES_REPLY: return strdup("reply"); + case RESP_BYTES_TRANSFER: return strdup("transfer"); + case RESP_BYTES_OTHER: return strdup(OTHER); + default: assert(0); return NULL; + } +} + +enum { + EDNS_REQ = 0, + EDNS_RESP, + EDNS__COUNT +}; + +static char *edns_to_str(uint32_t idx, uint32_t count) +{ + switch (idx) { + case EDNS_REQ: return strdup("request"); + case EDNS_RESP: return strdup("response"); + default: assert(0); return NULL; + } +} + +enum { + FLAG_DO = 0, + FLAG_TC, + FLAG__COUNT +}; + +static char *flag_to_str(uint32_t idx, uint32_t count) +{ + switch (idx) { + case FLAG_TC: return strdup("TC"); + case FLAG_DO: return strdup("DO"); + default: assert(0); return NULL; + } +} + +enum { + NODATA_A = 0, + NODATA_AAAA, + NODATA_OTHER, + NODATA__COUNT +}; + +static char *nodata_to_str(uint32_t idx, uint32_t count) +{ + switch (idx) { + case NODATA_A: return strdup("A"); + case NODATA_AAAA: return strdup("AAAA"); + case NODATA_OTHER: return strdup(OTHER); + default: assert(0); return NULL; + } +} + +#define RCODE_BADSIG 15 // Unassigned code internally used for BADSIG. +#define RCODE_OTHER (KNOT_RCODE_BADCOOKIE + 1) // Other RCODES. + +static char *rcode_to_str(uint32_t idx, uint32_t count) +{ + const knot_lookup_t *rcode = NULL; + + switch (idx) { + case RCODE_BADSIG: + rcode = knot_lookup_by_id(knot_tsig_rcode_names, KNOT_RCODE_BADSIG); + break; + case RCODE_OTHER: + return strdup(OTHER); + default: + rcode = knot_lookup_by_id(knot_rcode_names, idx); + break; + } + + if (rcode != NULL) { + return strdup(rcode->name); + } else { + return NULL; + } +} + +enum { + QTYPE_OTHER = 0, + QTYPE_MIN1 = 1, + QTYPE_MAX1 = 65, + QTYPE_MIN2 = 99, + QTYPE_MAX2 = 110, + QTYPE_MIN3 = 255, + QTYPE_MAX3 = 260, + QTYPE_SHIFT2 = QTYPE_MIN2 - QTYPE_MAX1 - 1, + QTYPE_SHIFT3 = QTYPE_SHIFT2 + QTYPE_MIN3 - QTYPE_MAX2 - 1, + QTYPE__COUNT = QTYPE_MAX3 - QTYPE_SHIFT3 + 1 +}; + +static char *qtype_to_str(uint32_t idx, uint32_t count) +{ + if (idx == QTYPE_OTHER) { + return strdup(OTHER); + } + + uint16_t qtype; + + if (idx <= QTYPE_MAX1) { + qtype = idx; + assert(qtype >= QTYPE_MIN1 && qtype <= QTYPE_MAX1); + } else if (idx <= QTYPE_MAX2 - QTYPE_SHIFT2) { + qtype = idx + QTYPE_SHIFT2; + assert(qtype >= QTYPE_MIN2 && qtype <= QTYPE_MAX2); + } else { + qtype = idx + QTYPE_SHIFT3; + assert(qtype >= QTYPE_MIN3 && qtype <= QTYPE_MAX3); + } + + char str[32]; + if (knot_rrtype_to_string(qtype, str, sizeof(str)) < 0) { + return NULL; + } else { + return strdup(str); + } +} + +#define BUCKET_SIZE 16 + +static char *size_to_str(uint32_t idx, uint32_t count) +{ + char str[16]; + + int ret; + if (idx < count - 1) { + ret = snprintf(str, sizeof(str), "%u-%u", idx * BUCKET_SIZE, + (idx + 1) * BUCKET_SIZE - 1); + } else { + ret = snprintf(str, sizeof(str), "%u-65535", idx * BUCKET_SIZE); + } + + if (ret <= 0 || (size_t)ret >= sizeof(str)) { + return NULL; + } else { + return strdup(str); + } +} + +static char *qsize_to_str(uint32_t idx, uint32_t count) { + return size_to_str(idx, count); +} + +static char *rsize_to_str(uint32_t idx, uint32_t count) { + return size_to_str(idx, count); +} + +static const ctr_desc_t ctr_descs[] = { + #define item(macro, name, count) \ + [CTR_##macro] = { MOD_##macro, offsetof(stats_t, name), (count), name##_to_str } + item(PROTOCOL, protocol, PROTOCOL__COUNT), + item(OPERATION, operation, OPERATION__COUNT), + item(REQ_BYTES, req_bytes, REQ_BYTES__COUNT), + item(RESP_BYTES, resp_bytes, RESP_BYTES__COUNT), + item(EDNS, edns, EDNS__COUNT), + item(FLAG, flag, FLAG__COUNT), + item(RCODE, rcode, RCODE_OTHER + 1), + item(NODATA, nodata, NODATA__COUNT), + item(QTYPE, qtype, QTYPE__COUNT), + item(QSIZE, qsize, 288 / BUCKET_SIZE + 1), + item(RSIZE, rsize, 4096 / BUCKET_SIZE + 1), + { NULL } +}; + +static int update_counters(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) +{ + assert(pkt && qdata && ctx); + + stats_t *stats = ctx; + + uint16_t operation; + unsigned xfr_packets = 0; + + // Get the server operation. + switch (qdata->packet_type) { + case KNOT_QUERY_NORMAL: + operation = OPERATION_QUERY; + break; + case KNOT_QUERY_UPDATE: + operation = OPERATION_UPDATE; + break; + case KNOT_QUERY_NOTIFY: + operation = OPERATION_NOTIFY; + break; + case KNOT_QUERY_AXFR: + operation = OPERATION_AXFR; + if (qdata->ext != NULL) { + xfr_packets = ((struct xfr_proc *)qdata->ext)->stats.messages; + } + break; + case KNOT_QUERY_IXFR: + operation = OPERATION_IXFR; + if (qdata->ext != NULL) { + xfr_packets = ((struct xfr_proc *)qdata->ext)->stats.messages; + } + break; + default: + operation = OPERATION_INVALID; + break; + } + + // Count request bytes. + if (stats->req_bytes) { + switch (operation) { + case OPERATION_QUERY: + mod_ctrs_incr(stats->counters, CTR_REQ_BYTES, + REQ_BYTES_QUERY, qdata->query->size); + break; + case OPERATION_UPDATE: + mod_ctrs_incr(stats->counters, CTR_REQ_BYTES, + REQ_BYTES_UPDATE, qdata->query->size); + break; + default: + if (xfr_packets <= 1) { + mod_ctrs_incr(stats->counters, CTR_REQ_BYTES, + REQ_BYTES_OTHER, qdata->query->size); + } + break; + } + } + + // Count response bytes. + if (stats->resp_bytes) { + switch (operation) { + case OPERATION_QUERY: + mod_ctrs_incr(stats->counters, CTR_RESP_BYTES, + RESP_BYTES_REPLY, pkt->size); + break; + case OPERATION_AXFR: + case OPERATION_IXFR: + mod_ctrs_incr(stats->counters, CTR_RESP_BYTES, + RESP_BYTES_TRANSFER, pkt->size); + break; + default: + mod_ctrs_incr(stats->counters, CTR_RESP_BYTES, + RESP_BYTES_OTHER, pkt->size); + break; + } + } + + // Get the extended response code. + uint16_t rcode = qdata->rcode; + if (qdata->rcode_tsig != KNOT_RCODE_NOERROR) { + rcode = qdata->rcode_tsig; + } + + // Count the response code. + if (stats->rcode && pkt->size > 0) { + if (xfr_packets <= 1 || rcode != KNOT_RCODE_NOERROR) { + if (xfr_packets > 1) { + assert(rcode != KNOT_RCODE_NOERROR); + // Ignore the leading XFR message NOERROR. + mod_ctrs_decr(stats->counters, CTR_RCODE, + KNOT_RCODE_NOERROR, 1); + } + + if (qdata->rcode_tsig == KNOT_RCODE_BADSIG) { + mod_ctrs_incr(stats->counters, CTR_RCODE, + RCODE_BADSIG, 1); + } else { + mod_ctrs_incr(stats->counters, CTR_RCODE, + rcode, 1); + } + } + } + + // Return if non-first transfer message. + if (xfr_packets > 1) { + return state; + } + + // Count the server opearation. + if (stats->operation) { + mod_ctrs_incr(stats->counters, CTR_OPERATION, operation, 1); + } + + // Count the request protocol. + if (stats->protocol) { + if (qdata->param->remote->ss_family == AF_INET) { + if (qdata->param->proc_flags & NS_QUERY_LIMIT_SIZE) { + mod_ctrs_incr(stats->counters, CTR_PROTOCOL, + PROTOCOL_UDP4, 1); + } else { + mod_ctrs_incr(stats->counters, CTR_PROTOCOL, + PROTOCOL_TCP4, 1); + } + } else { + if (qdata->param->proc_flags & NS_QUERY_LIMIT_SIZE) { + mod_ctrs_incr(stats->counters, CTR_PROTOCOL, + PROTOCOL_UDP6, 1); + } else { + mod_ctrs_incr(stats->counters, CTR_PROTOCOL, + PROTOCOL_TCP6, 1); + } + } + } + + // Count EDNS occurrences. + if (stats->edns) { + if (qdata->query->opt_rr != NULL) { + mod_ctrs_incr(stats->counters, CTR_EDNS, EDNS_REQ, 1); + } + if (pkt->opt_rr != NULL && pkt->size > 0) { + mod_ctrs_incr(stats->counters, CTR_EDNS, EDNS_RESP, 1); + } + } + + // Count interesting message header flags. + if (stats->flag) { + if (pkt->size > 0 && knot_wire_get_tc(pkt->wire)) { + mod_ctrs_incr(stats->counters, CTR_FLAG, FLAG_TC, 1); + } + if (pkt->opt_rr != NULL && knot_edns_do(pkt->opt_rr)) { + mod_ctrs_incr(stats->counters, CTR_FLAG, FLAG_DO, 1); + } + } + + // Return if not query operation. + if (operation != OPERATION_QUERY) { + return state; + } + + // Count NODATA reply (RFC 2308, Section 2.2). + if (stats->nodata && rcode == KNOT_RCODE_NOERROR && pkt->size > 0 && + knot_wire_get_ancount(pkt->wire) == 0 && !knot_wire_get_tc(pkt->wire) && + (knot_wire_get_nscount(pkt->wire) == 0 || + knot_pkt_rr(knot_pkt_section(pkt, KNOT_AUTHORITY), 0)->type == KNOT_RRTYPE_SOA)) { + switch (knot_pkt_qtype(qdata->query)) { + case KNOT_RRTYPE_A: + mod_ctrs_incr(stats->counters, CTR_NODATA, NODATA_A, 1); + break; + case KNOT_RRTYPE_AAAA: + mod_ctrs_incr(stats->counters, CTR_NODATA, NODATA_AAAA, 1); + break; + default: + mod_ctrs_incr(stats->counters, CTR_NODATA, NODATA_OTHER, 1); + break; + } + } + + // Count the query type. + if (stats->qtype) { + uint16_t qtype = knot_pkt_qtype(qdata->query); + + uint16_t idx; + switch (qtype) { + case QTYPE_MIN1 ... QTYPE_MAX1: idx = qtype; break; + case QTYPE_MIN2 ... QTYPE_MAX2: idx = qtype - QTYPE_SHIFT2; break; + case QTYPE_MIN3 ... QTYPE_MAX3: idx = qtype - QTYPE_SHIFT3; break; + default: idx = QTYPE_OTHER; break; + } + + mod_ctrs_incr(stats->counters, CTR_QTYPE, idx, 1); + } + + // Count the query size. + if (stats->qsize) { + mod_ctrs_incr(stats->counters, CTR_QSIZE, + qdata->query->size / BUCKET_SIZE, 1); + } + + // Count the reply size. + if (stats->rsize && pkt->size > 0) { + mod_ctrs_incr(stats->counters, CTR_RSIZE, + pkt->size / BUCKET_SIZE, 1); + } + + return state; +} + +int stats_load(struct query_module *self) +{ + assert(self); + + stats_t *stats = mm_alloc(self->mm, sizeof(*stats)); + if (stats == NULL) { + return KNOT_ENOMEM; + } + + for (const ctr_desc_t *desc = ctr_descs; desc->conf_name != NULL; desc++) { + conf_val_t val = conf_mod_get(self->config, desc->conf_name, self->id); + bool enabled = conf_bool(&val); + + // Initialize corresponding configuration item. + *(bool *)((uint8_t *)stats + desc->conf_offset) = enabled; + + int ret = mod_stats_add(self, enabled ? desc->conf_name + 1 : NULL, + desc->count, desc->fcn); + if (ret != KNOT_EOK) { + mm_free(self->mm, stats); + return ret; + } + } + + stats->counters = self->stats; + self->ctx = stats; + + return query_module_step(self, QPLAN_END, update_counters); +} + +void stats_unload(struct query_module *self) +{ + assert(self); + + stats_t *stats = self->ctx; + + mm_free(self->mm, stats); +} diff --git a/src/knot/modules/stats/stats.h b/src/knot/modules/stats/stats.h new file mode 100644 index 0000000000000000000000000000000000000000..0755d854f41a00520467db9d711e3fd838d199bc --- /dev/null +++ b/src/knot/modules/stats/stats.h @@ -0,0 +1,27 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "knot/nameserver/query_module.h" + +/*! \brief Module scheme. */ +#define C_MOD_STATS "\x09""mod-stats" +extern const yp_item_t scheme_mod_stats[]; + +/*! \brief Module interface. */ +int stats_load(struct query_module *self); +void stats_unload(struct query_module *self); diff --git a/src/knot/modules/synth_record.c b/src/knot/modules/synth_record/synth_record.c similarity index 94% rename from src/knot/modules/synth_record.c rename to src/knot/modules/synth_record/synth_record.c index e3166f7c88672fa2eae0a15519b0ad7162d6aac2..62db19037b9891b04246079e5956c1a043381695 100644 --- a/src/knot/modules/synth_record.c +++ b/src/knot/modules/synth_record/synth_record.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,14 +14,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "knot/modules/synth_record.h" -#include "knot/nameserver/process_query.h" -#include "knot/nameserver/internet.h" -#include "knot/common/log.h" -#include "libknot/descriptor.h" #include "contrib/mempattern.h" #include "contrib/net.h" #include "contrib/sockaddr.h" +#include "knot/modules/synth_record/synth_record.h" /* Module configuration scheme. */ #define MOD_NET "\x07""network" @@ -389,11 +385,10 @@ static int template_match(int state, synth_template_t *tpl, knot_pkt_t *pkt, str return HIT; } -static int solve_synth_record(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx) +static int solve_synth_record(int state, knot_pkt_t *pkt, struct query_data *qdata, + void *ctx) { - if (pkt == NULL || qdata == NULL || ctx == NULL) { - return ERROR; - } + assert(pkt && qdata && ctx); /* Applicable when search in zone fails. */ if (state != MISS) { @@ -404,12 +399,9 @@ static int solve_synth_record(int state, knot_pkt_t *pkt, struct query_data *qda return template_match(state, (synth_template_t *)ctx, pkt, qdata); } -int synth_record_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone) +int synth_record_load(struct query_module *self) { - if (plan == NULL || self == NULL) { - return KNOT_EINVAL; - } + assert(self); /* Create synthesis template. */ struct synth_template *tpl = mm_alloc(self->mm, sizeof(struct synth_template)); @@ -448,18 +440,16 @@ int synth_record_load(struct query_plan *plan, struct query_module *self, self->ctx = tpl; - return query_plan_step(plan, QPLAN_ANSWER, solve_synth_record, self->ctx); + return query_module_step(self, QPLAN_ANSWER, solve_synth_record); } -int synth_record_unload(struct query_module *self) +void synth_record_unload(struct query_module *self) { - if (self == NULL) { - return KNOT_EINVAL; - } + assert(self); + + synth_template_t *tpl = self->ctx; - synth_template_t *tpl = (synth_template_t *)self->ctx; free(tpl->zone); free(tpl->prefix); mm_free(self->mm, tpl); - return KNOT_EOK; } diff --git a/src/knot/modules/synth_record.h b/src/knot/modules/synth_record/synth_record.h similarity index 68% rename from src/knot/modules/synth_record.h rename to src/knot/modules/synth_record/synth_record.h index 68784669d2a900c6d866b3d52925b4865dee6ece..adbe513afa475d676f296b071cd98333d11ae10b 100644 --- a/src/knot/modules/synth_record.h +++ b/src/knot/modules/synth_record/synth_record.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,19 +14,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*! - * \file - * - * \brief Synthetic records module - * - * Accepted configurations: - * * "forward <prefix> <ttl> <address>/<netblock>" - * * "reverse <prefix> <zone> <ttl> <address>/<netblock>" - * * Module synthetises forward/reverse records based on a template when * the queried record can't be found in the zone contents. - * - * \addtogroup query_processing - * @{ */ #pragma once @@ -39,8 +28,5 @@ extern const yp_item_t scheme_mod_synth_record[]; int check_mod_synth_record(conf_check_t *args); /*! \brief Module interface. */ -int synth_record_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone); -int synth_record_unload(struct query_module *self); - -/*! @} */ +int synth_record_load(struct query_module *self); +void synth_record_unload(struct query_module *self); diff --git a/src/knot/modules/whoami.c b/src/knot/modules/whoami/whoami.c similarity index 82% rename from src/knot/modules/whoami.c rename to src/knot/modules/whoami/whoami.c index c7c5dda5fea21f3c646d0a1f3292ea72b0775c65..27e75892246f79e3b06c453f36d4bb8294e8296d 100644 --- a/src/knot/modules/whoami.c +++ b/src/knot/modules/whoami/whoami.c @@ -14,10 +14,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "knot/modules/whoami.h" -#include "knot/nameserver/process_query.h" -#include "knot/nameserver/internet.h" -#include "libknot/libknot.h" +#include "knot/modules/whoami/whoami.h" const yp_item_t scheme_mod_whoami[] = { { C_ID, YP_TSTR, YP_VNONE }, @@ -30,13 +27,9 @@ static int whoami_query(int state, knot_pkt_t *pkt, struct query_data *qdata, vo knot_rrset_t *rrset = NULL; /* Sanity checks. */ - if (pkt == NULL || - qdata == NULL || - qdata->query == NULL || - qdata->param == NULL || qdata->param->remote == NULL || - qdata->zone == NULL || qdata->zone->name == NULL || - qdata->zone->contents == NULL || qdata->zone->contents->apex == NULL) - { + assert(pkt && qdata); + if (qdata->zone == NULL || qdata->zone->contents == NULL || + qdata->zone->contents->apex == NULL) { return ERROR; } @@ -129,26 +122,17 @@ static int whoami_query(int state, knot_pkt_t *pkt, struct query_data *qdata, vo return HIT; } -int whoami_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone) +int whoami_load(struct query_module *self) { - /* Sanity checks. */ - if (plan == NULL || self == NULL) { - return KNOT_EINVAL; - } + assert(self); /* Hook to the query plan. */ - query_plan_step(plan, QPLAN_ANSWER, whoami_query, NULL); + query_module_step(self, QPLAN_ANSWER, whoami_query); return KNOT_EOK; } -int whoami_unload(struct query_module *self) +void whoami_unload(struct query_module *self) { - /* Sanity check. */ - if (self == NULL) { - return KNOT_EINVAL; - } - - return KNOT_EOK; + return; } diff --git a/src/knot/modules/whoami.h b/src/knot/modules/whoami/whoami.h similarity index 77% rename from src/knot/modules/whoami.h rename to src/knot/modules/whoami/whoami.h index 5b922e76af9f84864fdaa822c771e49e17d08cb4..d450a9c7927b0c6a5cf74e44785da2679f91acb5 100644 --- a/src/knot/modules/whoami.h +++ b/src/knot/modules/whoami/whoami.h @@ -14,15 +14,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/*! - * \file - * - * \brief whoami module - * - * \addtogroup query_processing - * @{ - */ - #pragma once #include "knot/nameserver/query_module.h" @@ -32,8 +23,5 @@ extern const yp_item_t scheme_mod_whoami[]; /*! \brief Module interface. */ -int whoami_load(struct query_plan *plan, struct query_module *self, - const knot_dname_t *zone); -int whoami_unload(struct query_module *self); - -/*! @} */ +int whoami_load(struct query_module *self); +void whoami_unload(struct query_module *self); diff --git a/src/knot/nameserver/axfr.c b/src/knot/nameserver/axfr.c index f74b7d08015bdd75fc930550019ea926cd4bc22b..b13c58cc5480b3103634575a0dd921361dbd693a 100644 --- a/src/knot/nameserver/axfr.c +++ b/src/knot/nameserver/axfr.c @@ -78,7 +78,7 @@ static int axfr_process_node_tree(knot_pkt_t *pkt, const void *item, struct axfr_proc *axfr = (struct axfr_proc*)state; if (axfr->i == NULL) { - axfr->i = hattrie_iter_begin(item, true); + axfr->i = hattrie_iter_begin((hattrie_t *)item); } /* Put responses. */ diff --git a/src/knot/nameserver/internet.c b/src/knot/nameserver/internet.c index c91f71a6c39ae9a58b515c3429255d0c9e72d356..b6a5912733b32b8df6be5226d9023914cd6b83d5 100644 --- a/src/knot/nameserver/internet.c +++ b/src/knot/nameserver/internet.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -15,26 +15,14 @@ */ #include "libknot/libknot.h" -#include "libknot/descriptor.h" -#include "libknot/rrtype/rdname.h" -#include "libknot/rrtype/soa.h" #include "knot/common/log.h" -#include "knot/dnssec/rrset-sign.h" +#include "knot/query/query.h" #include "knot/nameserver/internet.h" #include "knot/nameserver/nsec_proofs.h" #include "knot/nameserver/process_query.h" -#include "knot/query/query.h" #include "knot/nameserver/query_module.h" #include "knot/zone/serial.h" -#include "knot/zone/zonedb.h" #include "contrib/mempattern.h" -#include "contrib/sockaddr.h" - -/*! \brief Kind of additional record. */ -enum additional_kind { - ADDITIONAL_OPTIONAL = 0, - ADDITIONAL_MANDATORY, -}; /*! \brief Check if given node was already visited. */ static int wildcard_has_visited(struct query_data *qdata, const zone_node_t *node) @@ -134,47 +122,6 @@ static bool have_dnssec(struct query_data *qdata) zone_contents_is_signed(qdata->zone->contents); } -/*! \brief Synthesize RRSIG for given parameters, store in 'qdata' for later use */ -static int put_rrsig(const knot_dname_t *sig_owner, uint16_t type, - const knot_rrset_t *rrsigs, - knot_rrinfo_t *rrinfo, - struct query_data *qdata) -{ - knot_rdataset_t synth_rrs; - knot_rdataset_init(&synth_rrs); - int ret = knot_synth_rrsig(type, &rrsigs->rrs, &synth_rrs, qdata->mm); - if (ret == KNOT_ENOENT) { - // No signature - return KNOT_EOK; - } - if (ret != KNOT_EOK) { - return ret; - } - - /* Create rrsig info structure. */ - struct rrsig_info *info = mm_alloc(qdata->mm, sizeof(struct rrsig_info)); - if (info == NULL) { - knot_rdataset_clear(&synth_rrs, qdata->mm); - return KNOT_ENOMEM; - } - - /* Store RRSIG into info structure. */ - knot_dname_t *owner_copy = knot_dname_copy(sig_owner, qdata->mm); - if (owner_copy == NULL) { - mm_free(qdata->mm, info); - knot_rdataset_clear(&synth_rrs, qdata->mm); - return KNOT_ENOMEM; - } - knot_rrset_init(&info->synth_rrsig, owner_copy, rrsigs->type, rrsigs->rclass); - /* Store filtered signature. */ - info->synth_rrsig.rrs = synth_rrs; - - info->rrinfo = rrinfo; - add_tail(&qdata->rrsigs, &info->n); - - return KNOT_EOK; -} - /*! \brief This is a wildcard-covered or any other terminal node for QNAME. * e.g. positive answer. */ @@ -206,7 +153,8 @@ static int put_answer(knot_pkt_t *pkt, uint16_t type, struct query_data *qdata) } for (unsigned i = 0; i < qdata->node->rrset_count; ++i) { rrset = node_rrset_at(qdata->node, i); - ret = ns_put_rr(pkt, &rrset, NULL, compr_hint, 0, qdata); + ret = process_query_put_rr(pkt, qdata, &rrset, NULL, + compr_hint, 0); if (ret != KNOT_EOK) { break; } @@ -217,7 +165,8 @@ static int put_answer(knot_pkt_t *pkt, uint16_t type, struct query_data *qdata) rrset = node_rrset(qdata->node, type); if (!knot_rrset_empty(&rrset)) { knot_rrset_t rrsigs = node_rrset(qdata->node, KNOT_RRTYPE_RRSIG); - ret = ns_put_rr(pkt, &rrset, &rrsigs, compr_hint, 0, qdata); + ret = process_query_put_rr(pkt, qdata, &rrset, &rrsigs, + compr_hint, 0); } break; } @@ -257,7 +206,8 @@ static int put_authority_soa(knot_pkt_t *pkt, struct query_data *qdata, soa_rrset = copy; } - ret = ns_put_rr(pkt, &soa_rrset, &rrsigs, KNOT_COMPR_HINT_NONE, flags, qdata); + ret = process_query_put_rr(pkt, qdata, &soa_rrset, &rrsigs, + KNOT_COMPR_HINT_NONE, flags); if (ret != KNOT_EOK && (flags & KNOT_PF_FREE)) { knot_rrset_clear(&soa_rrset, &pkt->mm); } @@ -276,52 +226,47 @@ static int put_delegation(knot_pkt_t *pkt, struct query_data *qdata) /* Insert NS record. */ knot_rrset_t rrset = node_rrset(qdata->node, KNOT_RRTYPE_NS); knot_rrset_t rrsigs = node_rrset(qdata->node, KNOT_RRTYPE_RRSIG); - return ns_put_rr(pkt, &rrset, &rrsigs, KNOT_COMPR_HINT_NONE, 0, qdata); + return process_query_put_rr(pkt, qdata, &rrset, &rrsigs, + KNOT_COMPR_HINT_NONE, 0); } /*! \brief Put additional records for given RR. */ static int put_additional(knot_pkt_t *pkt, const knot_rrset_t *rr, - struct query_data *qdata, knot_rrinfo_t *info, - int state, enum additional_kind kind) + struct query_data *qdata, knot_rrinfo_t *info, int state) { + if (rr->additional == NULL) { + return KNOT_EOK; + } + /* Valid types for ADDITIONALS insertion. */ /* \note Not resolving CNAMEs as MX/NS name must not be an alias. (RFC2181/10.3) */ - static const uint16_t ar_type_list[] = {KNOT_RRTYPE_A, KNOT_RRTYPE_AAAA}; + static const uint16_t ar_type_list[] = { KNOT_RRTYPE_A, KNOT_RRTYPE_AAAA }; static const int ar_type_count = 2; int ret = KNOT_EOK; - /* All RRs should have additional node cached or NULL. */ - for (uint16_t i = 0; i < rr->rrs.rr_count; i++) { - const zone_node_t *node = rr->additional[i]; - if (node == NULL) { - continue; - } - - bool is_notauth = (node->flags & (NODE_FLAGS_DELEG | NODE_FLAGS_NONAUTH)); - bool is_glue = is_notauth && - state == DELEG && rr->type == KNOT_RRTYPE_NS && - knot_dname_in(rr->owner, node->owner); + additional_t *additional = (additional_t *)rr->additional; - /* Non-authoritative node allowed only as a glue. */ - if (is_notauth && !is_glue) { - continue; - } + /* Iterate over the additionals. */ + for (uint16_t i = 0; i < additional->count; i++) { + glue_t *glue = &additional->glues[i]; + uint32_t flags = KNOT_PF_NULL; - /* Glue is required as per RFC 1034 Section 4.3.2 step 3b. */ - if (kind != (is_glue ? ADDITIONAL_MANDATORY : ADDITIONAL_OPTIONAL)) { - continue; + /* Optional glue doesn't cause truncation. (RFC 1034/4.3.2 step 3b). */ + if (state != DELEG || glue->optional) { + flags |= KNOT_PF_NOTRUNC; } - uint32_t flags = KNOT_PF_CHECKDUP | (is_glue ? 0 : KNOT_PF_NOTRUNC); - uint16_t hint = knot_pkt_compr_hint(info, KNOT_COMPR_HINT_RDATA + i); - knot_rrset_t rrsigs = node_rrset(node, KNOT_RRTYPE_RRSIG); + uint16_t hint = knot_pkt_compr_hint(info, KNOT_COMPR_HINT_RDATA + + glue->ns_pos); + knot_rrset_t rrsigs = node_rrset(glue->node, KNOT_RRTYPE_RRSIG); for (int k = 0; k < ar_type_count; ++k) { - knot_rrset_t additional = node_rrset(node, ar_type_list[k]); - if (knot_rrset_empty(&additional)) { + knot_rrset_t rrset = node_rrset(glue->node, ar_type_list[k]); + if (knot_rrset_empty(&rrset)) { continue; } - ret = ns_put_rr(pkt, &additional, &rrsigs, hint, flags, qdata); + ret = process_query_put_rr(pkt, qdata, &rrset, &rrsigs, + hint, flags); if (ret != KNOT_EOK) { break; } @@ -336,7 +281,6 @@ static int follow_cname(knot_pkt_t *pkt, uint16_t rrtype, struct query_data *qda const zone_node_t *cname_node = qdata->node; knot_rrset_t cname_rr = node_rrset(qdata->node, rrtype); knot_rrset_t rrsigs = node_rrset(qdata->node, KNOT_RRTYPE_RRSIG); - int ret = KNOT_EOK; assert(!knot_rrset_empty(&cname_rr)); @@ -345,7 +289,7 @@ static int follow_cname(knot_pkt_t *pkt, uint16_t rrtype, struct query_data *qda /* Now, try to put CNAME to answer. */ uint16_t rr_count_before = pkt->rrset_count; - ret = ns_put_rr(pkt, &cname_rr, &rrsigs, 0, flags, qdata); + int ret = process_query_put_rr(pkt, qdata, &cname_rr, &rrsigs, 0, flags); switch (ret) { case KNOT_EOK: break; case KNOT_ESPACE: return TRUNC; @@ -365,13 +309,13 @@ static int follow_cname(knot_pkt_t *pkt, uint16_t rrtype, struct query_data *qda return ERROR; } knot_rrset_t dname_rr = cname_rr; - ret = dname_cname_synth(&dname_rr, qdata->name, &cname_rr, - &pkt->mm); + int ret = dname_cname_synth(&dname_rr, qdata->name, &cname_rr, + &pkt->mm); if (ret != KNOT_EOK) { qdata->rcode = KNOT_RCODE_SERVFAIL; return ERROR; } - ret = ns_put_rr(pkt, &cname_rr, NULL, 0, KNOT_PF_FREE, qdata); + ret = process_query_put_rr(pkt, qdata, &cname_rr, NULL, 0, KNOT_PF_FREE); switch (ret) { case KNOT_EOK: break; case KNOT_ESPACE: return TRUNC; @@ -444,8 +388,8 @@ static int name_not_found(knot_pkt_t *pkt, struct query_data *qdata) if (qdata->encloser->flags & NODE_FLAGS_WILDCARD_CHILD) { /* Find wildcard child in the zone. */ const zone_node_t *wildcard_node = - zone_contents_find_wildcard_child( - qdata->zone->contents, qdata->encloser); + zone_contents_find_wildcard_child( + qdata->zone->contents, qdata->encloser); qdata->node = wildcard_node; assert(qdata->node != NULL); @@ -468,9 +412,16 @@ static int name_not_found(knot_pkt_t *pkt, struct query_data *qdata) return follow_cname(pkt, KNOT_RRTYPE_DNAME, qdata); } + /* Look up an authoritative encloser or its parent. */ + const zone_node_t *node = qdata->encloser; + while (node->rrset_count == 0 || node->flags & NODE_FLAGS_NONAUTH) { + node = node->parent; + assert(node); + } + /* Name is below delegation. */ - if ((qdata->encloser->flags & NODE_FLAGS_DELEG)) { - qdata->node = qdata->encloser; + if ((node->flags & NODE_FLAGS_DELEG)) { + qdata->node = node; return DELEG; } @@ -480,10 +431,10 @@ static int name_not_found(knot_pkt_t *pkt, struct query_data *qdata) static int solve_name(int state, knot_pkt_t *pkt, struct query_data *qdata) { int ret = zone_contents_find_dname(qdata->zone->contents, qdata->name, - &qdata->node, &qdata->encloser, - &qdata->previous); + &qdata->node, &qdata->encloser, + &qdata->previous); - switch(ret) { + switch (ret) { case ZONE_NAME_FOUND: return name_found(pkt, qdata); case ZONE_NAME_NOT_FOUND: @@ -523,7 +474,7 @@ static int solve_answer_dnssec(int state, knot_pkt_t *pkt, struct query_data *qd /* RFC4035, section 3.1 RRSIGs for RRs in ANSWER are mandatory. */ int ret = nsec_append_rrsigs(pkt, qdata, false); - switch(ret) { + switch (ret) { case KNOT_ESPACE: return TRUNC; case KNOT_EOK: return state; default: return ERROR; @@ -609,47 +560,28 @@ static int solve_authority_dnssec(int state, knot_pkt_t *pkt, struct query_data } } -static int solve_additional_kind(int state, knot_pkt_t *pkt, struct query_data *qdata, - enum additional_kind kind) +static int solve_additional(int state, knot_pkt_t *pkt, struct query_data *qdata, + void *ctx) { int ret = KNOT_EOK; - /* Only glue can be mandatory. */ - if (kind == ADDITIONAL_MANDATORY && state != DELEG) { - return ret; - } - /* Scan all RRs in ANSWER/AUTHORITY. */ for (uint16_t i = 0; i < pkt->rrset_count; ++i) { knot_rrset_t *rr = &pkt->rr[i]; knot_rrinfo_t *info = &pkt->rr_info[i]; /* Skip types for which it doesn't apply. */ - if (!knot_rrtype_additional_needed(pkt->rr[i].type)) { + if (!knot_rrtype_additional_needed(rr->type)) { continue; } /* Put additional records for given type. */ - ret = put_additional(pkt, rr, qdata, info, state, kind); + ret = put_additional(pkt, rr, qdata, info, state); if (ret != KNOT_EOK) { break; } } - return ret; -} - -static int solve_additional(int state, knot_pkt_t *pkt, - struct query_data *qdata, void *ctx) -{ - int ret = KNOT_EOK; - - /* First mandatory, then optional. */ - ret = solve_additional_kind(state, pkt, qdata, ADDITIONAL_MANDATORY); - if (ret == KNOT_EOK) { - ret = solve_additional_kind(state, pkt, qdata, ADDITIONAL_OPTIONAL); - } - /* Evaluate final state. */ switch (ret) { case KNOT_EOK: return state; /* Keep current state. */ @@ -673,84 +605,24 @@ static int solve_additional_dnssec(int state, knot_pkt_t *pkt, struct query_data } } -int ns_put_rr(knot_pkt_t *pkt, const knot_rrset_t *rr, - const knot_rrset_t *rrsigs, uint16_t compr_hint, - uint32_t flags, struct query_data *qdata) -{ - if (rr->rrs.rr_count < 1) { - return KNOT_EMALF; - } - - /* Wildcard expansion applies only for answers. */ - bool expand = false; - if (pkt->current == KNOT_ANSWER) { - /* Expand if RR is wildcard & we didn't query for wildcard. */ - expand = (knot_dname_is_wildcard(rr->owner) && !knot_dname_is_wildcard(qdata->name)); - } - - /* If we already have compressed name on the wire and compression hint, - * we can just insert RRSet and fake synthesis by using compression - * hint. */ - int ret = KNOT_EOK; - knot_rrset_t to_add; - if (compr_hint == KNOT_COMPR_HINT_NONE && expand) { - knot_dname_t *qname_cpy = knot_dname_copy(qdata->name, &pkt->mm); - if (qname_cpy == NULL) { - return KNOT_ENOMEM; - } - knot_rrset_init(&to_add, qname_cpy, rr->type, rr->rclass); - int ret = knot_rdataset_copy(&to_add.rrs, &rr->rrs, &pkt->mm); - if (ret != KNOT_EOK) { - knot_dname_free(&qname_cpy, &pkt->mm); - } - to_add.additional = rr->additional; - flags |= KNOT_PF_FREE; - } else { - to_add = *rr; - } - - uint16_t prev_count = pkt->rrset_count; - ret = knot_pkt_put(pkt, compr_hint, &to_add, flags); - if (ret != KNOT_EOK && (flags & KNOT_PF_FREE)) { - knot_rrset_clear(&to_add, &pkt->mm); - return ret; - } - - const bool inserted = (prev_count != pkt->rrset_count); - if (inserted && - !knot_rrset_empty(rrsigs) && rr->type != KNOT_RRTYPE_RRSIG) { - // Get rrinfo of just inserted RR. - knot_rrinfo_t *rrinfo = &pkt->rr_info[pkt->rrset_count - 1]; - ret = put_rrsig(rr->owner, rr->type, rrsigs, rrinfo, qdata); - } - - return ret; -} - /*! \brief Helper for internet_query repetitive code. */ #define SOLVE_STEP(solver, state, context) \ - state = (solver)(state, response, qdata, context); \ + state = (solver)(state, pkt, qdata, context); \ if (state == TRUNC) { \ return KNOT_STATE_DONE; \ } else if (state == ERROR) { \ return KNOT_STATE_FAIL; \ } -static int answer_query(struct query_plan *plan, knot_pkt_t *response, struct query_data *qdata) +static int answer_query(knot_pkt_t *pkt, struct query_data *qdata) { int state = BEGIN; + struct query_plan *plan = qdata->zone->query_plan; struct query_plan *global_plan = conf()->query_plan; struct query_step *step = NULL; - /* Before query processing code. */ - if (plan != NULL) { - WALK_LIST(step, plan->stage[QPLAN_BEGIN]) { - SOLVE_STEP(step->process, state, step->ctx); - } - } - /* Resolve ANSWER. */ - knot_pkt_begin(response, KNOT_ANSWER); + knot_pkt_begin(pkt, KNOT_ANSWER); if (global_plan != NULL) { WALK_LIST(step, global_plan->stage[QPLAN_ANSWER]) { SOLVE_STEP(step->process, state, step->ctx); @@ -765,7 +637,7 @@ static int answer_query(struct query_plan *plan, knot_pkt_t *response, struct qu } /* Resolve AUTHORITY. */ - knot_pkt_begin(response, KNOT_AUTHORITY); + knot_pkt_begin(pkt, KNOT_AUTHORITY); if (global_plan != NULL) { WALK_LIST(step, global_plan->stage[QPLAN_AUTHORITY]) { SOLVE_STEP(step->process, state, step->ctx); @@ -780,7 +652,7 @@ static int answer_query(struct query_plan *plan, knot_pkt_t *response, struct qu } /* Resolve ADDITIONAL. */ - knot_pkt_begin(response, KNOT_ADDITIONAL); + knot_pkt_begin(pkt, KNOT_ADDITIONAL); if (global_plan != NULL) { WALK_LIST(step, global_plan->stage[QPLAN_ADDITIONAL]) { SOLVE_STEP(step->process, state, step->ctx); @@ -794,22 +666,15 @@ static int answer_query(struct query_plan *plan, knot_pkt_t *response, struct qu } } - /* After query processing code. */ - if (plan != NULL) { - WALK_LIST(step, plan->stage[QPLAN_END]) { - SOLVE_STEP(step->process, state, step->ctx); - } - } - /* Write resulting RCODE. */ - knot_wire_set_rcode(response->wire, qdata->rcode); + knot_wire_set_rcode(pkt->wire, qdata->rcode); return KNOT_STATE_DONE; } -int internet_process_query(knot_pkt_t *response, struct query_data *qdata) +int internet_process_query(knot_pkt_t *pkt, struct query_data *qdata) { - if (response == NULL || qdata == NULL) { + if (pkt == NULL || qdata == NULL) { return KNOT_STATE_FAIL; } @@ -822,7 +687,7 @@ int internet_process_query(knot_pkt_t *response, struct query_data *qdata) NS_NEED_AUTH(qdata, qdata->zone->name, ACL_ACTION_NONE); /* Reserve space for TSIG. */ - knot_pkt_reserve(response, knot_tsig_wire_maxsize(&qdata->sign.tsig_key)); + knot_pkt_reserve(pkt, knot_tsig_wire_maxsize(&qdata->sign.tsig_key)); } NS_NEED_ZONE_CONTENTS(qdata, KNOT_RCODE_SERVFAIL); /* Expired */ @@ -830,5 +695,5 @@ int internet_process_query(knot_pkt_t *response, struct query_data *qdata) /* Get answer to QNAME. */ qdata->name = knot_pkt_qname(qdata->query); - return answer_query(qdata->zone->query_plan, response, qdata); + return answer_query(pkt, qdata); } diff --git a/src/knot/nameserver/internet.h b/src/knot/nameserver/internet.h index 0d438386ed189f7ff1ecae46374e4e61b4315d39..49de2cfb01a3d587dcebafe689413d2c6a4030b5 100644 --- a/src/knot/nameserver/internet.h +++ b/src/knot/nameserver/internet.h @@ -13,22 +13,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/*! - * \file - * - * \brief IN zone lookup. - * - * \addtogroup query_processing - * @{ - */ #pragma once #include "libknot/packet/pkt.h" -#include "knot/query/layer.h" -/* Query data (from query processing). */ struct query_data; +struct answer_data; /*! \brief Internet query processing states. */ enum { @@ -45,10 +36,10 @@ enum { /*! * \brief Answer query from an IN class zone. * - * \retval FAIL if it encountered an error. - * \retval DONE if finished. + * \retval KNOT_STATE_FAIL if it encountered an error. + * \retval KNOT_STATE_DONE if finished. */ -int internet_process_query(knot_pkt_t *resp, struct query_data *qdata); +int internet_process_query(knot_pkt_t *pkt, struct query_data *qdata); /*! * \brief Puts RRSet to packet, will store its RRSIG for later use. @@ -105,9 +96,8 @@ int ns_put_rr(knot_pkt_t *pkt, const knot_rrset_t *rr, } \ } +/*! \brief Require maximum number of unsigned messages. */ #define NS_NEED_TSIG_SIGNED(tsig_ctx, max_unsigned) \ if (tsig_unsigned_count(tsig_ctx) > max_unsigned) { \ return KNOT_STATE_FAIL; \ } - -/*! @} */ diff --git a/src/knot/nameserver/ixfr.c b/src/knot/nameserver/ixfr.c index d044b9ad525a51f4d69e1afe307e96fd66328413..a618e70129beed358be6e449824d2049ece48f84 100644 --- a/src/knot/nameserver/ixfr.c +++ b/src/knot/nameserver/ixfr.c @@ -93,7 +93,7 @@ static int ixfr_process_changeset(knot_pkt_t *pkt, const void *item, /* Put REMOVE RRSets. */ if (ixfr->state == IXFR_DEL) { if (iter_empty(ixfr)) { - ret = changeset_iter_rem(&ixfr->cur, chgset, false); + ret = changeset_iter_rem(&ixfr->cur, chgset); if (ret != KNOT_EOK) { return ret; } @@ -115,7 +115,7 @@ static int ixfr_process_changeset(knot_pkt_t *pkt, const void *item, /* Put Add RRSets. */ if (ixfr->state == IXFR_ADD) { if (iter_empty(ixfr)) { - ret = changeset_iter_add(&ixfr->cur, chgset, false); + ret = changeset_iter_add(&ixfr->cur, chgset); if (ret != KNOT_EOK) { return ret; } @@ -139,7 +139,7 @@ static int ixfr_process_changeset(knot_pkt_t *pkt, const void *item, #undef IXFR_SAFE_PUT /*! \brief Loads IXFRs from journal. */ -static int ixfr_load_chsets(list_t *chgsets, const zone_t *zone, +static int ixfr_load_chsets(list_t *chgsets, zone_t *zone, const knot_rrset_t *their_soa) { assert(chgsets); @@ -153,12 +153,7 @@ static int ixfr_load_chsets(list_t *chgsets, const zone_t *zone, return KNOT_EUPTODATE; } - char *path = conf_journalfile(conf(), zone->name); - pthread_mutex_lock((pthread_mutex_t *)&zone->journal_lock); - ret = journal_load_changesets(path, zone, chgsets, serial_from, serial_to); - pthread_mutex_unlock((pthread_mutex_t *)&zone->journal_lock); - free(path); - + ret = zone_changes_load(conf(), zone, chgsets, serial_from); if (ret != KNOT_EOK) { changesets_free(chgsets); } diff --git a/src/knot/nameserver/nsec_proofs.c b/src/knot/nameserver/nsec_proofs.c index 3edcbf2de2f3e51776709d3846c411e19a537942..8cc6330a69835701418b986a0ef24d49b0eb6850 100644 --- a/src/knot/nameserver/nsec_proofs.c +++ b/src/knot/nameserver/nsec_proofs.c @@ -173,8 +173,8 @@ static int put_nxt_from_node(const zone_node_t *node, knot_rrset_t rrsigs = node_rrset(node, KNOT_RRTYPE_RRSIG); - return ns_put_rr(resp, &rrset, &rrsigs, KNOT_COMPR_HINT_NONE, - KNOT_PF_CHECKDUP, qdata); + return process_query_put_rr(resp, qdata, &rrset, &rrsigs, + KNOT_COMPR_HINT_NONE, KNOT_PF_CHECKDUP); } /*! @@ -439,7 +439,7 @@ static int put_nsec_nxdomain(const zone_contents_t *zone, /*! * \brief Put NSEC3s for NXDOMAIN error into the response. * - * Adds up to three NSEC3 records. We have to proove that some parent name + * Adds up to three NSEC3 records. We have to prove that some parent name * exists (closest encloser proof) and that no wildcard expansion is possible * bellow that closest encloser. * @@ -667,7 +667,8 @@ int nsec_prove_dp_security(knot_pkt_t *pkt, struct query_data *qdata) knot_rrset_t rrset = node_rrset(qdata->node, KNOT_RRTYPE_DS); if (!knot_rrset_empty(&rrset)) { knot_rrset_t rrsigs = node_rrset(qdata->node, KNOT_RRTYPE_RRSIG); - return ns_put_rr(pkt, &rrset, &rrsigs, KNOT_COMPR_HINT_NONE, 0, qdata); + return process_query_put_rr(pkt, qdata, &rrset, &rrsigs, + KNOT_COMPR_HINT_NONE, 0); } // Alternatively prove that DS doesn't exist. diff --git a/src/knot/nameserver/process_query.c b/src/knot/nameserver/process_query.c index af18d495e5753f934adcf9c66f8a18feaf578482..38bc3672008d598c6f481b2b64a3d7446d3e7615 100644 --- a/src/knot/nameserver/process_query.c +++ b/src/knot/nameserver/process_query.c @@ -18,6 +18,7 @@ #include "dnssec/tsig.h" #include "knot/common/log.h" +#include "knot/dnssec/rrset-sign.h" #include "knot/nameserver/process_query.h" #include "knot/nameserver/query_module.h" #include "knot/nameserver/chaos.h" @@ -122,32 +123,18 @@ static int process_query_in(knot_layer_t *ctx, knot_pkt_t *pkt) static int query_internet(knot_pkt_t *pkt, knot_layer_t *ctx) { struct query_data *data = QUERY_DATA(ctx); - int next_state = KNOT_STATE_FAIL; switch(data->packet_type) { - case KNOT_QUERY_NORMAL: - next_state = internet_process_query(pkt, data); - break; - case KNOT_QUERY_NOTIFY: - next_state = notify_process_query(pkt, data); - break; - case KNOT_QUERY_AXFR: - next_state = axfr_process_query(pkt, data); - break; - case KNOT_QUERY_IXFR: - next_state = ixfr_process_query(pkt, data); - break; - case KNOT_QUERY_UPDATE: - next_state = update_process_query(pkt, data); - break; + case KNOT_QUERY_NORMAL: return internet_process_query(pkt, data); + case KNOT_QUERY_NOTIFY: return notify_process_query(pkt, data); + case KNOT_QUERY_AXFR: return axfr_process_query(pkt, data); + case KNOT_QUERY_IXFR: return ixfr_process_query(pkt, data); + case KNOT_QUERY_UPDATE: return update_process_query(pkt, data); default: /* Nothing else is supported. */ data->rcode = KNOT_RCODE_NOTIMPL; - next_state = KNOT_STATE_FAIL; - break; + return KNOT_STATE_FAIL; } - - return next_state; } /*! @@ -321,6 +308,7 @@ static int prepare_answer(const knot_pkt_t *query, knot_pkt_t *resp, knot_layer_ if (ret != KNOT_EOK) { return ret; } + knot_wire_clear_cd(resp->wire); /* Query MUST carry a question. */ const knot_dname_t *qname = knot_pkt_qname(query); @@ -373,24 +361,21 @@ static int prepare_answer(const knot_pkt_t *query, knot_pkt_t *resp, knot_layer_ return ret; } -static int set_rcode_to_packet(knot_pkt_t *pkt, struct query_data *qdata) +static void set_rcode_to_packet(knot_pkt_t *pkt, struct query_data *qdata) { - int ret = KNOT_EOK; uint8_t ext_rcode = KNOT_EDNS_RCODE_HI(qdata->rcode); if (ext_rcode != 0) { /* No OPT RR and Ext RCODE results in SERVFAIL. */ if (qdata->opt_rr_pos == NULL) { - qdata->rcode = KNOT_RCODE_SERVFAIL; - ret = KNOT_ERROR; - } else { - knot_edns_set_ext_rcode_wire(qdata->opt_rr_pos, ext_rcode); + knot_wire_set_rcode(pkt->wire, KNOT_RCODE_SERVFAIL); + return; } + + knot_edns_set_ext_rcode_wire(qdata->opt_rr_pos, ext_rcode); } knot_wire_set_rcode(pkt->wire, KNOT_EDNS_RCODE_LO(qdata->rcode)); - - return ret; } static int process_query_err(knot_layer_t *ctx, knot_pkt_t *pkt) @@ -401,9 +386,15 @@ static int process_query_err(knot_layer_t *ctx, knot_pkt_t *pkt) /* Initialize response from query packet. */ knot_pkt_t *query = qdata->query; knot_pkt_init_response(pkt, query); + knot_wire_clear_cd(pkt->wire); + + /* Set TC bit if required. */ + if (qdata->err_truncated) { + knot_wire_set_tc(pkt->wire); + } /* Restore original QNAME. */ - process_query_qname_case_restore(qdata, pkt); + process_query_qname_case_restore(pkt, qdata); /* Add OPT and TSIG (best effort, send reply anyway if fails). */ if (pkt->current != KNOT_ADDITIONAL) { @@ -412,64 +403,31 @@ static int process_query_err(knot_layer_t *ctx, knot_pkt_t *pkt) /* Put OPT RR to the additional section. */ if (answer_edns_reserve(pkt, qdata) == KNOT_EOK) { - (void) answer_edns_put(pkt, qdata); + (void)answer_edns_put(pkt, qdata); + } else { + qdata->rcode = KNOT_RCODE_SERVFAIL; } /* Set final RCODE to packet. */ - (void) set_rcode_to_packet(pkt, qdata); + set_rcode_to_packet(pkt, qdata); /* Transaction security (if applicable). */ - (void) process_query_sign_response(pkt, qdata); + (void)process_query_sign_response(pkt, qdata); return KNOT_STATE_DONE; } -/*! - * \brief Apply rate limit. - */ -static int ratelimit_apply(int state, knot_pkt_t *pkt, knot_layer_t *ctx) -{ - /* Check if rate limiting applies. */ - struct query_data *qdata = QUERY_DATA(ctx); - server_t *server = qdata->param->server; - if (server->rrl == NULL) { - return state; - } - - /* Exempt clients. */ - conf_val_t *whitelist = &conf()->cache.srv_rate_limit_whitelist; - if (conf_addr_range_match(whitelist, qdata->param->remote)) { - return state; - } - - rrl_req_t rrl_rq = {0}; - rrl_rq.w = pkt->wire; - rrl_rq.query = qdata->query; - if (!EMPTY_LIST(qdata->wildcards)) { - rrl_rq.flags = RRL_WILDCARD; - } - if (rrl_query(server->rrl, qdata->param->remote, - &rrl_rq, qdata->zone) == KNOT_EOK) { - /* Rate limiting not applied. */ - return state; +/*! \brief Helper for repetitive code. */ +#define PROCESS_STAGE(plan, query_stage, step, next_state, qdata) \ + if (plan != NULL) { \ + WALK_LIST(step, plan->stage[query_stage]) { \ + next_state = step->process(next_state, pkt, qdata, step->ctx); \ + if (next_state == KNOT_STATE_FAIL) { \ + next_state = process_query_err(ctx, pkt); \ + } \ + } \ } - /* Now it is slip or drop. */ - int slip = conf()->cache.srv_rate_limit_slip; - if (slip > 0 && rrl_slip_roll(slip)) { - /* Answer slips. */ - if (process_query_err(ctx, pkt) != KNOT_STATE_DONE) { - return KNOT_STATE_FAIL; - } - knot_wire_set_tc(pkt->wire); - } else { - /* Drop answer. */ - pkt->size = 0; - } - - return KNOT_STATE_DONE; -} - static int process_query_out(knot_layer_t *ctx, knot_pkt_t *pkt) { assert(pkt && ctx); @@ -478,34 +436,33 @@ static int process_query_out(knot_layer_t *ctx, knot_pkt_t *pkt) struct query_data *qdata = QUERY_DATA(ctx); struct query_plan *plan = conf()->query_plan; + struct query_plan *zone_plan = NULL; struct query_step *step = NULL; + int next_state = KNOT_STATE_PRODUCE; + /* Check parse state. */ knot_pkt_t *query = qdata->query; - int next_state = KNOT_STATE_PRODUCE; if (query->parsed < query->size) { - knot_pkt_clear(pkt); qdata->rcode = KNOT_RCODE_FORMERR; next_state = KNOT_STATE_FAIL; goto finish; } - /* - * Preprocessing. - */ - + /* Preprocessing. */ if (prepare_answer(query, pkt, ctx) != KNOT_EOK) { next_state = KNOT_STATE_FAIL; goto finish; } - /* Before query processing code. */ - if (plan) { - WALK_LIST(step, plan->stage[QPLAN_BEGIN]) { - next_state = step->process(next_state, pkt, qdata, step->ctx); - } + if (qdata->zone != NULL && qdata->zone->query_plan != NULL) { + zone_plan = qdata->zone->query_plan; } + /* Before query processing code. */ + PROCESS_STAGE(plan, QPLAN_BEGIN, step, next_state, qdata); + PROCESS_STAGE(zone_plan, QPLAN_BEGIN, step, next_state, qdata); + /* Answer based on qclass. */ if (next_state != KNOT_STATE_DONE) { switch (knot_pkt_qclass(pkt)) { @@ -523,14 +480,11 @@ static int process_query_out(knot_layer_t *ctx, knot_pkt_t *pkt) } } - /* - * Postprocessing. - */ - + /* Postprocessing. */ if (next_state == KNOT_STATE_DONE || next_state == KNOT_STATE_PRODUCE) { /* Restore original QNAME. */ - process_query_qname_case_restore(qdata, pkt); + process_query_qname_case_restore(pkt, qdata); if (pkt->current != KNOT_ADDITIONAL) { knot_pkt_begin(pkt, KNOT_ADDITIONAL); @@ -545,34 +499,28 @@ static int process_query_out(knot_layer_t *ctx, knot_pkt_t *pkt) /* Transaction security (if applicable). */ if (process_query_sign_response(pkt, qdata) != KNOT_EOK) { next_state = KNOT_STATE_FAIL; + goto finish; } } finish: - /* Default RCODE is SERVFAIL if not specified otherwise. */ - if (next_state == KNOT_STATE_FAIL && qdata->rcode == KNOT_RCODE_NOERROR) { - qdata->rcode = KNOT_RCODE_SERVFAIL; - } - - /* Store Extended RCODE - divide between header and OPT if possible. */ - if (next_state != KNOT_STATE_FAIL) { - if (set_rcode_to_packet(pkt, qdata) != KNOT_EOK) { - next_state = KNOT_STATE_FAIL; + /* Error processing. */ + switch (next_state) { + case KNOT_STATE_FAIL: + /* Default RCODE is SERVFAIL if not otherwise specified. */ + if (qdata->rcode == KNOT_RCODE_NOERROR) { + qdata->rcode = KNOT_RCODE_SERVFAIL; } + process_query_err(ctx, pkt); + break; + default: + /* Store Extended RCODE - divide between header and OPT. */ + set_rcode_to_packet(pkt, qdata); } - /* In case of NS_PROC_FAIL, RCODE is set in the error-processing function. */ /* After query processing code. */ - if (plan) { - WALK_LIST(step, plan->stage[QPLAN_END]) { - next_state = step->process(next_state, pkt, qdata, step->ctx); - } - } - - /* Rate limits (if applicable). */ - if (qdata->param->proc_flags & NS_QUERY_LIMIT_RATE) { - next_state = ratelimit_apply(next_state, pkt, ctx); - } + PROCESS_STAGE(zone_plan, QPLAN_END, step, next_state, qdata); + PROCESS_STAGE(plan, QPLAN_END, step, next_state, qdata); rcu_read_unlock(); @@ -616,7 +564,7 @@ bool process_query_acl_check(conf_t *conf, const knot_dname_t *zone_name, free(key_name); qdata->rcode = KNOT_RCODE_NOTAUTH; - qdata->rcode_tsig = KNOT_TSIG_ERR_BADKEY; + qdata->rcode_tsig = KNOT_RCODE_BADKEY; return false; } @@ -642,7 +590,7 @@ int process_query_verify(struct query_data *qdata) ctx->tsig_digestlen = knot_tsig_rdata_mac_length(query->tsig_rr); /* Checking query. */ - process_query_qname_case_restore(qdata, query); + process_query_qname_case_restore(query, qdata); int ret = knot_tsig_server_check(query->tsig_rr, query->wire, query->size, &ctx->tsig_key); process_query_qname_case_lower(query); @@ -654,15 +602,15 @@ int process_query_verify(struct query_data *qdata) break; case KNOT_TSIG_EBADKEY: qdata->rcode = KNOT_RCODE_NOTAUTH; - qdata->rcode_tsig = KNOT_TSIG_ERR_BADKEY; + qdata->rcode_tsig = KNOT_RCODE_BADKEY; break; case KNOT_TSIG_EBADSIG: qdata->rcode = KNOT_RCODE_NOTAUTH; - qdata->rcode_tsig = KNOT_TSIG_ERR_BADSIG; + qdata->rcode_tsig = KNOT_RCODE_BADSIG; break; case KNOT_TSIG_EBADTIME: qdata->rcode = KNOT_RCODE_NOTAUTH; - qdata->rcode_tsig = KNOT_TSIG_ERR_BADTIME; + qdata->rcode_tsig = KNOT_RCODE_BADTIME; ctx->tsig_time_signed = knot_tsig_rdata_time_signed(query->tsig_rr); break; case KNOT_EMALF: @@ -729,7 +677,7 @@ fail: return ret; } -void process_query_qname_case_restore(struct query_data *qdata, knot_pkt_t *pkt) +void process_query_qname_case_restore(knot_pkt_t *pkt, struct query_data *qdata) { /* If original QNAME is empty, Query is either unparsed or for root domain. * Either way, letter case doesn't matter. */ @@ -745,6 +693,102 @@ int process_query_qname_case_lower(knot_pkt_t *pkt) return knot_dname_to_lower(qname); } +/*! \brief Synthesize RRSIG for given parameters, store in 'qdata' for later use */ +static int put_rrsig(const knot_dname_t *sig_owner, uint16_t type, + const knot_rrset_t *rrsigs, knot_rrinfo_t *rrinfo, + struct query_data *qdata) +{ + knot_rdataset_t synth_rrs; + knot_rdataset_init(&synth_rrs); + int ret = knot_synth_rrsig(type, &rrsigs->rrs, &synth_rrs, qdata->mm); + if (ret == KNOT_ENOENT) { + // No signature + return KNOT_EOK; + } + if (ret != KNOT_EOK) { + return ret; + } + + /* Create rrsig info structure. */ + struct rrsig_info *info = mm_alloc(qdata->mm, sizeof(struct rrsig_info)); + if (info == NULL) { + knot_rdataset_clear(&synth_rrs, qdata->mm); + return KNOT_ENOMEM; + } + + /* Store RRSIG into info structure. */ + knot_dname_t *owner_copy = knot_dname_copy(sig_owner, qdata->mm); + if (owner_copy == NULL) { + mm_free(qdata->mm, info); + knot_rdataset_clear(&synth_rrs, qdata->mm); + return KNOT_ENOMEM; + } + knot_rrset_init(&info->synth_rrsig, owner_copy, rrsigs->type, rrsigs->rclass); + /* Store filtered signature. */ + info->synth_rrsig.rrs = synth_rrs; + + info->rrinfo = rrinfo; + add_tail(&qdata->rrsigs, &info->n); + + return KNOT_EOK; +} + +int process_query_put_rr(knot_pkt_t *pkt, struct query_data *qdata, + const knot_rrset_t *rr, const knot_rrset_t *rrsigs, + uint16_t compr_hint, uint32_t flags) +{ + if (rr->rrs.rr_count < 1) { + return KNOT_EMALF; + } + + /* Wildcard expansion applies only for answers. */ + bool expand = false; + if (pkt->current == KNOT_ANSWER) { + /* Expand if RR is wildcard & we didn't query for wildcard. */ + expand = (knot_dname_is_wildcard(rr->owner) && !knot_dname_is_wildcard(qdata->name)); + } + + int ret = KNOT_EOK; + + /* If we already have compressed name on the wire and compression hint, + * we can just insert RRSet and fake synthesis by using compression + * hint. */ + knot_rrset_t to_add; + if (compr_hint == KNOT_COMPR_HINT_NONE && expand) { + knot_dname_t *qname_cpy = knot_dname_copy(qdata->name, &pkt->mm); + if (qname_cpy == NULL) { + return KNOT_ENOMEM; + } + knot_rrset_init(&to_add, qname_cpy, rr->type, rr->rclass); + ret = knot_rdataset_copy(&to_add.rrs, &rr->rrs, &pkt->mm); + if (ret != KNOT_EOK) { + knot_dname_free(&qname_cpy, &pkt->mm); + return ret; + } + to_add.additional = rr->additional; + flags |= KNOT_PF_FREE; + } else { + to_add = *rr; + } + + uint16_t prev_count = pkt->rrset_count; + ret = knot_pkt_put(pkt, compr_hint, &to_add, flags); + if (ret != KNOT_EOK && (flags & KNOT_PF_FREE)) { + knot_rrset_clear(&to_add, &pkt->mm); + return ret; + } + + const bool inserted = (prev_count != pkt->rrset_count); + if (inserted && + !knot_rrset_empty(rrsigs) && rr->type != KNOT_RRTYPE_RRSIG) { + // Get rrinfo of just inserted RR. + knot_rrinfo_t *rrinfo = &pkt->rr_info[pkt->rrset_count - 1]; + ret = put_rrsig(rr->owner, rr->type, rrsigs, rrinfo, qdata); + } + + return ret; +} + /*! \brief Module implementation. */ const knot_layer_api_t *process_query_layer(void) { diff --git a/src/knot/nameserver/process_query.h b/src/knot/nameserver/process_query.h index 7f4e3a43c70d5568f8f40881d3ebdcfcd7f79b16..a2f6cded1272d4a6285c37b88eb3f7f4b0ec5f15 100644 --- a/src/knot/nameserver/process_query.h +++ b/src/knot/nameserver/process_query.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -13,14 +13,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/*! - * \file - * - * \brief Query processor. - * - * \addtogroup query_processing - * @{ - */ #pragma once @@ -37,8 +29,7 @@ enum process_query_flag { NS_QUERY_NO_AXFR = 1 << 0, /* Don't process AXFR */ NS_QUERY_NO_IXFR = 1 << 1, /* Don't process IXFR */ NS_QUERY_LIMIT_ANY = 1 << 2, /* Limit ANY QTYPE (respond with TC=1) */ - NS_QUERY_LIMIT_RATE = 1 << 3, /* Apply rate limits. */ - NS_QUERY_LIMIT_SIZE = 1 << 4 /* Apply UDP size limit. */ + NS_QUERY_LIMIT_SIZE = 1 << 3 /* Apply UDP size limit. */ }; /* Module load parameters. */ @@ -59,6 +50,7 @@ struct query_data { const zone_t *zone; /*!< Zone from which is answered. */ list_t wildcards; /*!< Visited wildcards. */ list_t rrsigs; /*!< Section RRSIGs. */ + bool err_truncated; /*!< Set TC bit if error reply. */ /* Current processed name and nodes. */ const zone_node_t *node, *encloser, *previous; @@ -133,10 +125,10 @@ int process_query_sign_response(knot_pkt_t *pkt, struct query_data *qdata); /*! * \brief Restore QNAME letter case. * - * \param qdata Query data. * \param pkt Incoming message. + * \param qdata Query data. */ -void process_query_qname_case_restore(struct query_data *qdata, knot_pkt_t *pkt); +void process_query_qname_case_restore(knot_pkt_t *pkt, struct query_data *qdata); /*! * \brief Convert QNAME to lowercase format for processing. @@ -145,4 +137,18 @@ void process_query_qname_case_restore(struct query_data *qdata, knot_pkt_t *pkt) */ int process_query_qname_case_lower(knot_pkt_t *pkt); -/*! @} */ +/*! + * \brief Puts RRSet to packet, will store its RRSIG for later use. + * + * \param pkt Packet to store RRSet into. + * \param qdata Query data structure. + * \param rr RRSet to be stored. + * \param rrsigs RRSIGs to be stored. + * \param compr_hint Compression hint. + * \param flags Flags. + * + * \return KNOT_E* + */ +int process_query_put_rr(knot_pkt_t *pkt, struct query_data *qdata, + const knot_rrset_t *rr, const knot_rrset_t *rrsigs, + uint16_t compr_hint, uint32_t flags); diff --git a/src/knot/nameserver/query_module.c b/src/knot/nameserver/query_module.c index f60069d7947c874d912ed7d0d3b24421b07e9de2..55b41433bed4af975d0d808f7d92f2bf184d6fe3 100644 --- a/src/knot/nameserver/query_module.c +++ b/src/knot/nameserver/query_module.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,45 +14,41 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <assert.h> + #include "knot/nameserver/query_module.h" -#include "libknot/libknot.h" #include "contrib/mempattern.h" -#include "contrib/openbsd/strlcpy.h" -/* Compiled-in module headers. */ -#include "knot/modules/synth_record.h" -#include "knot/modules/dnsproxy.h" -#include "knot/modules/online_sign/module.h" +#include "knot/modules/rrl/rrl.h" +#include "knot/modules/stats/stats.h" +#include "knot/modules/synth_record/synth_record.h" +#include "knot/modules/dnsproxy/dnsproxy.h" +#include "knot/modules/online_sign/online_sign.h" #ifdef HAVE_ROSEDB -#include "knot/modules/rosedb.h" +#include "knot/modules/rosedb/rosedb.h" #endif #if USE_DNSTAP -#include "knot/modules/dnstap.h" +#include "knot/modules/dnstap/dnstap.h" #endif -#include "knot/modules/whoami.h" -#include "knot/modules/noudp.h" - -typedef struct static_module { - const yp_name_t *name; - qmodule_load_t load; - qmodule_unload_t unload; - unsigned scope; -} static_module_t; +#include "knot/modules/whoami/whoami.h" +#include "knot/modules/noudp/noudp.h" /*! \note All modules should be dynamically loaded later on. */ static_module_t MODULES[] = { - { C_MOD_SYNTH_RECORD, &synth_record_load, &synth_record_unload, MOD_SCOPE_ANY }, - { C_MOD_DNSPROXY, &dnsproxy_load, &dnsproxy_unload, MOD_SCOPE_ANY }, - { C_MOD_ONLINE_SIGN, &online_sign_load, &online_sign_unload, MOD_SCOPE_ZONE }, + { C_MOD_RRL, &rrl_load, &rrl_unload, MOD_SCOPE_ANY }, + { C_MOD_SYNTH_RECORD, &synth_record_load, &synth_record_unload, MOD_SCOPE_ANY }, + { C_MOD_DNSPROXY, &dnsproxy_load, &dnsproxy_unload, MOD_SCOPE_ANY }, + { C_MOD_ONLINE_SIGN, &online_sign_load, &online_sign_unload, MOD_SCOPE_ZONE, true }, + { C_MOD_STATS, &stats_load, &stats_unload, MOD_SCOPE_ANY, true }, #ifdef HAVE_ROSEDB - { C_MOD_ROSEDB, &rosedb_load, &rosedb_unload, MOD_SCOPE_ANY }, + { C_MOD_ROSEDB, &rosedb_load, &rosedb_unload, MOD_SCOPE_ANY }, #endif #if USE_DNSTAP - { C_MOD_DNSTAP, &dnstap_load, &dnstap_unload, MOD_SCOPE_ANY }, + { C_MOD_DNSTAP, &dnstap_load, &dnstap_unload, MOD_SCOPE_ANY }, #endif - { C_MOD_WHOAMI, &whoami_load, &whoami_unload, MOD_SCOPE_ANY }, - { C_MOD_NOUDP, &noudp_load, &noudp_unload, MOD_SCOPE_ANY }, - { NULL } + { C_MOD_WHOAMI, &whoami_load, &whoami_unload, MOD_SCOPE_ANY, true }, + { C_MOD_NOUDP, &noudp_load, &noudp_unload, MOD_SCOPE_ANY, true }, + { NULL } }; struct query_plan *query_plan_create(knot_mm_t *mm) @@ -114,7 +110,73 @@ int query_plan_step(struct query_plan *plan, int stage, qmodule_process_t proces return KNOT_EOK; } -static static_module_t *find_module(const yp_name_t *name) +int query_module_step(struct query_module *module, int stage, qmodule_process_t process) +{ + return query_plan_step(module->plan, stage, process, module->ctx); +} + +int mod_stats_add(struct query_module *module, const char *name, uint32_t count, + mod_idx_to_str_f idx) +{ + if (module == NULL || count < 1) { + return KNOT_EINVAL; + } + + mod_ctr_t *stats = NULL; + if (module->stats == NULL) { + assert(module->stats_count == 0); + stats = mm_alloc(module->mm, sizeof(*stats)); + if (stats == NULL) { + return KNOT_ENOMEM; + } + module->stats = stats; + } else { + assert(module->stats_count > 0); + size_t old_size = module->stats_count * sizeof(*stats); + size_t new_size = old_size + sizeof(*stats); + stats = mm_realloc(module->mm, module->stats, new_size, old_size); + if (stats == NULL) { + mod_stats_free(module); + return KNOT_ENOMEM; + } + module->stats = stats; + stats += module->stats_count; + } + + module->stats_count++; + + if (count > 1) { + size_t size = count * sizeof(((mod_ctr_t *)0)->counter); + stats->counters = mm_alloc(module->mm, size); + if (stats->counters == NULL) { + mod_stats_free(module); + return KNOT_ENOMEM; + } + memset(stats->counters, 0, size); + stats->idx_to_str = idx; + } + stats->name = name; + stats->count = count; + + return KNOT_EOK; +} + +void mod_stats_free(struct query_module *module) +{ + if (module == NULL || module->stats == NULL) { + return; + } + + for (int i = 0; i < module->stats_count; i++) { + if (module->stats[i].count > 1) { + mm_free(module->mm, module->stats[i].counters); + } + } + + mm_free(module->mm, module->stats); +} + +static_module_t *find_module(const yp_name_t *name) { /* Search for the module by name. */ static_module_t *module = NULL; @@ -130,9 +192,10 @@ static static_module_t *find_module(const yp_name_t *name) } struct query_module *query_module_open(conf_t *config, conf_mod_id_t *mod_id, + struct query_plan *plan, const knot_dname_t *zone, knot_mm_t *mm) { - if (config == NULL || mod_id == NULL) { + if (config == NULL || mod_id == NULL || plan == NULL) { return NULL; } @@ -149,8 +212,10 @@ struct query_module *query_module_open(conf_t *config, conf_mod_id_t *mod_id, } memset(module, 0, sizeof(struct query_module)); + module->plan = plan; module->mm = mm; module->config = config; + module->zone = zone; module->id = mod_id; module->load = found->load; module->unload = found->unload; @@ -165,6 +230,7 @@ void query_module_close(struct query_module *module) return; } + mod_stats_free(module); conf_free_mod_id(module->id); mm_free(module->mm, module); } diff --git a/src/knot/nameserver/query_module.h b/src/knot/nameserver/query_module.h index 599afb73b20f2eecf3069f07563336a913ed9e83..a8e8c41292d35d8b020ea33755fbbc078f95b186 100644 --- a/src/knot/nameserver/query_module.h +++ b/src/knot/nameserver/query_module.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -39,8 +39,11 @@ #pragma once #include "libknot/libknot.h" +#include "knot/common/log.h" #include "knot/conf/conf.h" #include "knot/conf/tools.h" +#include "knot/nameserver/process_query.h" +#include "knot/nameserver/internet.h" #include "contrib/ucw/lists.h" #define MODULE_ERR(mod, msg, ...) \ @@ -74,10 +77,32 @@ struct query_module; struct query_plan; /* Module callback required API. */ -typedef int (*qmodule_load_t)(struct query_plan *plan, struct query_module *self, const knot_dname_t *zone); -typedef int (*qmodule_unload_t)(struct query_module *self); +typedef int (*qmodule_load_t)(struct query_module *self); +typedef void (*qmodule_unload_t)(struct query_module *self); typedef int (*qmodule_process_t)(int state, knot_pkt_t *pkt, struct query_data *qdata, void *ctx); +typedef struct static_module { + const yp_name_t *name; + qmodule_load_t load; + qmodule_unload_t unload; + unsigned scope; + bool opt_conf; +} static_module_t; + +typedef char* (*mod_idx_to_str_f)(uint32_t idx, uint32_t count); + +typedef struct { + const char *name; + union { + uint64_t counter; + struct { + uint64_t *counters; + mod_idx_to_str_f idx_to_str; + }; + }; + uint32_t count; +} mod_ctr_t; + /*! * Query module is a dynamically loadable unit that can alter query processing plan. * Module requires load and unload callback handlers and is provided with a context @@ -85,15 +110,66 @@ typedef int (*qmodule_process_t)(int state, knot_pkt_t *pkt, struct query_data * */ struct query_module { node_t node; + struct query_plan *plan; knot_mm_t *mm; void *ctx; conf_t *config; + const knot_dname_t *zone; conf_mod_id_t *id; qmodule_load_t load; qmodule_unload_t unload; + mod_ctr_t *stats; + uint32_t stats_count; unsigned scope; }; +int mod_stats_add(struct query_module *module, const char *name, uint32_t count, + mod_idx_to_str_f idx); + +void mod_stats_free(struct query_module *module); + +inline static void mod_ctr_incr(mod_ctr_t *stats, uint32_t idx, uint64_t val) +{ + mod_ctr_t *ctr = stats + idx; + assert(ctr->count == 1); + + __atomic_add_fetch(&ctr->counter, val, __ATOMIC_RELAXED); +} + +inline static void mod_ctr_decr(mod_ctr_t *stats, uint32_t idx, uint64_t val) +{ + mod_ctr_t *ctr = stats + idx; + assert(ctr->count == 1); + + __atomic_sub_fetch(&ctr->counter, val, __ATOMIC_RELAXED); +} + +inline static void mod_ctrs_incr(mod_ctr_t *stats, uint32_t idx, uint32_t offset, uint64_t val) +{ + mod_ctr_t *ctr = stats + idx; + assert(ctr->count > 1); + + // Increment the last counter if offset overflows. + if (offset < ctr->count) { + __atomic_add_fetch(&ctr->counters[offset], val, __ATOMIC_RELAXED); + } else { + __atomic_add_fetch(&ctr->counters[ctr->count - 1], val, __ATOMIC_RELAXED); + } +} + +inline static void mod_ctrs_decr(mod_ctr_t *stats, uint32_t idx, uint32_t offset, uint64_t val) +{ + mod_ctr_t *ctr = stats + idx; + assert(ctr->count > 1); + + // Increment the last counter if offset overflows. + if (offset < ctr->count) { + __atomic_sub_fetch(&ctr->counters[offset], val, __ATOMIC_RELAXED); + } else { + __atomic_sub_fetch(&ctr->counters[ctr->count - 1], val, __ATOMIC_RELAXED); + } +} + /*! \brief Single processing step in query processing. */ struct query_step { node_t node; @@ -110,6 +186,8 @@ struct query_plan { list_t stage[QUERY_PLAN_STAGES]; }; +static_module_t *find_module(const yp_name_t *name); + /*! \brief Create an empty query plan. */ struct query_plan *query_plan_create(knot_mm_t *mm); @@ -120,8 +198,11 @@ void query_plan_free(struct query_plan *plan); int query_plan_step(struct query_plan *plan, int stage, qmodule_process_t process, void *ctx); +int query_module_step(struct query_module *module, int stage, qmodule_process_t process); + /*! \brief Open query module identified by name. */ struct query_module *query_module_open(conf_t *config, conf_mod_id_t *mod_id, + struct query_plan *plan, const knot_dname_t *zone, knot_mm_t *mm); /*! \brief Close query module. */ diff --git a/src/knot/nameserver/update.c b/src/knot/nameserver/update.c index 2cffec82418fd6cdc546cd0d49cfd49a058f95a7..d878c1a17f2cfe953bc875295c16845be5264a06 100644 --- a/src/knot/nameserver/update.c +++ b/src/knot/nameserver/update.c @@ -124,7 +124,7 @@ static int process_bulk(zone_t *zone, list_t *requests, zone_update_t *up) return ret; } - process_query_qname_case_restore(&qdata, req->query); + process_query_qname_case_restore(req->query, &qdata); } return KNOT_EOK; @@ -418,7 +418,7 @@ int update_process_query(knot_pkt_t *pkt, struct query_data *qdata) NS_NEED_ZONE_CONTENTS(qdata, KNOT_RCODE_SERVFAIL); /* Restore original QNAME for DDNS ACL checks. */ - process_query_qname_case_restore(qdata, qdata->query); + process_query_qname_case_restore(qdata->query, qdata); /* Store update into DDNS queue. */ int ret = zone_update_enqueue(zone, qdata->query, qdata->param); if (ret != KNOT_EOK) { diff --git a/src/knot/server/journal.c b/src/knot/server/journal.c deleted file mode 100644 index 00d27cc0a63ed42c2ffb2c704ac230869c665329..0000000000000000000000000000000000000000 --- a/src/knot/server/journal.c +++ /dev/null @@ -1,1042 +0,0 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> - - 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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <fcntl.h> -#include <inttypes.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <assert.h> - -#include "knot/common/log.h" -#include "knot/server/journal.h" -#include "knot/server/serialization.h" -#include "knot/zone/zone.h" -#include "libknot/libknot.h" -#include "libknot/rrtype/soa.h" - -/*! \brief Infinite file size limit. */ -#define FSLIMIT_INF (~((size_t)0)) - -/*! \brief Next node. */ -#define jnode_next(j, i) (((i) + 1) % (j)->max_nodes) - -/*! \brief Previous node. */ -#define jnode_prev(j, i) (((i) == 0) ? (j)->max_nodes - 1 : (i) - 1) - -/*! \bref Starting node data position. */ -#define jnode_base_pos(max_nodes) (JOURNAL_HSIZE + (max_nodes + 1) * sizeof(journal_node_t)) - -static const uint32_t CRC_PLACEHOLDER = 0; - -static inline int sfread(void *dst, size_t len, int fd) -{ - return read(fd, dst, len) == len; -} - -static inline int sfwrite(const void *src, size_t len, int fd) -{ - return write(fd, src, len) == len; -} - -/*! \brief Equality compare function. */ -static inline int journal_cmp_eq(uint64_t k1, uint64_t k2) -{ - if (k1 > k2) return 1; - if (k1 < k2) return -1; - return 0; -} - -/*! \brief Return 'serial_from' part of the key. */ -static inline uint32_t journal_key_from(uint64_t k) -{ - /* 64 32 0 - * key = [TO | FROM] - * Need: Least significant 32 bits. - */ - return (uint32_t)(k & ((uint64_t)0x00000000ffffffff)); -} - -/*----------------------------------------------------------------------------*/ - -/*! \brief Compare function to match entries with starting serial. */ -static inline int journal_key_from_cmp(uint64_t k, uint64_t from) -{ - /* 64 32 0 - * key = [TO | FROM] - * Need: Least significant 32 bits. - */ - return ((uint64_t)journal_key_from(k)) - from; -} - -/*! \brief Make key for journal from serials. */ -static inline uint64_t ixfrdb_key_make(uint32_t from, uint32_t to) -{ - /* 64 32 0 - * key = [TO | FROM] - */ - return (((uint64_t)to) << ((uint64_t)32)) | ((uint64_t)from); -} - -/*! \brief Create new journal. */ -static int journal_create_file(const char *fn, uint16_t max_nodes) -{ - if (fn == NULL) { - return KNOT_EINVAL; - } - - /* File lock. */ - struct flock fl = { .l_type = F_WRLCK, .l_whence = SEEK_SET, - .l_start = 0, .l_len = 0, .l_pid = getpid() }; - - /* Create journal file. */ - int fd = open(fn, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP); - if (fd < 0) { - return knot_map_errno(); - } - - /* Lock. */ - if (fcntl(fd, F_SETLKW, &fl) == -1) { - close(fd); - remove(fn); - return KNOT_ERROR; - } - - /* Create journal header. */ - const char magic[MAGIC_LENGTH] = JOURNAL_MAGIC; - if (!sfwrite(magic, MAGIC_LENGTH, fd)) { - close(fd); - remove(fn); - return KNOT_ERROR; - } - - if (!sfwrite(&CRC_PLACEHOLDER, sizeof(CRC_PLACEHOLDER), fd)) { - close(fd); - remove(fn); - return KNOT_ERROR; - } - if (!sfwrite(&max_nodes, sizeof(uint16_t), fd)) { - close(fd); - remove(fn); - return KNOT_ERROR; - } - - /* Create node queue head + tail. - * qhead points to least recent node - * qtail points to next free node - * qhead == qtail means empty queue - */ - uint16_t zval = 0; - if (!sfwrite(&zval, sizeof(uint16_t), fd)) { - close(fd); - remove(fn); - return KNOT_ERROR; - } - - if (!sfwrite(&zval, sizeof(uint16_t), fd)) { - close(fd); - remove(fn); - return KNOT_ERROR; - } - - /* Create free segment descriptor. */ - journal_node_t jn; - memset(&jn, 0, sizeof(journal_node_t)); - jn.id = 0; - jn.flags = JOURNAL_VALID; - jn.pos = jnode_base_pos(max_nodes); - jn.len = 0; - if (!sfwrite(&jn, sizeof(journal_node_t), fd)) { - close(fd); - remove(fn); - return KNOT_ERROR; - } - - /* Create nodes. */ - memset(&jn, 0, sizeof(journal_node_t)); - for(uint16_t i = 0; i < max_nodes; ++i) { - if (!sfwrite(&jn, sizeof(journal_node_t), fd)) { - close(fd); - (void)remove(fn); - return KNOT_ERROR; - } - } - - /* Unlock and close. */ - close(fd); - - /* Journal file created. */ - return KNOT_EOK; -} - -/*! \brief Open journal file for r/w (returns error if not exists). */ -static int journal_open_file(journal_t *j) -{ - assert(j != NULL); - - int ret = KNOT_EOK; - j->fd = open(j->path, O_RDWR); - if (j->fd < 0) { - if (errno != ENOENT) { - return knot_map_errno(); - } - - /* Create new journal file and open if not exists. */ - ret = journal_create_file(j->path, JOURNAL_NCOUNT); - if(ret == KNOT_EOK) { - return journal_open_file(j); - } - return ret; - } - - /* File lock. */ - struct flock lock = { .l_type = F_WRLCK, .l_whence = SEEK_SET, - .l_start = 0, .l_len = 0, .l_pid = 0 }; - /* Attempt to lock. */ - ret = fcntl(j->fd, F_SETLKW, &lock); - if (ret < 0) { - return knot_map_errno(); - } - - /* Read magic bytes. */ - const char magic_req[MAGIC_LENGTH] = JOURNAL_MAGIC; - char magic[MAGIC_LENGTH]; - if (!sfread(magic, MAGIC_LENGTH, j->fd)) { - goto open_file_error; - } - if (memcmp(magic, magic_req, MAGIC_LENGTH) != 0) { - log_warning("journal '%s', version too old, purging", j->path); - close(j->fd); - j->fd = -1; - ret = journal_create_file(j->path, JOURNAL_NCOUNT); - if(ret == KNOT_EOK) { - return journal_open_file(j); - } - return ret; - } - - /* Skip CRC */ - if (lseek(j->fd, MAGIC_LENGTH + sizeof(CRC_PLACEHOLDER), SEEK_SET) < 0) { - goto open_file_error; - } - - /* Get journal file size. */ - struct stat st; - if (fstat(j->fd, &st) < 0) { - goto open_file_error; - } - - /* Set file size. */ - j->fsize = st.st_size; - - /* Read maximum number of entries. */ - if (!sfread(&j->max_nodes, sizeof(uint16_t), j->fd)) { - goto open_file_error; - } - - /* Check max_nodes, but this is riddiculous. */ - if (j->max_nodes == 0) { - goto open_file_error; - } - - /* Check minimum fsize limit. */ - size_t fslimit_min = jnode_base_pos(j->max_nodes) + 1024; /* At least 1K block */ - if (j->fslimit < fslimit_min) { - log_error("journal '%s', filesize limit smaller than '%zu'", j->path, fslimit_min); - goto open_file_error; - } - - /* Allocate nodes. */ - const size_t node_len = sizeof(journal_node_t); - j->nodes = malloc(j->max_nodes * node_len); - if (j->nodes == NULL) { - goto open_file_error; - } else { - memset(j->nodes, 0, j->max_nodes * node_len); - } - - /* Load node queue state. */ - j->qhead = j->qtail = 0; - if (!sfread(&j->qhead, sizeof(uint16_t), j->fd)) { - goto open_file_error; - } - - /* Load queue tail. */ - if (!sfread(&j->qtail, sizeof(uint16_t), j->fd)) { - goto open_file_error; - } - - /* Check head + tail */ - if (j->qtail >= j->max_nodes || j->qhead >= j->max_nodes) { - goto open_file_error; - } - - /* Load empty segment descriptor. */ - if (!sfread(&j->free, node_len, j->fd)) { - goto open_file_error; - } - - /* Read journal descriptors table. */ - if (!sfread(j->nodes, j->max_nodes * node_len, j->fd)) { - goto open_file_error; - } - - /* Save file lock and return. */ - return KNOT_EOK; - - /* Unlock and close file and return error. */ -open_file_error: - free(j->nodes); - j->nodes = NULL; - close(j->fd); - j->fd = -1; - return KNOT_ERROR; -} - -/*! \brief Close journal file. */ -static int journal_close_file(journal_t *journal) -{ - /* Check journal. */ - if (journal == NULL) { - return KNOT_EINVAL; - } - - /* Close file. */ - if (journal->fd > 0) { - close(journal->fd); - journal->fd = -1; - } - - /* Free nodes. */ - free(journal->nodes); - journal->nodes = NULL; - - return KNOT_EOK; -} - -/*! \brief Sync node state to permanent storage. */ -static int journal_update(journal_t *journal, journal_node_t *n) -{ - if (journal == NULL || n == NULL) { - return KNOT_EINVAL; - } - - /* Calculate node offset. */ - const size_t node_len = sizeof(journal_node_t); - size_t i = n - journal->nodes; - assert(i < journal->max_nodes); - - /* Calculate node position in permanent storage. */ - long jn_fpos = JOURNAL_HSIZE + (i + 1) * node_len; - - /* Write back. */ - int seek_ret = lseek(journal->fd, jn_fpos, SEEK_SET); - if (seek_ret < 0 || !sfwrite(n, node_len, journal->fd)) { - return KNOT_ERROR; - } - - return KNOT_EOK; -} - -int journal_write_in(journal_t *j, journal_node_t **rn, uint64_t id, size_t len) -{ - const size_t node_len = sizeof(journal_node_t); - *rn = NULL; - - /* Count rewinds. */ - bool already_rewound = false; - - /* Evict occupied nodes if necessary. */ - while (j->free.len < len || jnode_next(j, j->qtail) == j->qhead) { - - /* Increase free segment if on the end of file. */ - bool is_empty = (j->qtail == j->qhead); - journal_node_t *head = j->nodes + j->qhead; - journal_node_t *last = j->nodes + jnode_prev(j, j->qtail); - if (is_empty || (head->pos <= last->pos && j->free.pos > last->pos)) { - - /* Grow journal file until the size limit. */ - if(j->free.pos + len < j->fslimit && jnode_next(j, j->qtail) != j->qhead) { - size_t diff = len - j->free.len; - j->fsize += diff; /* Appending increases file size. */ - j->free.len += diff; - continue; - - } else if (!already_rewound) { - /* Rewind if resize is needed, but the limit is reached. */ - j->free.pos = jnode_base_pos(j->max_nodes); - j->free.len = 0; - if (!is_empty) { - j->free.len = head->pos - j->free.pos; - } - already_rewound = true; - } else { - /* Already rewound, but couldn't collect enough free space. */ - return KNOT_ESPACE; - } - - /* Continue until enough free space is collected. */ - continue; - } - - /* Check if it has been synced to disk. */ - if ((head->flags & JOURNAL_DIRTY) && (head->flags & JOURNAL_VALID)) { - return KNOT_EBUSY; - } - - /* Write back evicted node. */ - head->flags = JOURNAL_FREE; - int seek_ret = lseek(j->fd, JOURNAL_HSIZE + (j->qhead + 1) * node_len, SEEK_SET); - if (seek_ret < 0 || !sfwrite(head, node_len, j->fd)) { - return KNOT_ERROR; - } - - /* Write back query state. */ - j->qhead = (j->qhead + 1) % j->max_nodes; - uint16_t qstate[2] = {j->qhead, j->qtail}; - seek_ret = lseek(j->fd, JOURNAL_HSIZE - 2 * sizeof(uint16_t), SEEK_SET); - if (seek_ret < 0 || !sfwrite(qstate, 2 * sizeof(uint16_t), j->fd)) { - return KNOT_ERROR; - } - - /* Increase free segment. */ - j->free.len += head->len; - } - - /* Invalidate tail node and write back. */ - journal_node_t *n = j->nodes + j->qtail; - n->id = id; - n->pos = j->free.pos; - n->len = len; - n->flags = JOURNAL_FREE; - journal_update(j, n); - *rn = n; - return KNOT_EOK; -} - -int journal_write_out(journal_t *journal, journal_node_t *n) -{ - /* Mark node as valid and write back. */ - uint16_t jnext = (journal->qtail + 1) % journal->max_nodes; - size_t size = n->len; - const size_t node_len = sizeof(journal_node_t); - n->flags = JOURNAL_VALID | journal->bflags; - journal_update(journal, n); - - /* Mark used space. */ - journal->free.pos += size; - journal->free.len -= size; - - /* Write back free segment state. */ - int seek_ret = lseek(journal->fd, JOURNAL_HSIZE, SEEK_SET); - if (seek_ret < 0 || !sfwrite(&journal->free, node_len, journal->fd)) { - /* Node is marked valid and failed to shrink free space, - * node will be overwritten on the next write. Return error. - */ - return KNOT_ERROR; - } - - /* Node write successful. */ - journal->qtail = jnext; - - /* Write back queue state, not essential as it may be recovered. - * qhead - lowest valid node identifier (least recent) - * qtail - highest valid node identifier (most recently used) - */ - uint16_t qstate[2] = {journal->qhead, journal->qtail}; - seek_ret = lseek(journal->fd, JOURNAL_HSIZE - 2 * sizeof(uint16_t), SEEK_SET); - if (seek_ret < 0 || !sfwrite(qstate, 2 * sizeof(uint16_t), journal->fd)) { - return KNOT_ERROR; - } - - return KNOT_EOK; -} - -int journal_open(journal_t **journal, const char *path, size_t fslimit) -{ - if (journal == NULL || path == NULL) { - return KNOT_EINVAL; - } - - journal_t *j = malloc(sizeof(*j)); - if (j == NULL) { - return KNOT_ENOMEM; - } - - memset(j, 0, sizeof(*j)); - j->bflags = JOURNAL_DIRTY; - j->fd = -1; - - /* Set file size. */ - if (fslimit == 0) { - j->fslimit = FSLIMIT_INF; - } else { - j->fslimit = fslimit; - } - - /* Copy path. */ - j->path = strdup(path); - if (j->path == NULL) { - free(j); - return KNOT_ENOMEM; - } - - /* Open journal file. */ - int ret = journal_open_file(j); - if (ret != KNOT_EOK) { - journal_close(j); - return ret; - } - - *journal = j; - - return KNOT_EOK; -} - -/*! - * \brief Entry identifier compare function. - * - * \retval -n if k1 < k2 - * \retval +n if k1 > k2 - * \retval 0 if k1 == k2 - */ -typedef int (*journal_cmp_t)(uint64_t k1, uint64_t k2); - -static int journal_fetch(journal_t *journal, uint64_t id, - journal_cmp_t cf, journal_node_t** dst) -{ - if (journal == NULL || dst == NULL) { - return KNOT_EINVAL; - } - - /*! \todo Organize journal descriptors in btree? */ - size_t i = jnode_prev(journal, journal->qtail); - size_t endp = jnode_prev(journal, journal->qhead); - for(; i != endp; i = jnode_prev(journal, i)) { - journal_node_t *n = journal->nodes + i; - - /* Skip invalid nodes. */ - if (!(n->flags & JOURNAL_VALID)) { - continue; - } - - if (cf(n->id, id) == 0) { - *dst = journal->nodes + i; - return KNOT_EOK; - } - } - - return KNOT_ENOENT; -} - -static int journal_read_node(journal_t *journal, journal_node_t *n, char *dst) -{ - /* Check valid flag. */ - if (!(n->flags & JOURNAL_VALID)) { - return KNOT_EINVAL; - } - - /* Seek journal node. */ - int seek_ret = lseek(journal->fd, n->pos, SEEK_SET); - - /* Read journal node content. */ - if (seek_ret < 0 || !sfread(dst, n->len, journal->fd)) { - return KNOT_ERROR; - } - - return KNOT_EOK; -} - -int journal_map(journal_t *journal, uint64_t id, char **dst, size_t size, bool rdonly) -{ - if (journal == NULL || dst == NULL) { - return KNOT_EINVAL; - } - - /* Check if entry exists. */ - journal_node_t *n = NULL; - int ret = journal_fetch(journal, id, journal_cmp_eq, &n); - - /* Return if read-only, invalidate if rewritten to avoid duplicates. */ - if (rdonly) { - if (ret != KNOT_EOK) { - return ret; - } - } else { - /* Prepare journal write. */ - ret = journal_write_in(journal, &n, id, size); - if (ret != KNOT_EOK) { - return ret; - } - - /* Reserve data in permanent storage. */ - /*! \todo This is only needed when inflating journal file. */ - if (lseek(journal->fd, n->pos, SEEK_SET) < 0) { - return KNOT_ERROR; - } - char nbuf[4096] = {0}; - size_t wb = sizeof(nbuf); - while (size > 0) { - if (size < sizeof(nbuf)) { - wb = size; - } - if (!sfwrite(nbuf, wb, journal->fd)) { - return KNOT_ERROR; - } - size -= wb; - } - } - - /* Align offset to page size (required). */ - const size_t ps = sysconf(_SC_PAGESIZE); - off_t ps_delta = (n->pos % ps); - off_t off = n->pos - ps_delta; - - /* Map file region. */ - *dst = mmap(NULL, n->len + ps_delta, PROT_READ | PROT_WRITE, MAP_SHARED, - journal->fd, off); - if (*dst == ((void*)-1)) { - return KNOT_ERROR; - } - - /* Advise usage of memory. */ -#ifdef HAVE_MADVISE - madvise(*dst, n->len + ps_delta, MADV_SEQUENTIAL); -#endif - /* Correct dst pointer to alignment. */ - *dst += ps_delta; - - return KNOT_EOK; -} - -int journal_unmap(journal_t *journal, uint64_t id, void *ptr, int finalize) -{ - if (journal == NULL || ptr == NULL) { - return KNOT_EINVAL; - } - - /* Mapped node is on tail. */ - /* @todo: This is hack to allow read-only correct unmap. */ - int ret = KNOT_EOK; - journal_node_t *n = journal->nodes + journal->qtail; - if (!finalize) { - ret = journal_fetch(journal, id, journal_cmp_eq, &n); - if (ret != KNOT_EOK) { - return KNOT_ENOENT; - } - } - if(n->id != id) { - return KNOT_ENOENT; - } - - /* Realign memory. */ - const size_t ps = sysconf(_SC_PAGESIZE); - off_t ps_delta = (n->pos % ps); - ptr = ((char*)ptr - ps_delta); - - /* Unmap memory. */ - if (munmap(ptr, n->len + ps_delta) != 0) { - return KNOT_ERROR; - } - - /* Finalize. */ - if (finalize) { - ret = journal_write_out(journal, n); - } - return ret; -} - -int journal_close(journal_t *journal) -{ - /* Check journal. */ - if (journal == NULL) { - return KNOT_EINVAL; - } - - /* Close file. */ - journal_close_file(journal); - - /* Free allocated resources. */ - free(journal->path); - free(journal); - - return KNOT_EOK; -} - -bool journal_exists(const char *path) -{ - if (path == NULL) { - return false; - } - - /* Check journal file existence. */ - struct stat st; - return stat(path, &st) == 0; -} - -/*! \brief No doc here. Moved from zones.h (@mvavrusa) */ -static int changesets_unpack(changeset_t *chs) -{ - - /* Read changeset flags. */ - if (chs->data == NULL) { - return KNOT_EMALF; - } - size_t remaining = chs->size; - - /* Read initial changeset RRSet - SOA. */ - uint8_t *stream = chs->data + (chs->size - remaining); - knot_rrset_t rrset; - int ret = rrset_deserialize(stream, &remaining, &rrset); - if (ret != KNOT_EOK) { - return KNOT_EMALF; - } - - assert(rrset.type == KNOT_RRTYPE_SOA); - chs->soa_from = knot_rrset_copy(&rrset, NULL); - knot_rrset_clear(&rrset, NULL); - if (chs->soa_from == NULL) { - return KNOT_ENOMEM; - } - - /* Read remaining RRSets */ - bool in_remove_section = true; - while (remaining > 0) { - - /* Parse next RRSet. */ - stream = chs->data + (chs->size - remaining); - knot_rrset_init_empty(&rrset); - ret = rrset_deserialize(stream, &remaining, &rrset); - if (ret != KNOT_EOK) { - return KNOT_EMALF; - } - - /* Check for next SOA. */ - if (rrset.type == KNOT_RRTYPE_SOA) { - /* Move to ADD section if in REMOVE. */ - if (in_remove_section) { - chs->soa_to = knot_rrset_copy(&rrset, NULL); - if (chs->soa_to == NULL) { - ret = KNOT_ENOMEM; - break; - } - in_remove_section = false; - } else { - /* Final SOA, no-op. */ - ; - } - } else { - /* Remove RRSets. */ - if (in_remove_section) { - ret = changeset_add_removal(chs, &rrset, 0); - } else { - /* Add RRSets. */ - ret = changeset_add_addition(chs, &rrset, 0); - } - } - knot_rrset_clear(&rrset, NULL); - if (ret != KNOT_EOK) { - break; - } - } - - return ret; -} - -static int rrset_write_to_mem(const knot_rrset_t *rr, char **entry, - size_t *remaining) { - size_t written = 0; - int ret = rrset_serialize(rr, *((uint8_t **)entry), - &written); - if (ret == KNOT_EOK) { - assert(written <= *remaining); - *remaining -= written; - *entry += written; - } - - return ret; -} - -static int serialize_and_store_chgset(const changeset_t *chs, - char *entry, size_t max_size) -{ - /* Serialize SOA 'from'. */ - int ret = rrset_write_to_mem(chs->soa_from, &entry, &max_size); - if (ret != KNOT_EOK) { - return ret; - } - - changeset_iter_t itt; - ret = changeset_iter_rem(&itt, chs, false); - if (ret != KNOT_EOK) { - return ret; - } - - knot_rrset_t rrset = changeset_iter_next(&itt); - while (!knot_rrset_empty(&rrset)) { - ret = rrset_write_to_mem(&rrset, &entry, &max_size); - if (ret != KNOT_EOK) { - changeset_iter_clear(&itt); - return ret; - } - rrset = changeset_iter_next(&itt); - } - changeset_iter_clear(&itt); - - /* Serialize SOA 'to'. */ - ret = rrset_write_to_mem(chs->soa_to, &entry, &max_size); - if (ret != KNOT_EOK) { - return ret; - } - - /* Serialize RRSets from the 'add' section. */ - ret = changeset_iter_add(&itt, chs, false); - if (ret != KNOT_EOK) { - return ret; - } - - rrset = changeset_iter_next(&itt); - while (!knot_rrset_empty(&rrset)) { - ret = rrset_write_to_mem(&rrset, &entry, &max_size); - if (ret != KNOT_EOK) { - changeset_iter_clear(&itt); - return ret; - } - rrset = changeset_iter_next(&itt); - } - changeset_iter_clear(&itt); - - return KNOT_EOK; -} - -static int changeset_pack(const changeset_t *chs, journal_t *j) -{ - assert(chs != NULL); - assert(j != NULL); - - uint64_t k = ixfrdb_key_make(knot_soa_serial(&chs->soa_from->rrs), - knot_soa_serial(&chs->soa_to->rrs)); - - /* Count the size of the entire changeset in serialized form. */ - size_t entry_size = 0; - - int ret = changeset_binary_size(chs, &entry_size); - assert(ret == KNOT_EOK); - - /* Reserve space for the journal entry. */ - char *journal_entry = NULL; - ret = journal_map(j, k, &journal_entry, entry_size, false); - if (ret != KNOT_EOK) { - return ret; - } - - assert(journal_entry != NULL); - - /* Serialize changeset, saving it bit by bit. */ - ret = serialize_and_store_chgset(chs, journal_entry, entry_size); - /* Unmap the journal entry. - * If successfully written changeset to journal, validate the entry. */ - int unmap_ret = journal_unmap(j, k, journal_entry, ret == KNOT_EOK); - if (ret == KNOT_EOK && unmap_ret != KNOT_EOK) { - ret = unmap_ret; /* Propagate the result. */ - } - - return ret; -} - -/*! \brief Helper for iterating journal (this is temporary until #80) */ -typedef int (*journal_apply_t)(journal_t *, journal_node_t *, const zone_t *, list_t *); -static int journal_walk(const char *fn, uint32_t from, uint32_t to, - journal_apply_t cb, const zone_t *zone, list_t *chgs) -{ - /* Open journal for reading. */ - journal_t *journal = NULL; - int ret = journal_open(&journal, fn, FSLIMIT_INF); - if (ret != KNOT_EOK) { - return ret; - } - /* Read entries from starting serial until finished. */ - uint32_t found_to = from; - journal_node_t *n = 0; - ret = journal_fetch(journal, from, journal_key_from_cmp, &n); - if (ret != KNOT_EOK) { - goto finish; - } - - size_t i = n - journal->nodes; - assert(i < journal->max_nodes); - - for (; i != journal->qtail; i = jnode_next(journal, i)) { - journal_node_t *n = journal->nodes + i; - - /* Skip invalid nodes. */ - if (!(n->flags & JOURNAL_VALID)) { - continue; - } - - /* Check for history end. */ - if (to == found_to) { - break; - } - - /* Callback. */ - ret = cb(journal, n, zone, chgs); - if (ret != KNOT_EOK) { - break; - } - } - -finish: - /* Close journal. */ - journal_close(journal); - return ret; -} - -static int load_changeset(journal_t *journal, journal_node_t *n, const zone_t *zone, list_t *chgs) -{ - changeset_t *ch = changeset_new(zone->name); - if (ch == NULL) { - return KNOT_ENOMEM; - } - - /* Initialize changeset. */ - ch->data = malloc(n->len); - if (!ch->data) { - return KNOT_ENOMEM; - } - - /* Read journal entry. */ - int ret = journal_read_node(journal, n, (char*)ch->data); - if (ret != KNOT_EOK) { - return ret; - } - - /* Update changeset binary size. */ - ch->size = n->len; - - /* Insert into changeset list. */ - add_tail(chgs, &ch->n); - - return KNOT_EOK; -} - -int journal_load_changesets(const char *path, const zone_t *zone, list_t *dst, - uint32_t from, uint32_t to) -{ - int ret = journal_walk(path, from, to, &load_changeset, zone, dst); - if (ret != KNOT_EOK) { - return ret; - } - - /* Unpack binary data. */ - assert(dst != NULL); - /* - * Parses changesets from the binary format stored in chgsets->data - * into the changeset_t structures. - */ - changeset_t* chs = NULL; - WALK_LIST(chs, *dst) { - ret = changesets_unpack(chs); - if (ret != KNOT_EOK) { - return ret; - } - } - - /* Check for complete history. */ - changeset_t *last = TAIL(*dst); - if (to != knot_soa_serial(&last->soa_to->rrs)) { - return KNOT_ERANGE; - } - - return KNOT_EOK; -} - -int journal_store_changesets(list_t *src, const char *path, size_t size_limit) -{ - if (src == NULL || path == NULL) { - return KNOT_EINVAL; - } - - /* Open journal for reading. */ - journal_t *journal = NULL; - int ret = journal_open(&journal, path, size_limit); - if (ret != KNOT_EOK) { - return ret; - } - /* Begin writing to journal. */ - changeset_t *chs = NULL; - WALK_LIST(chs, *src) { - ret = changeset_pack(chs, journal); - if (ret != KNOT_EOK) { - break; - } - } - - journal_close(journal); - return ret; -} - -int journal_store_changeset(changeset_t *change, const char *path, size_t size_limit) -{ - if (change == NULL || path == NULL) { - return KNOT_EINVAL; - } - - /* Open journal for reading. */ - journal_t *journal = NULL; - int ret = journal_open(&journal, path, size_limit); - if (ret != KNOT_EOK) { - return ret; - } - - ret = changeset_pack(change, journal); - - journal_close(journal); - return ret; -} - -static void mark_synced(journal_t *journal, journal_node_t *node) -{ - /* Check for dirty bit (not synced to permanent storage). */ - if (node->flags & JOURNAL_DIRTY) { - /* Remove dirty bit. */ - node->flags = node->flags & ~JOURNAL_DIRTY; - journal_update(journal, node); - } -} - -int journal_mark_synced(const char *path) -{ - if (!journal_exists(path)) { - return KNOT_EOK; - } - journal_t *journal = NULL; - int ret = journal_open(&journal, path, FSLIMIT_INF); - if (ret != KNOT_EOK) { - return ret; - } - size_t i = journal->qhead; - for(; i != journal->qtail; i = jnode_next(journal, i)) { - mark_synced(journal, journal->nodes + i); - } - - journal_close(journal); - - return KNOT_EOK; -} diff --git a/src/knot/server/journal.h b/src/knot/server/journal.h deleted file mode 100644 index c930bf4152edf16aec56b43a9ad5c3c972ceec7c..0000000000000000000000000000000000000000 --- a/src/knot/server/journal.h +++ /dev/null @@ -1,209 +0,0 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> - - 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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -/*! - * \file journal.h - * - * \author Marek Vavrusa <marek.vavrusa@nic.cz> - * - * \brief Journal for storing transactions on permanent storage. - * - * Journal stores entries on a permanent storage. - * Each written entry is guaranteed to persist until - * the maximum file size or node count is reached. - * Entries are removed from the least recent. - * - * Journal file structure - * <pre> - * uint16_t node_count - * uint16_t node_queue_head - * uint16_t node_queue_tail - * journal_entry_t free_segment - * node_count *journal_entry_t - * ...data... - * </pre> - * \addtogroup utils - * @{ - */ - -#pragma once - -#include <stdint.h> -#include <fcntl.h> -#include <pthread.h> -#include <stdbool.h> -#include "knot/updates/changesets.h" - -struct zone; - -/*! - * \brief Journal entry flags. - */ -typedef enum journal_flag_t { - JOURNAL_NULL = 0 << 0, /*!< Invalid journal entry. */ - JOURNAL_FREE = 1 << 0, /*!< Free journal entry. */ - JOURNAL_VALID = 1 << 1, /*!< Valid journal entry. */ - JOURNAL_DIRTY = 1 << 2 /*!< Journal entry cannot be evicted. */ -} journal_flag_t; - -/*! - * \brief Journal node structure. - * - * Each node represents journal entry and points - * to position of the data in the permanent storage. - */ -typedef struct journal_node -{ - uint64_t id; /*!< Node ID. */ - uint16_t flags; /*!< Node flags. */ - uint16_t next; /*!< UNUSED */ - uint32_t pos; /*!< Position in journal file. */ - uint32_t len; /*!< Entry data length. */ -} journal_node_t; - -/*! - * \brief Journal structure. - * - * Journal organizes entries as nodes. - * Nodes are stored in-memory for fast lookup and also - * backed by a permanent storage. - * Each journal has a fixed number of nodes. - * - */ -typedef struct journal -{ - int fd; - char *path; /*!< Path to journal file. */ - uint16_t tmark; /*!< Transaction start mark. */ - uint16_t max_nodes; /*!< Number of nodes. */ - uint16_t qhead; /*!< Node queue head. */ - uint16_t qtail; /*!< Node queue tail. */ - uint16_t bflags; /*!< Initial flags for each written node. */ - size_t fsize; /*!< Journal file size. */ - size_t fslimit; /*!< File size limit. */ - journal_node_t free; /*!< Free segment. */ - journal_node_t *nodes; /*!< Array of nodes. */ -} journal_t; - -/* - * Journal defaults and constants. - */ -#define JOURNAL_NCOUNT 1024 /*!< Default node count. */ -#define JOURNAL_MAGIC {'k', 'n', 'o', 't', '1', '5', '2'} -#define MAGIC_LENGTH 7 -/* HEADER = magic, crc, max_entries, qhead, qtail */ -#define JOURNAL_HSIZE (MAGIC_LENGTH + sizeof(uint32_t) + sizeof(uint16_t) * 3) - -/*! - * \brief Open journal. - * - * \param journal Returned journal. - * \param path Journal file name. - * \param fslimit File size limit (0 for no limit). - * - * \retval new journal instance if successful. - * \retval NULL on error. - */ -int journal_open(journal_t **journal, const char *path, size_t fslimit); - -/*! - * \brief Map journal entry for read/write. - * - * \warning New nodes shouldn't be created until the entry is unmapped. - * - * \param journal Associated journal. - * \param id Entry identifier. - * \param dst Will contain mapped memory. - * \param rdonly If read only. - * - * \retval KNOT_EOK if successful. - * \retval KNOT_ESPACE if entry too big. - * \retval KNOT_ERROR on I/O error. - */ -int journal_map(journal_t *journal, uint64_t id, char **dst, size_t size, bool rdonly); - -/*! - * \brief Finalize mapped journal entry. - * - * \param journal Associated journal. - * \param id Entry identifier. - * \param ptr Mapped memory. - * \param finalize Set to true to finalize node or False to discard it. - * - * \retval KNOT_EOK if successful. - * \retval KNOT_ENOENT if the entry cannot be found. - * \retval KNOT_ERROR on I/O error. - */ -int journal_unmap(journal_t *journal, uint64_t id, void *ptr, int finalize); - -/*! - * \brief Close journal file. - * - * \param journal Associated journal. - * - * \retval KNOT_EOK on success. - * \retval KNOT_EINVAL on invalid parameter. - */ -int journal_close(journal_t *journal); - -/*! - * \brief Check if the journal file is used or not. - * - * \param path Journal file. - * - * \return true or false - */ -bool journal_exists(const char *path); - -/*! - * \brief Load changesets from journal. - * - * \param path Path to journal file. - * \param zone Corresponding zone. - * \param dst Store changesets here. - * \param from Start serial. - * \param to End serial. - * - * \retval KNOT_EOK on success. - * \retval KNOT_ERANGE if given entry was not found. - * \return < KNOT_EOK on error. - */ -int journal_load_changesets(const char *path, const struct zone *zone, list_t *dst, - uint32_t from, uint32_t to); - -/*! - * \brief Store changesets in journal. - * - * \param src Changesets to store. - * \param path Path to journal file. - * \param size_limit Size limit extracted from configuration. - * - * \retval KNOT_EOK on success. - * \retval KNOT_EBUSY when journal is full. - * \return < KNOT_EOK on other errors. - */ -int journal_store_changesets(list_t *src, const char *path, size_t size_limit); -int journal_store_changeset(changeset_t *change, const char *path, size_t size_limit); - -/*! \brief Function for unmarking dirty nodes. */ -/*! - * \brief Function for unmarking dirty nodes. - * \param path Path to journal file. - * \retval KNOT_ENOMEM if journal could not be opened. - * \retval KNOT_EOK on success. - */ -int journal_mark_synced(const char *path); - -/*! @} */ diff --git a/src/knot/server/serialization.c b/src/knot/server/serialization.c deleted file mode 100644 index 191e0de463893440c1d1bdc82f6d25db81f92074..0000000000000000000000000000000000000000 --- a/src/knot/server/serialization.c +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> - - 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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <assert.h> - -#include "knot/server/serialization.h" -#include "libknot/libknot.h" - -static size_t rr_binary_size(const knot_rrset_t *rrset, size_t rdata_pos) -{ - const knot_rdata_t *rr = knot_rdataset_at(&rrset->rrs, rdata_pos); - if (rr) { - // RR size + TTL - return knot_rdata_rdlen(rr) + sizeof(uint32_t); - } else { - return 0; - } -} - -static uint64_t rrset_binary_size(const knot_rrset_t *rrset) -{ - if (rrset == NULL || rrset->rrs.rr_count == 0) { - return 0; - } - uint64_t size = sizeof(uint64_t) + // size at the beginning - knot_dname_size(rrset->owner) + // owner data - sizeof(uint16_t) + // type - sizeof(uint16_t) + // class - sizeof(uint16_t); //RR count - uint16_t rdata_count = rrset->rrs.rr_count; - for (uint16_t i = 0; i < rdata_count; i++) { - /* Space to store length of one RR. */ - size += sizeof(uint32_t); - /* Actual data. */ - size += rr_binary_size(rrset, i); - } - - return size; -} - -static void serialize_rr(const knot_rrset_t *rrset, size_t rdata_pos, - uint8_t *stream) -{ - const knot_rdata_t *rr = knot_rdataset_at(&rrset->rrs, rdata_pos); - assert(rr); - uint32_t ttl = knot_rdata_ttl(rr); - memcpy(stream, &ttl, sizeof(uint32_t)); - memcpy(stream + sizeof(uint32_t), knot_rdata_data(rr), knot_rdata_rdlen(rr)); -} - -static int deserialize_rr(knot_rrset_t *rrset, const uint8_t *stream, uint32_t rdata_size) -{ - uint32_t ttl; - memcpy(&ttl, stream, sizeof(uint32_t)); - return knot_rrset_add_rdata(rrset, stream + sizeof(uint32_t), - rdata_size - sizeof(uint32_t), ttl, NULL); -} - -int changeset_binary_size(const changeset_t *chgset, size_t *size) -{ - if (chgset == NULL || size == NULL) { - return KNOT_EINVAL; - } - - size_t soa_from_size = rrset_binary_size(chgset->soa_from); - size_t soa_to_size = rrset_binary_size(chgset->soa_to); - changeset_iter_t itt; - changeset_iter_all(&itt, chgset, false); - - size_t change_size = 0; - knot_rrset_t rrset = changeset_iter_next(&itt); - while (!knot_rrset_empty(&rrset)) { - change_size += rrset_binary_size(&rrset); - rrset = changeset_iter_next(&itt); - } - - changeset_iter_clear(&itt); - - *size = soa_from_size + soa_to_size + change_size; - - return KNOT_EOK; -} - -int rrset_serialize(const knot_rrset_t *rrset, uint8_t *stream, size_t *size) -{ - if (rrset == NULL || rrset->rrs.data == NULL) { - return KNOT_EINVAL; - } - - uint64_t rrset_length = rrset_binary_size(rrset); - memcpy(stream, &rrset_length, sizeof(uint64_t)); - - size_t offset = sizeof(uint64_t); - /* Save RR count. */ - const uint16_t rr_count = rrset->rrs.rr_count; - memcpy(stream + offset, &rr_count, sizeof(uint16_t)); - offset += sizeof(uint16_t); - /* Save owner. */ - offset += knot_dname_to_wire(stream + offset, rrset->owner, rrset_length - offset); - - /* Save static data. */ - memcpy(stream + offset, &rrset->type, sizeof(uint16_t)); - offset += sizeof(uint16_t); - memcpy(stream + offset, &rrset->rclass, sizeof(uint16_t)); - offset += sizeof(uint16_t); - - /* Copy RDATA. */ - for (uint16_t i = 0; i < rr_count; i++) { - uint32_t knot_rr_size = rr_binary_size(rrset, i); - memcpy(stream + offset, &knot_rr_size, sizeof(uint32_t)); - offset += sizeof(uint32_t); - serialize_rr(rrset, i, stream + offset); - offset += knot_rr_size; - } - - *size = offset; - assert(*size == rrset_length); - return KNOT_EOK; -} - -int rrset_deserialize(const uint8_t *stream, size_t *stream_size, - knot_rrset_t *rrset) -{ - if (stream == NULL || stream_size == NULL || - rrset == NULL) { - return KNOT_EINVAL; - } - - if (sizeof(uint64_t) > *stream_size) { - return KNOT_ESPACE; - } - uint64_t rrset_length = 0; - memcpy(&rrset_length, stream, sizeof(uint64_t)); - if (rrset_length > *stream_size) { - return KNOT_ESPACE; - } - - size_t offset = sizeof(uint64_t); - uint16_t rdata_count = 0; - memcpy(&rdata_count, stream + offset, sizeof(uint16_t)); - offset += sizeof(uint16_t); - /* Read owner from the stream. */ - unsigned owner_size = knot_dname_size(stream + offset); - knot_dname_t *owner = knot_dname_copy_part(stream + offset, owner_size, NULL); - assert(owner); - offset += owner_size; - /* Read type. */ - uint16_t type = 0; - memcpy(&type, stream + offset, sizeof(uint16_t)); - offset += sizeof(uint16_t); - /* Read class. */ - uint16_t rclass = 0; - memcpy(&rclass, stream + offset, sizeof(uint16_t)); - offset += sizeof(uint16_t); - - /* Create new RRSet. */ - knot_rrset_init(rrset, owner, type, rclass); - - /* Read RRs. */ - for (uint16_t i = 0; i < rdata_count; i++) { - /* - * There's always size of rdata in the beginning. - * Needed because of remainders. - */ - uint32_t rdata_size = 0; - memcpy(&rdata_size, stream + offset, sizeof(uint32_t)); - offset += sizeof(uint32_t); - int ret = deserialize_rr(rrset, stream + offset, rdata_size); - if (ret != KNOT_EOK) { - knot_rrset_clear(rrset, NULL); - return ret; - } - offset += rdata_size; - } - - *stream_size = *stream_size - offset; - - return KNOT_EOK; -} diff --git a/src/knot/server/serialization.h b/src/knot/server/serialization.h deleted file mode 100644 index 66b5ddbe4c22a14ee909b7885d9a1655ddb99765..0000000000000000000000000000000000000000 --- a/src/knot/server/serialization.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> - - 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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -/*! - * \file - * - * \brief API for changeset serialization. - * - * \addtogroup server - * @{ - */ - -#pragma once - -#include <stdint.h> -#include "libknot/rrset.h" -#include "knot/updates/changesets.h" - -/*! - * \brief Returns size of changeset in serialized form. - * - * \param chgset Changeset whose size we want to compute. - * \param size Output size parameter. - * - * \return KNOT_E* - */ -int changeset_binary_size(const changeset_t *chgset, size_t *size); - -/*! - * \brief Serializes one RRSet into given stream. - * - * \param rrset RRSet to be serialized. - * \param stream Stream to store RRSet into. - * \param size Output size of serialized RRSet in the stream. - * - * \return KNOT_E* - */ -int rrset_serialize(const knot_rrset_t *rrset, uint8_t *stream, size_t *size); - -/*! - * \brief Deserializes RRSet from given stream. - * - * \param stream Stream containing serialized RRSet. - * \param stream_size Output stream size after RRSet has been deserialized. - * \param rrset Output deserialized rrset. - * - * \return KNOT_E* - */ -int rrset_deserialize(const uint8_t *stream, size_t *stream_size, - knot_rrset_t *rrset); - -/*! @} */ diff --git a/src/knot/server/server.c b/src/knot/server/server.c index 6af10c0891ebc906be62b3817563461a77ec6c0e..71dad2cd44ff5a1cddae7bc724b65cb567a34529 100644 --- a/src/knot/server/server.c +++ b/src/knot/server/server.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -22,6 +22,9 @@ #include "libknot/errcode.h" #include "knot/common/log.h" +#include "knot/common/stats.h" +#include "knot/conf/confio.h" +#include "knot/conf/migration.h" #include "knot/server/server.h" #include "knot/server/udp-handler.h" #include "knot/server/tcp-handler.h" @@ -151,11 +154,11 @@ static int server_init_iface(iface_t *new_if, struct sockaddr_storage *addr, int sockaddr_tostr(addr_str, sizeof(addr_str), (struct sockaddr *)addr); int udp_socket_count = 1; - int bind_flags = 0; + int udp_bind_flags = 0; #ifdef ENABLE_REUSEPORT udp_socket_count = udp_thread_count; - bind_flags |= NET_BIND_MULTIPLE; + udp_bind_flags |= NET_BIND_MULTIPLE; #endif new_if->fd_udp = malloc(udp_socket_count * sizeof(int)); @@ -174,10 +177,10 @@ static int server_init_iface(iface_t *new_if, struct sockaddr_storage *addr, int /* Create bound UDP sockets. */ for (int i = 0; i < udp_socket_count; i++ ) { - int sock = net_bound_socket(SOCK_DGRAM, (struct sockaddr *)addr, bind_flags); + int sock = net_bound_socket(SOCK_DGRAM, (struct sockaddr *)addr, udp_bind_flags); if (sock == KNOT_EADDRNOTAVAIL) { - bind_flags |= NET_BIND_NONLOCAL; - sock = net_bound_socket(SOCK_DGRAM, (struct sockaddr *)addr, bind_flags); + udp_bind_flags |= NET_BIND_NONLOCAL; + sock = net_bound_socket(SOCK_DGRAM, (struct sockaddr *)addr, udp_bind_flags); if (sock >= 0 && !warn_bind) { log_warning("address '%s' is not available", addr_str); warn_bind = true; @@ -206,7 +209,7 @@ static int server_init_iface(iface_t *new_if, struct sockaddr_storage *addr, int } /* Create bound TCP socket. */ - int sock = net_bound_socket(SOCK_STREAM, (struct sockaddr *)addr, bind_flags); + int sock = net_bound_socket(SOCK_STREAM, (struct sockaddr *)addr, 0); if (sock < 0) { log_error("cannot bind address '%s' (%s)", addr_str, knot_strerror(sock)); @@ -376,6 +379,17 @@ int server_init(server_t *server, int bg_workers) return KNOT_ENOMEM; } + char *journal_dir = conf_journalfile(conf()); + conf_val_t journal_size = conf_default_get(conf(), C_MAX_JOURNAL_DB_SIZE); + int ret = journal_db_init(&server->journal_db, journal_dir, + conf_int(&journal_size)); + free(journal_dir); + if (ret != KNOT_EOK) { + worker_pool_destroy(server->workers); + evsched_deinit(&server->sched); + return ret; + } + return KNOT_EOK; } @@ -397,15 +411,15 @@ void server_deinit(server_t *server) /* Free threads and event handlers. */ worker_pool_destroy(server->workers); - /* Free rate limits. */ - rrl_destroy(server->rrl); - /* Free zone database. */ knot_zonedb_deep_free(&server->zone_db); /* Free remaining events. */ evsched_deinit(&server->sched); + /* Close journal database if open. */ + journal_db_close(&server->journal_db); + /* Close persistent timers database. */ zone_timers_close(server->timers_db); @@ -507,13 +521,44 @@ void server_wait(server_t *server) } } -int server_reload(server_t *server, const char *cf, bool refresh_hostname) +static int reload_conf(conf_t *new_conf) +{ + /* Re-import zonefile if specified. */ + const char *filename = conf()->filename; + if (filename != NULL) { + log_info("reloading configuration file '%s'", filename); + + /* Import the configuration file. */ + int ret = conf_import(new_conf, filename, true); + if (ret != KNOT_EOK) { + log_error("failed to load configuration file (%s)", + knot_strerror(ret)); + conf_free(new_conf); + return ret; + } + } else { + log_info("reloading configuration database"); + } + + // Migrate from old schema. + int ret = conf_migrate(new_conf); + if (ret != KNOT_EOK) { + log_error("failed to migrate configuration (%s)", knot_strerror(ret)); + } + + /* Refresh hostname. */ + conf_refresh_hostname(new_conf); + + return KNOT_EOK; +} + +int server_reload(server_t *server) { if (server == NULL) { return KNOT_EINVAL; } - // Check for no edit mode. + /* Check for no edit mode. */ if (conf()->io.txn != NULL) { log_warning("reload aborted due to active configuration transaction"); return KNOT_TXN_EEXISTS; @@ -527,38 +572,53 @@ int server_reload(server_t *server, const char *cf, bool refresh_hostname) return ret; } - if (cf != NULL) { - log_info("reloading configuration file '%s'", cf); + yp_flag_t flags = conf()->io.flags; + bool full = !(flags & CONF_IO_FACTIVE); + bool reuse_modules = !full && !(flags & CONF_IO_FRLD_MOD); - /* Import the configuration file. */ - ret = conf_import(new_conf, cf, true); + /* Reload configuration if full reload. */ + if (full) { + ret = reload_conf(new_conf); if (ret != KNOT_EOK) { - log_error("failed to load configuration file (%s)", - knot_strerror(ret)); - conf_free(new_conf); return ret; } - } else { - log_info("reloading configuration database"); } - /* Activate global query modules. */ - conf_activate_modules(new_conf, NULL, &new_conf->query_modules, - &new_conf->query_plan); + /* Load global modules if full reload or required. */ + if (full || !reuse_modules) { + conf_activate_modules(new_conf, NULL, &new_conf->query_modules, + &new_conf->query_plan); + } - /* Refresh hostname. */ - if (refresh_hostname) { - conf_refresh_hostname(new_conf); + conf_update_flag_t upd_flags = full ? CONF_UPD_FNONE : CONF_UPD_FCONFIO; + if (reuse_modules) { + upd_flags |= CONF_UPD_FMODULES; } /* Update to the new config. */ - conf_update(new_conf); + conf_update(new_conf, upd_flags); - log_reconfigure(conf()); - server_reconfigure(conf(), server); - server_update_zones(conf(), server); + /* Reload each component if full reload or a specific one if required. */ + if (full || (flags & CONF_IO_FRLD_LOG)) { + log_reconfigure(conf()); + } + if (full || (flags & CONF_IO_FRLD_SRV)) { + server_reconfigure(conf(), server); + stats_reconfigure(conf(), server); + } + if (full || (flags & (CONF_IO_FRLD_ZONES | CONF_IO_FRLD_ZONE))) { + server_update_zones(conf(), server); + } - log_info("configuration reloaded"); + if (full) { + log_info("configuration reloaded"); + } else { + // Reset confio reload context. + conf()->io.flags = YP_FNONE; + if (conf()->io.zones != NULL) { + hattrie_clear(conf()->io.zones); + } + } return KNOT_EOK; } @@ -614,37 +674,32 @@ static int reconfigure_threads(conf_t *conf, server_t *server) return reset_handler(server, IO_TCP, conf_tcp_threads(conf), tcp_master); } -static int reconfigure_rate_limits(conf_t *conf, server_t *server) +static int reconfigure_journal_db(conf_t *conf, server_t *server) { - conf_val_t val = conf_get(conf, C_SRV, C_RATE_LIMIT); - int64_t rrl = conf_int(&val); - - /* Rate limiting. */ - if (!server->rrl && rrl > 0) { - val = conf_get(conf, C_SRV, C_RATE_LIMIT_TBL_SIZE); - server->rrl = rrl_create(conf_int(&val)); - if (!server->rrl) { - log_error("failed to initialize rate limiting table"); - } else { - rrl_setlocks(server->rrl, RRL_LOCK_GRANULARITY); + char *journal_dir = conf_journalfile(conf); + conf_val_t journal_size = conf_default_get(conf, C_MAX_JOURNAL_DB_SIZE); + bool changed_path = (strcmp(journal_dir, server->journal_db->path) != 0); + bool changed_size = (conf_int(&journal_size) != server->journal_db->fslimit); + int ret = KNOT_EOK; + + if (server->journal_db->db != NULL) { + if (changed_path) { + log_warning("journal, ignored reconfiguration of journal DB path (already open)"); + } + if (changed_size) { + log_warning("journal, ignored reconfiguration of journal DB max size (already open)"); + } + } else if (changed_path || changed_size) { + journal_db_t *newjdb = NULL; + ret = journal_db_init(&newjdb, journal_dir, conf_int(&journal_size)); + if (ret == KNOT_EOK) { + journal_db_close(&server->journal_db); + server->journal_db = newjdb; } } - if (server->rrl) { - if (rrl_rate(server->rrl) != rrl) { - /* We cannot free it, threads may use it. - * Setting it to <1 will disable rate limiting. */ - if (rrl < 1) { - log_info("rate limiting, disabled"); - } else { - log_info("rate limiting, enabled with %i responses/second", - (int)rrl); - } - rrl_setrate(server->rrl, rrl); - - } /* At this point, old buckets will converge to new rate. */ - } + free(journal_dir); - return KNOT_EOK; + return ret; } void server_reconfigure(conf_t *conf, server_t *server) @@ -658,16 +713,16 @@ void server_reconfigure(conf_t *conf, server_t *server) log_info("Knot DNS %s starting", PACKAGE_VERSION); } - /* Reconfigure rate limits. */ + /* Reconfigure server threads. */ int ret; - if ((ret = reconfigure_rate_limits(conf, server)) < 0) { - log_error("failed to reconfigure rate limits (%s)", + if ((ret = reconfigure_threads(conf, server)) < 0) { + log_error("failed to reconfigure server threads (%s)", knot_strerror(ret)); } - /* Reconfigure server threads. */ - if ((ret = reconfigure_threads(conf, server)) < 0) { - log_error("failed to reconfigure server threads (%s)", + /* Reconfigure journal DB. */ + if ((ret = reconfigure_journal_db(conf, server)) < 0) { + log_error("failed to reconfigure journal DB (%s)", knot_strerror(ret)); } diff --git a/src/knot/server/server.h b/src/knot/server/server.h index 3998672577be3d915c14ee1c1a1770b193ebf994..efbc8de0d81c3925edc91e9ba309cbccacf23510 100644 --- a/src/knot/server/server.h +++ b/src/knot/server/server.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -34,7 +34,6 @@ #include "knot/common/fdset.h" #include "knot/server/dthreads.h" #include "knot/common/ref.h" -#include "knot/server/rrl.h" #include "knot/worker/pool.h" #include "knot/zone/zonedb.h" #include "contrib/ucw/lists.h" @@ -96,6 +95,7 @@ typedef struct server { /*! \brief Zone database. */ knot_zonedb_t *zone_db; knot_db_t *timers_db; + journal_db_t *journal_db; /*! \brief I/O handlers. */ struct { @@ -110,10 +110,7 @@ typedef struct server { evsched_t sched; /*! \brief List of interfaces. */ - ifacelist_t* ifaces; - - /*! \brief Rate limiting. */ - rrl_table_t *rrl; + ifacelist_t *ifaces; } server_t; @@ -155,12 +152,11 @@ void server_wait(server_t *server); /*! * \brief Reload server configuration. * - * \param server Server instance. - * \param cf Config file path. - * \param refresh_hostname Refresh hostname indicator. - * \return + * \param server Server instance. + * + * \return Error code, KNOT_EOK if success. */ -int server_reload(server_t *server, const char *cf, bool refresh_hostname); +int server_reload(server_t *server); /*! * \brief Requests server to stop. @@ -174,7 +170,7 @@ void server_stop(server_t *server); * * Routine for dynamic server reconfiguration. */ -void server_reconfigure(conf_t *conf, server_t *data); +void server_reconfigure(conf_t *conf, server_t *server); /*! * \brief Reconfigure zone database. diff --git a/src/knot/server/udp-handler.c b/src/knot/server/udp-handler.c index 8c47fcc245f33b44121913af5da2ef88a05b2b8b..d2d76998d7260c54771d702cd2b17ff8c34c9871 100644 --- a/src/knot/server/udp-handler.c +++ b/src/knot/server/udp-handler.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -21,7 +21,6 @@ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> -#include <sys/syscall.h> #include <string.h> #include <assert.h> #include <sys/param.h> @@ -50,10 +49,10 @@ enum { }; /*! \brief UDP context data. */ -typedef struct udp_context { - struct knot_layer layer; /*!< Query processing layer. */ - server_t *server; /*!< Name server structure. */ - unsigned thread_id; /*!< Thread identifier. */ +typedef struct { + knot_layer_t layer; /*!< Query processing layer. */ + server_t *server; /*!< Name server structure. */ + unsigned thread_id; /*!< Thread identifier. */ } udp_context_t; static bool udp_state_active(int state) @@ -65,19 +64,15 @@ static void udp_handle(udp_context_t *udp, int fd, struct sockaddr_storage *ss, struct iovec *rx, struct iovec *tx) { /* Create query processing parameter. */ - struct process_query_param param = {0}; - param.remote = ss; - param.proc_flags = NS_QUERY_NO_AXFR|NS_QUERY_NO_IXFR; /* No transfers. */ - param.proc_flags |= NS_QUERY_LIMIT_SIZE; /* Enforce UDP packet size limit. */ - param.proc_flags |= NS_QUERY_LIMIT_ANY; /* Limit ANY over UDP (depends on zone as well). */ - param.socket = fd; - param.server = udp->server; - param.thread_id = udp->thread_id; - - /* Rate limit is applied? */ - if (unlikely(udp->server->rrl != NULL) && udp->server->rrl->rate > 0) { - param.proc_flags |= NS_QUERY_LIMIT_RATE; - } + struct process_query_param param = { + .remote = ss, + .proc_flags = NS_QUERY_NO_AXFR | NS_QUERY_NO_IXFR | /* No transfers. */ + NS_QUERY_LIMIT_SIZE | /* Enforce UDP packet size limit. */ + NS_QUERY_LIMIT_ANY, /* Limit ANY over UDP (depends on zone as well). */ + .socket = fd, + .server = udp->server, + .thread_id = udp->thread_id + }; /* Start query processing. */ knot_layer_begin(&udp->layer, ¶m); @@ -110,15 +105,6 @@ static void udp_handle(udp_context_t *udp, int fd, struct sockaddr_storage *ss, knot_pkt_free(&ans); } -/* Check for sendmmsg syscall. */ -#ifdef HAVE_SENDMMSG - #define ENABLE_SENDMMSG 1 -#else - #ifdef SYS_sendmmsg - #define ENABLE_SENDMMSG 1 - #endif -#endif - /*! \brief Pointer to selected UDP master implementation. */ static void* (*_udp_init)(void) = 0; static int (*_udp_deinit)(void *) = 0; @@ -244,49 +230,7 @@ static int udp_recvfrom_send(void *d) return 0; } -#ifdef HAVE_RECVMMSG - -/*! \brief Pointer to selected UDP send implementation. */ -static int (*_send_mmsg)(int, struct sockaddr *, struct mmsghdr *, size_t) = 0; - -/*! - * \brief Send multiple packets. - * - * Basic, sendmsg() based implementation. - */ -static int udp_sendmsg(int sock, struct sockaddr *addrs, struct mmsghdr *msgs, size_t count) -{ - int sent = 0; - for (unsigned i = 0; i < count; ++i) { - if (sendmsg(sock, &msgs[i].msg_hdr, 0) > 0) { - ++sent; - } - } - - return sent; -} - -#ifdef ENABLE_SENDMMSG -/*! \brief sendmmsg() syscall interface. */ -#ifndef HAVE_SENDMMSG -static inline int sendmmsg(int fd, struct mmsghdr *mmsg, unsigned vlen, - unsigned flags) -{ - return syscall(SYS_sendmmsg, fd, mmsg, vlen, flags, NULL); -} -#endif /* HAVE_SENDMMSG */ - -/*! - * \brief Send multiple packets. - * - * sendmmsg() implementation. - */ -static int udp_sendmmsg(int sock, struct sockaddr *_, struct mmsghdr *msgs, size_t count) -{ - UNUSED(_); - return sendmmsg(sock, msgs, count, 0); -} -#endif /* ENABLE_SENDMMSG */ +#ifdef ENABLE_RECVMMSG /* UDP recvmmsg() request struct. */ struct udp_recvmmsg { @@ -362,7 +306,7 @@ static int udp_recvmmsg_handle(udp_context_t *ctx, void *d) struct iovec *tx = rq->msgs[TX][i].msg_hdr.msg_iov; rx->iov_len = rq->msgs[RX][i].msg_len; /* Received bytes. */ - udp_pktinfo_handle(&rq->msgs[RX][i].msg_hdr,&rq->msgs[TX][i].msg_hdr); + udp_pktinfo_handle(&rq->msgs[RX][i].msg_hdr, &rq->msgs[TX][i].msg_hdr); udp_handle(ctx, rq->fd, rq->addrs + i, rx, tx); rq->msgs[TX][i].msg_len = tx->iov_len; @@ -379,7 +323,7 @@ static int udp_recvmmsg_handle(udp_context_t *ctx, void *d) static int udp_recvmmsg_send(void *d) { struct udp_recvmmsg *rq = (struct udp_recvmmsg *)d; - int rc = _send_mmsg(rq->fd, (struct sockaddr *)rq->addrs, rq->msgs[TX], rq->rcvd); + int rc = sendmmsg(rq->fd, rq->msgs[TX], rq->rcvd, 0); for (unsigned i = 0; i < rq->rcvd; ++i) { /* Reset buffer size and address len. */ struct iovec *rx = rq->msgs[RX][i].msg_hdr.msg_iov; @@ -394,38 +338,25 @@ static int udp_recvmmsg_send(void *d) } return rc; } -#endif /* HAVE_RECVMMSG */ +#endif /* ENABLE_RECVMMSG */ /*! \brief Initialize UDP master routine on run-time. */ void __attribute__ ((constructor)) udp_master_init(void) { /* Initialize defaults. */ - _udp_init = udp_recvfrom_init; + _udp_init = udp_recvfrom_init; _udp_deinit = udp_recvfrom_deinit; - _udp_recv = udp_recvfrom_recv; - _udp_send = udp_recvfrom_send; + _udp_recv = udp_recvfrom_recv; _udp_handle = udp_recvfrom_handle; - - /* Optimized functions. */ -#ifdef HAVE_RECVMMSG - recvmmsg(0, NULL, 0, 0, 0); - if (errno != ENOSYS) { - _udp_init = udp_recvmmsg_init; - _udp_deinit = udp_recvmmsg_deinit; - _udp_recv = udp_recvmmsg_recv; - _udp_send = udp_recvmmsg_send; - _udp_handle = udp_recvmmsg_handle; - } - - /* Check for sendmmsg() support. */ - _send_mmsg = udp_sendmsg; -#ifdef ENABLE_SENDMMSG - sendmmsg(0, 0, 0, 0); /* Just check if syscall exists */ - if (errno != ENOSYS) { - _send_mmsg = udp_sendmmsg; - } -#endif /* ENABLE_SENDMMSG */ -#endif /* HAVE_RECVMMSG */ + _udp_send = udp_recvfrom_send; + +#ifdef ENABLE_RECVMMSG + _udp_init = udp_recvmmsg_init; + _udp_deinit = udp_recvmmsg_deinit; + _udp_recv = udp_recvmmsg_recv; + _udp_handle = udp_recvmmsg_handle; + _udp_send = udp_recvmmsg_send; +#endif /* ENABLE_RECVMMSG */ } /*! \brief Get interface UDP descriptor for a given thread. */ diff --git a/src/knot/updates/apply.c b/src/knot/updates/apply.c index acbdcc87a7b8b8be81cfe7cf31bd96eaba522160..52efcefc20c6793e576ab60c5176d5cfa30b89bf 100644 --- a/src/knot/updates/apply.c +++ b/src/knot/updates/apply.c @@ -51,10 +51,8 @@ static int free_additional(zone_node_t **node, void *data) for (uint16_t i = 0; i < (*node)->rrset_count; ++i) { struct rr_data *data = &(*node)->rrs[i]; - if (data->additional) { - free(data->additional); - data->additional = NULL; - } + additional_clear(data->additional); + data->additional = NULL; } return KNOT_EOK; @@ -149,7 +147,7 @@ static bool can_remove(const zone_node_t *node, const knot_rrset_t *rr) static int apply_remove(apply_ctx_t *ctx, changeset_t *chset) { changeset_iter_t itt; - changeset_iter_rem(&itt, chset, false); + changeset_iter_rem(&itt, chset); knot_rrset_t rr = changeset_iter_next(&itt); while (!knot_rrset_empty(&rr)) { @@ -170,7 +168,7 @@ static int apply_remove(apply_ctx_t *ctx, changeset_t *chset) static int apply_add(apply_ctx_t *ctx, changeset_t *chset) { changeset_iter_t itt; - changeset_iter_add(&itt, chset, false); + changeset_iter_add(&itt, chset); knot_rrset_t rr = changeset_iter_next(&itt); while(!knot_rrset_empty(&rr)) { @@ -380,7 +378,7 @@ int apply_replace_soa(apply_ctx_t *ctx, changeset_t *chset) // Check for SOA with proper serial but different rdata. if (node_rrtype_exists(contents->apex, KNOT_RRTYPE_SOA)) { - return KNOT_EINVAL; + return KNOT_ESOAINVAL; } return apply_add_rr(ctx, chset->soa_to); @@ -475,17 +473,11 @@ int apply_changesets_directly(apply_ctx_t *ctx, list_t *chsets) WALK_LIST(set, *chsets) { int ret = apply_single(ctx, set); if (ret != KNOT_EOK) { - update_rollback(ctx); return ret; } } - int ret = zone_contents_adjust_full(ctx->contents); - if (ret != KNOT_EOK) { - update_rollback(ctx); - } - - return ret; + return zone_contents_adjust_full(ctx->contents); } int apply_changeset_directly(apply_ctx_t *ctx, changeset_t *ch) diff --git a/src/knot/updates/apply.h b/src/knot/updates/apply.h index 317f2b37f590a663f1f13742b24ad3e97ab54c8c..187eb28f6effe0cff7533ebc93e8665fb8acdbf0 100644 --- a/src/knot/updates/apply.h +++ b/src/knot/updates/apply.h @@ -129,6 +129,8 @@ int apply_changeset(apply_ctx_t *ctx, zone_contents_t *old_contents, /*! * \brief Applies changesets directly to the zone, without copying it. * + * \warning Modified zone is in inconsitent state after error and should be freed. + * * \param ctx Apply context. * \param chsets List of changesets to be applied to the zone. * diff --git a/src/knot/updates/changesets.c b/src/knot/updates/changesets.c index 50a8c882ce27831acd2a057fdb87e2afa16d90ae..f68cf36bc6f6ba73d188fc5f241a0334c5a98a9e 100644 --- a/src/knot/updates/changesets.c +++ b/src/knot/updates/changesets.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -23,8 +23,6 @@ #include "contrib/macros.h" #include "contrib/mempattern.h" -/* -------------------- Changeset iterator helpers -------------------------- */ - static int handle_soa(knot_rrset_t **soa, const knot_rrset_t *rrset) { assert(soa); @@ -64,9 +62,8 @@ static void cleanup_iter_list(list_t *l) init_list(l); } -/*! \brief Inits changeset iterator with given HAT-tries. */ -static int changeset_iter_init(changeset_iter_t *ch_it, - const changeset_t *ch, bool sorted, size_t tries, ...) +/*! \brief Inits changeset iterator with given tries. */ +static int changeset_iter_init(changeset_iter_t *ch_it, size_t tries, ...) { memset(ch_it, 0, sizeof(*ch_it)); init_list(&ch_it->iters); @@ -76,19 +73,21 @@ static int changeset_iter_init(changeset_iter_t *ch_it, for (size_t i = 0; i < tries; ++i) { hattrie_t *t = va_arg(args, hattrie_t *); - if (t) { - if (sorted) { - hattrie_build_index(t); - } - hattrie_iter_t *it = hattrie_iter_begin(t, sorted); - if (it == NULL) { - cleanup_iter_list(&ch_it->iters); - return KNOT_ENOMEM; - } - if (ptrlist_add(&ch_it->iters, it, NULL) == NULL) { - cleanup_iter_list(&ch_it->iters); - return KNOT_ENOMEM; - } + if (t == NULL) { + continue; + } + + hattrie_iter_t *it = hattrie_iter_begin(t); + if (it == NULL) { + cleanup_iter_list(&ch_it->iters); + va_end(args); + return KNOT_ENOMEM; + } + + if (ptrlist_add(&ch_it->iters, it, NULL) == NULL) { + cleanup_iter_list(&ch_it->iters); + va_end(args); + return KNOT_ENOMEM; } } @@ -175,8 +174,6 @@ static void check_redundancy(zone_contents_t *counterpart, const knot_rrset_t *r return; } -/* ------------------------------- API -------------------------------------- */ - int changeset_init(changeset_t *ch, const knot_dname_t *apex) { memset(ch, 0, sizeof(changeset_t)); @@ -221,7 +218,7 @@ bool changeset_empty(const changeset_t *ch) } changeset_iter_t itt; - changeset_iter_all(&itt, ch, false); + changeset_iter_all(&itt, ch); knot_rrset_t rr = changeset_iter_next(&itt); changeset_iter_clear(&itt); @@ -236,7 +233,7 @@ size_t changeset_size(const changeset_t *ch) } changeset_iter_t itt; - changeset_iter_all(&itt, ch, false); + changeset_iter_all(&itt, ch); size_t size = 0; knot_rrset_t rr = changeset_iter_next(&itt); @@ -353,7 +350,7 @@ int changeset_remove_removal(changeset_t *ch, const knot_rrset_t *rrset) int changeset_merge(changeset_t *ch1, const changeset_t *ch2) { changeset_iter_t itt; - changeset_iter_add(&itt, ch2, false); + changeset_iter_add(&itt, ch2); knot_rrset_t rrset = changeset_iter_next(&itt); while (!knot_rrset_empty(&rrset)) { @@ -366,7 +363,7 @@ int changeset_merge(changeset_t *ch1, const changeset_t *ch2) } changeset_iter_clear(&itt); - changeset_iter_rem(&itt, ch2, false); + changeset_iter_rem(&itt, ch2); rrset = changeset_iter_next(&itt); while (!knot_rrset_empty(&rrset)) { @@ -438,22 +435,19 @@ void changeset_free(changeset_t *ch) free(ch); } -int changeset_iter_add(changeset_iter_t *itt, const changeset_t *ch, bool sorted) +int changeset_iter_add(changeset_iter_t *itt, const changeset_t *ch) { - return changeset_iter_init(itt, ch, sorted, 2, - ch->add->nodes, ch->add->nsec3_nodes); + return changeset_iter_init(itt, 2, ch->add->nodes, ch->add->nsec3_nodes); } -int changeset_iter_rem(changeset_iter_t *itt, const changeset_t *ch, bool sorted) +int changeset_iter_rem(changeset_iter_t *itt, const changeset_t *ch) { - return changeset_iter_init(itt, ch, sorted, 2, - ch->remove->nodes, ch->remove->nsec3_nodes); + return changeset_iter_init(itt, 2, ch->remove->nodes, ch->remove->nsec3_nodes); } -int changeset_iter_all(changeset_iter_t *itt, const changeset_t *ch, bool sorted) +int changeset_iter_all(changeset_iter_t *itt, const changeset_t *ch) { - return changeset_iter_init(itt, ch, sorted, 4, - ch->add->nodes, ch->add->nsec3_nodes, + return changeset_iter_init(itt, 4, ch->add->nodes, ch->add->nsec3_nodes, ch->remove->nodes, ch->remove->nsec3_nodes); } diff --git a/src/knot/updates/changesets.h b/src/knot/updates/changesets.h index efb40f8e7f547ffada1a0a31a6b19c5954580126..e38e41cc92bc204dd76b7c5d796841045df7e550 100644 --- a/src/knot/updates/changesets.h +++ b/src/knot/updates/changesets.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -134,7 +134,7 @@ int changeset_remove_addition(changeset_t *ch, const knot_rrset_t *rrset); int changeset_remove_removal(changeset_t *ch, const knot_rrset_t *rrset); /*! - * \brief Merges two changesets together. Legacy, to be removed with new zone API. + * \brief Merges two changesets together. * * \param ch1 Merge into this changeset. * \param ch2 Merge this changeset. @@ -174,35 +174,32 @@ void changeset_free(changeset_t *ch); /*! * \brief Inits changeset iteration structure with changeset additions. * - * \param itt Iterator to init. - * \param ch Changeset to use. - * \param sorted Sort the iteration? + * \param itt Iterator to init. + * \param ch Changeset to use. * * \return KNOT_E* */ -int changeset_iter_add(changeset_iter_t *itt, const changeset_t *ch, bool sorted); +int changeset_iter_add(changeset_iter_t *itt, const changeset_t *ch); /*! * \brief Inits changeset iteration structure with changeset removals. * - * \param itt Iterator to init. - * \param ch Changeset to use. - * \param sorted Sort the iteration? + * \param itt Iterator to init. + * \param ch Changeset to use. * * \return KNOT_E* */ -int changeset_iter_rem(changeset_iter_t *itt, const changeset_t *ch, bool sorted); +int changeset_iter_rem(changeset_iter_t *itt, const changeset_t *ch); /*! * \brief Inits changeset iteration structure with changeset additions and removals. * - * \param itt Iterator to init. - * \param ch Changeset to use. - * \param sorted Sort the iteration? + * \param itt Iterator to init. + * \param ch Changeset to use. * * \return KNOT_E* */ -int changeset_iter_all(changeset_iter_t *itt, const changeset_t *ch, bool sorted); +int changeset_iter_all(changeset_iter_t *itt, const changeset_t *ch); /*! * \brief Gets next RRSet from changeset iterator. diff --git a/src/knot/updates/ddns.c b/src/knot/updates/ddns.c index 96643d1cdaf9dec29a15755ed5dd80eef4ae8dda..b4fc24f8556b9c9fdbb386d1b430d0b63f536726 100644 --- a/src/knot/updates/ddns.c +++ b/src/knot/updates/ddns.c @@ -174,6 +174,24 @@ static bool rrset_empty(const knot_rrset_t *rrset) return false; } +/*< \brief Returns true if DDNS should deny updating DNSSEC-related record. */ +static bool is_dnssec_protected(uint16_t type, bool is_apex) +{ + switch (type) { + case KNOT_RRTYPE_RRSIG: + case KNOT_RRTYPE_NSEC: + case KNOT_RRTYPE_NSEC3: + case KNOT_RRTYPE_CDNSKEY: + case KNOT_RRTYPE_CDS: + return true; + case KNOT_RRTYPE_DNSKEY: + case KNOT_RRTYPE_NSEC3PARAM: + return is_apex; + default: + return false; + } +} + /*!< \brief Checks prereq for given packet RR. */ static int process_prereq(const knot_rrset_t *rrset, uint16_t qclass, zone_update_t *update, uint16_t *rcode, @@ -505,13 +523,14 @@ static int process_rem_rrset(const knot_rrset_t *rrset, const zone_node_t *node, zone_update_t *update) { - if (rrset->type == KNOT_RRTYPE_SOA || knot_rrtype_is_dnssec(rrset->type)) { + bool is_apex = node_rrtype_exists(node, KNOT_RRTYPE_SOA); + + if (rrset->type == KNOT_RRTYPE_SOA || is_dnssec_protected(rrset->type, is_apex)) { // Ignore SOA and DNSSEC removals. return KNOT_EOK; } - if (node_rrtype_exists(node, KNOT_RRTYPE_SOA) && - rrset->type == KNOT_RRTYPE_NS) { + if (is_apex && rrset->type == KNOT_RRTYPE_NS) { // Ignore NS apex RRSet removals. return KNOT_EOK; } @@ -614,12 +633,13 @@ static int check_update(const knot_rrset_t *rrset, const knot_pkt_t *query, const knot_dname_t *owner = rrset->owner; const knot_dname_t *qname = knot_pkt_qname(query); const bool is_sub = knot_dname_is_sub(owner, qname); - if (!is_sub && !knot_dname_is_equal(owner, qname)) { + const bool is_apex = knot_dname_is_equal(owner, qname); + if (!is_sub && !is_apex) { *rcode = KNOT_RCODE_NOTZONE; return KNOT_EOUTOFZONE; } - if (knot_rrtype_is_dnssec(rrset->type)) { + if (is_dnssec_protected(rrset->type, is_apex)) { *rcode = KNOT_RCODE_REFUSED; log_warning("DDNS, refusing to update DNSSEC-related record"); return KNOT_EDENIED; diff --git a/src/knot/updates/zone-update.c b/src/knot/updates/zone-update.c index d9e20bbc9fd15222cf0d2fc29b661f0bb9cbd3c8..d8da3c403aee7a18ef8a770e60d0a219c53c118e 100644 --- a/src/knot/updates/zone-update.c +++ b/src/knot/updates/zone-update.c @@ -48,8 +48,8 @@ static int init_incremental(zone_update_t *update, zone_t *zone) update->change.soa_from = node_create_rrset(update->zone->contents->apex, KNOT_RRTYPE_SOA); if (update->change.soa_from == NULL) { - changeset_clear(&update->change); zone_contents_free(&update->new_cont); + changeset_clear(&update->change); return KNOT_ENOMEM; } @@ -129,7 +129,7 @@ const zone_node_t *zone_update_get_apex(zone_update_t *update) uint32_t zone_update_current_serial(zone_update_t *update) { const zone_node_t *apex = zone_update_get_apex(update); - if (apex) { + if (apex != NULL) { return knot_soa_serial(node_rdataset(apex, KNOT_RRTYPE_SOA)); } else { return 0; @@ -495,17 +495,13 @@ static int commit_incremental(conf_t *conf, zone_update_t *update, conf_val_t val = conf_zone_get(conf, C_SERIAL_POLICY, update->zone->name); ret = set_new_soa(update, conf_opt(&val)); if (ret != KNOT_EOK) { - update_rollback(&update->a_ctx); - update_free_zone(&new_contents); - changeset_clear(&update->change); + zone_update_clear(update); return ret; } ret = apply_replace_soa(&update->a_ctx, &update->change); if (ret != KNOT_EOK) { - update_rollback(&update->a_ctx); - update_free_zone(&new_contents); - changeset_clear(&update->change); + zone_update_clear(update); return ret; } } @@ -517,25 +513,19 @@ static int commit_incremental(conf_t *conf, zone_update_t *update, if (dnssec_enable) { ret = apply_prepare_to_sign(&update->a_ctx); if (ret != KNOT_EOK) { - update_rollback(&update->a_ctx); - update_free_zone(&new_contents); - changeset_clear(&update->change); + zone_update_clear(update); return ret; } ret = sign_update(update, new_contents); if (ret != KNOT_EOK) { - update_rollback(&update->a_ctx); - update_free_zone(&new_contents); - changeset_clear(&update->change); + zone_update_clear(update); return ret; } } else { ret = apply_finalize(&update->a_ctx); if (ret != KNOT_EOK) { - update_rollback(&update->a_ctx); - update_free_zone(&new_contents); - changeset_clear(&update->change); + zone_update_clear(update); return ret; } } @@ -543,8 +533,7 @@ static int commit_incremental(conf_t *conf, zone_update_t *update, /* Write changes to journal if all went well. (DNSSEC merged) */ ret = zone_change_store(conf, update->zone, &update->change); if (ret != KNOT_EOK) { - update_rollback(&update->a_ctx); - update_free_zone(&new_contents); + /* Recoverable error. */ return ret; } @@ -565,7 +554,11 @@ static int commit_full(conf_t *conf, zone_update_t *update, zone_contents_t **co return KNOT_ESEMCHECK; } - zone_contents_adjust_full(update->new_cont); + int ret = zone_contents_adjust_full(update->new_cont); + if (ret != KNOT_EOK) { + zone_update_clear(update); + return ret; + } conf_val_t val = conf_zone_get(conf, C_DNSSEC_SIGNING, update->zone->name); bool dnssec_enable = (update->flags & UPDATE_SIGN) && conf_bool(&val); @@ -574,13 +567,13 @@ static int commit_full(conf_t *conf, zone_update_t *update, zone_contents_t **co if (dnssec_enable) { int ret = sign_update(update, update->new_cont); if (ret != KNOT_EOK) { - update_rollback(&update->a_ctx); + zone_update_clear(update); return ret; } } - update_cleanup(&update->a_ctx); *contents_out = update->new_cont; + return KNOT_EOK; } @@ -594,41 +587,41 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) zone_contents_t *new_contents = NULL; if (update->flags & UPDATE_INCREMENTAL) { ret = commit_incremental(conf, update, &new_contents); - if (ret != KNOT_EOK) { - return ret; - } } else { ret = commit_full(conf, update, &new_contents); - if (ret != KNOT_EOK) { - return ret; - } + } + if (ret != KNOT_EOK) { + return ret; + } + + /* If there is anything to change. */ + if (new_contents == NULL) { + return KNOT_EOK; } + /* Check the zone size. */ conf_val_t val = conf_zone_get(conf, C_MAX_ZONE_SIZE, update->zone->name); int64_t size_limit = conf_int(&val); - if (new_contents != NULL && new_contents->size > size_limit) { + if (new_contents->size > size_limit) { + /* Recoverable error. */ return KNOT_EZONESIZE; } - /* If there is anything to change */ - if (new_contents != NULL) { - /* Switch zone contents. */ - zone_contents_t *old_contents = zone_switch_contents(update->zone, - new_contents); - - /* Sync RCU. */ - synchronize_rcu(); - if (update->flags & UPDATE_FULL) { - zone_contents_deep_free(&old_contents); - update->new_cont = NULL; - } else if (update->flags & UPDATE_INCREMENTAL) { - update_cleanup(&update->a_ctx); - update_free_zone(&old_contents); - update->new_cont = NULL; - changeset_clear(&update->change); - } + /* Switch zone contents. */ + zone_contents_t *old_contents = zone_switch_contents(update->zone, + new_contents); + + /* Sync RCU. */ + synchronize_rcu(); + if (update->flags & UPDATE_FULL) { + zone_contents_deep_free(&old_contents); + } else if (update->flags & UPDATE_INCREMENTAL) { + update_free_zone(&old_contents); + changeset_clear(&update->change); } + update_cleanup(&update->a_ctx); + update->new_cont = NULL; return KNOT_EOK; } @@ -636,15 +629,12 @@ int zone_update_commit(conf_t *conf, zone_update_t *update) static int iter_init_tree_iters(zone_update_iter_t *it, zone_update_t *update, bool nsec3) { - zone_tree_t *tree; - /* Set zone iterator. */ zone_contents_t *_contents = update->new_cont; /* Begin iteration. We can safely assume _contents is a valid pointer. */ - tree = nsec3 ? _contents->nsec3_nodes : _contents->nodes; - hattrie_build_index(tree); - it->tree_it = hattrie_iter_begin(nsec3 ? _contents->nsec3_nodes : _contents->nodes, true); + zone_tree_t *tree = nsec3 ? _contents->nsec3_nodes : _contents->nodes; + it->tree_it = hattrie_iter_begin(tree); if (it->tree_it == NULL) { return KNOT_ENOMEM; } diff --git a/src/knot/zone/contents.c b/src/knot/zone/contents.c index 3343db9c88d4e945c9455ee144a3f1bd2605a492..0b53747f47bb4fefd74e2c57dd1fdf7d77281718 100644 --- a/src/knot/zone/contents.c +++ b/src/knot/zone/contents.c @@ -114,22 +114,23 @@ static int create_nsec3_name(const zone_contents_t *zone, } /*! \brief Link pointers to additional nodes for this RRSet. */ -static int discover_additionals(struct rr_data *rr_data, zone_contents_t *zone) +static int discover_additionals(const knot_dname_t *owner, struct rr_data *rr_data, + zone_contents_t *zone) { assert(rr_data != NULL); - const knot_rdataset_t *rrs = &rr_data->rrs; + /* Drop possible previous additional nodes. */ + additional_clear(rr_data->additional); - /* Create new additional nodes. */ + const knot_rdataset_t *rrs = &rr_data->rrs; uint16_t rdcount = rrs->rr_count; - if (rr_data->additional) { - free(rr_data->additional); - } - rr_data->additional = malloc(rdcount * sizeof(zone_node_t *)); - if (rr_data->additional == NULL) { - return KNOT_ENOMEM; - } + uint16_t mandatory_count = 0; + uint16_t others_count = 0; + glue_t mandatory[rdcount]; + glue_t others[rdcount]; + + /* Scan new additional nodes. */ for (uint16_t i = 0; i < rdcount; i++) { const knot_dname_t *dname = knot_rdata_name(rrs, i, rr_data->type); const zone_node_t *node = NULL, *encloser = NULL, *prev = NULL; @@ -143,7 +144,44 @@ static int discover_additionals(struct rr_data *rr_data, zone_contents_t *zone) assert(node != NULL); } - rr_data->additional[i] = (zone_node_t *)node; + if (node == NULL) { + continue; + } + + glue_t *glue; + if ((node->flags & (NODE_FLAGS_DELEG | NODE_FLAGS_NONAUTH)) && + rr_data->type == KNOT_RRTYPE_NS && + knot_dname_in(owner, node->owner)) { + glue = &mandatory[mandatory_count++]; + glue->optional = false; + } else { + glue = &others[others_count++]; + glue->optional = true; + } + glue->node = node; + glue->ns_pos = i; + } + + /* Store sorted additionals by the type, mandatory first. */ + size_t total_count = mandatory_count + others_count; + if (total_count > 0) { + rr_data->additional = malloc(sizeof(additional_t)); + if (rr_data->additional == NULL) { + return KNOT_ENOMEM; + } + rr_data->additional->count = total_count; + + size_t size = total_count * sizeof(glue_t); + rr_data->additional->glues = malloc(size); + if (rr_data->additional->glues == NULL) { + free(rr_data->additional); + return KNOT_ENOMEM; + } + + size_t mandatory_size = mandatory_count * sizeof(glue_t); + memcpy(rr_data->additional->glues, mandatory, mandatory_size); + memcpy(rr_data->additional->glues + mandatory_count, others, + size - mandatory_size); } return KNOT_EOK; @@ -305,7 +343,7 @@ static int adjust_additional(zone_node_t **tnode, void *data) for(uint16_t i = 0; i < node->rrset_count; ++i) { struct rr_data *rr_data = &node->rrs[i]; if (knot_rrtype_additional_needed(rr_data->type)) { - int ret = discover_additionals(rr_data, args->zone); + int ret = discover_additionals(node->owner, rr_data, args->zone); if (ret != KNOT_EOK) { return ret; } @@ -614,7 +652,7 @@ static int remove_rr(zone_contents_t *z, const knot_rrset_t *rr, static int recreate_normal_tree(const zone_contents_t *z, zone_contents_t *out) { - out->nodes = hattrie_dup(z->nodes, NULL); + out->nodes = hattrie_create(NULL); if (out->nodes == NULL) { return KNOT_ENOMEM; } @@ -634,7 +672,7 @@ static int recreate_normal_tree(const zone_contents_t *z, zone_contents_t *out) out->apex = apex_cpy; - hattrie_iter_t *itt = hattrie_iter_begin(z->nodes, true); + hattrie_iter_t *itt = hattrie_iter_begin(z->nodes); if (itt == NULL) { return KNOT_ENOMEM; } @@ -662,19 +700,18 @@ static int recreate_normal_tree(const zone_contents_t *z, zone_contents_t *out) } hattrie_iter_free(itt); - hattrie_build_index(out->nodes); return KNOT_EOK; } static int recreate_nsec3_tree(const zone_contents_t *z, zone_contents_t *out) { - out->nsec3_nodes = hattrie_dup(z->nsec3_nodes, NULL); + out->nsec3_nodes = hattrie_create(NULL); if (out->nsec3_nodes == NULL) { return KNOT_ENOMEM; } - hattrie_iter_t *itt = hattrie_iter_begin(z->nsec3_nodes, false); + hattrie_iter_t *itt = hattrie_iter_begin(z->nsec3_nodes); if (itt == NULL) { return KNOT_ENOMEM; } @@ -697,7 +734,6 @@ static int recreate_nsec3_tree(const zone_contents_t *z, zone_contents_t *out) } hattrie_iter_free(itt); - hattrie_build_index(out->nsec3_nodes); return KNOT_EOK; } @@ -914,8 +950,7 @@ static int adjust_nodes(zone_tree_t *nodes, zone_adjust_arg_t *adjust_arg, adjust_arg->first_node = NULL; adjust_arg->previous_node = NULL; - hattrie_build_index(nodes); - int ret = zone_tree_apply_inorder(nodes, callback, adjust_arg); + int ret = zone_tree_apply(nodes, callback, adjust_arg); if (adjust_arg->first_node) { adjust_arg->first_node->prev = adjust_arg->previous_node; @@ -1001,10 +1036,10 @@ int zone_contents_adjust_full(zone_contents_t *contents) return contents_adjust(contents, true); } -int zone_contents_tree_apply_inorder(zone_contents_t *zone, - zone_contents_apply_cb_t function, void *data) +int zone_contents_apply(zone_contents_t *contents, + zone_contents_apply_cb_t function, void *data) { - if (zone == NULL) { + if (contents == NULL) { return KNOT_EINVAL; } @@ -1013,13 +1048,13 @@ int zone_contents_tree_apply_inorder(zone_contents_t *zone, .data = data }; - return zone_tree_apply_inorder(zone->nodes, tree_apply_cb, &f); + return zone_tree_apply(contents->nodes, tree_apply_cb, &f); } -int zone_contents_nsec3_apply_inorder(zone_contents_t *zone, - zone_contents_apply_cb_t function, void *data) +int zone_contents_nsec3_apply(zone_contents_t *contents, + zone_contents_apply_cb_t function, void *data) { - if (zone == NULL) { + if (contents == NULL) { return KNOT_EINVAL; } @@ -1028,7 +1063,7 @@ int zone_contents_nsec3_apply_inorder(zone_contents_t *zone, .data = data }; - return zone_tree_apply_inorder(zone->nsec3_nodes, tree_apply_cb, &f); + return zone_tree_apply(contents->nsec3_nodes, tree_apply_cb, &f); } int zone_contents_shallow_copy(const zone_contents_t *from, zone_contents_t **to) @@ -1130,6 +1165,6 @@ bool zone_contents_is_empty(const zone_contents_t *zone) size_t zone_contents_measure_size(zone_contents_t *zone) { zone->size = 0; - zone_contents_tree_apply_inorder(zone, measure_size, &zone->size); + zone_contents_apply(zone, measure_size, &zone->size); return zone->size; } diff --git a/src/knot/zone/contents.h b/src/knot/zone/contents.h index 22fbf801b1a96bf779be3321f29bd9745fd6f72d..83aafe705f3eb1a0f3c48e0f950baae6524aa9e5 100644 --- a/src/knot/zone/contents.h +++ b/src/knot/zone/contents.h @@ -193,37 +193,23 @@ int zone_contents_adjust_full(zone_contents_t *contents); /*! * \brief Applies the given function to each regular node in the zone. * - * This function uses in-order depth-first forward traversal, i.e. the function - * is first recursively applied to left subtree, then to the root and then to - * the right subtree. - * - * \note This implies that the zone is stored in a binary tree. Is there a way - * to make this traversal independent on the underlying structure? - * - * \param zone Nodes of this zone will be used as parameters for the function. + * \param contents Nodes of this zone will be used as parameters for the function. * \param function Function to be applied to each node of the zone. * \param data Arbitrary data to be passed to the function. */ -int zone_contents_tree_apply_inorder(zone_contents_t *zone, - zone_contents_apply_cb_t function, void *data); +int zone_contents_apply(zone_contents_t *contents, + zone_contents_apply_cb_t function, void *data); /*! * \brief Applies the given function to each NSEC3 node in the zone. * - * This function uses in-order depth-first forward traversal, i.e. the function - * is first recursively applied to left subtree, then to the root and then to - * the right subtree. - * - * \note This implies that the zone is stored in a binary tree. Is there a way - * to make this traversal independent on the underlying structure? - * - * \param zone NSEC3 nodes of this zone will be used as parameters for the - * function. + * \param contents NSEC3 nodes of this zone will be used as parameters for the + * function. * \param function Function to be applied to each node of the zone. * \param data Arbitrary data to be passed to the function. */ -int zone_contents_nsec3_apply_inorder(zone_contents_t *zone, - zone_contents_apply_cb_t function, void *data); +int zone_contents_nsec3_apply(zone_contents_t *contents, + zone_contents_apply_cb_t function, void *data); /*! * \brief Creates a shallow copy of the zone (no stored data are copied). diff --git a/src/knot/zone/node.c b/src/knot/zone/node.c index 8fb1b9d3e71e6cb7663b936511c875356494d26b..0fdc16ba8f8152dfade7f3bf664f8580a59a2a4f 100644 --- a/src/knot/zone/node.c +++ b/src/knot/zone/node.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -19,11 +19,21 @@ #include "libknot/rrtype/rrsig.h" #include "contrib/mempattern.h" +void additional_clear(additional_t *additional) +{ + if (additional == NULL) { + return; + } + + free(additional->glues); + free(additional); +} + /*! \brief Clears allocated data in RRSet entry. */ static void rr_data_clear(struct rr_data *data, knot_mm_t *mm) { knot_rdataset_clear(&data->rrs, mm); - free(data->additional); + additional_clear(data->additional); } /*! \brief Clears allocated data in RRSet entry. */ diff --git a/src/knot/zone/node.h b/src/knot/zone/node.h index 9ed19273efe5318d531465ed526bfe5b4af25454..97df8b1b4e20712963cd3434af723d02a780ebeb 100644 --- a/src/knot/zone/node.h +++ b/src/knot/zone/node.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -54,11 +54,24 @@ typedef struct zone_node { uint8_t flags; /*!< \ref node_flags enum. */ } zone_node_t; +/*!< \brief Glue node context. */ +typedef struct { + const zone_node_t *node; /*!< Glue node. */ + uint16_t ns_pos; /*!< Corresponding NS record position (for compression). */ + bool optional; /*!< Optional glue indicator. */ +} glue_t; + +/*!< \brief Additional data. */ +typedef struct { + glue_t *glues; /*!< Glue data. */ + uint16_t count; /*!< Number of glue nodes. */ +} additional_t; + /*!< \brief Structure storing RR data. */ struct rr_data { - uint16_t type; /*!< \brief RR type of data. */ - knot_rdataset_t rrs; /*!< \brief Data of given type. */ - zone_node_t **additional; /*!< \brief Additional nodes with glues. */ + uint16_t type; /*!< RR type of data. */ + knot_rdataset_t rrs; /*!< Data of given type. */ + additional_t *additional; /*!< Additional nodes with glues. */ }; /*! \brief Flags used to mark nodes with some property. */ @@ -77,6 +90,13 @@ enum node_flags { NODE_FLAGS_WILDCARD_CHILD = 1 << 4 }; +/*! + * \brief Clears additional structure. + * + * \param additional Additional to clear. + */ +void additional_clear(additional_t *additional); + /*! * \brief Creates and initializes new node structure. * diff --git a/src/knot/zone/semantic-check.c b/src/knot/zone/semantic-check.c index 382524b450f198e7f048772ab94fa991bd854d63..43ca35c94400db3ad6d7f17694f4e6af8c84f941 100644 --- a/src/knot/zone/semantic-check.c +++ b/src/knot/zone/semantic-check.c @@ -409,7 +409,7 @@ static int check_rrsig(const zone_node_t *node, semchecks_data_t *data) static void bitmap_add_all_node_rrsets(dnssec_nsec_bitmap_t *bitmap, const zone_node_t *node) { - bool deleg = node->flags && NODE_FLAGS_DELEG; + bool deleg = node->flags & NODE_FLAGS_DELEG; for (int i = 0; i < node->rrset_count; i++) { knot_rrset_t rr = node_rrset_at(node, i); if (deleg && (rr.type != KNOT_RRTYPE_NS && @@ -823,6 +823,7 @@ int zone_do_sem_checks(zone_contents_t *zone, bool optional, .fatal_error = false, .level = MANDATORY, }; + if (optional) { data.level |= OPTIONAL; if (zone_contents_is_signed(zone)) { @@ -834,9 +835,7 @@ int zone_do_sem_checks(zone_contents_t *zone, bool optional, } } - int ret = zone_contents_tree_apply_inorder(zone, do_checks_in_tree, - &data); - + int ret = zone_contents_apply(zone, do_checks_in_tree, &data); if (ret != KNOT_EOK) { return ret; } diff --git a/src/knot/zone/zone-dump.c b/src/knot/zone/zone-dump.c index a08d93f1cc94fb01cc7b50e168cdc866deb42477..f72ea66c27c9188d658a76d08b2761fb6ec1eaa7 100644 --- a/src/knot/zone/zone-dump.c +++ b/src/knot/zone/zone-dump.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -33,6 +33,7 @@ typedef struct { bool dump_nsec; const knot_dname_t *origin; const knot_dump_style_t *style; + const char *first_comment; } dump_params_t; static int apex_node_dump_text(zone_node_t *node, dump_params_t *params) @@ -42,9 +43,10 @@ static int apex_node_dump_text(zone_node_t *node, dump_params_t *params) // Dump SOA record as a first. if (!params->dump_nsec) { - if (knot_rrset_txt_dump(&soa, params->buf, params->buflen, - &soa_style) < 0) { - return KNOT_ENOMEM; + int ret = knot_rrset_txt_dump(&soa, ¶ms->buf, ¶ms->buflen, + &soa_style); + if (ret < 0) { + return ret; } params->rr_count += soa.rrs.rr_count; fprintf(params->file, "%s", params->buf); @@ -65,9 +67,10 @@ static int apex_node_dump_text(zone_node_t *node, dump_params_t *params) break; } - if (knot_rrset_txt_dump(&rrset, params->buf, params->buflen, - params->style) < 0) { - return KNOT_ENOMEM; + int ret = knot_rrset_txt_dump(&rrset, ¶ms->buf, ¶ms->buflen, + params->style); + if (ret < 0) { + return ret; } params->rr_count += rrset.rrs.rr_count; fprintf(params->file, "%s", params->buf); @@ -114,9 +117,16 @@ static int node_dump_text(zone_node_t *node, void *data) break; } - if (knot_rrset_txt_dump(&rrset, params->buf, params->buflen, - params->style) < 0) { - return KNOT_ENOMEM; + // Dump block comment if available. + if (params->first_comment != NULL) { + fprintf(params->file, "%s", params->first_comment); + params->first_comment = NULL; + } + + int ret = knot_rrset_txt_dump(&rrset, ¶ms->buf, ¶ms->buflen, + params->style); + if (ret < 0) { + return ret; } params->rr_count += rrset.rrs.rr_count; fprintf(params->file, "%s", params->buf); @@ -126,7 +136,7 @@ static int node_dump_text(zone_node_t *node, void *data) return KNOT_EOK; } -int zone_dump_text(zone_contents_t *zone, FILE *file) +int zone_dump_text(zone_contents_t *zone, FILE *file, bool comments) { if (zone == NULL || file == NULL) { return KNOT_EINVAL; @@ -138,89 +148,79 @@ int zone_dump_text(zone_contents_t *zone, FILE *file) return KNOT_ENOMEM; } - fprintf(file, ";; Zone dump (Knot DNS %s)\n", PACKAGE_VERSION); + if (comments) { + fprintf(file, ";; Zone dump (Knot DNS %s)\n", PACKAGE_VERSION); + } // Set structure with parameters. zone_node_t *apex = zone->apex; - dump_params_t params; - params.file = file; - params.buf = buf; - params.buflen = DUMP_BUF_LEN; - params.rr_count = 0; - params.origin = apex->owner; - params.style = &KNOT_DUMP_STYLE_DEFAULT; - - int ret; + dump_params_t params = { + .file = file, + .buf = buf, + .buflen = DUMP_BUF_LEN, + .rr_count = 0, + .origin = apex->owner, + .style = &KNOT_DUMP_STYLE_DEFAULT, + .dump_rrsig = false, + .dump_nsec = false + }; + + // Dump standard zone records without RRSIGS. + int ret = zone_contents_apply(zone, node_dump_text, ¶ms); + if (ret != KNOT_EOK) { + return ret; + } - // Dump standard zone records without rrsigs. - params.dump_rrsig = false; + // Dump RRSIG records if available. + params.dump_rrsig = true; params.dump_nsec = false; - ret = zone_contents_tree_apply_inorder(zone, node_dump_text, ¶ms); + params.first_comment = comments ? ";; DNSSEC signatures\n" : NULL; + ret = zone_contents_apply(zone, node_dump_text, ¶ms); if (ret != KNOT_EOK) { return ret; } - // Dump DNSSEC signatures if secured. - if (zone_contents_is_signed(zone)) { - fprintf(file, ";; DNSSEC signatures\n"); - - // Dump rrsig records. - params.dump_rrsig = true; - params.dump_nsec = false; - ret = zone_contents_tree_apply_inorder(zone, node_dump_text, - ¶ms); - if (ret != KNOT_EOK) { - return ret; - } + // Dump NSEC chain if available. + params.dump_rrsig = false; + params.dump_nsec = true; + params.first_comment = comments ? ";; DNSSEC NSEC chain\n" : NULL; + ret = zone_contents_apply(zone, node_dump_text, ¶ms); + if (ret != KNOT_EOK) { + return ret; } // Dump NSEC3 chain if available. - if (knot_is_nsec3_enabled(zone)) { - fprintf(file, ";; DNSSEC NSEC3 chain\n"); - - params.dump_rrsig = false; - params.dump_nsec = true; - ret = zone_contents_nsec3_apply_inorder(zone, node_dump_text, - ¶ms); - if (ret != KNOT_EOK) { - return ret; - } - - fprintf(file, ";; DNSSEC NSEC3 signatures\n"); - - params.dump_rrsig = true; - params.dump_nsec = false; - ret = zone_contents_nsec3_apply_inorder(zone, node_dump_text, - ¶ms); - if (ret != KNOT_EOK) { - return ret; - } - } else if (zone_contents_is_signed(zone)) { - fprintf(file, ";; DNSSEC NSEC chain\n"); - - // Dump nsec records. - params.dump_rrsig = false; - params.dump_nsec = true; - ret = zone_contents_tree_apply_inorder(zone, node_dump_text, - ¶ms); - if (ret != KNOT_EOK) { - return ret; - } + params.dump_rrsig = false; + params.dump_nsec = true; + params.first_comment = comments ? ";; DNSSEC NSEC3 chain\n" : NULL; + ret = zone_contents_nsec3_apply(zone, node_dump_text, ¶ms); + if (ret != KNOT_EOK) { + return ret; } - // Create formated date-time string. - time_t now = time(NULL); - struct tm tm; - localtime_r(&now, &tm); - char date[64]; - strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S %Z", &tm); + params.dump_rrsig = true; + params.dump_nsec = false; + params.first_comment = comments ? ";; DNSSEC NSEC3 signatures\n" : NULL; + ret = zone_contents_nsec3_apply(zone, node_dump_text, ¶ms); + if (ret != KNOT_EOK) { + return ret; + } - // Dump trailing statistics. - fprintf(file, ";; Written %"PRIu64" records\n" - ";; Time %s\n", - params.rr_count, date); + if (comments) { + // Create formatted date-time string. + time_t now = time(NULL); + struct tm tm; + localtime_r(&now, &tm); + char date[64]; + strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S %Z", &tm); + + // Dump trailing statistics. + fprintf(file, ";; Written %"PRIu64" records\n" + ";; Time %s\n", + params.rr_count, date); + } - free(buf); + free(params.buf); // params.buf may be != buf because of knot_rrset_txt_dump_dynamic() return KNOT_EOK; } diff --git a/src/knot/zone/zone-dump.h b/src/knot/zone/zone-dump.h index cde1f5e8695e62cb12e9effdf85ecb11d11b84ef..e9d8be83ce4ab5056e8492a8e962e4752c137cd8 100644 --- a/src/knot/zone/zone-dump.h +++ b/src/knot/zone/zone-dump.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -29,12 +29,13 @@ /*! * \brief Dumps given zone to text file. * - * \param zone Zone to be saved. - * \param file File to write to. + * \param zone Zone to be saved. + * \param file File to write to. + * \param comments Add separating comments indicator. * * \retval KNOT_EOK on success. * \retval < 0 if error. */ -int zone_dump_text(zone_contents_t *zone, FILE *file); +int zone_dump_text(zone_contents_t *zone, FILE *file, bool comments); /*! @} */ diff --git a/src/knot/zone/zone-load.c b/src/knot/zone/zone-load.c index c683c7f41bc14884f81bca1093dfe5ea3cc2f9cd..129c65f18468e4a076b4a0f4ca17b5590e9fec1d 100644 --- a/src/knot/zone/zone-load.c +++ b/src/knot/zone/zone-load.c @@ -15,7 +15,8 @@ */ #include "knot/common/log.h" -#include "knot/server/journal.h" +#include "knot/journal/journal.h" +#include "knot/journal/old_journal.h" #include "knot/zone/zone-diff.h" #include "knot/zone/zone-load.h" #include "knot/zone/zonefile.h" @@ -90,41 +91,96 @@ int zone_load_check(conf_t *conf, zone_contents_t *contents) return KNOT_EOK; } +/*! + * \brief If old journal exists, warn the user and append the changes to chgs + * + * \todo Remove in the future together with journal/old_journal.[ch] and conf_old_journalfile() + */ +static void try_old_journal(conf_t *conf, zone_t *zone, uint32_t zone_c_serial, list_t *chgs) +{ + list_t old_chgs; + init_list(&old_chgs); + + // fetch old journal name + char *jfile = conf_old_journalfile(conf, zone->name); + if (jfile == NULL) { + return; + } + + if (!old_journal_exists(jfile)) { + goto toj_end; + } + log_zone_notice(zone->name, "journal, obsolete exists, file '%s'", jfile); + + // determine serial to load from + if (!EMPTY_LIST(*chgs)) { + changeset_t *lastch = TAIL(*chgs); + zone_c_serial = knot_soa_serial(&lastch->soa_to->rrs); + } + + // load changesets from old journal + int ret = old_journal_load_changesets(jfile, zone->name, &old_chgs, + zone_c_serial, zone_c_serial - 1); + if (ret != KNOT_ERANGE && ret != KNOT_ENOENT && ret != KNOT_EOK) { + log_zone_warning(zone->name, "journal, failed to load obsolete history (%s)", + knot_strerror(ret)); + goto toj_end; + } + + if (EMPTY_LIST(old_chgs)) { + goto toj_end; + } + log_zone_notice(zone->name, "journal, loaded obsolete history since serial '%u'", + zone_c_serial); + + // store them to new journal + ret = zone_changes_store(conf, zone, &old_chgs); + if (ret != KNOT_EOK) { + log_zone_warning(zone->name, "journal, failed to store obsolete history (%s)", + knot_strerror(ret)); + goto toj_end; + } + + // append them to chgs + changeset_t *ch, *nxt; + WALK_LIST_DELSAFE(ch, nxt, old_chgs) { + rem_node(&ch->n); + add_tail(chgs, &ch->n); + } + +toj_end: + changesets_free(&old_chgs); + free(jfile); +} + int zone_load_journal(conf_t *conf, zone_t *zone, zone_contents_t *contents) { if (conf == NULL || zone == NULL || contents == NULL) { return KNOT_EINVAL; } - /* Check if journal is used and zone is not empty. */ - char *journal_name = conf_journalfile(conf, zone->name); - if (!journal_exists(journal_name) || - zone_contents_is_empty(contents)) { - free(journal_name); + /* Check if journal is used (later in zone_changes_load() and zone is not empty. */ + if (zone_contents_is_empty(contents)) { return KNOT_EOK; } /* Fetch SOA serial. */ uint32_t serial = zone_contents_serial(contents); - /*! \todo Check what should be the upper bound. */ + /* Load journal */ list_t chgs; init_list(&chgs); + int ret = zone_changes_load(conf, zone, &chgs, serial); + if (ret != KNOT_EOK && ret != KNOT_ENOENT) { + changesets_free(&chgs); + return ret; + } - pthread_mutex_lock(&zone->journal_lock); - int ret = journal_load_changesets(journal_name, zone, &chgs, serial, - serial - 1); - pthread_mutex_unlock(&zone->journal_lock); - free(journal_name); + /* Load old journal (to be obsoleted) */ + try_old_journal(conf, zone, serial, &chgs); - if ((ret != KNOT_EOK && ret != KNOT_ERANGE) || EMPTY_LIST(chgs)) { - changesets_free(&chgs); - /* Absence of records is not an error. */ - if (ret == KNOT_ENOENT) { - return KNOT_EOK; - } else { - return ret; - } + if (EMPTY_LIST(chgs)) { + return KNOT_EOK; } /* Apply changesets. */ @@ -136,7 +192,7 @@ int zone_load_journal(conf_t *conf, zone_t *zone, zone_contents_t *contents) log_zone_info(zone->name, "changes from journal applied %u -> %u", serial, zone_contents_serial(contents)); } else { - log_zone_error(zone->name, "changes from journal applied %u -> %u (%s)", + log_zone_error(zone->name, "failed to apply journal changes %u -> %u (%s)", serial, zone_contents_serial(contents), knot_strerror(ret)); } diff --git a/src/knot/zone/zone-load.h b/src/knot/zone/zone-load.h index 5ee80dc6509af7dca3523d70570fbcf00ddaae74..ccd81adc1547835f5b28244fd10bfc694c4c4600 100644 --- a/src/knot/zone/zone-load.h +++ b/src/knot/zone/zone-load.h @@ -42,6 +42,8 @@ int zone_load_check(conf_t *conf, zone_contents_t *contents); /*! * \brief Update zone contents from the journal. * + * \warning If error, the zone is in inconsitent state and should be freed. + * * \param conf * \param zone * \param contents diff --git a/src/knot/zone/zone-tree.c b/src/knot/zone/zone-tree.c index dbcc9f68988cf55d240f9c10534df6b08cceae85..47a559bfab881c672bf2ba80c3e70264c7b7c097 100644 --- a/src/knot/zone/zone-tree.c +++ b/src/knot/zone/zone-tree.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -24,17 +24,21 @@ zone_tree_t* zone_tree_create() { - return hattrie_create(); + return hattrie_create(NULL); } -size_t zone_tree_weight(const zone_tree_t* tree) +size_t zone_tree_count(const zone_tree_t *tree) { + if (tree == NULL) { + return 0; + } + return hattrie_weight(tree); } int zone_tree_is_empty(const zone_tree_t *tree) { - return zone_tree_weight(tree) == 0; + return zone_tree_count(tree) == 0; } int zone_tree_insert(zone_tree_t *tree, zone_node_t *node) @@ -96,22 +100,23 @@ int zone_tree_get_less_or_equal(zone_tree_t *tree, if (fval) { *found = (zone_node_t *)(*fval); } + int exact_match = 0; - if (ret == 0) { + if (ret == KNOT_EOK) { if (fval) { *previous = (*found)->prev; } exact_match = 1; - } else if (ret < 0) { + } else if (ret == 1) { *previous = *found; *found = NULL; - } else if (ret > 0) { + } else { /* Previous should be the rightmost node. * For regular zone it is the node left of apex, but for some * cases like NSEC3, there is no such sort of thing (name wise). */ /*! \todo We could store rightmost node in zonetree probably. */ - hattrie_iter_t *i = hattrie_iter_begin(tree, 1); + hattrie_iter_t *i = hattrie_iter_begin(tree); *previous = *(zone_node_t **)hattrie_iter_val(i); /* leftmost */ *previous = (*previous)->prev; /* rightmost */ *found = NULL; @@ -143,7 +148,7 @@ int zone_tree_remove(zone_tree_t *tree, *removed = (zone_node_t *)(*rval); } - hattrie_del(tree, (char*)lf+1, *lf); + hattrie_del(tree, (char*)lf+1, *lf, NULL); return KNOT_EOK; } @@ -186,36 +191,7 @@ int zone_tree_delete_empty_node(zone_tree_t *tree, zone_node_t *node) return KNOT_EOK; } -int zone_tree_apply_inorder(zone_tree_t *tree, - zone_tree_apply_cb_t function, - void *data) -{ - if (function == NULL) { - return KNOT_EINVAL; - } - - if (zone_tree_is_empty(tree)) { - return KNOT_EOK; - } - - int result = KNOT_EOK; - - hattrie_iter_t *i = hattrie_iter_begin(tree, 1); - while(!hattrie_iter_finished(i)) { - result = function((zone_node_t **)hattrie_iter_val(i), data); - if (result != KNOT_EOK) { - break; - } - hattrie_iter_next(i); - } - hattrie_iter_free(i); - - return result; -} - -int zone_tree_apply(zone_tree_t *tree, - zone_tree_apply_cb_t function, - void *data) +int zone_tree_apply(zone_tree_t *tree, zone_tree_apply_cb_t function, void *data) { if (function == NULL) { return KNOT_EINVAL; @@ -225,7 +201,7 @@ int zone_tree_apply(zone_tree_t *tree, return KNOT_EOK; } - return hattrie_apply_rev(tree, (int (*)(value_t*,void*))function, data); + return hattrie_apply_rev(tree, (int (*)(value_t *, void *))function, data); } void zone_tree_free(zone_tree_t **tree) diff --git a/src/knot/zone/zone-tree.h b/src/knot/zone/zone-tree.h index ad20590182cee77d442f8d72d351a88c965e7085..ee742b63d55aa9db3cb1f7a05361914c2f948b74 100644 --- a/src/knot/zone/zone-tree.h +++ b/src/knot/zone/zone-tree.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -42,11 +42,11 @@ typedef int (*zone_tree_apply_cb_t)(zone_node_t **node, void *data); zone_tree_t* zone_tree_create(void); /*! - * \brief Return weight of the zone tree (number of nodes). + * \brief Return number of nodes in the zone tree. * \param tree Zone tree. * \return number of nodes in tree. */ -size_t zone_tree_weight(const zone_tree_t* tree); +size_t zone_tree_count(const zone_tree_t *tree); /*! * \brief Checks if the zone tree is empty. @@ -130,29 +130,7 @@ int zone_tree_remove(zone_tree_t *tree, int zone_tree_delete_empty_node(zone_tree_t *tree, zone_node_t *node); /*! - * \brief Applies the given function to each node in the zone. - * - * This function uses in-order depth-first forward traversal, i.e. the function - * is first recursively applied to left subtree, then to the root and then to - * the right subtree. - * - * \note This implies that the zone is stored in a binary tree. Is there a way - * to make this traversal independent on the underlying structure? - * - * \param tree Zone tree to apply the function to. - * \param function Function to be applied to each node of the zone. - * \param data Arbitrary data to be passed to the function. - * - * \retval KNOT_EOK - * \retval KNOT_EINVAL - */ -int zone_tree_apply_inorder(zone_tree_t *tree, - zone_tree_apply_cb_t function, - void *data); - -/*! - * \brief Applies the given function to each node in the zone. No - * specific order is maintained. + * \brief Applies the given function to each node in the zone in order. * * \param tree Zone tree to apply the function to. * \param function Function to be applied to each node of the zone. @@ -161,8 +139,7 @@ int zone_tree_apply_inorder(zone_tree_t *tree, * \retval KNOT_EOK * \retval KNOT_EINVAL */ -int zone_tree_apply(zone_tree_t *tree, - zone_tree_apply_cb_t function, void *data); +int zone_tree_apply(zone_tree_t *tree, zone_tree_apply_cb_t function, void *data); /*! * \brief Destroys the zone tree, not touching the saved data. diff --git a/src/knot/zone/zone.c b/src/knot/zone/zone.c index f39ce28d373dc88c6bfcb649da3d5af920af722c..ece749f3d90134b76064f6a542c7da4f87ee7b24 100644 --- a/src/knot/zone/zone.c +++ b/src/knot/zone/zone.c @@ -33,15 +33,113 @@ #include "contrib/ucw/lists.h" #include "contrib/ucw/mempool.h" -#define JOURNAL_SUFFIX ".diff.db" +#define JOURNAL_LOCK_MUTEX (&zone->journal_lock) +#define JOURNAL_LOCK_RW pthread_mutex_lock(JOURNAL_LOCK_MUTEX); +#define JOURNAL_UNLOCK_RW pthread_mutex_unlock(JOURNAL_LOCK_MUTEX); -static void free_ddns_queue(zone_t *z) +static void free_ddns_queue(zone_t *zone) { ptrnode_t *node = NULL, *nxt = NULL; - WALK_LIST_DELSAFE(node, nxt, z->ddns_queue) { + WALK_LIST_DELSAFE(node, nxt, zone->ddns_queue) { knot_request_free(node->d, NULL); } - ptrlist_free(&z->ddns_queue, NULL); + ptrlist_free(&zone->ddns_queue, NULL); +} + +/*! \brief Open journal for zone. */ +static int open_journal(zone_t *zone) +{ + assert(zone); + + int ret = journal_open(zone->journal, zone->journal_db, zone->name); + if (ret != KNOT_EOK) { + log_zone_error(zone->name, "failed to open journal '%s'", + (*zone->journal_db)->path); + } + + return ret; +} + +/*! \brief Close the zone journal. */ +static void close_journal(zone_t *zone) +{ + assert(zone); + journal_close(zone->journal); +} + +static int flush_journal(conf_t *conf, zone_t *zone) +{ + /*! @note Function expects nobody will change zone contents meanwile. */ + + assert(zone); + + bool force = zone->flags & ZONE_FORCE_FLUSH; + zone->flags &= ~ZONE_FORCE_FLUSH; + + if (zone_contents_is_empty(zone->contents)) { + return KNOT_EINVAL; + } + + /* Check for disabled zonefile synchronization. */ + conf_val_t val = conf_zone_get(conf, C_ZONEFILE_SYNC, zone->name); + if (conf_int(&val) < 0 && !force) { + return KNOT_EOK; + } + + /* Check for difference against zonefile serial. */ + zone_contents_t *contents = zone->contents; + uint32_t serial_to = zone_contents_serial(contents); + if (!force && zone->zonefile.exists && zone->zonefile.serial == serial_to) { + return KNOT_EOK; /* No differences. */ + } + + char *zonefile = conf_zonefile(conf, zone->name); + + /* Synchronize journal. */ + int ret = zonefile_write(zonefile, contents); + if (ret != KNOT_EOK) { + log_zone_warning(zone->name, "failed to update zone file (%s)", + knot_strerror(ret)); + free(zonefile); + return ret; + } + + if (zone->zonefile.exists) { + log_zone_info(zone->name, "zone file updated, serial %u -> %u", + zone->zonefile.serial, serial_to); + } else { + log_zone_info(zone->name, "zone file updated, serial %u", + serial_to); + } + + /* Update zone version. */ + struct stat st; + if (stat(zonefile, &st) < 0) { + log_zone_warning(zone->name, "failed to update zone file (%s)", + knot_strerror(knot_map_errno())); + free(zonefile); + return KNOT_EACCES; + } + + free(zonefile); + + /* Update zone file serial and journal. */ + zone->zonefile.exists = true; + zone->zonefile.mtime = st.st_mtime; + zone->zonefile.serial = serial_to; + + /* Flush journal. */ + if (zone->journal && journal_exists(zone->journal_db, zone->name)) { + ret = journal_flush(zone->journal); + if (ret != KNOT_EOK) { + return ret; + } + } + + /* Trim extra heap. */ + mem_trim(); + + return ret; } zone_t* zone_new(const knot_dname_t *name) @@ -58,6 +156,14 @@ zone_t* zone_new(const knot_dname_t *name) return NULL; } + // Journal + zone->journal = journal_new(); + if (zone->journal == NULL) { + knot_dname_free(&zone->name, NULL); + free(zone); + return NULL; + } + // DDNS pthread_mutex_init(&zone->ddns_lock, NULL); zone->ddns_queue_size = 0; @@ -97,10 +203,14 @@ void zone_free(zone_t **zone_ptr) zone_t *zone = *zone_ptr; + close_journal(zone); + zone_events_deinit(zone); knot_dname_free(&zone->name, NULL); + journal_free(&zone->journal); + free_ddns_queue(zone); pthread_mutex_destroy(&zone->ddns_lock); pthread_mutex_destroy(&zone->journal_lock); @@ -127,24 +237,23 @@ int zone_change_store(conf_t *conf, zone_t *zone, changeset_t *change) return KNOT_EINVAL; } - conf_val_t val = conf_zone_get(conf, C_MAX_JOURNAL_SIZE, zone->name); - int64_t ixfr_fslimit = conf_int(&val); - char *journal_file = conf_journalfile(conf, zone->name); + JOURNAL_LOCK_RW - pthread_mutex_lock(&zone->journal_lock); - int ret = journal_store_changeset(change, journal_file, ixfr_fslimit); - if (ret == KNOT_EBUSY) { - log_zone_notice(zone->name, "journal is full, flushing"); + int ret = open_journal(zone); + if (ret == KNOT_EOK) { + ret = journal_store_changeset(zone->journal, change); + if (ret == KNOT_EBUSY) { + log_zone_notice(zone->name, "journal is full, flushing"); - /* Transaction rolled back, journal released, we may flush. */ - ret = zone_flush_journal(conf, zone); - if (ret == KNOT_EOK) { - ret = journal_store_changeset(change, journal_file, ixfr_fslimit); + /* Transaction rolled back, journal released, we may flush. */ + ret = flush_journal(conf, zone); + if (ret == KNOT_EOK) { + ret = journal_store_changeset(zone->journal, change); + } } } - pthread_mutex_unlock(&zone->journal_lock); - free(journal_file); + JOURNAL_UNLOCK_RW return ret; } @@ -155,32 +264,68 @@ int zone_changes_store(conf_t *conf, zone_t *zone, list_t *chgs) return KNOT_EINVAL; } - conf_val_t val = conf_zone_get(conf, C_MAX_JOURNAL_SIZE, zone->name); - int64_t ixfr_fslimit = conf_int(&val); - char *journal_file = conf_journalfile(conf, zone->name); + JOURNAL_LOCK_RW - pthread_mutex_lock(&zone->journal_lock); - int ret = journal_store_changesets(chgs, journal_file, ixfr_fslimit); - if (ret == KNOT_EBUSY) { - log_zone_notice(zone->name, "journal is full, flushing"); + int ret = open_journal(zone); + if (ret == KNOT_EOK) { + ret = journal_store_changesets(zone->journal, chgs); + if (ret == KNOT_EBUSY) { + log_zone_notice(zone->name, "journal is full, flushing"); - /* - * TODO: Check zone_flush_journal() outside event_flush() - * - * zone->timers.last flush needs to be updated and flush - * event rescheduled - */ + /* + * TODO: Check where zone_flush_journal is used beyond + * event_flush(). zone->timers.last flush needs to be + * updated and flush event rescheduled. + * + * The code bellow does only half of it. + */ - /* Transaction rolled back, journal released, we may flush. */ - ret = zone_flush_journal(conf, zone); - if (ret == KNOT_EOK) { - ret = journal_store_changesets(chgs, journal_file, ixfr_fslimit); + /* Transaction rolled back, journal released, we may flush. */ + ret = flush_journal(conf, zone); + if (ret == KNOT_EOK) { + zone->timers.last_flush = time(NULL); + ret = journal_store_changesets(zone->journal, chgs); + } } + } + + JOURNAL_UNLOCK_RW + + return ret; +} +int zone_changes_load(conf_t *conf, zone_t *zone, list_t *dst, uint32_t from) +{ + if (conf == NULL || zone == NULL || dst == NULL) { + return KNOT_EINVAL; } - pthread_mutex_unlock(&zone->journal_lock); - free(journal_file); + int ret = KNOT_ENOENT; + + if (journal_exists(zone->journal_db, zone->name)) { + ret = open_journal(zone); + } + + if (ret == KNOT_EOK) { + ret = journal_load_changesets(zone->journal, dst, from); + } + + return ret; +} + +int zone_flush_journal(conf_t *conf, zone_t *zone) +{ + if (conf == NULL || zone == NULL) { + return KNOT_EINVAL; + } + + JOURNAL_LOCK_RW + + // NO open_journal() here. + + int ret = flush_journal(conf, zone); + + JOURNAL_UNLOCK_RW return ret; } @@ -343,76 +488,6 @@ int zone_master_try(conf_t *conf, zone_t *zone, zone_master_cb callback, return success ? KNOT_EOK : KNOT_ENOMASTER; } -int zone_flush_journal(conf_t *conf, zone_t *zone) -{ - if (conf == NULL || zone == NULL || zone_contents_is_empty(zone->contents)) { - return KNOT_EINVAL; - } - - bool force = zone->flags & ZONE_FORCE_FLUSH; - zone->flags &= ~ZONE_FORCE_FLUSH; - - /* Check for disabled zonefile synchronization. */ - conf_val_t val = conf_zone_get(conf, C_ZONEFILE_SYNC, zone->name); - if (conf_int(&val) < 0 && !force) { - return KNOT_EOK; - } - - /* Check for difference against zonefile serial. */ - zone_contents_t *contents = zone->contents; - uint32_t serial_to = zone_contents_serial(contents); - if (!force && zone->zonefile.exists && zone->zonefile.serial == serial_to) { - log_zone_info(zone->name, "zone file up-to-date, serial %u", - zone->zonefile.serial); - return KNOT_EOK; - } - - char *zonefile = conf_zonefile(conf, zone->name); - - /* Synchronize journal. */ - int ret = zonefile_write(zonefile, contents); - if (ret != KNOT_EOK) { - log_zone_warning(zone->name, "zone file update failed (%s)", - knot_strerror(ret)); - free(zonefile); - return ret; - } - - if (zone->zonefile.exists) { - log_zone_info(zone->name, "zone file updated, serial %u -> %u", - zone->zonefile.serial, serial_to); - } else { - log_zone_info(zone->name, "zone file updated, serial none -> %u", - serial_to); - } - - /* Update zone version. */ - struct stat st; - if (stat(zonefile, &st) < 0) { - log_zone_warning(zone->name, "zone file update failed (%s)", - knot_strerror(knot_map_errno())); - free(zonefile); - return KNOT_EACCES; - } - - free(zonefile); - - char *journal_file = conf_journalfile(conf, zone->name); - - /* Update zone file serial and journal. */ - zone->zonefile.exists = true; - zone->zonefile.mtime = st.st_mtime; - zone->zonefile.serial = serial_to; - journal_mark_synced(journal_file); - - free(journal_file); - - /* Trim extra heap. */ - mem_trim(); - - return ret; -} - int zone_update_enqueue(zone_t *zone, knot_pkt_t *pkt, struct process_query_param *param) { if (zone == NULL || pkt == NULL || param == NULL) { diff --git a/src/knot/zone/zone.h b/src/knot/zone/zone.h index f3b9d97ff14639f6b433429a63b2a553114ea055..01020bbe9a76ec2fdff98595be4d17981467fc71 100644 --- a/src/knot/zone/zone.h +++ b/src/knot/zone/zone.h @@ -29,7 +29,8 @@ #include <stdint.h> #include "knot/conf/conf.h" -#include "knot/server/journal.h" +#include "knot/conf/confio.h" +#include "knot/journal/journal.h" #include "knot/events/events.h" #include "knot/zone/contents.h" #include "knot/zone/timers.h" @@ -57,6 +58,9 @@ typedef struct zone zone_contents_t *contents; zone_flag_t flags; + /*! \brief Dynamic configuration zone change type. */ + conf_io_type_t change_type; + /*! \brief Zonefile parameters. */ struct { time_t mtime; @@ -76,9 +80,15 @@ typedef struct zone /*! \brief Control update context. */ struct zone_update *control_update; + /*! \brief Journal structure. */ + journal_t *journal; + /*! \brief Journal access lock. */ pthread_mutex_t journal_lock; + /*! \brief Ptr to journal DB (in struct server) */ + journal_db_t **journal_db; + /*! \brief Preferred master lock. */ pthread_mutex_t preferred_lock; /*! \brief Preferred master for remote operation. */ @@ -119,8 +129,13 @@ void zone_control_clear(zone_t *zone); * \ref #223 New zone API * \todo get rid of this */ -int zone_changes_store(conf_t *conf, zone_t *zone, list_t *chgs); int zone_change_store(conf_t *conf, zone_t *zone, changeset_t *change); +int zone_changes_store(conf_t *conf, zone_t *zone, list_t *chgs); +int zone_changes_load(conf_t *conf, zone_t *zone, list_t *dst, uint32_t from); + +/*! \brief Synchronize zone file with journal. */ +int zone_flush_journal(conf_t *conf, zone_t *zone); + /*! * \brief Atomically switch the content of the zone. */ @@ -156,8 +171,6 @@ typedef int (*zone_master_cb)(conf_t *conf, zone_t *zone, const conf_remote_t *r int zone_master_try(conf_t *conf, zone_t *zone, zone_master_cb callback, void *callback_data, const char *err_str); -/*! \brief Synchronize zone file with journal. */ -int zone_flush_journal(conf_t *conf, zone_t *zone); /*! \brief Enqueue UPDATE request for processing. */ int zone_update_enqueue(zone_t *zone, knot_pkt_t *pkt, struct process_query_param *param); diff --git a/src/knot/zone/zonedb-load.c b/src/knot/zone/zonedb-load.c index af94f34d988af25f27bf5d8dd7a1be23b59bedfa..2935502e8f74cda6f0e5840d17fb92783d715be5 100644 --- a/src/knot/zone/zonedb-load.c +++ b/src/knot/zone/zonedb-load.c @@ -32,7 +32,7 @@ */ typedef enum { ZONE_STATUS_NOT_FOUND = 0, //!< Zone file does not exist. - ZONE_STATUS_BOOSTRAP, //!< Zone file does not exist, can boostrap. + ZONE_STATUS_BOOTSTRAP, //!< Zone file does not exist, can bootstrap. ZONE_STATUS_FOUND_NEW, //!< Zone file exists, not loaded yet. ZONE_STATUS_FOUND_CURRENT, //!< Zone file exists, same as loaded. ZONE_STATUS_FOUND_UPDATED, //!< Zone file exists, newer than loaded. @@ -64,7 +64,7 @@ static zone_status_t zone_file_status(conf_t *conf, const zone_t *old_zone, return ZONE_STATUS_FOUND_CURRENT; } else { return zone_load_can_bootstrap(conf, name) ? - ZONE_STATUS_BOOSTRAP : ZONE_STATUS_NOT_FOUND; + ZONE_STATUS_BOOTSTRAP : ZONE_STATUS_NOT_FOUND; } } else { if (old_zone == NULL) { @@ -91,7 +91,7 @@ static void log_zone_load_info(const zone_t *zone, zone_status_t status) switch (status) { case ZONE_STATUS_NOT_FOUND: action = "not found"; break; - case ZONE_STATUS_BOOSTRAP: action = "will be bootstrapped"; break; + case ZONE_STATUS_BOOTSTRAP: action = "will be bootstrapped"; break; case ZONE_STATUS_FOUND_NEW: action = "will be loaded"; break; case ZONE_STATUS_FOUND_CURRENT: action = "is up-to-date"; break; case ZONE_STATUS_FOUND_UPDATED: action = "will be reloaded"; break; @@ -114,6 +114,8 @@ static zone_t *create_zone_from(const knot_dname_t *name, server_t *server) return NULL; } + zone->journal_db = &server->journal_db; + int result = zone_events_setup(zone, server->workers, &server->sched, server->timers_db); if (result != KNOT_EOK) { @@ -227,14 +229,14 @@ static zone_t *create_zone_new(conf_t *conf, const knot_dname_t *name, zone_status_t zstatus = zone_file_status(conf, NULL, name); if (zone_expired(zone)) { assert(zone_is_slave(conf, zone)); - zstatus = ZONE_STATUS_BOOSTRAP; + zstatus = ZONE_STATUS_BOOTSTRAP; } switch (zstatus) { case ZONE_STATUS_FOUND_NEW: replan_load_new(zone); break; - case ZONE_STATUS_BOOSTRAP: + case ZONE_STATUS_BOOTSTRAP: replan_load_bootstrap(conf, zone); break; case ZONE_STATUS_NOT_FOUND: @@ -271,6 +273,27 @@ static zone_t *create_zone(conf_t *conf, const knot_dname_t *name, server_t *ser } } +static void mark_changed_zones(knot_zonedb_t *zonedb, hattrie_t *changed) +{ + if (changed == NULL) { + return; + } + + hattrie_iter_t *it = hattrie_iter_begin(changed); + for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { + const knot_dname_t *name = + (const knot_dname_t *)hattrie_iter_key(it, NULL); + + zone_t *zone = knot_zonedb_find(zonedb, name); + if (zone != NULL) { + conf_io_type_t type = (conf_io_type_t)(*hattrie_iter_val(it)); + assert(!(type & CONF_IO_TSET)); + zone->change_type = type; + } + } + hattrie_iter_free(it); +} + /*! * \brief Create new zone database. * @@ -293,13 +316,31 @@ static knot_zonedb_t *create_zonedb(conf_t *conf, server_t *server) return NULL; } + bool full = !(conf->io.flags & CONF_IO_FACTIVE) || + (conf->io.flags & CONF_IO_FRLD_ZONES); + + /* Mark changed zones. */ + if (!full) { + mark_changed_zones(server->zone_db, conf->io.zones); + } + for (conf_iter_t iter = conf_iter(conf, C_ZONE); iter.code == KNOT_EOK; conf_iter_next(conf, &iter)) { conf_val_t id = conf_iter_id(conf, &iter); - zone_t *old_zone = knot_zonedb_find(db_old, conf_dname(&id)); - zone_t *zone = create_zone(conf, conf_dname(&id), server, old_zone); - if (!zone) { - log_zone_error(id.data, "zone cannot be created"); + const knot_dname_t *name = conf_dname(&id); + + zone_t *old_zone = knot_zonedb_find(db_old, name); + if (old_zone != NULL && !full) { + /* Reuse unchanged zone. */ + if (!(old_zone->change_type & CONF_IO_TRELOAD)) { + knot_zonedb_insert(db_new, old_zone); + continue; + } + } + + zone_t *zone = create_zone(conf, name, server, old_zone); + if (zone == NULL) { + log_zone_error(name, "zone cannot be created"); continue; } @@ -318,30 +359,52 @@ static knot_zonedb_t *create_zonedb(conf_t *conf, server_t *server) * \note Zone content may be preserved in the new zone database, in this case * new and old zone share the contents. Shared content is not freed. * - * \param db_new New zone database. - * \param db_old Old zone database. + * \param conf New server configuration. + * \param db_old Old zone database to remove. + * \param db_new New zone database for comparison if full reload. */ -static void remove_old_zonedb(const knot_zonedb_t *db_new, knot_zonedb_t *db_old) +static void remove_old_zonedb(conf_t *conf, knot_zonedb_t *db_old, + knot_zonedb_t *db_new) { if (db_old == NULL) { return; } + bool full = !(conf->io.flags & CONF_IO_FACTIVE) || + (conf->io.flags & CONF_IO_FRLD_ZONES); + knot_zonedb_iter_t it; - knot_zonedb_iter_begin(db_new, &it); + knot_zonedb_iter_begin(db_old, &it); - while(!knot_zonedb_iter_finished(&it)) { - zone_t *new_zone = knot_zonedb_iter_val(&it); - zone_t *old_zone = knot_zonedb_find(db_old, new_zone->name); + while (!knot_zonedb_iter_finished(&it)) { + zone_t *zone = knot_zonedb_iter_val(&it); - if (old_zone) { - old_zone->contents = NULL; + if (full) { + /* Check if reloaded (reused contents). */ + if (knot_zonedb_find(db_new, zone->name)) { + zone->contents = NULL; + } + /* Completely new zone. */ + } else { + /* Check if reloaded (reused contents). */ + if (zone->change_type & CONF_IO_TRELOAD) { + zone->contents = NULL; + zone_free(&zone); + /* Check if removed (drop also contents). */ + } else if (zone->change_type & CONF_IO_TUNSET) { + zone_free(&zone); + } + /* Completely reused zone. */ } knot_zonedb_iter_next(&it); } - knot_zonedb_deep_free(&db_old); + if (full) { + knot_zonedb_deep_free(&db_old); + } else { + knot_zonedb_free(&db_old); + } } static bool zone_exists(const knot_dname_t *zone, void *data) @@ -356,7 +419,6 @@ static bool zone_exists(const knot_dname_t *zone, void *data) void zonedb_reload(conf_t *conf, server_t *server) { - /* Check parameters */ if (conf == NULL || server == NULL) { return; } @@ -385,10 +447,6 @@ void zonedb_reload(conf_t *conf, server_t *server) knot_strerror(ret)); } - /* - * Remove all zones present in the new DB from the old DB. - * No new thread can access these zones in the old DB, as the - * databases are already switched. - */ - remove_old_zonedb(db_new, db_old); + /* Remove old zone DB. */ + remove_old_zonedb(conf, db_old, db_new); } diff --git a/src/knot/zone/zonedb.c b/src/knot/zone/zonedb.c index c7e85d23511eed3be123f1072c9c09ab2ac43fac..0b638e684df8f418e582830c799ec0425162394d 100644 --- a/src/knot/zone/zonedb.c +++ b/src/knot/zone/zonedb.c @@ -28,16 +28,10 @@ static void discard_zone(zone_t *zone) { // Don't flush if removed zone (no previous configuration available). if (conf_rawid_exists(conf(), C_ZONE, zone->name, knot_dname_size(zone->name))) { - char *journal_file = conf_journalfile(conf(), zone->name); - - /* Flush if bootstrapped or if the journal doesn't exist. */ - if (!zone->zonefile.exists || !journal_exists(journal_file)) { - pthread_mutex_lock(&zone->journal_lock); + // Flush if bootstrapped or if the journal doesn't exist. + if (!zone->zonefile.exists || !journal_exists(zone->journal_db, zone->name)) { zone_flush_journal(conf(), zone); - pthread_mutex_unlock(&zone->journal_lock); } - - free(journal_file); } zone_free(&zone); diff --git a/src/knot/zone/zonefile.c b/src/knot/zone/zonefile.c index f6d2694f7b883c5fc4ed1095562304b4452bf450..e87ce569437ccff34c359053554a554ed4e8a928 100644 --- a/src/knot/zone/zonefile.c +++ b/src/knot/zone/zonefile.c @@ -26,8 +26,8 @@ #include <inttypes.h> #include "libknot/libknot.h" +#include "contrib/files.h" #include "contrib/macros.h" -#include "contrib/string.h" #include "knot/common/log.h" #include "knot/dnssec/zone-nsec.h" #include "knot/zone/semantic-check.h" @@ -298,73 +298,6 @@ int zonefile_exists(const char *path, time_t *mtime) return KNOT_EOK; } -/*! \brief Open a temporary zonefile. */ -static int open_tmp_filename(const char *name, char **tmp_name, FILE **file) -{ - int ret; - - *tmp_name = sprintf_alloc("%s.XXXXXX", name); - if (*tmp_name == NULL) { - ret = KNOT_ENOMEM; - goto open_tmp_failed; - } - - int fd = mkstemp(*tmp_name); - if (fd < 0) { - ret = knot_map_errno(); - goto open_tmp_failed; - } - - if (fchmod(fd, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP) != 0) { - ret = knot_map_errno(); - close(fd); - unlink(*tmp_name); - goto open_tmp_failed; - } - - *file = fdopen(fd, "w"); - if (*file == NULL) { - ret = knot_map_errno(); - close(fd); - unlink(*tmp_name); - goto open_tmp_failed; - } - - return KNOT_EOK; -open_tmp_failed: - free(*tmp_name); - *tmp_name = NULL; - - assert(ret != KNOT_EOK); - return ret; -} - -/*! \brief Prepare a directory for the file. */ -static int make_path(const char *path, mode_t mode) -{ - if (path == NULL) { - return KNOT_EINVAL; - } - - char *dir = strdup(path); - if (dir == NULL) { - return KNOT_ENOMEM; - } - - for (char *p = strchr(dir + 1, '/'); p != NULL; p = strchr(p + 1, '/')) { - *p = '\0'; - if (mkdir(dir, mode) == -1 && errno != EEXIST) { - free(dir); - return knot_map_errno(); - } - *p = '/'; - } - - free(dir); - - return KNOT_EOK; -} - int zonefile_write(const char *path, zone_contents_t *zone) { if (!zone || !path) { @@ -378,12 +311,12 @@ int zonefile_write(const char *path, zone_contents_t *zone) FILE *file = NULL; char *tmp_name = NULL; - ret = open_tmp_filename(path, &tmp_name, &file); + ret = open_tmp_file(path, &tmp_name, &file, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); if (ret != KNOT_EOK) { return ret; } - ret = zone_dump_text(zone, file); + ret = zone_dump_text(zone, file, true); fclose(file); if (ret != KNOT_EOK) { unlink(tmp_name); diff --git a/src/libknot/codes.c b/src/libknot/codes.c index 916e089c534374f3d4de3921c0984043385c8dba..55f20fb35eba74acb4e238fbaf89c2fc6cb8d017 100644 --- a/src/libknot/codes.c +++ b/src/libknot/codes.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -30,36 +30,31 @@ const knot_lookup_t knot_opcode_names[] = { _public_ const knot_lookup_t knot_rcode_names[] = { - { KNOT_RCODE_NOERROR, "NOERROR" }, - { KNOT_RCODE_FORMERR, "FORMERR" }, - { KNOT_RCODE_SERVFAIL, "SERVFAIL" }, - { KNOT_RCODE_NXDOMAIN, "NXDOMAIN" }, - { KNOT_RCODE_NOTIMPL, "NOTIMPL" }, - { KNOT_RCODE_REFUSED, "REFUSED" }, - { KNOT_RCODE_YXDOMAIN, "YXDOMAIN" }, - { KNOT_RCODE_YXRRSET, "YXRRSET" }, - { KNOT_RCODE_NXRRSET, "NXRRSET" }, - { KNOT_RCODE_NOTAUTH, "NOTAUTH" }, - { KNOT_RCODE_NOTZONE, "NOTZONE" }, - { KNOT_RCODE_BADVERS, "BADVERS" }, + { KNOT_RCODE_NOERROR, "NOERROR" }, + { KNOT_RCODE_FORMERR, "FORMERR" }, + { KNOT_RCODE_SERVFAIL, "SERVFAIL" }, + { KNOT_RCODE_NXDOMAIN, "NXDOMAIN" }, + { KNOT_RCODE_NOTIMPL, "NOTIMPL" }, + { KNOT_RCODE_REFUSED, "REFUSED" }, + { KNOT_RCODE_YXDOMAIN, "YXDOMAIN" }, + { KNOT_RCODE_YXRRSET, "YXRRSET" }, + { KNOT_RCODE_NXRRSET, "NXRRSET" }, + { KNOT_RCODE_NOTAUTH, "NOTAUTH" }, + { KNOT_RCODE_NOTZONE, "NOTZONE" }, + { KNOT_RCODE_BADVERS, "BADVERS" }, + { KNOT_RCODE_BADKEY, "BADKEY" }, + { KNOT_RCODE_BADTIME, "BADTIME" }, + { KNOT_RCODE_BADMODE, "BADMODE" }, + { KNOT_RCODE_BADNAME, "BADNAME" }, + { KNOT_RCODE_BADALG, "BADALG" }, + { KNOT_RCODE_BADTRUNC, "BADTRUNC" }, { KNOT_RCODE_BADCOOKIE, "BADCOOKIE" }, { 0, NULL } }; _public_ -const knot_lookup_t knot_tsig_err_names[] = { - { KNOT_TSIG_ERR_BADSIG, "BADSIG" }, - { KNOT_TSIG_ERR_BADKEY, "BADKEY" }, - { KNOT_TSIG_ERR_BADTIME, "BADTIME" }, - { KNOT_TSIG_ERR_BADTRUNC, "BADTRUNC" }, - { 0, NULL } -}; - -_public_ -const knot_lookup_t knot_tkey_err_names[] = { - { KNOT_TKEY_ERR_BADMODE, "BADMODE" }, - { KNOT_TKEY_ERR_BADNAME, "BADNAME" }, - { KNOT_TKEY_ERR_BADALG, "BADALG" }, +const knot_lookup_t knot_tsig_rcode_names[] = { + { KNOT_RCODE_BADSIG, "BADSIG" }, { 0, NULL } }; @@ -76,6 +71,8 @@ const knot_lookup_t knot_dnssec_alg_names[] = { { KNOT_DNSSEC_ALG_ECC_GOST, "ECC_GOST" }, { KNOT_DNSSEC_ALG_ECDSAP256SHA256, "ECDSAP256SHA256" }, { KNOT_DNSSEC_ALG_ECDSAP384SHA384, "ECDSAP384SHA384" }, + { KNOT_DNSSEC_ALG_ED25519, "ED25519" }, + { KNOT_DNSSEC_ALG_ED448, "ED448" }, { KNOT_DNSSEC_ALG_INDIRECT, "INDIRECT" }, { KNOT_DNSSEC_ALG_PRIVATEDNS, "PRIVATEDNS" }, { KNOT_DNSSEC_ALG_PRIVATEOID, "PRIVATEOID" }, diff --git a/src/libknot/codes.h b/src/libknot/codes.h index 9b62074c793144ed08720190b11338f323e6ce26..c5cf323498b7510c6fe6b71817b14f28957f5403 100644 --- a/src/libknot/codes.h +++ b/src/libknot/codes.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -37,14 +37,9 @@ extern const knot_lookup_t knot_opcode_names[]; extern const knot_lookup_t knot_rcode_names[]; /*! - * \brief TSIG error names. + * \brief TSIG exceptions to reply code names. */ -extern const knot_lookup_t knot_tsig_err_names[]; - -/*! - * \brief TKEY error names. - */ -extern const knot_lookup_t knot_tkey_err_names[]; +extern const knot_lookup_t knot_tsig_rcode_names[]; /*! * \brief DNSSEC algorithm names. diff --git a/src/libknot/consts.h b/src/libknot/consts.h index bcf8bec961b4bab7a5980d0212cb74a3c594d03d..7df39e507246007f4faf4f871b36e74bc2593b69 100644 --- a/src/libknot/consts.h +++ b/src/libknot/consts.h @@ -69,10 +69,6 @@ typedef enum { * \brief DNS reply codes (RCODEs). * * http://www.iana.org/assignments/dns-parameters/dns-parameters.xml - * - * \note Here, only RCODEs present in Header or as an Extended RCODE in - * OPT + Header are listed. Other codes are used in dedicated fields of - * other RRs. */ typedef enum { KNOT_RCODE_NOERROR = 0, /*!< No error. */ @@ -87,31 +83,16 @@ typedef enum { KNOT_RCODE_NOTAUTH = 9, /*!< Server not authoritative. / Query not authorized. */ KNOT_RCODE_NOTZONE = 10, /*!< Name is not inside zone. */ KNOT_RCODE_BADVERS = 16, /*!< Bad OPT Version. */ + KNOT_RCODE_BADSIG = 16, /*!< (TSIG) Signature failure. */ + KNOT_RCODE_BADKEY = 17, /*!< (TSIG) Key is not supported. */ + KNOT_RCODE_BADTIME = 18, /*!< (TSIG) Signature out of time window. */ + KNOT_RCODE_BADMODE = 19, /*!< (TKEY) Bad mode. */ + KNOT_RCODE_BADNAME = 20, /*!< (TKEY) Duplicate key name. */ + KNOT_RCODE_BADALG = 21, /*!< (TKEY) Algorithm not supported. */ + KNOT_RCODE_BADTRUNC = 22, /*!< (TSIG) Bad truncation. */ KNOT_RCODE_BADCOOKIE = 23 /*!< Bad/missing server cookie. */ } knot_rcode_t; -/*! - * \brief TSIG error codes to be set in the TSIG RR's RDATA. - * - * Defined in RFC 2845 and RFC 4635. - * See also https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml - */ -typedef enum { - KNOT_TSIG_ERR_BADSIG = 16, /*!< TSIG signature failed. */ - KNOT_TSIG_ERR_BADKEY = 17, /*!< Key is not supported. */ - KNOT_TSIG_ERR_BADTIME = 18, /*!< Signature out of time window. */ - KNOT_TSIG_ERR_BADTRUNC = 22 /*!< Bad truncation. */ -} knot_tsig_error_t; - -/*! - * \brief TKEY error codes. (Defined in RFC 2930.) - */ -typedef enum { - KNOT_TKEY_ERR_BADMODE = 19, /*!< Bad TKEY mode. */ - KNOT_TKEY_ERR_BADNAME = 20, /*!< Duplicate key name. */ - KNOT_TKEY_ERR_BADALG = 21 /*!< Algorithm not supported. */ -} knot_tkey_error_t; - /*! * \brief DNS packet section identifiers. */ @@ -165,6 +146,9 @@ typedef enum { KNOT_DNSSEC_ALG_ECDSAP256SHA256 = 13, KNOT_DNSSEC_ALG_ECDSAP384SHA384 = 14, + KNOT_DNSSEC_ALG_ED25519 = 15, + KNOT_DNSSEC_ALG_ED448 = 16, + KNOT_DNSSEC_ALG_INDIRECT = 252, KNOT_DNSSEC_ALG_PRIVATEDNS = 253, KNOT_DNSSEC_ALG_PRIVATEOID = 254 diff --git a/src/libknot/control/control.c b/src/libknot/control/control.c index 0b578b8486348bed4121e9718983ae70a595e97e..8591519f50a8040e6805f8103f6c3fff20c3407c 100644 --- a/src/libknot/control/control.c +++ b/src/libknot/control/control.c @@ -491,7 +491,7 @@ static int receive_item_value(knot_ctl_t *ctx, char **value) if (*value == NULL) { return KNOT_ENOMEM; } - wire_ctx_read(w, (uint8_t *)*value, data_len); + wire_ctx_read(w, *value, data_len); if (w->error != KNOT_EOK) { return w->error; } diff --git a/src/libknot/db/db_lmdb.c b/src/libknot/db/db_lmdb.c index 286718ba31a38f3a2dfe356e6976179a4a3e59c1..3f437532d98182c5d670b1fb6059fbf96c07ed36 100644 --- a/src/libknot/db/db_lmdb.c +++ b/src/libknot/db/db_lmdb.c @@ -34,6 +34,8 @@ _public_ const unsigned KNOT_DB_LMDB_NOTLS = MDB_NOTLS; _public_ const unsigned KNOT_DB_LMDB_RDONLY = MDB_RDONLY; +_public_ const unsigned KNOT_DB_LMDB_INTEGERKEY = MDB_INTEGERKEY; +_public_ const unsigned KNOT_DB_LMDB_NOSYNC = MDB_NOSYNC; struct lmdb_env { @@ -61,7 +63,11 @@ static int lmdb_error_to_knot(int error) return KNOT_ENOENT; } - if (error == MDB_MAP_FULL || error == MDB_TXN_FULL || error == ENOSPC) { + if (error == MDB_TXN_FULL) { + return KNOT_ELIMIT; + } + + if (error == MDB_MAP_FULL || error == ENOSPC) { return KNOT_ESPACE; } @@ -134,6 +140,12 @@ static int dbase_open_env(struct lmdb_env *env, struct knot_db_lmdb_opts *opts) return lmdb_error_to_knot(ret); } + ret = mdb_env_set_maxreaders(mdb_env, opts->maxreaders); + if (ret != MDB_SUCCESS) { + mdb_env_close(mdb_env); + return lmdb_error_to_knot(ret); + } + #ifdef __OpenBSD__ /* * Enforce that MDB_WRITEMAP is set. @@ -180,7 +192,7 @@ static int dbase_open(struct lmdb_env *env, struct knot_db_lmdb_opts *opts) return lmdb_error_to_knot(ret); } - ret = mdb_dbi_open(txn, opts->dbname, opts->flags.db, &env->dbi); + ret = mdb_dbi_open(txn, opts->dbname, opts->flags.db | MDB_CREATE, &env->dbi); if (ret != MDB_SUCCESS) { mdb_txn_abort(txn); mdb_env_close(env->env); @@ -465,25 +477,6 @@ static int insert(knot_db_txn_t *txn, knot_db_val_t *key, knot_db_val_t *val, un mdb_flags |= MDB_RESERVE; } - /* Reserve some pages for clearing */ - MDB_stat stat; - MDB_stat stat_free; - MDB_envinfo info; - if (mdb_stat(txn->txn, env->dbi, &stat) != MDB_SUCCESS || - mdb_stat(txn->txn, 0, &stat_free) != MDB_SUCCESS || - mdb_env_info(env->env, &info) != MDB_SUCCESS) { - return KNOT_ERROR; - } - /* Count head room pages */ - size_t max_pages = (info.me_mapsize / stat.ms_psize) - info.me_last_pgno - 2; - /* Add free leaf pages, allow worst-case headroom for branch pages */ - max_pages += stat_free.ms_leaf_pages - stat.ms_branch_pages; - /* The freelist must be able to hold db tree pages */ - size_t used_pages = stat.ms_branch_pages + stat.ms_overflow_pages; - if (used_pages + 1 >= max_pages) { - return KNOT_ESPACE; - } - int ret = mdb_put(txn->txn, env->dbi, &db_key, &data, mdb_flags); if (ret != MDB_SUCCESS) { return lmdb_error_to_knot(ret); @@ -510,6 +503,37 @@ static int del(knot_db_txn_t *txn, knot_db_val_t *key) return KNOT_EOK; } +_public_ +size_t knot_db_lmdb_get_mapsize(knot_db_t *db) +{ + struct lmdb_env *env = db; + MDB_envinfo info; + if (mdb_env_info(env->env, &info) != MDB_SUCCESS) { + return 0; + } + + return info.me_mapsize; +} + +// you should SUM all the usages of DBs sharing one mapsize +_public_ +size_t knot_db_lmdb_get_usage(knot_db_t *db) +{ + struct lmdb_env *env = db; + knot_db_txn_t txn; + knot_db_lmdb_txn_begin(db, &txn, NULL, KNOT_DB_RDONLY); + MDB_stat st; + if (mdb_stat(txn.txn, env->dbi, &st) != MDB_SUCCESS) { + txn_abort(&txn); + return 0; + } + txn_abort(&txn); + + size_t pgs_used = st.ms_branch_pages + st.ms_leaf_pages + st.ms_overflow_pages + st.ms_entries; + + return (pgs_used * st.ms_psize); +} + _public_ const knot_db_api_t *knot_db_lmdb_api(void) { diff --git a/src/libknot/db/db_lmdb.h b/src/libknot/db/db_lmdb.h index 95dcde5a22475a61f7ea39713fe959513af20b3e..959904764642185764d4ad6be4e7e189b4e1a7b1 100644 --- a/src/libknot/db/db_lmdb.h +++ b/src/libknot/db/db_lmdb.h @@ -24,6 +24,8 @@ /* LMDB specific flags. */ extern const unsigned KNOT_DB_LMDB_NOTLS; extern const unsigned KNOT_DB_LMDB_RDONLY; +extern const unsigned KNOT_DB_LMDB_INTEGERKEY; +extern const unsigned KNOT_DB_LMDB_NOSYNC; /* Native options. */ struct knot_db_lmdb_opts { @@ -31,6 +33,7 @@ struct knot_db_lmdb_opts { const char *dbname; /*!< Database name (or NULL). */ size_t mapsize; /*!< Environment map size. */ unsigned maxdbs; /*!< Maximum number of databases in the env. */ + unsigned maxreaders; /*!< Maximum number of concurrent readers */ struct { unsigned env; /*!< Environment flags. */ unsigned db; /*!< Database flags. */ @@ -42,6 +45,7 @@ struct knot_db_lmdb_opts { NULL, NULL, \ KNOT_DB_LMDB_MAPSIZE, \ 0, \ + 126, /* = contrib/lmdb/mdb.c DEFAULT_READERS */ \ { 0, 0 } \ } @@ -51,3 +55,5 @@ const knot_db_api_t *knot_db_lmdb_api(void); int knot_db_lmdb_txn_begin(knot_db_t *db, knot_db_txn_t *txn, knot_db_txn_t *parent, unsigned flags); int knot_db_lmdb_iter_del(knot_db_iter_t *iter); +size_t knot_db_lmdb_get_mapsize(knot_db_t *db); +size_t knot_db_lmdb_get_usage(knot_db_t *db); diff --git a/src/libknot/db/db_trie.c b/src/libknot/db/db_trie.c index c0dc82df890ebe7a400aebbc47316654fd6bac6b..8f1141812dc1f817f4ff32e01f43bdc5e9b6762d 100644 --- a/src/libknot/db/db_trie.c +++ b/src/libknot/db/db_trie.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -20,6 +20,7 @@ #include "libknot/errcode.h" #include "libknot/db/db_trie.h" #include "contrib/hat-trie/hat-trie.h" +#include "contrib/macros.h" #include "contrib/mempattern.h" static int init(knot_db_t **db, knot_mm_t *mm, void *arg) @@ -29,7 +30,8 @@ static int init(knot_db_t **db, knot_mm_t *mm, void *arg) } struct knot_db_trie_opts *opts = arg; - hattrie_t *trie = hattrie_create_n(opts->bucket_size, mm); + UNUSED(opts); + hattrie_t *trie = hattrie_create(mm); if (!trie) { return KNOT_ENOMEM; } @@ -53,12 +55,6 @@ static int txn_begin(knot_db_t *db, knot_db_txn_t *txn, unsigned flags) static int txn_commit(knot_db_txn_t *txn) { - /* Rebuild order index only for WR transactions. */ - if ((size_t)txn->txn & KNOT_DB_RDONLY) { - return KNOT_EOK; - } - - hattrie_build_index((hattrie_t *)txn->db); return KNOT_EOK; } @@ -108,12 +104,11 @@ static int insert(knot_db_txn_t *txn, knot_db_val_t *key, knot_db_val_t *val, un static int del(knot_db_txn_t *txn, knot_db_val_t *key) { - return hattrie_del((hattrie_t *)txn->db, key->data, key->len); + return hattrie_del((hattrie_t *)txn->db, key->data, key->len, NULL); } static knot_db_iter_t *iter_begin(knot_db_txn_t *txn, unsigned flags) { - bool is_sorted = (flags & KNOT_DB_SORTED); flags &= ~KNOT_DB_SORTED; /* No operations other than begin are supported right now. */ @@ -121,7 +116,7 @@ static knot_db_iter_t *iter_begin(knot_db_txn_t *txn, unsigned flags) return NULL; } - return hattrie_iter_begin((hattrie_t *)txn->db, is_sorted); + return hattrie_iter_begin((hattrie_t *)txn->db); } static knot_db_iter_t *iter_seek(knot_db_iter_t *iter, knot_db_val_t *key, unsigned flags) diff --git a/src/libknot/db/db_trie.h b/src/libknot/db/db_trie.h index d28b8f3343d031bd493c6fd137afbdab519355de..a7a24e490847e711298ca84e5332230fd2a7556b 100644 --- a/src/libknot/db/db_trie.h +++ b/src/libknot/db/db_trie.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -18,17 +18,14 @@ #include "libknot/db/db.h" -/* Defines */ -#define KNOT_DB_TRIE_BUCKET_SIZE 253 /* 1 page per bucket, see hat-trie.h */ - /* Native options. */ struct knot_db_trie_opts { - unsigned bucket_size; /*!< Trie bucket size. */ + unsigned unused; }; /* Default options. */ #define KNOT_DB_TRIE_OPTS_INITIALIZER { \ - KNOT_DB_TRIE_BUCKET_SIZE \ + 0 \ } const knot_db_api_t *knot_db_trie_api(void); diff --git a/src/libknot/errcode.h b/src/libknot/errcode.h index 040f2af25dec639234cfd73bda0b0eb1b9758cc1..251912ebb150da7acd6cdb7ad5fb7dd0a27b0507 100644 --- a/src/libknot/errcode.h +++ b/src/libknot/errcode.h @@ -89,6 +89,7 @@ enum knot_error { KNOT_EOF, KNOT_ESYSTEM, KNOT_EFILE, + KNOT_ESOAINVAL, /* Control states. */ KNOT_CTL_ESTOP, diff --git a/src/libknot/error.c b/src/libknot/error.c index a963ed1d2c7d61b167c2128c71567b5995daebbc..d32c2e20a7e5c8e36f8524de0e2a0db436d3e228 100644 --- a/src/libknot/error.c +++ b/src/libknot/error.c @@ -88,6 +88,7 @@ static const struct error errors[] = { { KNOT_EOF, "end of file" }, { KNOT_ESYSTEM, "system error" }, { KNOT_EFILE, "file error" }, + { KNOT_ESOAINVAL, "SOA mismatch" }, /* Control states. */ { KNOT_CTL_ESTOP, "stopping server" }, diff --git a/src/libknot/packet/pkt.c b/src/libknot/packet/pkt.c index 67661d504e69a340862c718ea2d9011d8d239b3f..ed29a2b4e65c6c6e63f18e2011414037b92bb4dc 100644 --- a/src/libknot/packet/pkt.c +++ b/src/libknot/packet/pkt.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -20,6 +20,7 @@ #include "libknot/attribute.h" #include "libknot/packet/pkt.h" +#include "libknot/codes.h" #include "libknot/descriptor.h" #include "libknot/errcode.h" #include "libknot/rrtype/tsig.h" @@ -332,6 +333,7 @@ int knot_pkt_init_response(knot_pkt_t *pkt, const knot_pkt_t *query) /* Clear payload. */ knot_pkt_clear_payload(pkt); + return KNOT_EOK; } @@ -402,7 +404,6 @@ int knot_pkt_reclaim(knot_pkt_t *pkt, uint16_t size) } else { return KNOT_ERANGE; } - } _public_ @@ -438,7 +439,6 @@ uint16_t knot_pkt_type(const knot_pkt_t *pkt) return ret; } -/*----------------------------------------------------------------------------*/ _public_ uint16_t knot_pkt_question_size(const knot_pkt_t *pkt) { @@ -449,7 +449,6 @@ uint16_t knot_pkt_question_size(const knot_pkt_t *pkt) return pkt->qname_size + 2 * sizeof(uint16_t); } -/*----------------------------------------------------------------------------*/ _public_ const knot_dname_t *knot_pkt_qname(const knot_pkt_t *pkt) { @@ -460,7 +459,6 @@ const knot_dname_t *knot_pkt_qname(const knot_pkt_t *pkt) return pkt->wire + KNOT_WIRE_HEADER_SIZE; } -/*----------------------------------------------------------------------------*/ _public_ uint16_t knot_pkt_qtype(const knot_pkt_t *pkt) { @@ -472,7 +470,6 @@ uint16_t knot_pkt_qtype(const knot_pkt_t *pkt) return wire_read_u16(pkt->wire + off); } -/*----------------------------------------------------------------------------*/ _public_ uint16_t knot_pkt_qclass(const knot_pkt_t *pkt) { @@ -487,17 +484,17 @@ uint16_t knot_pkt_qclass(const knot_pkt_t *pkt) _public_ int knot_pkt_begin(knot_pkt_t *pkt, knot_section_t section_id) { - if (pkt == NULL) { + if (pkt == NULL || section_id < pkt->current) { return KNOT_EINVAL; } - /* Cannot step to lower section. */ - assert(section_id >= pkt->current); - pkt->current = section_id; - - /* Remember watermark. */ + /* Remember watermark but not on repeated calls. */ pkt->sections[section_id].pkt = pkt; - pkt->sections[section_id].pos = pkt->rrset_count; + if (section_id > pkt->current) { + pkt->sections[section_id].pos = pkt->rrset_count; + } + + pkt->current = section_id; return KNOT_EOK; } @@ -563,8 +560,7 @@ int knot_pkt_put(knot_pkt_t *pkt, uint16_t compr_hint, const knot_rrset_t *rr, memcpy(pkt->rr + pkt->rrset_count, rr, sizeof(knot_rrset_t)); /* Check for double insertion. */ - if ((flags & KNOT_PF_CHECKDUP) && - pkt_contains(pkt, rr)) { + if ((flags & KNOT_PF_CHECKDUP) && pkt_contains(pkt, rr)) { return KNOT_EOK; /*! \todo return rather a number of added RRs */ } @@ -584,7 +580,7 @@ int knot_pkt_put(knot_pkt_t *pkt, uint16_t compr_hint, const knot_rrset_t *rr, if (ret < 0) { /* Truncate packet if required. */ if (ret == KNOT_ESPACE && !(flags & KNOT_PF_NOTRUNC)) { - knot_wire_set_tc(pkt->wire); + knot_wire_set_tc(pkt->wire); } return ret; } @@ -722,7 +718,7 @@ static int check_rr_constraints(knot_pkt_t *pkt, knot_rrset_t *rr, size_t rr_siz unsigned flags) { /* Check RR constraints. */ - switch(rr->type) { + switch (rr->type) { case KNOT_RRTYPE_TSIG: CHECK_AR_CONSTRAINTS(pkt, rr, tsig_rr, knot_tsig_rdata_is_ok); @@ -865,18 +861,56 @@ int knot_pkt_parse_payload(knot_pkt_t *pkt, unsigned flags) } _public_ -uint16_t knot_pkt_get_ext_rcode(const knot_pkt_t *pkt) +uint16_t knot_pkt_ext_rcode(const knot_pkt_t *pkt) { if (pkt == NULL) { return 0; } - uint8_t rcode = knot_wire_get_rcode(pkt->wire); + /* Get header RCODE. */ + uint16_t rcode = knot_wire_get_rcode(pkt->wire); - if (pkt->opt_rr) { + /* Update to extended RCODE if EDNS is available. */ + if (pkt->opt_rr != NULL) { uint8_t opt_rcode = knot_edns_get_ext_rcode(pkt->opt_rr); - return knot_edns_whole_rcode(opt_rcode, rcode); + rcode = knot_edns_whole_rcode(opt_rcode, rcode); + } + + /* Return if not NOTAUTH. */ + if (rcode != KNOT_RCODE_NOTAUTH) { + return rcode; + } + + /* Get TSIG RCODE. */ + uint16_t tsig_rcode = KNOT_RCODE_NOERROR; + if (pkt->tsig_rr != NULL) { + tsig_rcode = knot_tsig_rdata_error(pkt->tsig_rr); + } + + /* Return proper RCODE. */ + if (tsig_rcode != KNOT_RCODE_NOERROR) { + return tsig_rcode; } else { return rcode; } } + +_public_ +const char *knot_pkt_ext_rcode_name(const knot_pkt_t *pkt) +{ + if (pkt == NULL) { + return ""; + } + + uint16_t rcode = knot_pkt_ext_rcode(pkt); + + const knot_lookup_t *item = NULL; + if (pkt->tsig_rr != NULL) { + item = knot_lookup_by_id(knot_tsig_rcode_names, rcode); + } + if (item == NULL) { + item = knot_lookup_by_id(knot_rcode_names, rcode); + } + + return (item != NULL) ? item->name : ""; +} diff --git a/src/libknot/packet/pkt.h b/src/libknot/packet/pkt.h index 6fdf8f49ee71b817572f257c8db80c56cf8c719f..462ded2b77f19a760edfdfbf3e8cbda081c5fa6a 100644 --- a/src/libknot/packet/pkt.h +++ b/src/libknot/packet/pkt.h @@ -214,7 +214,7 @@ uint16_t knot_pkt_qclass(const knot_pkt_t *pkt); * * \param pkt * \param section_id - * \return KNOT_EOK + * \return KNOT_EOK or KNOT_EINVAL */ int knot_pkt_begin(knot_pkt_t *pkt, knot_section_t section_id); @@ -318,17 +318,27 @@ int knot_pkt_parse_section(knot_pkt_t *pkt, unsigned flags); int knot_pkt_parse_payload(knot_pkt_t *pkt, unsigned flags); /*! - * \brief Get the Extended RCODE from the packet. + * \brief Get packet extended RCODE. * - * Extended RCODE is created by using the Extended RCODE field from OPT RR as - * higher 8 bits and the RCODE from DNS Header as the lower 4 bits, resulting - * in a 12-bit unsigned integer. (See RFC 6891, Section 6.1.3). + * Extended RCODE is created by considering TSIG RCODE, EDNS RCODE and + * DNS Header RCODE. (See RFC 6895, Section 2.3). * * \param pkt Packet to get the response code from. * * \return Whole extended RCODE (0 if pkt == NULL). */ -uint16_t knot_pkt_get_ext_rcode(const knot_pkt_t *pkt); +uint16_t knot_pkt_ext_rcode(const knot_pkt_t *pkt); + +/*! + * \brief Get packet extended RCODE name. + * + * The packet parameter is important as the name depends on TSIG. + * + * \param pkt Packet to get the response code from. + * + * \return RCODE name (or empty string if not known). + */ +const char *knot_pkt_ext_rcode_name(const knot_pkt_t *pkt); /*! * \brief Checks if there is an OPT RR in the packet. diff --git a/src/libknot/packet/wire.h b/src/libknot/packet/wire.h index b318756eaa8ee1796301f8d397f232d166e47a7c..d778e8926ce5519d3bade58f2b61b57e55fa868a 100644 --- a/src/libknot/packet/wire.h +++ b/src/libknot/packet/wire.h @@ -276,7 +276,7 @@ static inline void knot_wire_set_rd(uint8_t *packet) * * \param packet Wire format of the packet. */ -static inline void knot_wire_flags_clear_rd(uint8_t *packet) +static inline void knot_wire_clear_rd(uint8_t *packet) { *(packet + KNOT_WIRE_OFFSET_FLAGS1) &= ~KNOT_WIRE_RD_MASK; } @@ -588,7 +588,7 @@ static inline void knot_wire_flags_set_rd(uint8_t *flags1) * * \param flags1 First byte of DNS header flags. */ -static inline void knot_wire_flags_flags_clear_rd(uint8_t *flags1) +static inline void knot_wire_flags_clear_rd(uint8_t *flags1) { *flags1 &= ~KNOT_WIRE_RD_MASK; } diff --git a/src/libknot/rdataset.c b/src/libknot/rdataset.c index e62aee9d05fcd7b3d24bd49eba441827a7d1a1b7..cd3cf76f882f5bfc7c8112dc167e37bd826e3fc5 100644 --- a/src/libknot/rdataset.c +++ b/src/libknot/rdataset.c @@ -193,14 +193,8 @@ size_t knot_rdataset_size(const knot_rdataset_t *rrs) return 0; } - size_t total_size = 0; - for (size_t i = 0; i < rrs->rr_count; ++i) { - const knot_rdata_t *rr = knot_rdataset_at(rrs, i); - assert(rr); - total_size += knot_rdata_array_size(knot_rdata_rdlen(rr)); - } - - return total_size; + const knot_rdata_t *rr_end = rr_seek(rrs->data, rrs->rr_count); + return rr_end - rrs->data; } _public_ diff --git a/src/libknot/rrset-dump.c b/src/libknot/rrset-dump.c index 560c4c5a47fd28807079596f13da47c052949ac2..4849ab91d07d43e1ab811a8b3a09ab793fefe03c 100644 --- a/src/libknot/rrset-dump.c +++ b/src/libknot/rrset-dump.c @@ -39,6 +39,8 @@ #include "contrib/wire.h" #include "contrib/wire_ctx.h" +#define RRSET_DUMP_LIMIT (2 * 1024 * 1024) + #define TAB_WIDTH 8 #define BLOCK_WIDTH 40 #define BLOCK_INDENT "\n\t\t\t\t" @@ -1243,7 +1245,7 @@ static void wire_tsig_rcode_to_str(rrset_dump_params_t *p) { uint16_t data; size_t in_len = sizeof(data); - const char *rcode_str = "NULL"; + const char *rcode_str = "Unknown"; // Check input size. if (in_len > p->in_max) { @@ -1255,9 +1257,10 @@ static void wire_tsig_rcode_to_str(rrset_dump_params_t *p) // Find RCODE name. const knot_lookup_t *rcode = NULL; - rcode = knot_lookup_by_id((data >= ((knot_lookup_t *)knot_tsig_err_names)->id) ? - knot_tsig_err_names : knot_rcode_names, - data); + rcode = knot_lookup_by_id(knot_tsig_rcode_names, data); + if (rcode == NULL) { + rcode = knot_lookup_by_id(knot_rcode_names, data); + } if (rcode != NULL) { rcode_str = rcode->name; } @@ -1315,6 +1318,12 @@ static size_t dnskey_len(const uint8_t *rdata, case KNOT_DNSSEC_ALG_ECDSAP384SHA384: // RFC 6605. return 384; + case KNOT_DNSSEC_ALG_ED25519: + // RFC TBD, an Ed25519 public key consists of a 32-octet value. + return 256; + case KNOT_DNSSEC_ALG_ED448: + // RFC TBD, an Ed448 public key consists of a 57-octet value. + return 456; default: return 0; } @@ -1991,26 +2000,26 @@ int knot_rrset_txt_dump_header(const knot_rrset_t *rrset, return len; } -_public_ -int knot_rrset_txt_dump(const knot_rrset_t *rrset, - char *dst, - const size_t maxlen, - const knot_dump_style_t *style) +static int rrset_txt_dump(const knot_rrset_t *rrset, + char *dst, + const size_t maxlen, + const knot_dump_style_t *style) { if (rrset == NULL || dst == NULL || style == NULL) { return KNOT_EINVAL; } size_t len = 0; - int ret; + + dst[0] = '\0'; // Loop over rdata in rrset. uint16_t rr_count = rrset->rrs.rr_count; for (uint16_t i = 0; i < rr_count; i++) { // Dump rdata owner, class, ttl and type. const knot_rdata_t *rr_data = knot_rdataset_at(&rrset->rrs, i); - ret = knot_rrset_txt_dump_header(rrset, knot_rdata_ttl(rr_data), - dst + len, maxlen - len, style); + int ret = knot_rrset_txt_dump_header(rrset, knot_rdata_ttl(rr_data), + dst + len, maxlen - len, style); if (ret < 0) { return KNOT_ESPACE; } @@ -2034,3 +2043,35 @@ int knot_rrset_txt_dump(const knot_rrset_t *rrset, return len; } + +_public_ +int knot_rrset_txt_dump(const knot_rrset_t *rrset, + char **dst, + size_t *dst_size, + const knot_dump_style_t *style) +{ + if (dst == NULL || dst_size == NULL) { + return KNOT_EINVAL; + } + + while (1) { + int ret = rrset_txt_dump(rrset, *dst, *dst_size, style); + if (ret != KNOT_ESPACE) { + return ret; + } + + size_t new_dst_size = 2 * (*dst_size); + if (new_dst_size > RRSET_DUMP_LIMIT) { + return KNOT_ESPACE; + } + + char * new_dst = malloc(new_dst_size); + if (new_dst == NULL) { + return KNOT_ENOMEM; + } + + free(*dst); + *dst = new_dst; + *dst_size = new_dst_size; + } +} diff --git a/src/libknot/rrset-dump.h b/src/libknot/rrset-dump.h index 41e02342f1857c25e7f3456450ed2ba9420f0bbc..bd9ef8c06d10e30aa9daea4737a020b54f8586ca 100644 --- a/src/libknot/rrset-dump.h +++ b/src/libknot/rrset-dump.h @@ -90,19 +90,19 @@ int knot_rrset_txt_dump_data(const knot_rrset_t *rrset, const knot_dump_style_t *style); /*! - * \brief Dumps rrset. + * \brief Dumps rrset, re-allocates dst to double (4x, 8x, ...) if too small. * * \param rrset RRset to dump. * \param dst Output buffer. - * \param maxlen Output buffer size. + * \param dst_size Output buffer size (changed if *dst re-allocated). * \param style Output style. * * \retval output length if success. * \retval < 0 if error. */ int knot_rrset_txt_dump(const knot_rrset_t *rrset, - char *dst, - const size_t maxlen, + char **dst, + size_t *dst_size, const knot_dump_style_t *style); /*! @} */ diff --git a/src/libknot/rrset.h b/src/libknot/rrset.h index b2d60a498f7bb3cf412d2ba1bd789ce0f67d9c1b..afe3b37b4f3fa4e58e149ca0ea9d5250df577bcd 100644 --- a/src/libknot/rrset.h +++ b/src/libknot/rrset.h @@ -42,7 +42,7 @@ struct knot_rrset { uint16_t rclass; /*!< CLASS of the RRSet. */ knot_rdataset_t rrs; /*!< RRSet's RRs */ /* Optional fields. */ - struct zone_node **additional; /*!< Additional records. */ + void *additional; /*!< Additional records. */ }; typedef struct knot_rrset knot_rrset_t; diff --git a/src/libknot/rrtype/opt.h b/src/libknot/rrtype/opt.h index a8845aaf180333c3dbbe07966e615daf29afc5bd..e87e70c6d29aef08adf0c397f3ce2427f08e42b4 100644 --- a/src/libknot/rrtype/opt.h +++ b/src/libknot/rrtype/opt.h @@ -411,7 +411,7 @@ size_t knot_edns_client_subnet_size(const knot_edns_client_subnet_t *ecs); * \param option_len EDNS option data buffer size. * \param ecs EDNS Client Subnet data. * - * \return Error code, KNOT_EOK if sucessful. + * \return Error code, KNOT_EOK if successful. */ int knot_edns_client_subnet_write(uint8_t *option, size_t option_len, const knot_edns_client_subnet_t *ecs); @@ -423,7 +423,7 @@ int knot_edns_client_subnet_write(uint8_t *option, size_t option_len, * \param[in] option EDNS option data. * \param[in] option_len EDNS option size. * - * \return Error code, KNOT_EOK if sucessful. + * \return Error code, KNOT_EOK if successful. */ int knot_edns_client_subnet_parse(knot_edns_client_subnet_t *ecs, const uint8_t *option, size_t option_len); @@ -434,7 +434,7 @@ int knot_edns_client_subnet_parse(knot_edns_client_subnet_t *ecs, * \param ecs ECS structure to set address into. * \param addr Address to be set. * - * \return Error code. KNOT_EOK if succesful. + * \return Error code. KNOT_EOK if successful. */ int knot_edns_client_subnet_set_addr(knot_edns_client_subnet_t *ecs, const struct sockaddr_storage *addr); diff --git a/src/libknot/rrtype/tsig.c b/src/libknot/rrtype/tsig.c index a46650e39a20dce2c90ae1ae7b31f972e080ae70..c0c714930f6b97afaafe448bab81429efca156bd 100644 --- a/src/libknot/rrtype/tsig.c +++ b/src/libknot/rrtype/tsig.c @@ -141,7 +141,7 @@ int knot_tsig_create_rdata(knot_rrset_t *rr, const knot_dname_t *alg, /* We already checked rr and know rdlen > 0, no need to check rest. */ int alg_len = knot_dname_size(alg); size_t rdlen = alg_len + TSIG_FIXED_RDLEN + maclen; - if (tsig_err != KNOT_TSIG_ERR_BADTIME) { + if (tsig_err != KNOT_RCODE_BADTIME) { rdlen -= TSIG_OTHER_MAXLEN; } uint8_t rd[rdlen]; diff --git a/src/libknot/tsig-op.c b/src/libknot/tsig-op.c index dab1c3dcdec85862ba8a9921a20cfaff2584018c..3fde0f7c6a9bd153b1289add7f85cdca9cfb1bf7 100644 --- a/src/libknot/tsig-op.c +++ b/src/libknot/tsig-op.c @@ -368,7 +368,7 @@ int knot_tsig_sign(uint8_t *msg, size_t *msg_len, size_t msg_max_len, /* Create rdata for TSIG RR. */ uint16_t rdata_rcode = 0; - if (tsig_rcode == KNOT_TSIG_ERR_BADTIME) + if (tsig_rcode == KNOT_RCODE_BADTIME) rdata_rcode = tsig_rcode; const uint8_t *alg_name = dnssec_tsig_algorithm_to_dname(key->algorithm); @@ -376,7 +376,7 @@ int knot_tsig_sign(uint8_t *msg, size_t *msg_len, size_t msg_max_len, knot_tsig_create_rdata(tmp_tsig, alg_name, alg_size, rdata_rcode); /* Distinguish BADTIME response. */ - if (tsig_rcode == KNOT_TSIG_ERR_BADTIME) { + if (tsig_rcode == KNOT_RCODE_BADTIME) { /* Set client's time signed into the time signed field. */ knot_tsig_rdata_set_time_signed(tmp_tsig, request_time_signed); @@ -675,7 +675,7 @@ int knot_tsig_add(uint8_t *msg, size_t *msg_len, size_t msg_max_len, return KNOT_ENOMEM; } - assert(tsig_rcode != KNOT_TSIG_ERR_BADTIME); + assert(tsig_rcode != KNOT_RCODE_BADTIME); knot_tsig_create_rdata(tmp_tsig, knot_tsig_rdata_alg_name(tsig_rr), 0, tsig_rcode); knot_tsig_rdata_set_time_signed(tmp_tsig, knot_tsig_rdata_time_signed(tsig_rr)); diff --git a/src/libknot/tsig-op.h b/src/libknot/tsig-op.h index 4826d7273e0fdcd261e2b807f3db41036cad1f58..3127d21e2336e96c8a3d84967a7f79fe8fe428f0 100644 --- a/src/libknot/tsig-op.h +++ b/src/libknot/tsig-op.h @@ -38,7 +38,7 @@ * the message size. * * \note This function does not save the new digest to the 'digest' parameter - * unless everything went OK. This allows to sent the same buffer to + * unless everything went OK. This allows sending the same buffer to * the 'request_mac' and 'digest' parameters. * * \param msg Message to be signed. @@ -72,7 +72,7 @@ int knot_tsig_sign(uint8_t *msg, size_t *msg_len, size_t msg_max_len, * the message size. * * \note This function does not save the new digest to the 'digest' parameter - * unless everything went OK. This allows to sent the same buffer to + * unless everything went OK. This allows sending the same buffer to * the 'request_mac' and 'digest' parameters. * * \param msg Message to be signed. @@ -173,7 +173,7 @@ int knot_tsig_append(uint8_t *msg, size_t *msg_len, size_t msg_max_len, * \todo Proper documentation. */ static inline bool knot_tsig_can_sign(uint16_t tsig_rcode) { - return (tsig_rcode == KNOT_RCODE_NOERROR || tsig_rcode == KNOT_TSIG_ERR_BADTIME); + return tsig_rcode == KNOT_RCODE_NOERROR || tsig_rcode == KNOT_RCODE_BADTIME; } /*! @} */ diff --git a/src/libknot/yparser/ypscheme.h b/src/libknot/yparser/ypscheme.h index 269cdb5c608fa9f79fd1cb1f7a97a8e735d87f44..19a70b0fab579dfa920458f8b38447d53986799b 100644 --- a/src/libknot/yparser/ypscheme.h +++ b/src/libknot/yparser/ypscheme.h @@ -83,8 +83,24 @@ typedef enum { /*! Scheme item flags. */ typedef enum { - YP_FNONE = 0, /*!< Unspecified. */ - YP_FMULTI = 1 << 0 /*!< Multivalued item. */ + YP_FNONE = 0, /*!< Unspecified. */ + YP_FMULTI = 1 << 0, /*!< Multivalued item. */ + YP_FUSR1 = 1 << 1, /*!< User-defined flag1. */ + YP_FUSR2 = 1 << 2, /*!< User-defined flag2. */ + YP_FUSR3 = 1 << 3, /*!< User-defined flag3. */ + YP_FUSR4 = 1 << 4, /*!< User-defined flag4. */ + YP_FUSR5 = 1 << 5, /*!< User-defined flag5. */ + YP_FUSR6 = 1 << 6, /*!< User-defined flag6. */ + YP_FUSR7 = 1 << 7, /*!< User-defined flag7. */ + YP_FUSR8 = 1 << 8, /*!< User-defined flag8. */ + YP_FUSR9 = 1 << 9, /*!< User-defined flag9. */ + YP_FUSR10 = 1 << 10, /*!< User-defined flag10. */ + YP_FUSR11 = 1 << 11, /*!< User-defined flag11. */ + YP_FUSR12 = 1 << 12, /*!< User-defined flag12. */ + YP_FUSR13 = 1 << 13, /*!< User-defined flag13. */ + YP_FUSR14 = 1 << 14, /*!< User-defined flag14. */ + YP_FUSR15 = 1 << 15, /*!< User-defined flag15. */ + YP_FUSR16 = 1 << 16, /*!< User-defined flag16. */ } yp_flag_t; /*! Scheme item style. */ diff --git a/src/libknot/yparser/yptrafo.c b/src/libknot/yparser/yptrafo.c index 5c1b9aa4acc721d438f92f999c40cb6c033e4a9b..d87f34714e25c4be5f57cf13e7a6fd7862fa48f9 100644 --- a/src/libknot/yparser/yptrafo.c +++ b/src/libknot/yparser/yptrafo.c @@ -409,7 +409,7 @@ int yp_addr_noport_to_txt( } break; case 4: - wire_ctx_read(in, (uint8_t *)&(addr4.s_addr), sizeof(addr4.s_addr)); + wire_ctx_read(in, &(addr4.s_addr), sizeof(addr4.s_addr)); if (inet_ntop(AF_INET, &addr4, (char *)out->position, wire_ctx_available(out)) == NULL) { return KNOT_EINVAL; @@ -417,7 +417,7 @@ int yp_addr_noport_to_txt( wire_ctx_skip(out, strlen((char *)out->position)); break; case 6: - wire_ctx_read(in, (uint8_t *)&(addr6.s6_addr), sizeof(addr6.s6_addr)); + wire_ctx_read(in, &(addr6.s6_addr), sizeof(addr6.s6_addr)); if (inet_ntop(AF_INET6, &addr6, (char *)out->position, wire_ctx_available(out)) == NULL) { return KNOT_EINVAL; diff --git a/src/utils/common/exec.c b/src/utils/common/exec.c index 1a8713211da9de6ff9cc773e5a288ea78935cbcc..695b3ab089290de2620e7cc7b9744424be0be7e3 100644 --- a/src/utils/common/exec.c +++ b/src/utils/common/exec.c @@ -48,24 +48,21 @@ static knot_lookup_t rtypes[] = { { 0, NULL } }; -static void print_header(const knot_pkt_t *packet, const style_t *style, - const uint16_t ext_rcode) +static void print_header(const knot_pkt_t *packet, const style_t *style) { char flags[64] = ""; - uint8_t opcode_id; const char *rcode_str = "Unknown"; const char *opcode_str = "Unknown"; - const knot_lookup_t *rcode, *opcode; - // Get RCODE from Header and check for Extended RCODE from OPT RR. - rcode = knot_lookup_by_id(knot_rcode_names, ext_rcode); - if (rcode != NULL) { - rcode_str = rcode->name; + // Get extended RCODE. + const char *code_name = knot_pkt_ext_rcode_name(packet); + if (code_name[0] != '\0') { + rcode_str = code_name; } // Get OPCODE. - opcode_id = knot_wire_get_opcode(packet->wire); - opcode = knot_lookup_by_id(knot_opcode_names, opcode_id); + uint8_t code = knot_wire_get_opcode(packet->wire); + const knot_lookup_t *opcode = knot_lookup_by_id(knot_opcode_names, code); if (opcode != NULL) { opcode_str = opcode->name; } @@ -143,7 +140,7 @@ static void print_footer(const size_t total_len, exec_time = time(NULL); } - // Create formated date-time string. + // Create formatted date-time string. localtime_r(&exec_time, &tm); strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S %Z", &tm); @@ -198,29 +195,28 @@ static void print_edns_client_subnet(const uint8_t *data, const uint16_t len) printf("%s/%u/%u\n", addr_str, ecs.source_len, ecs.scope_len); } -static void print_section_opt(const knot_rrset_t *rr, const uint8_t rcode) +static void print_section_opt(const knot_pkt_t *packet) { - uint8_t ercode = knot_edns_get_ext_rcode(rr); - uint16_t ext_rcode_id = knot_edns_whole_rcode(ercode, rcode); - const char *ext_rcode_str = "Unused"; - const knot_lookup_t *ext_rcode; + const char *ercode_str = "Unknown"; + uint16_t ercode = knot_edns_get_ext_rcode(packet->opt_rr); if (ercode > 0) { - ext_rcode = knot_lookup_by_id(knot_rcode_names, ext_rcode_id); - if (ext_rcode != NULL) { - ext_rcode_str = ext_rcode->name; - } else { - ext_rcode_str = "Unknown"; - } + ercode = knot_edns_whole_rcode(ercode, + knot_wire_get_rcode(packet->wire)); + } + + const knot_lookup_t *item = knot_lookup_by_id(knot_rcode_names, ercode); + if (item != NULL) { + ercode_str = item->name; } printf("Version: %u; flags: %s; UDP size: %u B; ext-rcode: %s\n", - knot_edns_get_version(rr), - (knot_edns_do(rr) != 0) ? "do" : "", - knot_edns_get_payload(rr), - ext_rcode_str); + knot_edns_get_version(packet->opt_rr), + (knot_edns_do(packet->opt_rr) != 0) ? "do" : "", + knot_edns_get_payload(packet->opt_rr), + ercode_str); - knot_rdata_t *rdata = knot_rdataset_at(&rr->rrs, 0); + knot_rdata_t *rdata = knot_rdataset_at(&packet->opt_rr->rrs, 0); wire_ctx_t wire = wire_ctx_init_const(knot_rdata_data(rdata), knot_rdata_rdlen(rdata)); @@ -306,21 +302,10 @@ static void print_section_full(const knot_rrset_t *rrsets, continue; } - while (knot_rrset_txt_dump(&rrsets[i], buf, buflen, - &(style->style)) < 0) { - buflen += 4096; - // Oversize protection. - if (buflen > 100000) { + if (knot_rrset_txt_dump(&rrsets[i], &buf, &buflen, + &(style->style)) < 0) { WARN("can't print whole section\n"); break; - } - - char *newbuf = realloc(buf, buflen); - if (newbuf == NULL) { - WARN("can't print whole section\n"); - break; - } - buf = newbuf; } printf("%s", buf); } @@ -421,27 +406,26 @@ static void print_section_host(const knot_rrset_t *rrsets, free(buf); } -static void print_error_host(const uint16_t code, - const knot_pkt_t *packet, - const style_t *style) +static void print_error_host(const knot_pkt_t *packet, const style_t *style) { - const char *rcode_str = "Unknown"; char type[32] = "Unknown"; - char *owner; - const knot_lookup_t *rcode; + const char *rcode_str = "Unknown"; - owner = knot_dname_to_str_alloc(knot_pkt_qname(packet)); - if (style->style.ascii_to_idn != NULL) { - style->style.ascii_to_idn(&owner); + knot_rrtype_to_string(knot_pkt_qtype(packet), type, sizeof(type)); + + // Get extended RCODE. + const char *code_name = knot_pkt_ext_rcode_name(packet); + if (code_name[0] != '\0') { + rcode_str = code_name; } - rcode = knot_lookup_by_id(knot_rcode_names, code); - if (rcode != NULL) { - rcode_str = rcode->name; + // Get record owner. + char *owner = knot_dname_to_str_alloc(knot_pkt_qname(packet)); + if (style->style.ascii_to_idn != NULL) { + style->style.ascii_to_idn(&owner); } - knot_rrtype_to_string(knot_pkt_qtype(packet), type, sizeof(type)); - if (code == KNOT_RCODE_NOERROR) { + if (knot_pkt_ext_rcode(packet) == KNOT_RCODE_NOERROR) { printf("Host %s has no %s record\n", owner, type); } else { printf("Host %s type %s error: %s\n", owner, type, rcode_str); @@ -465,7 +449,7 @@ knot_pkt_t *create_empty_packet(const uint16_t max_size) return packet; } -void print_header_xfr(const knot_pkt_t *packet, const style_t *style) +void print_header_xfr(const knot_pkt_t *packet, const style_t *style) { if (style == NULL) { DBG_NULL; @@ -504,8 +488,7 @@ void print_data_xfr(const knot_pkt_t *packet, return; } - const knot_pktsection_t *answers = knot_pkt_section(packet, - KNOT_ANSWER); + const knot_pktsection_t *answers = knot_pkt_section(packet, KNOT_ANSWER); switch (style->format) { case FORMAT_DIG: @@ -571,9 +554,6 @@ void print_packet(const knot_pkt_t *packet, uint16_t nscount = knot_wire_get_nscount(packet->wire); uint16_t arcount = knot_wire_get_arcount(packet->wire); - // Get Extended RCODE from the packet. - uint16_t rcode = knot_pkt_get_ext_rcode(packet); - // Disable additionals printing if there are no other records. // OPT record may be placed anywhere within additionals! if (knot_pkt_has_edns(packet) && arcount == 1) { @@ -585,14 +565,13 @@ void print_packet(const knot_pkt_t *packet, if (net != NULL) { print_tls(&net->tls); } - print_header(packet, style, rcode); + print_header(packet, style); } // Print EDNS section. if (style->show_edns && knot_pkt_has_edns(packet)) { printf("\n;; EDNS PSEUDOSECTION:\n;; "); - print_section_opt(packet->opt_rr, - knot_wire_get_rcode(packet->wire)); + print_section_opt(packet); } // Print DNS sections. @@ -606,7 +585,7 @@ void print_packet(const knot_pkt_t *packet, if (ancount > 0) { print_section_host(knot_pkt_rr(answers, 0), ancount, style); } else { - print_error_host(rcode, packet, style); + print_error_host(packet, style); } break; case FORMAT_NSUPDATE: diff --git a/src/utils/common/lookup.c b/src/utils/common/lookup.c index 57d8bc497e06e65afdea55ddca7fe9d55de3988c..7e84962c352735b914b09f79567e2d353be5ac76 100644 --- a/src/utils/common/lookup.c +++ b/src/utils/common/lookup.c @@ -29,7 +29,7 @@ int lookup_init(lookup_t *lookup) memset(lookup, 0, sizeof(*lookup)); mm_ctx_mempool(&lookup->mm, MM_DEFAULT_BLKSIZE); - lookup->trie = hattrie_create_n(TRIE_BUCKET_SIZE, &lookup->mm); + lookup->trie = hattrie_create(&lookup->mm); if (lookup->trie == NULL) { mp_delete(lookup->mm.ctx); return KNOT_ENOMEM; @@ -89,15 +89,6 @@ int lookup_insert(lookup_t *lookup, const char *str, void *data) return KNOT_EOK; } -void lookup_index(lookup_t *lookup) -{ - if (lookup == NULL) { - return; - } - - hattrie_build_index(lookup->trie); -} - static int set_key(lookup_t *lookup, char **dst, const char *key, size_t key_len) { if (*dst != NULL) { @@ -127,7 +118,7 @@ int lookup_search(lookup_t *lookup, const char *str, size_t str_len) reset_output(lookup); size_t new_len = 0; - hattrie_iter_t *it = hattrie_iter_begin(lookup->trie, true); + hattrie_iter_t *it = hattrie_iter_begin(lookup->trie); for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { size_t len; const char *key = hattrie_iter_key(it, &len); @@ -214,12 +205,12 @@ void lookup_list(lookup_t *lookup) return; } - lookup->iter.it = hattrie_iter_begin(lookup->trie, true); + lookup->iter.it = hattrie_iter_begin(lookup->trie); while (!hattrie_iter_finished(lookup->iter.it)) { size_t len; const char *key = hattrie_iter_key(lookup->iter.it, &len); - if (strcmp(key, lookup->iter.first_key) == 0) { + if (memcmp(key, lookup->iter.first_key, len) == 0) { int ret = set_key(lookup, &lookup->found.key, key, len); if (ret == KNOT_EOK) { lookup->found.data = *hattrie_iter_val(lookup->iter.it); diff --git a/src/utils/common/lookup.h b/src/utils/common/lookup.h index e5f01a591f1c2099d18085f7b68ccdf3ce708317..3bd33084c2d0dc79939c9bb2d1194eef27de33a0 100644 --- a/src/utils/common/lookup.h +++ b/src/utils/common/lookup.h @@ -82,13 +82,6 @@ void lookup_deinit(lookup_t *lookup); */ int lookup_insert(lookup_t *lookup, const char *str, void *data); -/*! - * Indexes the lookup container. - * - * \param[in] lookup Lookup context. - */ -void lookup_index(lookup_t *lookup); - /*! * Searches the lookup container for the given key. * diff --git a/src/utils/common/params.h b/src/utils/common/params.h index 2cb667003bdc4750ea10804579efc943a0560c00..d09549b0f9c05cae8a4c58bfa03e328d7497111f 100644 --- a/src/utils/common/params.h +++ b/src/utils/common/params.h @@ -133,7 +133,7 @@ char *name_from_idn(const char *idn_name); /*! * \brief Transforms ASCII punycode to localized IDN string. * - * If an error occures or IDN support is missing, this function does nothing. + * If an error occurs or IDN support is missing, this function does nothing. * * \param idn_name ASCII name to transform and replace with IDN name. */ diff --git a/src/utils/common/sign.c b/src/utils/common/sign.c index d3e0387306f1c126a46f3c6fb4eb370833a0688b..8e0cc8ab24dd5c9d6e2b355582f852e180eb20d9 100644 --- a/src/utils/common/sign.c +++ b/src/utils/common/sign.c @@ -92,13 +92,13 @@ int verify_packet(const knot_pkt_t *pkt, const sign_context_t *sign_ctx) } switch (knot_tsig_rdata_error(pkt->tsig_rr)) { - case KNOT_TSIG_ERR_BADSIG: + case KNOT_RCODE_BADSIG: return KNOT_TSIG_EBADSIG; - case KNOT_TSIG_ERR_BADKEY: + case KNOT_RCODE_BADKEY: return KNOT_TSIG_EBADKEY; - case KNOT_TSIG_ERR_BADTIME: + case KNOT_RCODE_BADTIME: return KNOT_TSIG_EBADTIME; - case KNOT_TSIG_ERR_BADTRUNC: + case KNOT_RCODE_BADTRUNC: return KNOT_TSIG_EBADTRUNC; default: return KNOT_EOK; diff --git a/src/utils/kdig/kdig_exec.c b/src/utils/kdig/kdig_exec.c index 3bc31098d8392282a90ae43d83fafd652ce9f2f5..a62382b9e4d53e96b02ea683cb580589d3b0d246 100644 --- a/src/utils/kdig/kdig_exec.c +++ b/src/utils/kdig/kdig_exec.c @@ -885,17 +885,9 @@ static int process_xfr_packet(const knot_pkt_t *query, } // Check for error reply. - uint16_t rcode = knot_pkt_get_ext_rcode(reply); - if (rcode != KNOT_RCODE_NOERROR) { - const char *rcode_str = "Unknown"; - - const knot_lookup_t *code = - knot_lookup_by_id(knot_rcode_names, rcode); - if (code != NULL) { - rcode_str = code->name; - } - - ERR("server replied %s\n", rcode_str); + if (knot_pkt_ext_rcode(reply) != KNOT_RCODE_NOERROR) { + ERR("server replied with error '%s'\n", + knot_pkt_ext_rcode_name(reply)); knot_pkt_free(&reply); net_close(net); return 0; diff --git a/src/utils/keymgr/cmdparse/parameter.c b/src/utils/keymgr/cmdparse/parameter.c index 94425fd0a0188cbb3db472cdbc8fdda65c054b84..350e173b8be65b05009705086d233de367bfe94d 100644 --- a/src/utils/keymgr/cmdparse/parameter.c +++ b/src/utils/keymgr/cmdparse/parameter.c @@ -41,7 +41,7 @@ static const parameter_t *param_match(const parameter_t *params, const char *sea } if (match) { - error("Ambigious parameter '%s' ('%s' or '%s').", + error("Ambiguous parameter '%s' ('%s' or '%s').", search, match->name, p->name); return NULL; } diff --git a/src/utils/keymgr/keymgr.c b/src/utils/keymgr/keymgr.c index b7a7080b233ffb34a70467785d85af3293ac3817..c8c149eba87d6eff457e9b97ed8962282dc138b7 100644 --- a/src/utils/keymgr/keymgr.c +++ b/src/utils/keymgr/keymgr.c @@ -20,12 +20,15 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <time.h> #include <dnssec/crypto.h> #include <dnssec/error.h> #include <dnssec/kasp.h> #include <dnssec/keystore.h> #include <dnssec/tsig.h> +#include <dnssec/key.h> +#include <dnssec/keystate.h> #include "cmdparse/command.h" #include "cmdparse/parameter.h" @@ -45,6 +48,9 @@ #define MANUAL_POLICY "default_manual" +static const uint16_t DNSKEY_FLAGS_KSK = 257; +static const uint16_t DNSKEY_FLAGS_ZSK = 256; + /* -- global options ------------------------------------------------------- */ static options_t options = { 0 }; @@ -262,6 +268,30 @@ static bool empty_filter(const char *filter) typedef bool (*list_match_cb)(const void *item, const char *filter); typedef void (*list_print_cb)(const void *item); +key_state_t str_to_keystate(const char *filter) { + if (!filter) { + return DNSSEC_KEY_STATE_INVALID; + } + + if (strcmp(filter, "+removed") == 0) { + return DNSSEC_KEY_STATE_REMOVED; + } + + if (strcmp(filter, "+retired") == 0) { + return DNSSEC_KEY_STATE_RETIRED; + } + + if (strcmp(filter, "+active") == 0) { + return DNSSEC_KEY_STATE_ACTIVE; + } + + if (strcmp(filter, "+published") == 0) { + return DNSSEC_KEY_STATE_PUBLISHED; + } + + return DNSSEC_KEY_STATE_INVALID; +} + /*! * Iterate over a list and print each matching item. * @@ -290,6 +320,61 @@ static int print_list(dnssec_list_t *list, const char *filter, return found; } +/*! + * Iterate over a list and print each matching item. + * + * \param list List to walk through. + * \param filter Limits printed keys to given state. + * \param print Item print callback. + * + * \return Number of printed items. + */ +static int print_list_filtered(dnssec_list_t *list, const char *filter1, + const char *filter2, list_print_cb print) +{ + assert(list); + uint16_t flag = 0; + bool first_valid = true; + + key_state_t state = str_to_keystate(filter1); + if (state == DNSSEC_KEY_STATE_INVALID) { + first_valid = false; + state = str_to_keystate(filter2); + if (filter2 && state == DNSSEC_KEY_STATE_INVALID) { + error("Invalid filters."); + return DNSSEC_ERROR; + } + } + + const char *flag_def = (first_valid ? filter2 : filter1); + + if (flag_def && !strcmp(flag_def, "+ksk")) { + flag = DNSKEY_FLAGS_KSK; + } else if (flag_def && !strcmp(flag_def, "+zsk")) { + flag = DNSKEY_FLAGS_ZSK; + } + + if ((!first_valid || filter2) && !flag) { + error("Invalid filters."); + return DNSSEC_ERROR; + } + + int found = 0; + time_t current = time(NULL); + dnssec_list_foreach(item, list) { + dnssec_kasp_key_t *key = dnssec_item_get(item); + const void *value = dnssec_item_get(item); + uint16_t flags = dnssec_key_get_flags(key->key); + if ((state == DNSSEC_KEY_STATE_INVALID || + dnssec_get_key_state(key, current) == state) && + (flags == flag || flag == 0)) { + print(value); + found+=1; + } + } + return found; +} + /* -- key matching --------------------------------------------------------- */ /*! @@ -835,15 +920,14 @@ static int cmd_zone_remove(int argc, char *argv[]) */ static int cmd_zone_key_list(int argc, char *argv[]) { - if (argc < 1 || argc > 2) { + if (argc < 1 || argc > 3) { error("Zone name and optional filter has to be specified."); return 1; } const char *zone_name = argv[0]; - const char *filter = (argc == 2 ? argv[1] : NULL); - - // list the keys + const char *filter1 = (argc >= 2 ? argv[1] : NULL); + const char *filter2 = (argc == 3 ? argv[2] : NULL); _cleanup_kasp_ dnssec_kasp_t *kasp = get_zone_kasp(zone_name); if (!kasp) { @@ -856,7 +940,18 @@ static int cmd_zone_key_list(int argc, char *argv[]) } dnssec_list_t *zone_keys = dnssec_kasp_zone_get_keys(zone); - int count = print_list(zone_keys, filter, item_match_key, item_print_key); + int count = 0; + /* No filter */ + if ((!filter1 || filter1[0] != '+') && !filter2) { + count = print_list(zone_keys, filter1, item_match_key, item_print_key); + /* with filters */ + } else if (filter1 && filter1[0] == '+' && (!filter2 || filter2[0] == '+')) { + count = print_list_filtered(zone_keys, filter1, filter2, item_print_key); + } else { + error("Invalid argument combination"); + return 1; + } + if (count == 0) { error("No matching zone key found."); return 1; @@ -973,12 +1068,6 @@ static int cmd_zone_key_ds(int argc, char *argv[]) _cleanup_zone_ dnssec_kasp_zone_t *zone = get_zone(kasp, zone_name); dnssec_list_t *keys = dnssec_kasp_zone_get_keys(zone); - dnssec_kasp_key_t *key = NULL; - int r = search_unique_key(keys, key_name, &key); - if (r != DNSSEC_EOK) { - return 1; - } - static const dnssec_key_digest_t digests[] = { DNSSEC_KEY_DIGEST_SHA1, DNSSEC_KEY_DIGEST_SHA256, @@ -986,8 +1075,47 @@ static int cmd_zone_key_ds(int argc, char *argv[]) 0 }; - for (const dnssec_key_digest_t *d = digests; *d != 0; d++) { - create_and_print_ds(key->key, *d); + dnssec_kasp_key_t *key = NULL; + + key_state_t state = str_to_keystate(key_name); + if (state == DNSSEC_KEY_STATE_INVALID) { + if (key_name[0] == '+') { + error("Wrong filter"); + return 1; + } + + int r = search_unique_key(keys, key_name, &key); + if (r != DNSSEC_EOK) { + return 1; + } + + for (const dnssec_key_digest_t *d = digests; *d != 0; d++) { + create_and_print_ds(key->key, *d); + } + } else if (state == DNSSEC_KEY_STATE_ACTIVE || state == DNSSEC_KEY_STATE_PUBLISHED) { + int found = 0; + time_t current = time(NULL); + + dnssec_list_foreach(item, keys) { + key = dnssec_item_get(item); + uint16_t flags = dnssec_key_get_flags(key->key); + const void *value = dnssec_item_get(item); + if (dnssec_get_key_state(key, current) == state && flags == DNSKEY_FLAGS_KSK) { + found++; + item_print_key(value); + for (const dnssec_key_digest_t *d = digests; *d != 0; d++) { + create_and_print_ds(key->key, *d); + } + } + } + + if (found == 0) { + error ("No key matching filter."); + return 1; + } + } else { // if onther state than active or published + error("Wrong filter."); + return 1; } return 0; @@ -1087,7 +1215,7 @@ static int cmd_zone_key_generate(int argc, char *argv[]) return 1; } - uint16_t flags = config.is_ksk ? 257 : 256; + uint16_t flags = config.is_ksk ? DNSKEY_FLAGS_KSK : DNSKEY_FLAGS_ZSK; dnssec_key_t *dnskey = NULL; dnssec_key_new(&dnskey); diff --git a/src/utils/keymgr/options.c b/src/utils/keymgr/options.c index dbb67ddf4bccf1b00e30fc56f4cfda07a7fc7c00..a5281cebc05eb54355883bb295851b7c9d74fad5 100644 --- a/src/utils/keymgr/options.c +++ b/src/utils/keymgr/options.c @@ -102,7 +102,7 @@ static int options_init_modern(options_t *options) } // Update to the new config. - conf_update(new_conf); + conf_update(new_conf, CONF_UPD_FNONE); return DNSSEC_EOK; } @@ -127,7 +127,7 @@ void options_cleanup(options_t *options) } if (!options->legacy) { - conf_update(NULL); + conf_update(NULL, CONF_UPD_FNONE); } free(options->kasp_dir); diff --git a/src/utils/kjournalprint/main.c b/src/utils/kjournalprint/main.c new file mode 100644 index 0000000000000000000000000000000000000000..2daa52bcd36b9c3d636df8f80cc99b18812ef141 --- /dev/null +++ b/src/utils/kjournalprint/main.c @@ -0,0 +1,265 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdlib.h> +#include <getopt.h> + +#include "libknot/libknot.h" +#include "knot/journal/journal.h" +#include "knot/zone/zone-dump.h" +#include "utils/common/exec.h" +#include "contrib/strtonum.h" + +#define PROGRAM_NAME "kjournalprint" + +#define RED "\x1B[31m" +#define GRN "\x1B[32m" +#define YLW "\x1B[93m" +#define RESET "\x1B[0m" + +static void print_help(void) +{ + printf("Usage: %s [parameter] <journal_db> <zone_name>\n" + "\n" + "Parameters:\n" + " -l, --limit <num> Read only <num> newest changes.\n" + " -n, --no-color Get output without terminal coloring.\n" + " -z, --zone-list Instead of reading jurnal, display the list\n" + " of zones in the DB (<zone_name> not needed).\n", + PROGRAM_NAME); +} + +static inline char *get_rrset(knot_rrset_t *rrset, char **buff, size_t *len) +{ + int ret = knot_rrset_txt_dump(rrset, buff, len, &KNOT_DUMP_STYLE_DEFAULT); + return (ret > 0) ? *buff : "Corrupted or missing!\n"; +} + +int print_journal(char *path, knot_dname_t *name, uint32_t limit, bool color) +{ + list_t db; + init_list(&db); + + size_t buflen = 8192; + char *buff = malloc(buflen); + if (buff == NULL) { + return KNOT_ENOMEM; + } + + journal_db_t *jdb = NULL; + journal_t *j = journal_new(); + int ret; + + ret = journal_db_init(&jdb, path, 1); + if (ret != KNOT_EOK) { + journal_free(&j); + free(buff); + return ret; + } + + if (!journal_exists(&jdb, name)) { + fprintf(stderr, "This zone does not exist in DB %s\n", path); + ret = KNOT_ENOENT; + } + + if (ret == KNOT_EOK) { + ret = journal_open(j, &jdb, name); + } + if (ret != KNOT_EOK) { + journal_free(&j); + journal_db_close(&jdb); + free(buff); + return ret; + } + + bool is_empty; + uint32_t serial_from, serial_to; + journal_metadata_info(j, &is_empty, &serial_from, &serial_to); + if (is_empty) { + ret = KNOT_ENOENT; + goto pj_finally; + } + + ret = journal_load_changesets(j, &db, serial_from); + if (ret != KNOT_EOK) { + goto pj_finally; + } + + changeset_t *chs = NULL; + + size_t db_remains = list_size(&db); + + WALK_LIST(chs, db) { + if (--db_remains >= limit && limit > 0) { + continue; + } + + printf(color ? YLW : ""); + printf(";; Changes between zone versions: %u -> %u\n", + knot_soa_serial(&chs->soa_from->rrs), + knot_soa_serial(&chs->soa_to->rrs)); + + // Removed. + printf(color ? RED : ""); + printf(";; Removed\n"); + printf("%s", get_rrset(chs->soa_from, &buff, &buflen)); + zone_dump_text(chs->remove, stdout, false); + + // Added. + printf(color ? GRN : ""); + printf(";; Added\n"); + printf("%s", get_rrset(chs->soa_to, &buff, &buflen)); + zone_dump_text(chs->add, stdout, false); + printf(color ? RESET : ""); + } + + changesets_free(&db); + +pj_finally: + free(buff); + journal_close(j); + journal_free(&j); + journal_db_close(&jdb); + + return ret; +} + +int list_zones(char *path) +{ + journal_db_t *jdb = NULL; + int ret = journal_db_init(&jdb, path, 1); + if (ret != KNOT_EOK) { + return ret; + } + + list_t zones; + init_list(&zones); + ret = journal_db_list_zones(&jdb, &zones); + if (ret == KNOT_EOK) { + ptrnode_t *zn; + WALK_LIST(zn, zones) { + printf("%s\n", (char *)zn->d); + free(zn->d); + } + ptrlist_free(&zones, NULL); + } + + journal_db_close(&jdb); + return ret; +} + +int main(int argc, char *argv[]) +{ + uint32_t limit = 0; + bool color = true, justlist = false; + + struct option opts[] = { + { "limit", required_argument, NULL, 'l' }, + { "no-color", no_argument, NULL, 'n' }, + { "zone-list", no_argument, NULL, 'z' }, + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'V' }, + { NULL } + }; + + int opt = 0; + while ((opt = getopt_long(argc, argv, "l:nzhV", opts, NULL)) != -1) { + switch (opt) { + case 'l': + if (str_to_u32(optarg, &limit) != KNOT_EOK) { + print_help(); + return EXIT_FAILURE; + } + break; + case 'n': + color = false; + break; + case 'z': + justlist = true; + break; + case 'h': + print_help(); + return EXIT_SUCCESS; + case 'V': + print_version(PROGRAM_NAME); + return EXIT_SUCCESS; + default: + print_help(); + return EXIT_FAILURE; + } + } + + char *db = NULL; + knot_dname_t *name = NULL; + + switch (argc - optind) { + case 2: + name = knot_dname_from_str_alloc(argv[optind + 1]); + // FALLTHROUGH + case 1: + db = argv[optind]; + break; + default: + print_help(); + return EXIT_FAILURE; + } + + if (db == NULL) { + fprintf(stderr, "Journal DB path not specified\n"); + return EXIT_FAILURE; + } + + if (justlist) { + int ret = list_zones(db); + switch (ret) { + case KNOT_ENOENT: + printf("No zones in journal DB\n"); + // FALLTHROUGH + case KNOT_EOK: + return EXIT_SUCCESS; + case KNOT_EMALF: + fprintf(stderr, "The journal DB is broken\n"); + return EXIT_FAILURE; + default: + fprintf(stderr, "Failed to load zone list (%s)\n", knot_strerror(ret)); + return EXIT_FAILURE; + } + } + + if (name == NULL) { + fprintf(stderr, "Zone not specified\n"); + return EXIT_FAILURE; + } + + int ret = print_journal(db, name, limit, color); + free(name); + + switch (ret) { + case KNOT_ENOENT: + printf("The journal is empty\n"); + break; + case KNOT_EOUTOFZONE: + fprintf(stderr, "The specified journal DB does not contain the specified zone\n"); + return EXIT_FAILURE; + case KNOT_EOK: + break; + default: + fprintf(stderr, "Failed to load changesets (%s)\n", knot_strerror(ret)); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/src/utils/knot1to2/cf-lex.c b/src/utils/knot1to2/cf-lex.c index b50c1ee35c816cc39b084cae31940edf38d105af..4d42ef08525dfa8af8cec4b7ae469a651942a2ab 100644 --- a/src/utils/knot1to2/cf-lex.c +++ b/src/utils/knot1to2/cf-lex.c @@ -197,7 +197,7 @@ typedef size_t yy_size_t; */ #define YY_LESS_LINENO(n) \ do { \ - yy_size_t yyl;\ + int yyl;\ for ( yyl = n; yyl < yyleng; ++yyl )\ if ( yytext[yyl] == '\n' )\ --yylineno;\ @@ -215,7 +215,7 @@ typedef size_t yy_size_t; do \ { \ /* Undo effects of setting up yytext. */ \ - yy_size_t yyless_macro_arg = (n); \ + int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ @@ -243,7 +243,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - yy_size_t yy_n_chars; + int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -930,7 +930,7 @@ struct yyguts_t size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; - yy_size_t yy_n_chars; + int yy_n_chars; yy_size_t yyleng_r; char *yy_c_buf_p; int yy_init; @@ -2170,9 +2170,9 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else ret_val = EOB_ACT_CONTINUE_SCAN; - if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + if ((int) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) cf_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); @@ -2572,7 +2572,7 @@ static void cf_ensure_buffer_stack (yyscan_t yyscanner) * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ - num_to_alloc = 1; // After all that talk, this was set to 1 anyways... + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ yyg->yy_buffer_stack = (struct yy_buffer_state**)cf_alloc (num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); @@ -2710,7 +2710,7 @@ static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) do \ { \ /* Undo effects of setting up yytext. */ \ - yy_size_t yyless_macro_arg = (n); \ + int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ diff --git a/src/utils/knot1to2/cf-parse.tab.c b/src/utils/knot1to2/cf-parse.tab.c index 380d3867ed617fca02aeab2c7452087760533834..636066e8a656c694d690d53347ea3ff641a045f0 100644 --- a/src/utils/knot1to2/cf-parse.tab.c +++ b/src/utils/knot1to2/cf-parse.tab.c @@ -284,7 +284,7 @@ static void acl_next(void *scanner, const char *value) if (extra->run == S_FIRST) { if (trie != NULL) { - hattrie_iter_t *it = hattrie_iter_begin(*trie, false); + hattrie_iter_t *it = hattrie_iter_begin(*trie); for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { size_t len = 0; const char *data = hattrie_iter_key(it, &len); @@ -306,7 +306,7 @@ static void acl_next(void *scanner, const char *value) if (trie != NULL) { bool init = true; - hattrie_iter_t *it = hattrie_iter_begin(*trie, false); + hattrie_iter_t *it = hattrie_iter_begin(*trie); for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { size_t len = 0; const char *data = hattrie_iter_key(it, &len); @@ -383,7 +383,7 @@ static void grp_init(void *scanner, const char *name) hattrie_t **trie = (hattrie_t **)hattrie_get(extra->share->groups, name, strlen(name)); if (*trie == NULL) { - *trie = hattrie_create(); + *trie = hattrie_create(NULL); } extra->current_trie = *trie; } diff --git a/src/utils/knot1to2/cf-parse.y b/src/utils/knot1to2/cf-parse.y index 855761fa9475ea26498a0b810fa7ca75447b8a74..7c0732500b5820daadfccbefa70a06112e430b0d 100644 --- a/src/utils/knot1to2/cf-parse.y +++ b/src/utils/knot1to2/cf-parse.y @@ -228,7 +228,7 @@ static void acl_next(void *scanner, const char *value) if (extra->run == S_FIRST) { if (trie != NULL) { - hattrie_iter_t *it = hattrie_iter_begin(*trie, false); + hattrie_iter_t *it = hattrie_iter_begin(*trie); for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { size_t len = 0; const char *data = hattrie_iter_key(it, &len); @@ -250,7 +250,7 @@ static void acl_next(void *scanner, const char *value) if (trie != NULL) { bool init = true; - hattrie_iter_t *it = hattrie_iter_begin(*trie, false); + hattrie_iter_t *it = hattrie_iter_begin(*trie); for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { size_t len = 0; const char *data = hattrie_iter_key(it, &len); @@ -327,7 +327,7 @@ static void grp_init(void *scanner, const char *name) hattrie_t **trie = (hattrie_t **)hattrie_get(extra->share->groups, name, strlen(name)); if (*trie == NULL) { - *trie = hattrie_create(); + *trie = hattrie_create(NULL); } extra->current_trie = *trie; } diff --git a/src/utils/knot1to2/main.c b/src/utils/knot1to2/main.c index 06624ce6c137cc823f2c28748284834c7fa93c6e..e01540814e1b5173bd544c463ad79bc4646a6854 100644 --- a/src/utils/knot1to2/main.c +++ b/src/utils/knot1to2/main.c @@ -75,12 +75,12 @@ static int convert(const char *file_out, const char *file_in) share_t share = { .out = out, - .ifaces = hattrie_create(), - .groups = hattrie_create(), - .remotes = hattrie_create(), - .acl_xfer = hattrie_create(), - .acl_notify = hattrie_create(), - .acl_update = hattrie_create() + .ifaces = hattrie_create(NULL), + .groups = hattrie_create(NULL), + .remotes = hattrie_create(NULL), + .acl_xfer = hattrie_create(NULL), + .acl_notify = hattrie_create(NULL), + .acl_update = hattrie_create(NULL) }; // Parse the input file multiple times to get some context. @@ -93,7 +93,7 @@ static int convert(const char *file_out, const char *file_in) } // Remove ifaces data. - hattrie_iter_t *it = hattrie_iter_begin(share.ifaces, false); + hattrie_iter_t *it = hattrie_iter_begin(share.ifaces); for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { char *data = *hattrie_iter_val(it); free(data); @@ -101,7 +101,7 @@ static int convert(const char *file_out, const char *file_in) hattrie_iter_free(it); // Remove groups data. - it = hattrie_iter_begin(share.groups, false); + it = hattrie_iter_begin(share.groups); for (; !hattrie_iter_finished(it); hattrie_iter_next(it)) { hattrie_t *trie = *hattrie_iter_val(it); hattrie_free(trie); diff --git a/src/utils/knotc/commands.c b/src/utils/knotc/commands.c index 6fb776855a735488099f92f37116b0e3361f0d98..afcd8fe1e48783e37c2dfb960d434ab1dbcddc86 100644 --- a/src/utils/knotc/commands.c +++ b/src/utils/knotc/commands.c @@ -36,6 +36,7 @@ #define CMD_STATUS "status" #define CMD_STOP "stop" #define CMD_RELOAD "reload" +#define CMD_STATS "stats" #define CMD_ZONE_CHECK "zone-check" #define CMD_ZONE_MEMSTATS "zone-memstats" @@ -55,6 +56,7 @@ #define CMD_ZONE_SET "zone-set" #define CMD_ZONE_UNSET "zone-unset" #define CMD_ZONE_PURGE "zone-purge" +#define CMD_ZONE_STATS "zone-stats" #define CMD_CONF_INIT "conf-init" #define CMD_CONF_CHECK "conf-check" @@ -270,26 +272,43 @@ static void format_data(ctl_cmd_t cmd, knot_ctl_type_t data_type, case CTL_ZONE_GET: case CTL_ZONE_SET: case CTL_ZONE_UNSET: - if (data_type == KNOT_CTL_TYPE_DATA) { - printf("%s%s%s%s%s%s%s%s%s%s%s%s%s", - (!(*empty) ? "\n" : ""), - (error != NULL ? "error: (" : ""), - (error != NULL ? error : ""), - (error != NULL ? ") " : ""), - (zone != NULL ? "[" : ""), - (zone != NULL ? zone : ""), - (zone != NULL ? "] " : ""), - (sign != NULL ? sign : ""), - (owner != NULL ? owner : ""), - (ttl != NULL ? " " : ""), - (ttl != NULL ? ttl : ""), - (type != NULL ? " " : ""), - (type != NULL ? type : "")); - *empty = false; - } - if (value != NULL) { - printf(" %s", value); - } + printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + (!(*empty) ? "\n" : ""), + (error != NULL ? "error: (" : ""), + (error != NULL ? error : ""), + (error != NULL ? ") " : ""), + (zone != NULL ? "[" : ""), + (zone != NULL ? zone : ""), + (zone != NULL ? "] " : ""), + (sign != NULL ? sign : ""), + (owner != NULL ? owner : ""), + (ttl != NULL ? " " : ""), + (ttl != NULL ? ttl : ""), + (type != NULL ? " " : ""), + (type != NULL ? type : ""), + (value != NULL ? " " : ""), + (value != NULL ? value : "")); + *empty = false; + break; + case CTL_STATS: + case CTL_ZONE_STATS: + printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + (!(*empty) ? "\n" : ""), + (error != NULL ? "error: (" : ""), + (error != NULL ? error : ""), + (error != NULL ? ") " : ""), + (zone != NULL ? "[" : ""), + (zone != NULL ? zone : ""), + (zone != NULL ? "] " : ""), + (key0 != NULL ? key0 : ""), + (key1 != NULL ? "." : ""), + (key1 != NULL ? key1 : ""), + (id != NULL ? "[" : ""), + (id != NULL ? id : ""), + (id != NULL ? "]" : ""), + (value != NULL ? " = " : ""), + (value != NULL ? value : "")); + *empty = false; break; default: assert(0); @@ -334,6 +353,8 @@ static void format_block(ctl_cmd_t cmd, bool failed, bool empty) case CTL_CONF_READ: case CTL_CONF_DIFF: case CTL_CONF_GET: + case CTL_ZONE_STATS: + case CTL_STATS: printf("%s", empty ? "" : "\n"); break; default: @@ -409,6 +430,75 @@ static int cmd_ctl(cmd_args_t *args) return ctl_receive(args); } +static int set_stats_items(cmd_args_t *args, knot_ctl_data_t *data) +{ + int min_args, max_args; + switch (args->desc->cmd) { + case CTL_STATS: min_args = 0; max_args = 1; break; + case CTL_ZONE_STATS: min_args = 1; max_args = 2; break; + default: + assert(0); + return KNOT_EINVAL; + } + + // Check the number of arguments. + int ret = check_args(args, min_args, max_args); + if (ret != KNOT_EOK) { + return ret; + } + + int idx = 0; + + // Set ZONE name. + if (args->argc > idx && args->desc->cmd == CTL_ZONE_STATS) { + if (strcmp(args->argv[idx], "--") != 0) { + (*data)[KNOT_CTL_IDX_ZONE] = args->argv[idx]; + } + idx++; + } + + if (args->argc > idx) { + (*data)[KNOT_CTL_IDX_SECTION] = args->argv[idx]; + + char *item = strchr(args->argv[idx], '.'); + if (item != NULL) { + // Separate section and item. + *item++ = '\0'; + (*data)[KNOT_CTL_IDX_ITEM] = item; + } + } + + return KNOT_EOK; +} + +static int cmd_stats_ctl(cmd_args_t *args) +{ + knot_ctl_data_t data = { + [KNOT_CTL_IDX_CMD] = ctl_cmd_to_str(args->desc->cmd), + [KNOT_CTL_IDX_FLAGS] = args->force ? CTL_FLAG_FORCE : NULL + }; + + int ret = set_stats_items(args, &data); + if (ret != KNOT_EOK) { + return ret; + } + + ret = knot_ctl_send(args->ctl, KNOT_CTL_TYPE_DATA, &data); + if (ret != KNOT_EOK) { + log_error(CTL_LOG_STR" (%s)", knot_strerror(ret)); + return ret; + } + + // Finish the input block. + ret = knot_ctl_send(args->ctl, KNOT_CTL_TYPE_BLOCK, NULL); + if (ret != KNOT_EOK) { + log_error(CTL_LOG_STR" (%s)", knot_strerror(ret)); + return ret; + } + + return ctl_receive(args); +} + static int zone_exec(cmd_args_t *args, int (*fcn)(const knot_dname_t *, void *), void *data) { @@ -481,7 +571,7 @@ static int zone_memstats(const knot_dname_t *dname, void *data) // Init memory estimation context. zone_estim_t est = { - .node_table = hattrie_create_n(TRIE_BUCKET_SIZE, &mem_ctx), + .node_table = hattrie_create(&mem_ctx), }; char buff[KNOT_DNAME_TXT_MAXLEN + 1]; @@ -516,16 +606,12 @@ static int zone_memstats(const knot_dname_t *dname, void *data) zs_deinit(zs); free(zs); - // Only size of ahtables inside trie's nodes is missing. - assert(est.htable_size == 0); - est.htable_size = estimator_trie_htable_memsize(est.node_table); - // Cleanup. hattrie_apply_rev(est.node_table, estimator_free_trie_node, NULL); hattrie_free(est.node_table); double zone_size = (est.rdata_size + est.node_size + est.dname_size + - est.htable_size + malloc_size) / (1024.0 * 1024.0); + malloc_size) / (1024.0 * 1024.0); log_zone_info(dname, "%zu records, %.1f MiB memory", est.record_count, zone_size); @@ -874,6 +960,7 @@ const cmd_desc_t cmd_table[] = { { CMD_STATUS, cmd_ctl, CTL_STATUS }, { CMD_STOP, cmd_ctl, CTL_STOP }, { CMD_RELOAD, cmd_ctl, CTL_RELOAD }, + { CMD_STATS, cmd_stats_ctl, CTL_STATS }, { CMD_ZONE_CHECK, cmd_zone_check, CTL_NONE, CMD_FOPT_ZONE | CMD_FREAD }, { CMD_ZONE_MEMSTATS, cmd_zone_memstats, CTL_NONE, CMD_FOPT_ZONE | CMD_FREAD }, @@ -893,6 +980,7 @@ const cmd_desc_t cmd_table[] = { { CMD_ZONE_SET, cmd_zone_node_ctl, CTL_ZONE_SET, CMD_FREQ_ZONE }, { CMD_ZONE_UNSET, cmd_zone_node_ctl, CTL_ZONE_UNSET, CMD_FREQ_ZONE }, { CMD_ZONE_PURGE, cmd_zone_ctl, CTL_ZONE_PURGE, CMD_FREQ_ZONE }, + { CMD_ZONE_STATS, cmd_stats_ctl, CTL_ZONE_STATS, CMD_FREQ_ZONE }, { CMD_CONF_INIT, cmd_conf_init, CTL_NONE, CMD_FWRITE }, { CMD_CONF_CHECK, cmd_conf_check, CTL_NONE, CMD_FREAD }, @@ -916,6 +1004,7 @@ static const cmd_help_t cmd_help_table[] = { { CMD_STATUS, "", "Check if the server is running." }, { CMD_STOP, "", "Stop the server if running." }, { CMD_RELOAD, "", "Reload the server configuration and modified zones." }, + { CMD_STATS, "[<module>[.<counter>]]", "Show global statistics counter(s)." }, { "", "", "" }, { CMD_ZONE_CHECK, "[<zone>...]", "Check if the zone can be loaded. (*)" }, { CMD_ZONE_MEMSTATS, "[<zone>...]", "Estimate memory use for the zone. (*)" }, @@ -934,7 +1023,8 @@ static const cmd_help_t cmd_help_table[] = { { CMD_ZONE_GET, "<zone> [<owner> [<type>]]", "Get zone data within the transaction." }, { CMD_ZONE_SET, "<zone> <owner> [<ttl>] <type> <rdata>", "Add zone record within the transaction." }, { CMD_ZONE_UNSET, "<zone> <owner> [<type> [<rdata>]]", "Remove zone data within the transaction." }, - { CMD_ZONE_PURGE, "<zone>...", "Purge zone data, zone file, and zone journal." }, + { CMD_ZONE_PURGE, "<zone>...", "Purge zone data, file, journal, and timers." }, + { CMD_ZONE_STATS, "<zone> [<module>[.<counter>]]", "Show zone statistics counter(s)."}, { "", "", "" }, { CMD_CONF_INIT, "", "Initialize the confdb. (*)" }, { CMD_CONF_CHECK, "", "Check the server configuration. (*)" }, diff --git a/src/utils/knotc/estimator.c b/src/utils/knotc/estimator.c index 12966f249161a181d7b6db5ae70364bace3f8917..574c99eb74a2a50a707d6ffa06bba0e81bd9833d 100644 --- a/src/utils/knotc/estimator.c +++ b/src/utils/knotc/estimator.c @@ -134,39 +134,6 @@ void estimator_free(void *p) free(p); } -static int get_htable_size(void *t, void *d) -{ - hhash_t *table = (hhash_t *)t; - size_t *size = (size_t *)d; - - /* Size of the empty table. */ - *size += add_overhead(sizeof(hhash_t) + table->size * sizeof(hhelem_t)); - - /* Allocated keys. */ - uint16_t key_len = 0; - hhash_iter_t it; - hhash_iter_begin(table, &it, false); - while (!hhash_iter_finished(&it)) { - (void)hhash_iter_key(&it, &key_len); - *size += add_overhead(sizeof(value_t) + sizeof(uint16_t) + key_len); - hhash_iter_next(&it); - } - - return KNOT_EOK; -} - -size_t estimator_trie_htable_memsize(hattrie_t *table) -{ - /* - * Iterate through trie's node, and get stats from each htable. - * Space taken up by the trie itself is measured using malloc wrapper. - * (Even for large zones, space taken by trie itself is very small) - */ - size_t size = 0; - hattrie_apply_rev_ahtable(table, get_htable_size, &size); - return size; -} - void estimator_rrset_memsize_wrap(zs_scanner_t *scanner) { rrset_memsize(scanner->process.data, scanner); diff --git a/src/utils/knotc/estimator.h b/src/utils/knotc/estimator.h index 154a77649fb0eedf5046536aef0584f32c54c2a7..af9ae648ba1642bbc7cb3aff9c6056a6feae5af0 100644 --- a/src/utils/knotc/estimator.h +++ b/src/utils/knotc/estimator.h @@ -35,7 +35,6 @@ typedef struct { size_t rdata_size; /*!< Estimated RDATA size. */ size_t dname_size; /*!< Estimated DNAME size. */ size_t node_size; /*!< Estimated node size. */ - size_t htable_size; /*!< Estimated ahtable size. */ size_t record_count; /*!< Total record count for zone. */ } zone_estim_t; @@ -57,13 +56,6 @@ void *estimator_malloc(void *ctx, size_t len); */ void estimator_free(void *p); -/*! - * \brief Goes through trie's ahtables and estimates their memory requirements. - * - * \param table Trie to traverse. - */ -size_t estimator_trie_htable_memsize(hattrie_t *table); - /*! * \brief For use with scanner - counts memsize of RRSets. * diff --git a/src/utils/knotc/interactive.c b/src/utils/knotc/interactive.c index 576491c4c74f082fb38976e4c5043b0aaed46f3e..54ef8ea40d1c20a56f5d1976b92070a1841f266c 100644 --- a/src/utils/knotc/interactive.c +++ b/src/utils/knotc/interactive.c @@ -44,7 +44,6 @@ static void cmds_lookup(EditLine *el, const char *str, size_t str_len) } } - lookup_index(&lookup); lookup_complete(&lookup, str, str_len, el, true); cmds_lookup_finish: @@ -73,7 +72,6 @@ static void local_zones_lookup(EditLine *el, const char *str, size_t str_len) } } - lookup_index(&lookup); lookup_complete(&lookup, str, str_len, el, true); local_zones_lookup_finish: @@ -173,7 +171,6 @@ static void id_lookup(EditLine *el, const char *str, size_t str_len, } } - lookup_index(&lookup); lookup_complete(&lookup, str, str_len, el, add_space); id_lookup_finish: @@ -229,7 +226,6 @@ static void list_lookup(EditLine *el, const char *section, const char *item) } } - lookup_index(&lookup); lookup_complete(&lookup, item, strlen(item), el, section != NULL); list_lookup_finish: @@ -345,7 +341,7 @@ static unsigned char complete(EditLine *el, int ch) } complete_exit: - conf_update(NULL); + conf_update(NULL, CONF_UPD_FNONE); tok_reset(tok); tok_end(tok); diff --git a/src/utils/knotc/main.c b/src/utils/knotc/main.c index 1c33226779ffd82853cebaee1dba443d3a9b0209..fd1e40398dfe3d6616614108e46f00e792c2bd38 100644 --- a/src/utils/knotc/main.c +++ b/src/utils/knotc/main.c @@ -111,12 +111,13 @@ int main(int argc, char **argv) /* Set up simplified logging just to stdout/stderr. */ log_init(); - log_levels_set(LOGT_STDOUT, LOG_ANY, LOG_MASK(LOG_INFO) | LOG_MASK(LOG_NOTICE)); - log_levels_set(LOGT_STDERR, LOG_ANY, LOG_UPTO(LOG_WARNING)); - log_levels_set(LOGT_SYSLOG, LOG_ANY, 0); - log_flag_set(LOG_FNO_TIMESTAMP | LOG_FNO_INFO); + log_levels_set(LOG_TARGET_STDOUT, LOG_SOURCE_ANY, + LOG_MASK(LOG_INFO) | LOG_MASK(LOG_NOTICE)); + log_levels_set(LOG_TARGET_STDERR, LOG_SOURCE_ANY, LOG_UPTO(LOG_WARNING)); + log_levels_set(LOG_TARGET_SYSLOG, LOG_SOURCE_ANY, 0); + log_flag_set(LOG_FLAG_NOTIMESTAMP | LOG_FLAG_NOINFO); if (params.verbose) { - log_levels_add(LOGT_STDOUT, LOG_ANY, LOG_MASK(LOG_DEBUG)); + log_levels_add(LOG_TARGET_STDOUT, LOG_SOURCE_ANY, LOG_MASK(LOG_DEBUG)); } int ret; diff --git a/src/utils/knotc/process.c b/src/utils/knotc/process.c index 48f48deadc3ea5bfb2de203a42df200b3c99a1e6..ef31c7af73a18b4d50b3b6c2b2e0c349f6aff8f5 100644 --- a/src/utils/knotc/process.c +++ b/src/utils/knotc/process.c @@ -53,8 +53,8 @@ int set_config(const cmd_desc_t *desc, params_t *params) struct stat st; bool import = false; if (flags == CMD_FNONE && params->socket != NULL) { - import = false; - params->confdb = NULL; + /* Control operation, known socket, skip configuration. */ + return KNOT_EOK; } else if (params->confdb != NULL) { import = false; } else if (flags == CMD_FWRITE) { @@ -105,7 +105,7 @@ int set_config(const cmd_desc_t *desc, params_t *params) } /* Update to the new config. */ - conf_update(new_conf); + conf_update(new_conf, CONF_UPD_FNONE); return KNOT_EOK; } @@ -216,7 +216,7 @@ int process_cmd(int argc, const char **argv, params_t *params) /* Set control interface if necessary. */ ret = set_ctl(&args.ctl, desc, params); if (ret != KNOT_EOK) { - conf_update(NULL); + conf_update(NULL, CONF_UPD_FNONE); return ret; } @@ -225,7 +225,7 @@ int process_cmd(int argc, const char **argv, params_t *params) /* Cleanup */ unset_ctl(args.ctl); - conf_update(NULL); + conf_update(NULL, CONF_UPD_FNONE); return ret; } diff --git a/src/utils/knotd/main.c b/src/utils/knotd/main.c index 0df24766012f5ba672cef5b54d7e087437dc2131..4563ff9928c63bb89a96aa7da6675b474ba5b0b6 100644 --- a/src/utils/knotd/main.c +++ b/src/utils/knotd/main.c @@ -15,6 +15,7 @@ */ #include <dirent.h> +#include <fcntl.h> #include <poll.h> #include <stdbool.h> #include <stdio.h> @@ -36,8 +37,10 @@ #include "libknot/libknot.h" #include "knot/ctl/process.h" #include "knot/conf/conf.h" +#include "knot/conf/migration.h" #include "knot/common/log.h" #include "knot/common/process.h" +#include "knot/common/stats.h" #include "knot/server/server.h" #include "knot/server/tcp-handler.h" #include "knot/zone/timers.h" @@ -214,28 +217,34 @@ static void setup_capabilities(void) } /*! \brief Event loop listening for signals and remote commands. */ -static void event_loop(server_t *server, char *socket) +static void event_loop(server_t *server, const char *socket) { + knot_ctl_t *ctl = knot_ctl_alloc(); + if (ctl == NULL) { + log_fatal("control, failed to initialize (%s)", + knot_strerror(KNOT_ENOMEM)); + return; + } + + // Set control timeout. + knot_ctl_set_timeout(ctl, conf()->cache.ctl_timeout); + /* Get control socket configuration. */ - char *listen = socket; + char *listen; if (socket == NULL) { conf_val_t listen_val = conf_get(conf(), C_CTL, C_LISTEN); conf_val_t rundir_val = conf_get(conf(), C_SRV, C_RUNDIR); char *rundir = conf_abs_path(&rundir_val, NULL); listen = conf_abs_path(&listen_val, rundir); free(rundir); + } else { + listen = strdup(socket); } - - knot_ctl_t *ctl = knot_ctl_alloc(); - if (ctl == NULL) { - log_fatal("control, failed to initialize (%s)", - knot_strerror(KNOT_ENOMEM)); + if (listen == NULL) { + log_fatal("control, empty socket path"); return; } - // Set control timeout. - knot_ctl_set_timeout(ctl, conf()->cache.ctl_timeout); - log_info("control, binding to '%s'", listen); /* Bind the control socket. */ @@ -244,12 +253,10 @@ static void event_loop(server_t *server, char *socket) knot_ctl_free(ctl); log_fatal("control, failed to bind socket '%s' (%s)", listen, knot_strerror(ret)); - return; - } - - if (socket == NULL) { free(listen); + return; } + free(listen); enable_signals(); @@ -261,7 +268,7 @@ static void event_loop(server_t *server, char *socket) } if (sig_req_reload) { sig_req_reload = false; - server_reload(server, conf()->filename, true); + server_reload(server); } // Update control timeout. @@ -353,12 +360,18 @@ static int set_config(const char *confdb, const char *config) } } + // Migrate from old schema. + ret = conf_migrate(new_conf); + if (ret != KNOT_EOK) { + log_error("failed to migrate configuration (%s)", knot_strerror(ret)); + } + /* Activate global query modules. */ conf_activate_modules(new_conf, NULL, &new_conf->query_modules, &new_conf->query_plan); /* Update to the new config. */ - conf_update(new_conf); + conf_update(new_conf, CONF_UPD_FNONE); return KNOT_EOK; } @@ -456,7 +469,7 @@ int main(int argc, char **argv) /* Initialize logging subsystem. */ log_init(); if (verbose) { - log_levels_add(LOGT_STDOUT, LOG_ANY, LOG_MASK(LOG_DEBUG)); + log_levels_add(LOG_TARGET_STDOUT, LOG_SOURCE_ANY, LOG_MASK(LOG_DEBUG)); } /* Set up the configuration */ @@ -530,6 +543,8 @@ int main(int argc, char **argv) log_warning("no zones loaded"); } + stats_reconfigure(conf(), &server); + /* Start it up. */ log_info("starting server"); conf_val_t async_val = conf_get(conf(), C_SRV, C_ASYNC_START); @@ -537,6 +552,7 @@ int main(int argc, char **argv) if (ret != KNOT_EOK) { log_fatal("failed to start server (%s)", knot_strerror(ret)); server_wait(&server); + stats_deinit(); server_deinit(&server); rcu_unregister_thread(); pid_cleanup(); @@ -558,6 +574,7 @@ int main(int argc, char **argv) /* Teardown server. */ server_stop(&server); server_wait(&server); + stats_deinit(); // TODO: will be very slow, each write is in separate transation log_info("updating zone timers database"); diff --git a/src/utils/knsupdate/knsupdate_exec.c b/src/utils/knsupdate/knsupdate_exec.c index d62a86f8ded5d91a12dd7129228995d49a3e1580..5e70e99625027d1fcd0c86b359f80c033cb2f197 100644 --- a/src/utils/knsupdate/knsupdate_exec.c +++ b/src/utils/knsupdate/knsupdate_exec.c @@ -892,16 +892,10 @@ int cmd_send(const char* lp, knsupdate_params_t *params) knsupdate_reset(params); /* Check return code. */ - uint8_t rc = knot_wire_get_rcode(params->answer->wire); - if (rc != KNOT_RCODE_NOERROR) { - const char *rcode_str = "Unknown"; - const knot_lookup_t *rcode = knot_lookup_by_id(knot_rcode_names, rc); - if (rcode != NULL) { - rcode_str = rcode->name; - } - + if (knot_pkt_ext_rcode(params->answer) != KNOT_RCODE_NOERROR) { print_packet(params->answer, NULL, 0, -1, 0, true, ¶ms->style); - ERR("update failed with '%s'\n", rcode_str); + ERR("update failed with error '%s'\n", + knot_pkt_ext_rcode_name(params->answer)); ret = KNOT_ERROR; } else { DBG("update success\n"); diff --git a/src/utils/kzonecheck/main.c b/src/utils/kzonecheck/main.c index e350405f7529eafb4b7ed17ed2d2e3e1f4d0febf..eaffe42acba69b512de302995c87ebaba6494717 100644 --- a/src/utils/kzonecheck/main.c +++ b/src/utils/kzonecheck/main.c @@ -28,23 +28,21 @@ static void print_help(void) { - printf("Usage: %s [parameters] <zonefile>\n" + printf("Usage: %s [parameters] <filename>\n" "\n" "Parameters:\n" - " -o, --origin <zone_origin> Zone name\n" - " (default filename or\n" - " filename without trailing .zone)\n" - " -v, --verbose Enable debug output.\n" - " -h, --help Print the program help.\n" - " -V, --version Print the program version.\n" + " -o, --origin <zone_origin> Zone name.\n" + " (default filename or filename without .zone)\n" + " -v, --verbose Enable debug output.\n" + " -h, --help Print the program help.\n" + " -V, --version Print the program version.\n" "\n", PROGRAM_NAME); } int main(int argc, char *argv[]) { - char *filename = NULL; - char *zonename = NULL; + const char *origin = NULL; bool verbose = false; FILE *outfile = stdout; @@ -58,11 +56,11 @@ int main(int argc, char *argv[]) }; /* Parse command line arguments */ - int opt = 0, li = 0; - while ((opt = getopt_long(argc, argv, "o:vVh", opts, &li)) != -1) { + int opt = 0; + while ((opt = getopt_long(argc, argv, "o:vVh", opts, NULL)) != -1) { switch (opt) { case 'o': - zonename = strdup(optarg); + origin = optarg; break; case 'v': verbose = true; @@ -86,25 +84,30 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - filename = argv[optind]; + char *filename = argv[optind]; - if (zonename == NULL) { - /* Get zone name from file name */ + char *zonename; + if (origin == NULL) { + /* Get zone name from file name. */ const char *ext = ".zone"; zonename = basename(filename); if (strcmp(zonename + strlen(zonename) - strlen(ext), ext) == 0) { zonename = strndup(zonename, strlen(zonename) - strlen(ext)); + } else { + zonename = strdup(zonename); } + } else { + zonename = strdup(origin); } /* TODO: Remove logging from zone loading. */ log_init(); - log_levels_set(LOGT_STDOUT, LOG_ANY, LOG_MASK(LOG_ERR)); - log_levels_set(LOGT_STDERR, LOG_ANY, 0); - log_levels_set(LOGT_SYSLOG, LOG_ANY, 0); - log_flag_set(LOG_FNO_TIMESTAMP | LOG_FNO_INFO); + log_levels_set(LOG_TARGET_STDOUT, LOG_SOURCE_ANY, LOG_MASK(LOG_ERR)); + log_levels_set(LOG_TARGET_STDERR, LOG_SOURCE_ANY, 0); + log_levels_set(LOG_TARGET_SYSLOG, LOG_SOURCE_ANY, 0); + log_flag_set(LOG_FLAG_NOTIMESTAMP | LOG_FLAG_NOINFO); if (verbose) { - log_levels_add(LOGT_STDOUT, LOG_ANY, LOG_MASK(LOG_DEBUG)); + log_levels_add(LOG_TARGET_STDOUT, LOG_SOURCE_ANY, LOG_MASK(LOG_DEBUG)); } knot_dname_t *dname = knot_dname_from_str_alloc(zonename); @@ -117,7 +120,7 @@ int main(int argc, char *argv[]) switch (ret) { case KNOT_EOK: if (verbose) { - fprintf(outfile, "No sematic error found.\n"); + fprintf(outfile, "No semantic error found.\n"); } return EXIT_SUCCESS; case KNOT_ESEMCHECK: diff --git a/src/zscanner/scanner.c.g2 b/src/zscanner/scanner.c.g2 index 60250a7703e966a8128e4ad0249d0c82627c32a1..da8946c2b8d81a61a4932f858b9feef832953e03 100644 --- a/src/zscanner/scanner.c.g2 +++ b/src/zscanner/scanner.c.g2 @@ -97,7 +97,7 @@ int zs_init( memset(s, 0, sizeof(*s)); // Nonzero initial scanner state. - s->cs = 1111; + s->cs = 1120; // Reset the file descriptor. s->file.descriptor = -1; @@ -346,7 +346,7 @@ static void parse( _again: switch ( cs ) { - case 1111: goto st1111; + case 1120: goto st1120; case 0: goto st0; case 1: goto st1; case 2: goto st2; @@ -360,7 +360,7 @@ _again: case 10: goto st10; case 11: goto st11; case 12: goto st12; - case 1112: goto st1112; + case 1121: goto st1121; case 13: goto st13; case 14: goto st14; case 15: goto st15; @@ -488,7 +488,7 @@ _again: case 137: goto st137; case 138: goto st138; case 139: goto st139; - case 1113: goto st1113; + case 1122: goto st1122; case 140: goto st140; case 141: goto st141; case 142: goto st142; @@ -499,7 +499,7 @@ _again: case 147: goto st147; case 148: goto st148; case 149: goto st149; - case 1114: goto st1114; + case 1123: goto st1123; case 150: goto st150; case 151: goto st151; case 152: goto st152; @@ -508,11 +508,11 @@ _again: case 155: goto st155; case 156: goto st156; case 157: goto st157; - case 1115: goto st1115; + case 1124: goto st1124; case 158: goto st158; case 159: goto st159; case 160: goto st160; - case 1116: goto st1116; + case 1125: goto st1125; case 161: goto st161; case 162: goto st162; case 163: goto st163; @@ -524,12 +524,12 @@ _again: case 169: goto st169; case 170: goto st170; case 171: goto st171; - case 1117: goto st1117; + case 1126: goto st1126; case 172: goto st172; case 173: goto st173; case 174: goto st174; case 175: goto st175; - case 1118: goto st1118; + case 1127: goto st1127; case 176: goto st176; case 177: goto st177; case 178: goto st178; @@ -546,7 +546,7 @@ _again: case 189: goto st189; case 190: goto st190; case 191: goto st191; - case 1119: goto st1119; + case 1128: goto st1128; case 192: goto st192; case 193: goto st193; case 194: goto st194; @@ -563,7 +563,7 @@ _again: case 205: goto st205; case 206: goto st206; case 207: goto st207; - case 1120: goto st1120; + case 1129: goto st1129; case 208: goto st208; case 209: goto st209; case 210: goto st210; @@ -619,10 +619,10 @@ _again: case 260: goto st260; case 261: goto st261; case 262: goto st262; - case 1121: goto st1121; + case 1130: goto st1130; case 263: goto st263; case 264: goto st264; - case 1122: goto st1122; + case 1131: goto st1131; case 265: goto st265; case 266: goto st266; case 267: goto st267; @@ -632,8 +632,8 @@ _again: case 271: goto st271; case 272: goto st272; case 273: goto st273; - case 1123: goto st1123; - case 1124: goto st1124; + case 1132: goto st1132; + case 1133: goto st1133; case 274: goto st274; case 275: goto st275; case 276: goto st276; @@ -648,7 +648,7 @@ _again: case 285: goto st285; case 286: goto st286; case 287: goto st287; - case 1125: goto st1125; + case 1134: goto st1134; case 288: goto st288; case 289: goto st289; case 290: goto st290; @@ -659,7 +659,7 @@ _again: case 295: goto st295; case 296: goto st296; case 297: goto st297; - case 1126: goto st1126; + case 1135: goto st1135; case 298: goto st298; case 299: goto st299; case 300: goto st300; @@ -674,7 +674,7 @@ _again: case 309: goto st309; case 310: goto st310; case 311: goto st311; - case 1127: goto st1127; + case 1136: goto st1136; case 312: goto st312; case 313: goto st313; case 314: goto st314; @@ -682,7 +682,7 @@ _again: case 316: goto st316; case 317: goto st317; case 318: goto st318; - case 1128: goto st1128; + case 1137: goto st1137; case 319: goto st319; case 320: goto st320; case 321: goto st321; @@ -692,9 +692,9 @@ _again: case 325: goto st325; case 326: goto st326; case 327: goto st327; - case 1129: goto st1129; - case 1130: goto st1130; - case 1131: goto st1131; + case 1138: goto st1138; + case 1139: goto st1139; + case 1140: goto st1140; case 328: goto st328; case 329: goto st329; case 330: goto st330; @@ -703,12 +703,12 @@ _again: case 333: goto st333; case 334: goto st334; case 335: goto st335; - case 1132: goto st1132; - case 1133: goto st1133; + case 1141: goto st1141; + case 1142: goto st1142; case 336: goto st336; case 337: goto st337; case 338: goto st338; - case 1134: goto st1134; + case 1143: goto st1143; case 339: goto st339; case 340: goto st340; case 341: goto st341; @@ -838,29 +838,29 @@ _again: case 465: goto st465; case 466: goto st466; case 467: goto st467; - case 1135: goto st1135; - case 1136: goto st1136; - case 1137: goto st1137; + case 1144: goto st1144; + case 1145: goto st1145; + case 1146: goto st1146; case 468: goto st468; case 469: goto st469; case 470: goto st470; case 471: goto st471; case 472: goto st472; - case 1138: goto st1138; + case 1147: goto st1147; case 473: goto st473; case 474: goto st474; case 475: goto st475; case 476: goto st476; - case 1139: goto st1139; - case 1140: goto st1140; - case 1141: goto st1141; + case 1148: goto st1148; + case 1149: goto st1149; + case 1150: goto st1150; case 477: goto st477; case 478: goto st478; - case 1142: goto st1142; + case 1151: goto st1151; case 479: goto st479; case 480: goto st480; case 481: goto st481; - case 1143: goto st1143; + case 1152: goto st1152; case 482: goto st482; case 483: goto st483; case 484: goto st484; @@ -956,7 +956,6 @@ _again: case 574: goto st574; case 575: goto st575; case 576: goto st576; - case 1144: goto st1144; case 577: goto st577; case 578: goto st578; case 579: goto st579; @@ -966,6 +965,7 @@ _again: case 583: goto st583; case 584: goto st584; case 585: goto st585; + case 1153: goto st1153; case 586: goto st586; case 587: goto st587; case 588: goto st588; @@ -998,10 +998,8 @@ _again: case 615: goto st615; case 616: goto st616; case 617: goto st617; - case 1145: goto st1145; case 618: goto st618; case 619: goto st619; - case 1146: goto st1146; case 620: goto st620; case 621: goto st621; case 622: goto st622; @@ -1009,14 +1007,15 @@ _again: case 624: goto st624; case 625: goto st625; case 626: goto st626; + case 1154: goto st1154; case 627: goto st627; case 628: goto st628; + case 1155: goto st1155; case 629: goto st629; case 630: goto st630; case 631: goto st631; case 632: goto st632; case 633: goto st633; - case 1147: goto st1147; case 634: goto st634; case 635: goto st635; case 636: goto st636; @@ -1026,6 +1025,7 @@ _again: case 640: goto st640; case 641: goto st641; case 642: goto st642; + case 1156: goto st1156; case 643: goto st643; case 644: goto st644; case 645: goto st645; @@ -1039,39 +1039,39 @@ _again: case 653: goto st653; case 654: goto st654; case 655: goto st655; - case 1148: goto st1148; case 656: goto st656; case 657: goto st657; case 658: goto st658; case 659: goto st659; case 660: goto st660; - case 1149: goto st1149; case 661: goto st661; case 662: goto st662; case 663: goto st663; case 664: goto st664; + case 1157: goto st1157; case 665: goto st665; - case 1150: goto st1150; case 666: goto st666; case 667: goto st667; case 668: goto st668; case 669: goto st669; + case 1158: goto st1158; case 670: goto st670; - case 1151: goto st1151; - case 1152: goto st1152; - case 1153: goto st1153; case 671: goto st671; case 672: goto st672; - case 1154: goto st1154; case 673: goto st673; case 674: goto st674; + case 1159: goto st1159; case 675: goto st675; case 676: goto st676; case 677: goto st677; case 678: goto st678; case 679: goto st679; + case 1160: goto st1160; + case 1161: goto st1161; + case 1162: goto st1162; case 680: goto st680; case 681: goto st681; + case 1163: goto st1163; case 682: goto st682; case 683: goto st683; case 684: goto st684; @@ -1090,35 +1090,35 @@ _again: case 697: goto st697; case 698: goto st698; case 699: goto st699; - case 1155: goto st1155; - case 1156: goto st1156; - case 1157: goto st1157; case 700: goto st700; case 701: goto st701; case 702: goto st702; - case 1158: goto st1158; - case 1159: goto st1159; case 703: goto st703; case 704: goto st704; case 705: goto st705; case 706: goto st706; - case 1160: goto st1160; - case 1161: goto st1161; case 707: goto st707; case 708: goto st708; + case 1164: goto st1164; + case 1165: goto st1165; + case 1166: goto st1166; case 709: goto st709; case 710: goto st710; - case 1162: goto st1162; - case 1163: goto st1163; case 711: goto st711; + case 1167: goto st1167; + case 1168: goto st1168; case 712: goto st712; case 713: goto st713; case 714: goto st714; case 715: goto st715; + case 1169: goto st1169; + case 1170: goto st1170; case 716: goto st716; case 717: goto st717; case 718: goto st718; case 719: goto st719; + case 1171: goto st1171; + case 1172: goto st1172; case 720: goto st720; case 721: goto st721; case 722: goto st722; @@ -1135,7 +1135,6 @@ _again: case 733: goto st733; case 734: goto st734; case 735: goto st735; - case 1164: goto st1164; case 736: goto st736; case 737: goto st737; case 738: goto st738; @@ -1145,13 +1144,13 @@ _again: case 742: goto st742; case 743: goto st743; case 744: goto st744; + case 1173: goto st1173; case 745: goto st745; case 746: goto st746; case 747: goto st747; case 748: goto st748; case 749: goto st749; case 750: goto st750; - case 1165: goto st1165; case 751: goto st751; case 752: goto st752; case 753: goto st753; @@ -1161,11 +1160,11 @@ _again: case 757: goto st757; case 758: goto st758; case 759: goto st759; + case 1174: goto st1174; case 760: goto st760; case 761: goto st761; case 762: goto st762; case 763: goto st763; - case 1166: goto st1166; case 764: goto st764; case 765: goto st765; case 766: goto st766; @@ -1175,27 +1174,25 @@ _again: case 770: goto st770; case 771: goto st771; case 772: goto st772; + case 1175: goto st1175; case 773: goto st773; case 774: goto st774; - case 1167: goto st1167; - case 1168: goto st1168; case 775: goto st775; case 776: goto st776; case 777: goto st777; - case 1169: goto st1169; case 778: goto st778; case 779: goto st779; case 780: goto st780; case 781: goto st781; case 782: goto st782; case 783: goto st783; + case 1176: goto st1176; + case 1177: goto st1177; case 784: goto st784; case 785: goto st785; case 786: goto st786; + case 1178: goto st1178; case 787: goto st787; - case 1170: goto st1170; - case 1171: goto st1171; - case 1172: goto st1172; case 788: goto st788; case 789: goto st789; case 790: goto st790; @@ -1205,11 +1202,11 @@ _again: case 794: goto st794; case 795: goto st795; case 796: goto st796; + case 1179: goto st1179; + case 1180: goto st1180; + case 1181: goto st1181; case 797: goto st797; case 798: goto st798; - case 1173: goto st1173; - case 1174: goto st1174; - case 1175: goto st1175; case 799: goto st799; case 800: goto st800; case 801: goto st801; @@ -1219,30 +1216,33 @@ _again: case 805: goto st805; case 806: goto st806; case 807: goto st807; + case 1182: goto st1182; + case 1183: goto st1183; + case 1184: goto st1184; case 808: goto st808; case 809: goto st809; case 810: goto st810; - case 1176: goto st1176; case 811: goto st811; case 812: goto st812; case 813: goto st813; - case 1177: goto st1177; - case 1178: goto st1178; case 814: goto st814; - case 1179: goto st1179; - case 1180: goto st1180; case 815: goto st815; - case 1181: goto st1181; - case 1182: goto st1182; case 816: goto st816; case 817: goto st817; case 818: goto st818; case 819: goto st819; + case 1185: goto st1185; case 820: goto st820; case 821: goto st821; case 822: goto st822; + case 1186: goto st1186; + case 1187: goto st1187; case 823: goto st823; + case 1188: goto st1188; + case 1189: goto st1189; case 824: goto st824; + case 1190: goto st1190; + case 1191: goto st1191; case 825: goto st825; case 826: goto st826; case 827: goto st827; @@ -1276,7 +1276,6 @@ _again: case 855: goto st855; case 856: goto st856; case 857: goto st857; - case 1183: goto st1183; case 858: goto st858; case 859: goto st859; case 860: goto st860; @@ -1286,6 +1285,7 @@ _again: case 864: goto st864; case 865: goto st865; case 866: goto st866; + case 1192: goto st1192; case 867: goto st867; case 868: goto st868; case 869: goto st869; @@ -1416,7 +1416,6 @@ _again: case 994: goto st994; case 995: goto st995; case 996: goto st996; - case 1184: goto st1184; case 997: goto st997; case 998: goto st998; case 999: goto st999; @@ -1425,22 +1424,23 @@ _again: case 1002: goto st1002; case 1003: goto st1003; case 1004: goto st1004; - case 1185: goto st1185; case 1005: goto st1005; + case 1193: goto st1193; case 1006: goto st1006; case 1007: goto st1007; case 1008: goto st1008; case 1009: goto st1009; - case 1186: goto st1186; case 1010: goto st1010; case 1011: goto st1011; case 1012: goto st1012; case 1013: goto st1013; + case 1194: goto st1194; case 1014: goto st1014; case 1015: goto st1015; case 1016: goto st1016; case 1017: goto st1017; case 1018: goto st1018; + case 1195: goto st1195; case 1019: goto st1019; case 1020: goto st1020; case 1021: goto st1021; @@ -1450,7 +1450,6 @@ _again: case 1025: goto st1025; case 1026: goto st1026; case 1027: goto st1027; - case 1187: goto st1187; case 1028: goto st1028; case 1029: goto st1029; case 1030: goto st1030; @@ -1460,6 +1459,7 @@ _again: case 1034: goto st1034; case 1035: goto st1035; case 1036: goto st1036; + case 1196: goto st1196; case 1037: goto st1037; case 1038: goto st1038; case 1039: goto st1039; @@ -1470,7 +1470,6 @@ _again: case 1044: goto st1044; case 1045: goto st1045; case 1046: goto st1046; - case 1188: goto st1188; case 1047: goto st1047; case 1048: goto st1048; case 1049: goto st1049; @@ -1480,15 +1479,13 @@ _again: case 1053: goto st1053; case 1054: goto st1054; case 1055: goto st1055; + case 1197: goto st1197; case 1056: goto st1056; case 1057: goto st1057; case 1058: goto st1058; case 1059: goto st1059; case 1060: goto st1060; case 1061: goto st1061; - case 1189: goto st1189; - case 1190: goto st1190; - case 1191: goto st1191; case 1062: goto st1062; case 1063: goto st1063; case 1064: goto st1064; @@ -1496,9 +1493,11 @@ _again: case 1066: goto st1066; case 1067: goto st1067; case 1068: goto st1068; - case 1192: goto st1192; case 1069: goto st1069; case 1070: goto st1070; + case 1198: goto st1198; + case 1199: goto st1199; + case 1200: goto st1200; case 1071: goto st1071; case 1072: goto st1072; case 1073: goto st1073; @@ -1506,11 +1505,11 @@ _again: case 1075: goto st1075; case 1076: goto st1076; case 1077: goto st1077; + case 1201: goto st1201; case 1078: goto st1078; case 1079: goto st1079; case 1080: goto st1080; case 1081: goto st1081; - case 1193: goto st1193; case 1082: goto st1082; case 1083: goto st1083; case 1084: goto st1084; @@ -1518,32 +1517,42 @@ _again: case 1086: goto st1086; case 1087: goto st1087; case 1088: goto st1088; - case 1194: goto st1194; case 1089: goto st1089; case 1090: goto st1090; + case 1202: goto st1202; case 1091: goto st1091; case 1092: goto st1092; case 1093: goto st1093; case 1094: goto st1094; - case 1195: goto st1195; case 1095: goto st1095; case 1096: goto st1096; case 1097: goto st1097; + case 1203: goto st1203; case 1098: goto st1098; case 1099: goto st1099; case 1100: goto st1100; - case 1196: goto st1196; case 1101: goto st1101; case 1102: goto st1102; case 1103: goto st1103; + case 1204: goto st1204; case 1104: goto st1104; case 1105: goto st1105; case 1106: goto st1106; case 1107: goto st1107; case 1108: goto st1108; - case 1197: goto st1197; case 1109: goto st1109; + case 1205: goto st1205; case 1110: goto st1110; + case 1111: goto st1111; + case 1112: goto st1112; + case 1113: goto st1113; + case 1114: goto st1114; + case 1115: goto st1115; + case 1116: goto st1116; + case 1117: goto st1117; + case 1206: goto st1206; + case 1118: goto st1118; + case 1119: goto st1119; default: break; } @@ -1556,7 +1565,7 @@ tr20: { s->line_counter++; } - goto st1111; + goto st1120; tr83: { if (rdata_tail - s->r_data > UINT16_MAX) { @@ -1574,34 +1583,34 @@ tr83: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1111; goto _out;} + {p++; cs = 1120; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1111; goto _out;} + p--; {p++; cs = 1120; goto _out;} } } { s->line_counter++; } - goto st1111; -tr3373: - cs = 1111; + goto st1120; +tr3384: + cs = 1120; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } { s->line_counter++; } goto _again; -st1111: +st1120: if ( ++p == pe ) - goto _test_eof1111; -case 1111: + goto _test_eof1120; +case 1120: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -1615,28 +1624,28 @@ case 1111: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3312; - case 32: goto tr3312; + case 9: goto tr3323; + case 32: goto tr3323; case 36: goto st150; - case 40: goto tr3314; - case 41: goto tr3315; - case 42: goto tr3316; - case 92: goto tr3316; - case 95: goto tr3316; + case 40: goto tr3325; + case 41: goto tr3326; + case 42: goto tr3327; + case 92: goto tr3327; + case 95: goto tr3327; case 778: goto tr20; case 827: goto st149; - case 1034: goto tr3317; - case 1083: goto tr3318; + case 1034: goto tr3328; + case 1083: goto tr3329; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr3316; + goto tr3327; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr3316; + goto tr3327; } else - goto tr3316; - goto tr3311; + goto tr3327; + goto tr3322; tr0: { WARN(ZS_BAD_NUMBER); @@ -2155,13 +2164,13 @@ tr1559: p--; {goto st261;} } goto st0; -tr1670: +tr1681: { WARN(ZS_BAD_CERT_TYPE); p--; {goto st261;} } goto st0; -tr1723: +tr1734: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} @@ -2171,7 +2180,7 @@ tr1723: p--; {goto st261;} } goto st0; -tr1746: +tr1757: { WARN(ZS_BAD_NUMBER); p--; {goto st261;} @@ -2181,7 +2190,7 @@ tr1746: p--; {goto st261;} } goto st0; -tr1765: +tr1776: { WARN(ZS_BAD_TIME_UNIT); p--; {goto st261;} @@ -2195,7 +2204,7 @@ tr1765: p--; {goto st261;} } goto st0; -tr1913: +tr1924: { s->long_string = false; } @@ -2204,7 +2213,7 @@ tr1913: p--; {goto st261;} } goto st0; -tr1934: +tr1945: { WARN(ZS_BAD_LOC_DATA); p--; {goto st261;} @@ -2214,7 +2223,7 @@ tr1934: p--; {goto st261;} } goto st0; -tr2291: +tr2302: { WARN(ZS_BAD_APL); p--; {goto st261;} @@ -2224,7 +2233,7 @@ tr2291: p--; {goto st261;} } goto st0; -tr2306: +tr2317: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} @@ -2238,7 +2247,7 @@ tr2306: p--; {goto st261;} } goto st0; -tr2349: +tr2360: { WARN(ZS_BAD_HEX_CHAR); p--; {goto st261;} @@ -2248,7 +2257,7 @@ tr2349: p--; {goto st261;} } goto st0; -tr2406: +tr2417: { WARN(ZS_BAD_GATEWAY); p--; {goto st261;} @@ -2258,7 +2267,7 @@ tr2406: p--; {goto st261;} } goto st0; -tr2421: +tr2432: { WARN(ZS_BAD_NUMBER); p--; {goto st261;} @@ -2272,7 +2281,7 @@ tr2421: p--; {goto st261;} } goto st0; -tr2435: +tr2446: { WARN(ZS_BAD_GATEWAY); p--; {goto st261;} @@ -2286,7 +2295,7 @@ tr2435: p--; {goto st261;} } goto st0; -tr2458: +tr2469: { WARN(ZS_BAD_GATEWAY_KEY); p--; {goto st261;} @@ -2296,7 +2305,7 @@ tr2458: p--; {goto st261;} } goto st0; -tr2472: +tr2483: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} @@ -2310,7 +2319,7 @@ tr2472: p--; {goto st261;} } goto st0; -tr2479: +tr2490: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} @@ -2328,7 +2337,7 @@ tr2479: p--; {goto st261;} } goto st0; -tr2584: +tr2595: { WARN(ZS_UNSUPPORTED_TYPE); p--; {goto st261;} @@ -2338,7 +2347,7 @@ tr2584: p--; {goto st261;} } goto st0; -tr2638: +tr2649: { WARN(ZS_BAD_TIMESTAMP_CHAR); p--; {goto st261;} @@ -2348,7 +2357,7 @@ tr2638: p--; {goto st261;} } goto st0; -tr3001: +tr3012: { WARN(ZS_BAD_NUMBER); p--; {goto st261;} @@ -2362,7 +2371,7 @@ tr3001: p--; {goto st261;} } goto st0; -tr3096: +tr3107: { WARN(ZS_BAD_BASE32HEX_CHAR); p--; {goto st261;} @@ -2372,7 +2381,7 @@ tr3096: p--; {goto st261;} } goto st0; -tr3239: +tr3250: { WARN(ZS_BAD_HEX_CHAR); p--; {goto st261;} @@ -2386,7 +2395,7 @@ tr3239: p--; {goto st261;} } goto st0; -tr3245: +tr3256: { WARN(ZS_BAD_CHAR_COLON); p--; {goto st261;} @@ -2400,7 +2409,7 @@ tr3245: p--; {goto st261;} } goto st0; -tr3249: +tr3260: { WARN(ZS_BAD_CHAR_DASH); p--; {goto st261;} @@ -2414,7 +2423,7 @@ tr3249: p--; {goto st261;} } goto st0; -tr3311: +tr3322: { s->r_owner_length = 0; WARN(ZS_BAD_OWNER); @@ -2425,7 +2434,7 @@ tr3311: p--; {goto st261;} } goto st0; -tr3329: +tr3340: { s->r_owner_length = 0; WARN(ZS_BAD_OWNER); @@ -2440,7 +2449,7 @@ tr3329: p--; {goto st261;} } goto st0; -tr3350: +tr3361: { s->r_owner_length = 0; WARN(ZS_BAD_OWNER); @@ -2459,7 +2468,7 @@ tr3350: p--; {goto st261;} } goto st0; -tr3367: +tr3378: { s->r_owner_length = 0; WARN(ZS_BAD_OWNER); @@ -2474,7 +2483,7 @@ tr3367: p--; {goto st261;} } goto st0; -tr3390: +tr3401: { s->r_owner_length = 0; WARN(ZS_BAD_OWNER); @@ -2518,7 +2527,7 @@ tr3: s->multiline = false; } goto st1; -tr3312: +tr3323: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -2526,7 +2535,7 @@ tr3312: } } goto st1; -tr3314: +tr3325: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -2541,7 +2550,7 @@ tr3314: s->multiline = true; } goto st1; -tr3315: +tr3326: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -2556,7 +2565,7 @@ tr3315: s->multiline = false; } goto st1; -tr3377: +tr3388: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -2571,7 +2580,7 @@ tr3377: } } goto st1; -tr3378: +tr3389: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -2586,12 +2595,12 @@ tr3378: } } goto st1; -tr3368: +tr3379: cs = 1; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } { @@ -2601,12 +2610,12 @@ tr3368: } } goto _again; -tr3370: +tr3381: cs = 1; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } { @@ -2623,12 +2632,12 @@ tr3370: s->multiline = true; } goto _again; -tr3371: +tr3382: cs = 1; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } { @@ -4922,76 +4931,76 @@ tr66: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5003,76 +5012,76 @@ tr69: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5085,76 +5094,76 @@ tr86: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5223,76 +5232,76 @@ tr144: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5308,76 +5317,76 @@ tr161: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5393,76 +5402,76 @@ tr169: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5478,76 +5487,76 @@ tr179: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5563,76 +5572,76 @@ tr190: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5648,76 +5657,76 @@ tr204: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5733,76 +5742,76 @@ tr216: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5818,76 +5827,76 @@ tr227: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5903,76 +5912,76 @@ tr235: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -5988,76 +5997,76 @@ tr248: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6073,76 +6082,76 @@ tr257: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6158,76 +6167,76 @@ tr269: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6243,76 +6252,76 @@ tr310: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6328,76 +6337,76 @@ tr321: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6413,76 +6422,76 @@ tr329: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6498,76 +6507,76 @@ tr342: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6583,76 +6592,76 @@ tr351: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6668,76 +6677,76 @@ tr360: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6753,76 +6762,76 @@ tr368: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6838,76 +6847,76 @@ tr381: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -6923,76 +6932,76 @@ tr389: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7008,76 +7017,76 @@ tr403: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7093,76 +7102,76 @@ tr412: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7178,76 +7187,76 @@ tr421: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7263,76 +7272,76 @@ tr431: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7348,76 +7357,76 @@ tr440: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7433,76 +7442,76 @@ tr452: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7518,76 +7527,76 @@ tr462: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7603,76 +7612,76 @@ tr473: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7688,76 +7697,76 @@ tr484: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7773,76 +7782,76 @@ tr492: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7858,76 +7867,76 @@ tr505: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -7943,76 +7952,76 @@ tr514: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8028,76 +8037,76 @@ tr523: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8113,76 +8122,76 @@ tr534: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8198,76 +8207,76 @@ tr547: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8283,76 +8292,76 @@ tr556: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8375,76 +8384,76 @@ tr570: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8460,76 +8469,76 @@ tr580: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8545,76 +8554,76 @@ tr787: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8630,76 +8639,76 @@ tr798: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -8715,76 +8724,76 @@ tr807: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 6; goto st616;} + {stack[top++] = 6; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 6; goto st618;} + {stack[top++] = 6; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 6; goto st620;} + {stack[top++] = 6; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 6; goto st652;} + {stack[top++] = 6; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 6; goto st657;} + {stack[top++] = 6; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 6; goto st662;} + {stack[top++] = 6; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 6; goto st667;} + {stack[top++] = 6; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 6; goto st671;} + {stack[top++] = 6; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 6; goto st673;} + {stack[top++] = 6; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 6; goto st728;} + {stack[top++] = 6; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 6; goto st739;} + {stack[top++] = 6; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 6; goto st756;} + {stack[top++] = 6; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 6; goto st767;} + {stack[top++] = 6; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 6; goto st778;} + {stack[top++] = 6; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 6; goto st791;} + {stack[top++] = 6; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 6; goto st801;} + {stack[top++] = 6; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 6; goto st840;} + {stack[top++] = 6; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 6; goto st994;} + {stack[top++] = 6; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 6; goto st997;} + {stack[top++] = 6; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 6; goto st1008;} + {stack[top++] = 6; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 6; goto st1010;} + {stack[top++] = 6; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 6; goto st1039;} + {stack[top++] = 6; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 6; goto st1052;} + {stack[top++] = 6; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 6; goto st1070;} + {stack[top++] = 6; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 6; goto st1065;} + {stack[top++] = 6; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 6; goto st1083;} + {stack[top++] = 6; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 6; goto st1089;} + {stack[top++] = 6; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 6; goto st1095;} + {stack[top++] = 6; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 6; goto st1103;} + {stack[top++] = 6; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9199,76 +9208,76 @@ tr67: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9283,76 +9292,76 @@ tr77: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9371,76 +9380,76 @@ tr145: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9459,76 +9468,76 @@ tr162: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9547,76 +9556,76 @@ tr170: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9635,76 +9644,76 @@ tr180: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9723,76 +9732,76 @@ tr191: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9811,76 +9820,76 @@ tr205: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9899,76 +9908,76 @@ tr217: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -9987,76 +9996,76 @@ tr228: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10075,76 +10084,76 @@ tr236: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10163,76 +10172,76 @@ tr249: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10251,76 +10260,76 @@ tr258: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10339,76 +10348,76 @@ tr270: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10427,76 +10436,76 @@ tr311: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10515,76 +10524,76 @@ tr322: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10603,76 +10612,76 @@ tr330: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10691,76 +10700,76 @@ tr343: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10779,76 +10788,76 @@ tr352: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10867,76 +10876,76 @@ tr361: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -10955,76 +10964,76 @@ tr369: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11043,76 +11052,76 @@ tr382: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11131,76 +11140,76 @@ tr390: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11219,76 +11228,76 @@ tr404: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11307,76 +11316,76 @@ tr413: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11395,76 +11404,76 @@ tr422: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11483,76 +11492,76 @@ tr432: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11571,76 +11580,76 @@ tr441: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11659,76 +11668,76 @@ tr453: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11747,76 +11756,76 @@ tr463: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11835,76 +11844,76 @@ tr474: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -11923,76 +11932,76 @@ tr485: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12011,76 +12020,76 @@ tr493: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12099,76 +12108,76 @@ tr506: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12187,76 +12196,76 @@ tr515: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12275,76 +12284,76 @@ tr524: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12363,76 +12372,76 @@ tr535: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12451,76 +12460,76 @@ tr548: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12539,76 +12548,76 @@ tr557: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12634,76 +12643,76 @@ tr571: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12722,76 +12731,76 @@ tr581: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12810,76 +12819,76 @@ tr788: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12898,76 +12907,76 @@ tr799: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -12986,76 +12995,76 @@ tr808: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 11; goto st616;} + {stack[top++] = 11; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 11; goto st618;} + {stack[top++] = 11; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 11; goto st620;} + {stack[top++] = 11; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 11; goto st652;} + {stack[top++] = 11; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 11; goto st657;} + {stack[top++] = 11; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 11; goto st662;} + {stack[top++] = 11; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 11; goto st667;} + {stack[top++] = 11; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 11; goto st671;} + {stack[top++] = 11; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 11; goto st673;} + {stack[top++] = 11; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 11; goto st728;} + {stack[top++] = 11; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 11; goto st739;} + {stack[top++] = 11; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 11; goto st756;} + {stack[top++] = 11; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 11; goto st767;} + {stack[top++] = 11; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 11; goto st778;} + {stack[top++] = 11; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 11; goto st791;} + {stack[top++] = 11; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 11; goto st801;} + {stack[top++] = 11; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 11; goto st840;} + {stack[top++] = 11; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 11; goto st994;} + {stack[top++] = 11; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 11; goto st997;} + {stack[top++] = 11; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 11; goto st1008;} + {stack[top++] = 11; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 11; goto st1010;} + {stack[top++] = 11; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 11; goto st1039;} + {stack[top++] = 11; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 11; goto st1052;} + {stack[top++] = 11; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 11; goto st1070;} + {stack[top++] = 11; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 11; goto st1065;} + {stack[top++] = 11; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 11; goto st1083;} + {stack[top++] = 11; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 11; goto st1089;} + {stack[top++] = 11; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 11; goto st1095;} + {stack[top++] = 11; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 11; goto st1103;} + {stack[top++] = 11; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -13164,15 +13173,15 @@ tr95: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1112; goto _out;} + {p++; cs = 1121; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1112; goto _out;} + p--; {p++; cs = 1121; goto _out;} } } - goto st1112; + goto st1121; tr705: { s->r_type = KNOT_RRTYPE_A; } { @@ -13197,19 +13206,19 @@ tr705: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1112; goto _out;} + {p++; cs = 1121; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1112; goto _out;} + p--; {p++; cs = 1121; goto _out;} } } - goto st1112; -st1112: + goto st1121; +st1121: if ( ++p == pe ) - goto _test_eof1112; -case 1112: + goto _test_eof1121; +case 1121: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -13227,23 +13236,23 @@ case 1112: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr3319; - case 32: goto tr3319; - case 36: goto tr3320; - case 40: goto tr3321; - case 41: goto tr3322; - case 42: goto tr3323; + case 9: goto tr3330; + case 32: goto tr3330; + case 36: goto tr3331; + case 40: goto tr3332; + case 41: goto tr3333; + case 42: goto tr3334; case 58: goto tr69; - case 92: goto tr3324; - case 95: goto tr3323; + case 92: goto tr3335; + case 95: goto tr3334; case 1802: goto tr20; case 1851: goto st149; - case 2058: goto tr3325; - case 2107: goto tr3326; + case 2058: goto tr3336; + case 2107: goto tr3337; case 2314: goto tr118; case 2363: goto tr119; - case 2570: goto tr3327; - case 2619: goto tr3328; + case 2570: goto tr3338; + case 2619: goto tr3339; } if ( _widec < 60 ) { if ( _widec < 11 ) { @@ -13251,19 +13260,19 @@ case 1112: goto tr69; } else if ( _widec > 44 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr3323; + goto tr3334; } else goto tr69; } else if ( _widec > 63 ) { if ( _widec < 91 ) { if ( 64 <= _widec && _widec <= 90 ) - goto tr3323; + goto tr3334; } else if ( _widec > 96 ) { if ( _widec > 122 ) { if ( 123 <= _widec ) goto tr69; } else if ( _widec >= 97 ) - goto tr3323; + goto tr3334; } else goto tr69; } else @@ -13287,7 +13296,7 @@ tr99: s->multiline = false; } goto st13; -tr3319: +tr3330: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -13295,7 +13304,7 @@ tr3319: } } goto st13; -tr3321: +tr3332: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -13310,7 +13319,7 @@ tr3321: } } goto st13; -tr3322: +tr3333: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -13425,76 +13434,76 @@ tr100: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 14; goto st616;} + {stack[top++] = 14; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 14; goto st618;} + {stack[top++] = 14; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 14; goto st620;} + {stack[top++] = 14; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 14; goto st652;} + {stack[top++] = 14; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 14; goto st657;} + {stack[top++] = 14; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 14; goto st662;} + {stack[top++] = 14; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 14; goto st667;} + {stack[top++] = 14; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 14; goto st671;} + {stack[top++] = 14; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 14; goto st673;} + {stack[top++] = 14; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 14; goto st728;} + {stack[top++] = 14; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 14; goto st739;} + {stack[top++] = 14; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 14; goto st756;} + {stack[top++] = 14; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 14; goto st767;} + {stack[top++] = 14; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 14; goto st778;} + {stack[top++] = 14; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 14; goto st791;} + {stack[top++] = 14; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 14; goto st801;} + {stack[top++] = 14; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 14; goto st840;} + {stack[top++] = 14; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 14; goto st994;} + {stack[top++] = 14; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 14; goto st997;} + {stack[top++] = 14; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 14; goto st1008;} + {stack[top++] = 14; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 14; goto st1010;} + {stack[top++] = 14; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 14; goto st1039;} + {stack[top++] = 14; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 14; goto st1052;} + {stack[top++] = 14; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 14; goto st1070;} + {stack[top++] = 14; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 14; goto st1065;} + {stack[top++] = 14; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 14; goto st1083;} + {stack[top++] = 14; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 14; goto st1089;} + {stack[top++] = 14; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 14; goto st1095;} + {stack[top++] = 14; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 14; goto st1103;} + {stack[top++] = 14; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -13761,76 +13770,76 @@ tr68: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -13842,76 +13851,76 @@ tr78: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -13927,76 +13936,76 @@ tr146: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14012,76 +14021,76 @@ tr163: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14097,76 +14106,76 @@ tr171: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14182,76 +14191,76 @@ tr181: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14267,76 +14276,76 @@ tr192: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14352,161 +14361,161 @@ tr206: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} - case KNOT_RRTYPE_TXT: - case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} - case KNOT_RRTYPE_AAAA: {stack[top++] = 19; goto st671;} - case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} - case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} - case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} - case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} - case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} - case KNOT_RRTYPE_DS: - case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} - case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} - case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} - case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} - case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} - case KNOT_RRTYPE_KEY: - case KNOT_RRTYPE_DNSKEY: - case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} - case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} - case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} - case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} - case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} - case KNOT_RRTYPE_NID: - case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} - case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} - case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} - case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} - case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} - case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} - default: - WARN(ZS_CANNOT_TEXT_DATA); - {goto st261;} - } - } - goto st19; -tr218: - { s->r_type = KNOT_RRTYPE_DNAME; } - { - rdata_tail = s->r_data; - } - { - p--; - switch (s->r_type) { - case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} - case KNOT_RRTYPE_NS: - case KNOT_RRTYPE_CNAME: - case KNOT_RRTYPE_PTR: - case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} - case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} - case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} - case KNOT_RRTYPE_MINFO: - case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} - case KNOT_RRTYPE_MX: - case KNOT_RRTYPE_AFSDB: - case KNOT_RRTYPE_RT: - case KNOT_RRTYPE_KX: - case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} + default: + WARN(ZS_CANNOT_TEXT_DATA); + {goto st261;} + } + } + goto st19; +tr218: + { s->r_type = KNOT_RRTYPE_DNAME; } + { + rdata_tail = s->r_data; + } + { + p--; + switch (s->r_type) { + case KNOT_RRTYPE_A: + {stack[top++] = 19; goto st625;} + case KNOT_RRTYPE_NS: + case KNOT_RRTYPE_CNAME: + case KNOT_RRTYPE_PTR: + case KNOT_RRTYPE_DNAME: + {stack[top++] = 19; goto st627;} + case KNOT_RRTYPE_SOA: + {stack[top++] = 19; goto st629;} + case KNOT_RRTYPE_HINFO: + {stack[top++] = 19; goto st661;} + case KNOT_RRTYPE_MINFO: + case KNOT_RRTYPE_RP: + {stack[top++] = 19; goto st666;} + case KNOT_RRTYPE_MX: + case KNOT_RRTYPE_AFSDB: + case KNOT_RRTYPE_RT: + case KNOT_RRTYPE_KX: + case KNOT_RRTYPE_LP: + {stack[top++] = 19; goto st671;} + case KNOT_RRTYPE_TXT: + case KNOT_RRTYPE_SPF: + {stack[top++] = 19; goto st676;} + case KNOT_RRTYPE_AAAA: + {stack[top++] = 19; goto st680;} + case KNOT_RRTYPE_LOC: + {stack[top++] = 19; goto st682;} + case KNOT_RRTYPE_SRV: + {stack[top++] = 19; goto st737;} + case KNOT_RRTYPE_NAPTR: + {stack[top++] = 19; goto st748;} + case KNOT_RRTYPE_CERT: + {stack[top++] = 19; goto st765;} + case KNOT_RRTYPE_APL: + {stack[top++] = 19; goto st776;} + case KNOT_RRTYPE_DS: + case KNOT_RRTYPE_CDS: + {stack[top++] = 19; goto st787;} + case KNOT_RRTYPE_SSHFP: + {stack[top++] = 19; goto st800;} + case KNOT_RRTYPE_IPSECKEY: + {stack[top++] = 19; goto st810;} + case KNOT_RRTYPE_RRSIG: + {stack[top++] = 19; goto st849;} + case KNOT_RRTYPE_NSEC: + {stack[top++] = 19; goto st1003;} + case KNOT_RRTYPE_KEY: + case KNOT_RRTYPE_DNSKEY: + case KNOT_RRTYPE_CDNSKEY: + {stack[top++] = 19; goto st1006;} + case KNOT_RRTYPE_DHCID: + {stack[top++] = 19; goto st1017;} + case KNOT_RRTYPE_NSEC3: + {stack[top++] = 19; goto st1019;} + case KNOT_RRTYPE_NSEC3PARAM: + {stack[top++] = 19; goto st1048;} + case KNOT_RRTYPE_TLSA: + {stack[top++] = 19; goto st1061;} + case KNOT_RRTYPE_NID: + case KNOT_RRTYPE_L64: + {stack[top++] = 19; goto st1079;} + case KNOT_RRTYPE_L32: + {stack[top++] = 19; goto st1074;} + case KNOT_RRTYPE_EUI48: + {stack[top++] = 19; goto st1092;} + case KNOT_RRTYPE_EUI64: + {stack[top++] = 19; goto st1098;} + case KNOT_RRTYPE_URI: + {stack[top++] = 19; goto st1104;} + case KNOT_RRTYPE_CAA: + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14522,76 +14531,76 @@ tr229: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14607,76 +14616,76 @@ tr237: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14692,76 +14701,76 @@ tr250: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14777,76 +14786,76 @@ tr259: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14862,76 +14871,76 @@ tr271: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -14947,76 +14956,76 @@ tr312: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15032,76 +15041,76 @@ tr323: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15117,76 +15126,76 @@ tr331: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15202,76 +15211,76 @@ tr344: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15287,76 +15296,76 @@ tr353: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15372,76 +15381,76 @@ tr362: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15457,76 +15466,76 @@ tr370: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15542,76 +15551,76 @@ tr383: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15627,76 +15636,76 @@ tr391: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15712,76 +15721,76 @@ tr405: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15797,76 +15806,76 @@ tr414: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15882,76 +15891,76 @@ tr423: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -15967,76 +15976,76 @@ tr433: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16052,76 +16061,76 @@ tr442: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16137,76 +16146,76 @@ tr454: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16222,76 +16231,76 @@ tr464: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16307,76 +16316,76 @@ tr475: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16392,76 +16401,76 @@ tr486: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16477,76 +16486,76 @@ tr494: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16562,76 +16571,76 @@ tr507: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16647,76 +16656,76 @@ tr516: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16732,76 +16741,76 @@ tr525: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16817,76 +16826,76 @@ tr536: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16902,76 +16911,76 @@ tr549: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -16987,76 +16996,76 @@ tr558: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -17079,76 +17088,76 @@ tr572: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -17164,76 +17173,76 @@ tr582: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -17249,76 +17258,76 @@ tr789: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -17334,76 +17343,76 @@ tr800: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -17419,76 +17428,76 @@ tr809: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 19; goto st616;} + {stack[top++] = 19; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 19; goto st618;} + {stack[top++] = 19; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 19; goto st620;} + {stack[top++] = 19; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 19; goto st652;} + {stack[top++] = 19; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 19; goto st657;} + {stack[top++] = 19; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 19; goto st662;} + {stack[top++] = 19; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 19; goto st667;} + {stack[top++] = 19; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 19; goto st671;} + {stack[top++] = 19; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 19; goto st673;} + {stack[top++] = 19; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 19; goto st728;} + {stack[top++] = 19; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 19; goto st739;} + {stack[top++] = 19; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 19; goto st756;} + {stack[top++] = 19; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 19; goto st767;} + {stack[top++] = 19; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 19; goto st778;} + {stack[top++] = 19; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 19; goto st791;} + {stack[top++] = 19; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 19; goto st801;} + {stack[top++] = 19; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 19; goto st840;} + {stack[top++] = 19; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 19; goto st994;} + {stack[top++] = 19; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 19; goto st997;} + {stack[top++] = 19; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 19; goto st1008;} + {stack[top++] = 19; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 19; goto st1010;} + {stack[top++] = 19; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 19; goto st1039;} + {stack[top++] = 19; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 19; goto st1052;} + {stack[top++] = 19; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 19; goto st1070;} + {stack[top++] = 19; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 19; goto st1065;} + {stack[top++] = 19; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 19; goto st1083;} + {stack[top++] = 19; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 19; goto st1089;} + {stack[top++] = 19; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 19; goto st1095;} + {stack[top++] = 19; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 19; goto st1103;} + {stack[top++] = 19; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -20171,15 +20180,15 @@ tr132: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1113; goto _out;} + {p++; cs = 1122; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1113; goto _out;} + p--; {p++; cs = 1122; goto _out;} } } - goto st1113; + goto st1122; tr126: { if (s->number64 <= UINT32_MAX) { @@ -20208,19 +20217,19 @@ tr126: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1113; goto _out;} + {p++; cs = 1122; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1113; goto _out;} + p--; {p++; cs = 1122; goto _out;} } } - goto st1113; -st1113: + goto st1122; +st1122: if ( ++p == pe ) - goto _test_eof1113; -case 1113: + goto _test_eof1122; +case 1122: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -20234,58 +20243,58 @@ case 1113: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3330; - case 32: goto tr3330; + case 9: goto tr3341; + case 32: goto tr3341; case 36: goto st150; - case 40: goto tr3331; - case 41: goto tr3332; - case 42: goto tr3316; - case 65: goto tr3333; - case 67: goto tr3334; - case 68: goto tr3335; - case 69: goto tr3336; - case 72: goto tr3337; - case 73: goto tr3338; - case 75: goto tr3339; - case 76: goto tr3340; - case 77: goto tr3341; - case 78: goto tr3342; - case 80: goto tr3343; - case 82: goto tr3344; - case 83: goto tr3345; - case 84: goto tr3346; - case 85: goto tr3347; - case 92: goto tr3316; - case 95: goto tr3316; - case 97: goto tr3333; - case 99: goto tr3334; - case 100: goto tr3335; - case 101: goto tr3336; - case 104: goto tr3337; - case 105: goto tr3338; - case 107: goto tr3339; - case 108: goto tr3340; - case 109: goto tr3341; - case 110: goto tr3342; - case 112: goto tr3343; - case 114: goto tr3344; - case 115: goto tr3345; - case 116: goto tr3346; - case 117: goto tr3347; + case 40: goto tr3342; + case 41: goto tr3343; + case 42: goto tr3327; + case 65: goto tr3344; + case 67: goto tr3345; + case 68: goto tr3346; + case 69: goto tr3347; + case 72: goto tr3348; + case 73: goto tr3349; + case 75: goto tr3350; + case 76: goto tr3351; + case 77: goto tr3352; + case 78: goto tr3353; + case 80: goto tr3354; + case 82: goto tr3355; + case 83: goto tr3356; + case 84: goto tr3357; + case 85: goto tr3358; + case 92: goto tr3327; + case 95: goto tr3327; + case 97: goto tr3344; + case 99: goto tr3345; + case 100: goto tr3346; + case 101: goto tr3347; + case 104: goto tr3348; + case 105: goto tr3349; + case 107: goto tr3350; + case 108: goto tr3351; + case 109: goto tr3352; + case 110: goto tr3353; + case 112: goto tr3354; + case 114: goto tr3355; + case 115: goto tr3356; + case 116: goto tr3357; + case 117: goto tr3358; case 778: goto tr20; case 827: goto st149; - case 1034: goto tr3348; - case 1083: goto tr3349; + case 1034: goto tr3359; + case 1083: goto tr3360; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr3316; + goto tr3327; } else if ( _widec > 90 ) { if ( 98 <= _widec && _widec <= 122 ) - goto tr3316; + goto tr3327; } else - goto tr3316; - goto tr3329; + goto tr3327; + goto tr3340; tr584: { if (s->multiline == true) { @@ -20304,7 +20313,7 @@ tr585: s->multiline = false; } goto st140; -tr3330: +tr3341: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -20312,7 +20321,7 @@ tr3330: } } goto st140; -tr3331: +tr3342: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -20327,7 +20336,7 @@ tr3331: } } goto st140; -tr3332: +tr3343: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -20879,12 +20888,12 @@ case 148: if ( 896 <= _widec && _widec <= 1151 ) goto st148; goto tr36; -tr3374: +tr3385: cs = 149; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } goto _again; @@ -20899,7 +20908,7 @@ tr586: { s->line_counter++; } - goto st1114; + goto st1123; tr754: { s->line_counter++; @@ -20920,15 +20929,15 @@ tr754: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1114; goto _out;} + {p++; cs = 1123; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1114; goto _out;} + p--; {p++; cs = 1123; goto _out;} } } - goto st1114; + goto st1123; tr749: { s->r_owner_length = s->dname_tmp_length; @@ -20960,16 +20969,16 @@ tr749: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1114; goto _out;} + {p++; cs = 1123; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1114; goto _out;} + p--; {p++; cs = 1123; goto _out;} } } - goto st1114; -tr3348: + goto st1123; +tr3359: { s->line_counter++; } @@ -20979,11 +20988,11 @@ tr3348: p--; {goto st261;} } } - goto st1114; -st1114: + goto st1123; +st1123: if ( ++p == pe ) - goto _test_eof1114; -case 1114: + goto _test_eof1123; +case 1123: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -20997,67 +21006,67 @@ case 1114: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3330; - case 32: goto tr3330; + case 9: goto tr3341; + case 32: goto tr3341; case 36: goto st150; - case 40: goto tr3331; - case 41: goto tr3332; - case 42: goto tr3316; - case 65: goto tr3352; - case 67: goto tr3353; - case 68: goto tr3354; - case 69: goto tr3355; - case 72: goto tr3356; - case 73: goto tr3357; - case 75: goto tr3358; - case 76: goto tr3359; - case 77: goto tr3360; - case 78: goto tr3361; - case 80: goto tr3362; - case 82: goto tr3363; - case 83: goto tr3364; - case 84: goto tr3365; - case 85: goto tr3366; - case 92: goto tr3316; - case 95: goto tr3316; - case 97: goto tr3352; - case 99: goto tr3353; - case 100: goto tr3354; - case 101: goto tr3355; - case 104: goto tr3356; - case 105: goto tr3357; - case 107: goto tr3358; - case 108: goto tr3359; - case 109: goto tr3360; - case 110: goto tr3361; - case 112: goto tr3362; - case 114: goto tr3363; - case 115: goto tr3364; - case 116: goto tr3365; - case 117: goto tr3366; + case 40: goto tr3342; + case 41: goto tr3343; + case 42: goto tr3327; + case 65: goto tr3363; + case 67: goto tr3364; + case 68: goto tr3365; + case 69: goto tr3366; + case 72: goto tr3367; + case 73: goto tr3368; + case 75: goto tr3369; + case 76: goto tr3370; + case 77: goto tr3371; + case 78: goto tr3372; + case 80: goto tr3373; + case 82: goto tr3374; + case 83: goto tr3375; + case 84: goto tr3376; + case 85: goto tr3377; + case 92: goto tr3327; + case 95: goto tr3327; + case 97: goto tr3363; + case 99: goto tr3364; + case 100: goto tr3365; + case 101: goto tr3366; + case 104: goto tr3367; + case 105: goto tr3368; + case 107: goto tr3369; + case 108: goto tr3370; + case 109: goto tr3371; + case 110: goto tr3372; + case 112: goto tr3373; + case 114: goto tr3374; + case 115: goto tr3375; + case 116: goto tr3376; + case 117: goto tr3377; case 778: goto tr20; case 827: goto st149; - case 1034: goto tr3348; - case 1083: goto tr3349; + case 1034: goto tr3359; + case 1083: goto tr3360; } if ( _widec < 48 ) { if ( 45 <= _widec && _widec <= 47 ) - goto tr3316; + goto tr3327; } else if ( _widec > 57 ) { if ( _widec > 90 ) { if ( 98 <= _widec && _widec <= 122 ) - goto tr3316; + goto tr3327; } else if ( _widec >= 64 ) - goto tr3316; + goto tr3327; } else - goto tr3351; - goto tr3350; -tr3369: + goto tr3362; + goto tr3361; +tr3380: cs = 150; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } goto _again; @@ -21148,18 +21157,18 @@ case 157: goto tr649; goto tr639; tr649: - { p--; {stack[top++] = 1115; goto st305;} } - goto st1115; + { p--; {stack[top++] = 1124; goto st305;} } + goto st1124; tr735: - { p--; {stack[top++] = 1115; goto st293;} } - goto st1115; + { p--; {stack[top++] = 1124; goto st293;} } + goto st1124; tr738: - { p--; {stack[top++] = 1115; goto st284;} } - goto st1115; -st1115: + { p--; {stack[top++] = 1124; goto st284;} } + goto st1124; +st1124: if ( ++p == pe ) - goto _test_eof1115; -case 1115: + goto _test_eof1124; +case 1124: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -21173,41 +21182,41 @@ case 1115: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3368; - case 32: goto tr3368; - case 36: goto tr3369; - case 40: goto tr3370; - case 41: goto tr3371; - case 42: goto tr3372; - case 92: goto tr3372; - case 95: goto tr3372; - case 778: goto tr3373; - case 827: goto tr3374; - case 1034: goto tr3375; - case 1083: goto tr3376; + case 9: goto tr3379; + case 32: goto tr3379; + case 36: goto tr3380; + case 40: goto tr3381; + case 41: goto tr3382; + case 42: goto tr3383; + case 92: goto tr3383; + case 95: goto tr3383; + case 778: goto tr3384; + case 827: goto tr3385; + case 1034: goto tr3386; + case 1083: goto tr3387; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr3372; + goto tr3383; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr3372; + goto tr3383; } else - goto tr3372; - goto tr3367; -tr3316: + goto tr3383; + goto tr3378; +tr3327: { s->dname = s->r_owner; s->r_owner_length = 0; } { p--; {stack[top++] = 158; goto st263;} } goto st158; -tr3372: +tr3383: cs = 158; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } { @@ -21394,7 +21403,7 @@ tr22: { s->line_counter++; } - goto st1116; + goto st1125; tr718: { s->line_counter++; @@ -21415,15 +21424,15 @@ tr718: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1116; goto _out;} + {p++; cs = 1125; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1116; goto _out;} + p--; {p++; cs = 1125; goto _out;} } } - goto st1116; + goto st1125; tr743: { s->r_owner_length = s->dname_tmp_length; @@ -21447,16 +21456,16 @@ tr743: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1116; goto _out;} + {p++; cs = 1125; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1116; goto _out;} + p--; {p++; cs = 1125; goto _out;} } } - goto st1116; -tr3317: + goto st1125; +tr3328: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -21466,8 +21475,8 @@ tr3317: { s->line_counter++; } - goto st1116; -tr3379: + goto st1125; +tr3390: { s->line_counter++; } @@ -21477,13 +21486,13 @@ tr3379: p--; {goto st261;} } } - goto st1116; -tr3375: - cs = 1116; + goto st1125; +tr3386: + cs = 1125; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } { @@ -21496,7 +21505,7 @@ tr3375: s->line_counter++; } goto _again; -tr3383: +tr3394: { if (rdata_tail - s->r_data > UINT16_MAX) { WARN(ZS_RDATA_OVERFLOW); @@ -21513,12 +21522,12 @@ tr3383: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1116; goto _out;} + {p++; cs = 1125; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1116; goto _out;} + p--; {p++; cs = 1125; goto _out;} } } { @@ -21530,8 +21539,8 @@ tr3383: p--; {goto st261;} } } - goto st1116; -tr3407: + goto st1125; +tr3418: { s->line_counter++; } @@ -21551,12 +21560,12 @@ tr3407: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1116; goto _out;} + {p++; cs = 1125; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1116; goto _out;} + p--; {p++; cs = 1125; goto _out;} } } { @@ -21565,11 +21574,11 @@ tr3407: p--; {goto st261;} } } - goto st1116; -st1116: + goto st1125; +st1125: if ( ++p == pe ) - goto _test_eof1116; -case 1116: + goto _test_eof1125; +case 1125: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -21583,62 +21592,62 @@ case 1116: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3312; - case 32: goto tr3312; + case 9: goto tr3323; + case 32: goto tr3323; case 36: goto st150; - case 40: goto tr3377; - case 41: goto tr3378; - case 42: goto tr3316; - case 65: goto tr3352; - case 67: goto tr3353; - case 68: goto tr3354; - case 69: goto tr3355; - case 72: goto tr3356; - case 73: goto tr3357; - case 75: goto tr3358; - case 76: goto tr3359; - case 77: goto tr3360; - case 78: goto tr3361; - case 80: goto tr3362; - case 82: goto tr3363; - case 83: goto tr3364; - case 84: goto tr3365; - case 85: goto tr3366; - case 92: goto tr3316; - case 95: goto tr3316; - case 97: goto tr3352; - case 99: goto tr3353; - case 100: goto tr3354; - case 101: goto tr3355; - case 104: goto tr3356; - case 105: goto tr3357; - case 107: goto tr3358; - case 108: goto tr3359; - case 109: goto tr3360; - case 110: goto tr3361; - case 112: goto tr3362; - case 114: goto tr3363; - case 115: goto tr3364; - case 116: goto tr3365; - case 117: goto tr3366; + case 40: goto tr3388; + case 41: goto tr3389; + case 42: goto tr3327; + case 65: goto tr3363; + case 67: goto tr3364; + case 68: goto tr3365; + case 69: goto tr3366; + case 72: goto tr3367; + case 73: goto tr3368; + case 75: goto tr3369; + case 76: goto tr3370; + case 77: goto tr3371; + case 78: goto tr3372; + case 80: goto tr3373; + case 82: goto tr3374; + case 83: goto tr3375; + case 84: goto tr3376; + case 85: goto tr3377; + case 92: goto tr3327; + case 95: goto tr3327; + case 97: goto tr3363; + case 99: goto tr3364; + case 100: goto tr3365; + case 101: goto tr3366; + case 104: goto tr3367; + case 105: goto tr3368; + case 107: goto tr3369; + case 108: goto tr3370; + case 109: goto tr3371; + case 110: goto tr3372; + case 112: goto tr3373; + case 114: goto tr3374; + case 115: goto tr3375; + case 116: goto tr3376; + case 117: goto tr3377; case 778: goto tr20; case 827: goto st149; - case 1034: goto tr3379; - case 1083: goto tr3318; + case 1034: goto tr3390; + case 1083: goto tr3329; } if ( _widec < 48 ) { if ( 45 <= _widec && _widec <= 47 ) - goto tr3316; + goto tr3327; } else if ( _widec > 57 ) { if ( _widec > 90 ) { if ( 98 <= _widec && _widec <= 122 ) - goto tr3316; + goto tr3327; } else if ( _widec >= 64 ) - goto tr3316; + goto tr3327; } else - goto tr3351; - goto tr3350; -tr3351: + goto tr3362; + goto tr3361; +tr3362: { s->number64 = 0; } @@ -22156,7 +22165,7 @@ case 167: if ( 896 <= _widec && _widec <= 1151 ) goto st167; goto tr36; -tr3333: +tr3344: { s->r_class = s->default_class; } @@ -22166,7 +22175,7 @@ tr3333: } { p--; {stack[top++] = 168; goto st263;} } goto st168; -tr3352: +tr3363: { s->r_class = s->default_class; } @@ -22381,76 +22390,76 @@ tr101: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 170; goto st616;} + {stack[top++] = 170; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 170; goto st618;} + {stack[top++] = 170; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 170; goto st620;} + {stack[top++] = 170; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 170; goto st652;} + {stack[top++] = 170; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 170; goto st657;} + {stack[top++] = 170; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 170; goto st662;} + {stack[top++] = 170; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 170; goto st667;} + {stack[top++] = 170; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 170; goto st671;} + {stack[top++] = 170; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 170; goto st673;} + {stack[top++] = 170; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 170; goto st728;} + {stack[top++] = 170; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 170; goto st739;} + {stack[top++] = 170; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 170; goto st756;} + {stack[top++] = 170; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 170; goto st767;} + {stack[top++] = 170; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 170; goto st778;} + {stack[top++] = 170; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 170; goto st791;} + {stack[top++] = 170; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 170; goto st801;} + {stack[top++] = 170; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 170; goto st840;} + {stack[top++] = 170; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 170; goto st994;} + {stack[top++] = 170; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 170; goto st997;} + {stack[top++] = 170; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 170; goto st1008;} + {stack[top++] = 170; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 170; goto st1010;} + {stack[top++] = 170; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 170; goto st1039;} + {stack[top++] = 170; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 170; goto st1052;} + {stack[top++] = 170; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 170; goto st1070;} + {stack[top++] = 170; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 170; goto st1065;} + {stack[top++] = 170; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 170; goto st1083;} + {stack[top++] = 170; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 170; goto st1089;} + {stack[top++] = 170; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 170; goto st1095;} + {stack[top++] = 170; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 170; goto st1103;} + {stack[top++] = 170; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -22597,76 +22606,76 @@ tr92: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1117; goto st616;} + {stack[top++] = 1126; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1117; goto st618;} + {stack[top++] = 1126; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1117; goto st620;} + {stack[top++] = 1126; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1117; goto st652;} + {stack[top++] = 1126; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1117; goto st657;} + {stack[top++] = 1126; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1117; goto st662;} + {stack[top++] = 1126; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1117; goto st667;} + {stack[top++] = 1126; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1117; goto st671;} + {stack[top++] = 1126; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1117; goto st673;} + {stack[top++] = 1126; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1117; goto st728;} + {stack[top++] = 1126; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1117; goto st739;} + {stack[top++] = 1126; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1117; goto st756;} + {stack[top++] = 1126; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1117; goto st767;} + {stack[top++] = 1126; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1117; goto st778;} + {stack[top++] = 1126; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1117; goto st791;} + {stack[top++] = 1126; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1117; goto st801;} + {stack[top++] = 1126; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1117; goto st840;} + {stack[top++] = 1126; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1117; goto st994;} + {stack[top++] = 1126; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1117; goto st997;} + {stack[top++] = 1126; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1117; goto st1008;} + {stack[top++] = 1126; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1117; goto st1010;} + {stack[top++] = 1126; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1117; goto st1039;} + {stack[top++] = 1126; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1117; goto st1052;} + {stack[top++] = 1126; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1117; goto st1070;} + {stack[top++] = 1126; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1117; goto st1065;} + {stack[top++] = 1126; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1117; goto st1083;} + {stack[top++] = 1126; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1117; goto st1089;} + {stack[top++] = 1126; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1117; goto st1095;} + {stack[top++] = 1126; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1117; goto st1103;} + {stack[top++] = 1126; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -22688,93 +22697,93 @@ tr92: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1117; goto _out;} + {p++; cs = 1126; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1117; goto _out;} + p--; {p++; cs = 1126; goto _out;} } } { s->line_counter++; } - goto st1117; + goto st1126; tr118: { p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1117; goto st616;} + {stack[top++] = 1126; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1117; goto st618;} + {stack[top++] = 1126; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1117; goto st620;} + {stack[top++] = 1126; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1117; goto st652;} + {stack[top++] = 1126; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1117; goto st657;} + {stack[top++] = 1126; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1117; goto st662;} + {stack[top++] = 1126; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1117; goto st667;} + {stack[top++] = 1126; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1117; goto st671;} + {stack[top++] = 1126; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1117; goto st673;} + {stack[top++] = 1126; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1117; goto st728;} + {stack[top++] = 1126; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1117; goto st739;} + {stack[top++] = 1126; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1117; goto st756;} + {stack[top++] = 1126; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1117; goto st767;} + {stack[top++] = 1126; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1117; goto st778;} + {stack[top++] = 1126; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1117; goto st791;} + {stack[top++] = 1126; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1117; goto st801;} + {stack[top++] = 1126; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1117; goto st840;} + {stack[top++] = 1126; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1117; goto st994;} + {stack[top++] = 1126; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1117; goto st997;} + {stack[top++] = 1126; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1117; goto st1008;} + {stack[top++] = 1126; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1117; goto st1010;} + {stack[top++] = 1126; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1117; goto st1039;} + {stack[top++] = 1126; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1117; goto st1052;} + {stack[top++] = 1126; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1117; goto st1070;} + {stack[top++] = 1126; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1117; goto st1065;} + {stack[top++] = 1126; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1117; goto st1083;} + {stack[top++] = 1126; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1117; goto st1089;} + {stack[top++] = 1126; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1117; goto st1095;} + {stack[top++] = 1126; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1117; goto st1103;} + {stack[top++] = 1126; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -22783,7 +22792,7 @@ tr118: { s->line_counter++; } - goto st1117; + goto st1126; tr707: { s->r_type = KNOT_RRTYPE_A; } { @@ -22793,76 +22802,76 @@ tr707: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1117; goto st616;} + {stack[top++] = 1126; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1117; goto st618;} + {stack[top++] = 1126; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1117; goto st620;} + {stack[top++] = 1126; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1117; goto st652;} + {stack[top++] = 1126; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1117; goto st657;} + {stack[top++] = 1126; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1117; goto st662;} + {stack[top++] = 1126; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1117; goto st667;} + {stack[top++] = 1126; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1117; goto st671;} + {stack[top++] = 1126; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1117; goto st673;} + {stack[top++] = 1126; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1117; goto st728;} + {stack[top++] = 1126; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1117; goto st739;} + {stack[top++] = 1126; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1117; goto st756;} + {stack[top++] = 1126; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1117; goto st767;} + {stack[top++] = 1126; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1117; goto st778;} + {stack[top++] = 1126; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1117; goto st791;} + {stack[top++] = 1126; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1117; goto st801;} + {stack[top++] = 1126; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1117; goto st840;} + {stack[top++] = 1126; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1117; goto st994;} + {stack[top++] = 1126; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1117; goto st997;} + {stack[top++] = 1126; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1117; goto st1008;} + {stack[top++] = 1126; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1117; goto st1010;} + {stack[top++] = 1126; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1117; goto st1039;} + {stack[top++] = 1126; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1117; goto st1052;} + {stack[top++] = 1126; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1117; goto st1070;} + {stack[top++] = 1126; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1117; goto st1065;} + {stack[top++] = 1126; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1117; goto st1083;} + {stack[top++] = 1126; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1117; goto st1089;} + {stack[top++] = 1126; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1117; goto st1095;} + {stack[top++] = 1126; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1117; goto st1103;} + {stack[top++] = 1126; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -22884,22 +22893,22 @@ tr707: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1117; goto _out;} + {p++; cs = 1126; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1117; goto _out;} + p--; {p++; cs = 1126; goto _out;} } } { s->line_counter++; } - goto st1117; -st1117: + goto st1126; +st1126: if ( ++p == pe ) - goto _test_eof1117; -case 1117: + goto _test_eof1126; +case 1126: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -22913,27 +22922,27 @@ case 1117: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3380; - case 32: goto tr3380; + case 9: goto tr3391; + case 32: goto tr3391; case 36: goto st150; - case 40: goto tr3381; - case 41: goto tr3382; - case 42: goto tr3316; - case 92: goto tr3316; - case 95: goto tr3316; + case 40: goto tr3392; + case 41: goto tr3393; + case 42: goto tr3327; + case 92: goto tr3327; + case 95: goto tr3327; case 778: goto tr83; case 827: goto st8; - case 1034: goto tr3383; - case 1083: goto tr3384; + case 1034: goto tr3394; + case 1083: goto tr3395; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr3316; + goto tr3327; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr3316; + goto tr3327; } else - goto tr3316; + goto tr3327; goto tr739; tr716: { @@ -22982,7 +22991,7 @@ tr742: s->multiline = false; } goto st172; -tr3380: +tr3391: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -22990,7 +22999,7 @@ tr3380: } } goto st172; -tr3381: +tr3392: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -23005,7 +23014,7 @@ tr3381: } } goto st172; -tr3382: +tr3393: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -23084,7 +23093,7 @@ tr744: s->r_owner_length = s->dname_tmp_length; } goto st173; -tr3384: +tr3395: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -23133,76 +23142,76 @@ tr708: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 174; goto st616;} + {stack[top++] = 174; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 174; goto st618;} + {stack[top++] = 174; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 174; goto st620;} + {stack[top++] = 174; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 174; goto st652;} + {stack[top++] = 174; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 174; goto st657;} + {stack[top++] = 174; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 174; goto st662;} + {stack[top++] = 174; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 174; goto st667;} + {stack[top++] = 174; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 174; goto st671;} + {stack[top++] = 174; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 174; goto st673;} + {stack[top++] = 174; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 174; goto st728;} + {stack[top++] = 174; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 174; goto st739;} + {stack[top++] = 174; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 174; goto st756;} + {stack[top++] = 174; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 174; goto st767;} + {stack[top++] = 174; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 174; goto st778;} + {stack[top++] = 174; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 174; goto st791;} + {stack[top++] = 174; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 174; goto st801;} + {stack[top++] = 174; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 174; goto st840;} + {stack[top++] = 174; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 174; goto st994;} + {stack[top++] = 174; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 174; goto st997;} + {stack[top++] = 174; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 174; goto st1008;} + {stack[top++] = 174; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 174; goto st1010;} + {stack[top++] = 174; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 174; goto st1039;} + {stack[top++] = 174; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 174; goto st1052;} + {stack[top++] = 174; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 174; goto st1070;} + {stack[top++] = 174; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 174; goto st1065;} + {stack[top++] = 174; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 174; goto st1083;} + {stack[top++] = 174; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 174; goto st1089;} + {stack[top++] = 174; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 174; goto st1095;} + {stack[top++] = 174; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 174; goto st1103;} + {stack[top++] = 174; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -23214,76 +23223,76 @@ tr93: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 174; goto st616;} + {stack[top++] = 174; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 174; goto st618;} + {stack[top++] = 174; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 174; goto st620;} + {stack[top++] = 174; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 174; goto st652;} + {stack[top++] = 174; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 174; goto st657;} + {stack[top++] = 174; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 174; goto st662;} + {stack[top++] = 174; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 174; goto st667;} + {stack[top++] = 174; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 174; goto st671;} + {stack[top++] = 174; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 174; goto st673;} + {stack[top++] = 174; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 174; goto st728;} + {stack[top++] = 174; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 174; goto st739;} + {stack[top++] = 174; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 174; goto st756;} + {stack[top++] = 174; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 174; goto st767;} + {stack[top++] = 174; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 174; goto st778;} + {stack[top++] = 174; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 174; goto st791;} + {stack[top++] = 174; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 174; goto st801;} + {stack[top++] = 174; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 174; goto st840;} + {stack[top++] = 174; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 174; goto st994;} + {stack[top++] = 174; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 174; goto st997;} + {stack[top++] = 174; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 174; goto st1008;} + {stack[top++] = 174; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 174; goto st1010;} + {stack[top++] = 174; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 174; goto st1039;} + {stack[top++] = 174; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 174; goto st1052;} + {stack[top++] = 174; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 174; goto st1070;} + {stack[top++] = 174; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 174; goto st1065;} + {stack[top++] = 174; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 174; goto st1083;} + {stack[top++] = 174; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 174; goto st1089;} + {stack[top++] = 174; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 174; goto st1095;} + {stack[top++] = 174; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 174; goto st1103;} + {stack[top++] = 174; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -23390,76 +23399,76 @@ tr709: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1118; goto st616;} + {stack[top++] = 1127; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1118; goto st618;} + {stack[top++] = 1127; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1118; goto st620;} + {stack[top++] = 1127; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1118; goto st652;} + {stack[top++] = 1127; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1118; goto st657;} + {stack[top++] = 1127; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1118; goto st662;} + {stack[top++] = 1127; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1118; goto st667;} + {stack[top++] = 1127; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1118; goto st671;} + {stack[top++] = 1127; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1118; goto st673;} + {stack[top++] = 1127; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1118; goto st728;} + {stack[top++] = 1127; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1118; goto st739;} + {stack[top++] = 1127; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1118; goto st756;} + {stack[top++] = 1127; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1118; goto st767;} + {stack[top++] = 1127; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1118; goto st778;} + {stack[top++] = 1127; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1118; goto st791;} + {stack[top++] = 1127; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1118; goto st801;} + {stack[top++] = 1127; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1118; goto st840;} + {stack[top++] = 1127; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1118; goto st994;} + {stack[top++] = 1127; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1118; goto st997;} + {stack[top++] = 1127; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1118; goto st1008;} + {stack[top++] = 1127; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1118; goto st1010;} + {stack[top++] = 1127; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1118; goto st1039;} + {stack[top++] = 1127; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1118; goto st1052;} + {stack[top++] = 1127; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1118; goto st1070;} + {stack[top++] = 1127; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1118; goto st1065;} + {stack[top++] = 1127; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1118; goto st1083;} + {stack[top++] = 1127; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1118; goto st1089;} + {stack[top++] = 1127; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1118; goto st1095;} + {stack[top++] = 1127; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1118; goto st1103;} + {stack[top++] = 1127; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -23481,15 +23490,15 @@ tr709: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1118; goto _out;} + {p++; cs = 1127; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1118; goto _out;} + p--; {p++; cs = 1127; goto _out;} } } - goto st1118; + goto st1127; tr714: { s->line_counter++; @@ -23498,76 +23507,76 @@ tr714: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1118; goto st616;} + {stack[top++] = 1127; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1118; goto st618;} + {stack[top++] = 1127; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1118; goto st620;} + {stack[top++] = 1127; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1118; goto st652;} + {stack[top++] = 1127; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1118; goto st657;} + {stack[top++] = 1127; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1118; goto st662;} + {stack[top++] = 1127; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1118; goto st667;} + {stack[top++] = 1127; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1118; goto st671;} + {stack[top++] = 1127; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1118; goto st673;} + {stack[top++] = 1127; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1118; goto st728;} + {stack[top++] = 1127; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1118; goto st739;} + {stack[top++] = 1127; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1118; goto st756;} + {stack[top++] = 1127; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1118; goto st767;} + {stack[top++] = 1127; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1118; goto st778;} + {stack[top++] = 1127; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1118; goto st791;} + {stack[top++] = 1127; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1118; goto st801;} + {stack[top++] = 1127; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1118; goto st840;} + {stack[top++] = 1127; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1118; goto st994;} + {stack[top++] = 1127; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1118; goto st997;} + {stack[top++] = 1127; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1118; goto st1008;} + {stack[top++] = 1127; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1118; goto st1010;} + {stack[top++] = 1127; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1118; goto st1039;} + {stack[top++] = 1127; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1118; goto st1052;} + {stack[top++] = 1127; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1118; goto st1070;} + {stack[top++] = 1127; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1118; goto st1065;} + {stack[top++] = 1127; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1118; goto st1083;} + {stack[top++] = 1127; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1118; goto st1089;} + {stack[top++] = 1127; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1118; goto st1095;} + {stack[top++] = 1127; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1118; goto st1103;} + {stack[top++] = 1127; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -23589,19 +23598,19 @@ tr714: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1118; goto _out;} + {p++; cs = 1127; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1118; goto _out;} + p--; {p++; cs = 1127; goto _out;} } } - goto st1118; -st1118: + goto st1127; +st1127: if ( ++p == pe ) - goto _test_eof1118; -case 1118: + goto _test_eof1127; +case 1127: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -23619,23 +23628,23 @@ case 1118: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr3385; - case 32: goto tr3385; - case 36: goto tr3320; - case 40: goto tr3386; - case 41: goto tr3387; - case 42: goto tr3323; + case 9: goto tr3396; + case 32: goto tr3396; + case 36: goto tr3331; + case 40: goto tr3397; + case 41: goto tr3398; + case 42: goto tr3334; case 58: goto tr69; - case 92: goto tr3324; - case 95: goto tr3323; + case 92: goto tr3335; + case 95: goto tr3334; case 1802: goto tr83; case 1851: goto st8; - case 2058: goto tr3383; - case 2107: goto tr3388; + case 2058: goto tr3394; + case 2107: goto tr3399; case 2314: goto tr92; case 2363: goto tr93; - case 2570: goto tr3383; - case 2619: goto tr3389; + case 2570: goto tr3394; + case 2619: goto tr3400; } if ( _widec < 60 ) { if ( _widec < 11 ) { @@ -23643,19 +23652,19 @@ case 1118: goto tr69; } else if ( _widec > 44 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr3323; + goto tr3334; } else goto tr69; } else if ( _widec > 63 ) { if ( _widec < 91 ) { if ( 64 <= _widec && _widec <= 90 ) - goto tr3323; + goto tr3334; } else if ( _widec > 96 ) { if ( _widec > 122 ) { if ( 123 <= _widec ) goto tr69; } else if ( _widec >= 97 ) - goto tr3323; + goto tr3334; } else goto tr69; } else @@ -23687,76 +23696,76 @@ tr699: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 176; goto st616;} + {stack[top++] = 176; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 176; goto st618;} + {stack[top++] = 176; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 176; goto st620;} + {stack[top++] = 176; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 176; goto st652;} + {stack[top++] = 176; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 176; goto st657;} + {stack[top++] = 176; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 176; goto st662;} + {stack[top++] = 176; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 176; goto st667;} + {stack[top++] = 176; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 176; goto st671;} + {stack[top++] = 176; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 176; goto st673;} + {stack[top++] = 176; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 176; goto st728;} + {stack[top++] = 176; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 176; goto st739;} + {stack[top++] = 176; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 176; goto st756;} + {stack[top++] = 176; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 176; goto st767;} + {stack[top++] = 176; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 176; goto st778;} + {stack[top++] = 176; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 176; goto st791;} + {stack[top++] = 176; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 176; goto st801;} + {stack[top++] = 176; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 176; goto st840;} + {stack[top++] = 176; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 176; goto st994;} + {stack[top++] = 176; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 176; goto st997;} + {stack[top++] = 176; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 176; goto st1008;} + {stack[top++] = 176; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 176; goto st1010;} + {stack[top++] = 176; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 176; goto st1039;} + {stack[top++] = 176; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 176; goto st1052;} + {stack[top++] = 176; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 176; goto st1070;} + {stack[top++] = 176; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 176; goto st1065;} + {stack[top++] = 176; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 176; goto st1083;} + {stack[top++] = 176; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 176; goto st1089;} + {stack[top++] = 176; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 176; goto st1095;} + {stack[top++] = 176; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 176; goto st1103;} + {stack[top++] = 176; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -23778,83 +23787,83 @@ tr692: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 176; goto st616;} + {stack[top++] = 176; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 176; goto st618;} + {stack[top++] = 176; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 176; goto st620;} + {stack[top++] = 176; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 176; goto st652;} + {stack[top++] = 176; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 176; goto st657;} + {stack[top++] = 176; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 176; goto st662;} + {stack[top++] = 176; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 176; goto st667;} + {stack[top++] = 176; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 176; goto st671;} + {stack[top++] = 176; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 176; goto st673;} + {stack[top++] = 176; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 176; goto st728;} + {stack[top++] = 176; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 176; goto st739;} + {stack[top++] = 176; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 176; goto st756;} + {stack[top++] = 176; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 176; goto st767;} + {stack[top++] = 176; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 176; goto st778;} + {stack[top++] = 176; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 176; goto st791;} + {stack[top++] = 176; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 176; goto st801;} + {stack[top++] = 176; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 176; goto st840;} + {stack[top++] = 176; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 176; goto st994;} + {stack[top++] = 176; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 176; goto st997;} + {stack[top++] = 176; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 176; goto st1008;} + {stack[top++] = 176; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 176; goto st1010;} + {stack[top++] = 176; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 176; goto st1039;} + {stack[top++] = 176; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 176; goto st1052;} + {stack[top++] = 176; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 176; goto st1070;} + {stack[top++] = 176; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 176; goto st1065;} + {stack[top++] = 176; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 176; goto st1083;} + {stack[top++] = 176; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 176; goto st1089;} + {stack[top++] = 176; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 176; goto st1095;} + {stack[top++] = 176; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 176; goto st1103;} + {stack[top++] = 176; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} } } goto st176; -tr3385: +tr3396: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -23862,7 +23871,7 @@ tr3385: } } goto st176; -tr3386: +tr3397: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -23877,7 +23886,7 @@ tr3386: } } goto st176; -tr3387: +tr3398: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -23981,76 +23990,76 @@ tr102: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 177; goto st616;} + {stack[top++] = 177; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 177; goto st618;} + {stack[top++] = 177; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 177; goto st620;} + {stack[top++] = 177; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 177; goto st652;} + {stack[top++] = 177; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 177; goto st657;} + {stack[top++] = 177; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 177; goto st662;} + {stack[top++] = 177; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 177; goto st667;} + {stack[top++] = 177; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 177; goto st671;} + {stack[top++] = 177; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 177; goto st673;} + {stack[top++] = 177; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 177; goto st728;} + {stack[top++] = 177; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 177; goto st739;} + {stack[top++] = 177; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 177; goto st756;} + {stack[top++] = 177; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 177; goto st767;} + {stack[top++] = 177; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 177; goto st778;} + {stack[top++] = 177; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 177; goto st791;} + {stack[top++] = 177; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 177; goto st801;} + {stack[top++] = 177; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 177; goto st840;} + {stack[top++] = 177; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 177; goto st994;} + {stack[top++] = 177; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 177; goto st997;} + {stack[top++] = 177; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 177; goto st1008;} + {stack[top++] = 177; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 177; goto st1010;} + {stack[top++] = 177; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 177; goto st1039;} + {stack[top++] = 177; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 177; goto st1052;} + {stack[top++] = 177; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 177; goto st1070;} + {stack[top++] = 177; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 177; goto st1065;} + {stack[top++] = 177; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 177; goto st1083;} + {stack[top++] = 177; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 177; goto st1089;} + {stack[top++] = 177; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 177; goto st1095;} + {stack[top++] = 177; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 177; goto st1103;} + {stack[top++] = 177; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24103,76 +24112,76 @@ tr103: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 178; goto st616;} + {stack[top++] = 178; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 178; goto st618;} + {stack[top++] = 178; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 178; goto st620;} + {stack[top++] = 178; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 178; goto st652;} + {stack[top++] = 178; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 178; goto st657;} + {stack[top++] = 178; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 178; goto st662;} + {stack[top++] = 178; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 178; goto st667;} + {stack[top++] = 178; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 178; goto st671;} + {stack[top++] = 178; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 178; goto st673;} + {stack[top++] = 178; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 178; goto st728;} + {stack[top++] = 178; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 178; goto st739;} + {stack[top++] = 178; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 178; goto st756;} + {stack[top++] = 178; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 178; goto st767;} + {stack[top++] = 178; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 178; goto st778;} + {stack[top++] = 178; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 178; goto st791;} + {stack[top++] = 178; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 178; goto st801;} + {stack[top++] = 178; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 178; goto st840;} + {stack[top++] = 178; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 178; goto st994;} + {stack[top++] = 178; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 178; goto st997;} + {stack[top++] = 178; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 178; goto st1008;} + {stack[top++] = 178; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 178; goto st1010;} + {stack[top++] = 178; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 178; goto st1039;} + {stack[top++] = 178; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 178; goto st1052;} + {stack[top++] = 178; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 178; goto st1070;} + {stack[top++] = 178; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 178; goto st1065;} + {stack[top++] = 178; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 178; goto st1083;} + {stack[top++] = 178; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 178; goto st1089;} + {stack[top++] = 178; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 178; goto st1095;} + {stack[top++] = 178; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 178; goto st1103;} + {stack[top++] = 178; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24223,76 +24232,76 @@ tr104: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 179; goto st616;} + {stack[top++] = 179; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 179; goto st618;} + {stack[top++] = 179; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 179; goto st620;} + {stack[top++] = 179; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 179; goto st652;} + {stack[top++] = 179; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 179; goto st657;} + {stack[top++] = 179; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 179; goto st662;} + {stack[top++] = 179; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 179; goto st667;} + {stack[top++] = 179; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 179; goto st671;} + {stack[top++] = 179; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 179; goto st673;} + {stack[top++] = 179; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 179; goto st728;} + {stack[top++] = 179; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 179; goto st739;} + {stack[top++] = 179; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 179; goto st756;} + {stack[top++] = 179; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 179; goto st767;} + {stack[top++] = 179; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 179; goto st778;} + {stack[top++] = 179; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 179; goto st791;} + {stack[top++] = 179; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 179; goto st801;} + {stack[top++] = 179; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 179; goto st840;} + {stack[top++] = 179; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 179; goto st994;} + {stack[top++] = 179; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 179; goto st997;} + {stack[top++] = 179; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 179; goto st1008;} + {stack[top++] = 179; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 179; goto st1010;} + {stack[top++] = 179; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 179; goto st1039;} + {stack[top++] = 179; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 179; goto st1052;} + {stack[top++] = 179; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 179; goto st1070;} + {stack[top++] = 179; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 179; goto st1065;} + {stack[top++] = 179; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 179; goto st1083;} + {stack[top++] = 179; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 179; goto st1089;} + {stack[top++] = 179; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 179; goto st1095;} + {stack[top++] = 179; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 179; goto st1103;} + {stack[top++] = 179; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24339,76 +24348,76 @@ tr105: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 180; goto st616;} + {stack[top++] = 180; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 180; goto st618;} + {stack[top++] = 180; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 180; goto st620;} + {stack[top++] = 180; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 180; goto st652;} + {stack[top++] = 180; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 180; goto st657;} + {stack[top++] = 180; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 180; goto st662;} + {stack[top++] = 180; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 180; goto st667;} + {stack[top++] = 180; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 180; goto st671;} + {stack[top++] = 180; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 180; goto st673;} + {stack[top++] = 180; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 180; goto st728;} + {stack[top++] = 180; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 180; goto st739;} + {stack[top++] = 180; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 180; goto st756;} + {stack[top++] = 180; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 180; goto st767;} + {stack[top++] = 180; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 180; goto st778;} + {stack[top++] = 180; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 180; goto st791;} + {stack[top++] = 180; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 180; goto st801;} + {stack[top++] = 180; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 180; goto st840;} + {stack[top++] = 180; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 180; goto st994;} + {stack[top++] = 180; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 180; goto st997;} + {stack[top++] = 180; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 180; goto st1008;} + {stack[top++] = 180; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 180; goto st1010;} + {stack[top++] = 180; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 180; goto st1039;} + {stack[top++] = 180; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 180; goto st1052;} + {stack[top++] = 180; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 180; goto st1070;} + {stack[top++] = 180; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 180; goto st1065;} + {stack[top++] = 180; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 180; goto st1083;} + {stack[top++] = 180; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 180; goto st1089;} + {stack[top++] = 180; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 180; goto st1095;} + {stack[top++] = 180; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 180; goto st1103;} + {stack[top++] = 180; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24455,76 +24464,76 @@ tr106: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 181; goto st616;} + {stack[top++] = 181; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 181; goto st618;} + {stack[top++] = 181; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 181; goto st620;} + {stack[top++] = 181; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 181; goto st652;} + {stack[top++] = 181; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 181; goto st657;} + {stack[top++] = 181; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 181; goto st662;} + {stack[top++] = 181; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 181; goto st667;} + {stack[top++] = 181; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 181; goto st671;} + {stack[top++] = 181; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 181; goto st673;} + {stack[top++] = 181; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 181; goto st728;} + {stack[top++] = 181; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 181; goto st739;} + {stack[top++] = 181; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 181; goto st756;} + {stack[top++] = 181; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 181; goto st767;} + {stack[top++] = 181; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 181; goto st778;} + {stack[top++] = 181; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 181; goto st791;} + {stack[top++] = 181; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 181; goto st801;} + {stack[top++] = 181; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 181; goto st840;} + {stack[top++] = 181; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 181; goto st994;} + {stack[top++] = 181; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 181; goto st997;} + {stack[top++] = 181; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 181; goto st1008;} + {stack[top++] = 181; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 181; goto st1010;} + {stack[top++] = 181; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 181; goto st1039;} + {stack[top++] = 181; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 181; goto st1052;} + {stack[top++] = 181; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 181; goto st1070;} + {stack[top++] = 181; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 181; goto st1065;} + {stack[top++] = 181; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 181; goto st1083;} + {stack[top++] = 181; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 181; goto st1089;} + {stack[top++] = 181; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 181; goto st1095;} + {stack[top++] = 181; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 181; goto st1103;} + {stack[top++] = 181; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24573,76 +24582,76 @@ tr107: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 182; goto st616;} + {stack[top++] = 182; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 182; goto st618;} + {stack[top++] = 182; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 182; goto st620;} + {stack[top++] = 182; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 182; goto st652;} + {stack[top++] = 182; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 182; goto st657;} + {stack[top++] = 182; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 182; goto st662;} + {stack[top++] = 182; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 182; goto st667;} + {stack[top++] = 182; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 182; goto st671;} + {stack[top++] = 182; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 182; goto st673;} + {stack[top++] = 182; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 182; goto st728;} + {stack[top++] = 182; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 182; goto st739;} + {stack[top++] = 182; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 182; goto st756;} + {stack[top++] = 182; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 182; goto st767;} + {stack[top++] = 182; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 182; goto st778;} + {stack[top++] = 182; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 182; goto st791;} + {stack[top++] = 182; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 182; goto st801;} + {stack[top++] = 182; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 182; goto st840;} + {stack[top++] = 182; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 182; goto st994;} + {stack[top++] = 182; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 182; goto st997;} + {stack[top++] = 182; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 182; goto st1008;} + {stack[top++] = 182; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 182; goto st1010;} + {stack[top++] = 182; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 182; goto st1039;} + {stack[top++] = 182; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 182; goto st1052;} + {stack[top++] = 182; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 182; goto st1070;} + {stack[top++] = 182; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 182; goto st1065;} + {stack[top++] = 182; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 182; goto st1083;} + {stack[top++] = 182; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 182; goto st1089;} + {stack[top++] = 182; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 182; goto st1095;} + {stack[top++] = 182; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 182; goto st1103;} + {stack[top++] = 182; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24691,76 +24700,76 @@ tr108: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 183; goto st616;} + {stack[top++] = 183; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 183; goto st618;} + {stack[top++] = 183; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 183; goto st620;} + {stack[top++] = 183; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 183; goto st652;} + {stack[top++] = 183; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 183; goto st657;} + {stack[top++] = 183; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 183; goto st662;} + {stack[top++] = 183; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 183; goto st667;} + {stack[top++] = 183; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 183; goto st671;} + {stack[top++] = 183; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 183; goto st673;} + {stack[top++] = 183; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 183; goto st728;} + {stack[top++] = 183; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 183; goto st739;} + {stack[top++] = 183; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 183; goto st756;} + {stack[top++] = 183; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 183; goto st767;} + {stack[top++] = 183; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 183; goto st778;} + {stack[top++] = 183; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 183; goto st791;} + {stack[top++] = 183; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 183; goto st801;} + {stack[top++] = 183; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 183; goto st840;} + {stack[top++] = 183; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 183; goto st994;} + {stack[top++] = 183; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 183; goto st997;} + {stack[top++] = 183; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 183; goto st1008;} + {stack[top++] = 183; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 183; goto st1010;} + {stack[top++] = 183; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 183; goto st1039;} + {stack[top++] = 183; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 183; goto st1052;} + {stack[top++] = 183; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 183; goto st1070;} + {stack[top++] = 183; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 183; goto st1065;} + {stack[top++] = 183; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 183; goto st1083;} + {stack[top++] = 183; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 183; goto st1089;} + {stack[top++] = 183; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 183; goto st1095;} + {stack[top++] = 183; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 183; goto st1103;} + {stack[top++] = 183; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24811,76 +24820,76 @@ tr109: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 184; goto st616;} + {stack[top++] = 184; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 184; goto st618;} + {stack[top++] = 184; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 184; goto st620;} + {stack[top++] = 184; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 184; goto st652;} + {stack[top++] = 184; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 184; goto st657;} + {stack[top++] = 184; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 184; goto st662;} + {stack[top++] = 184; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 184; goto st667;} + {stack[top++] = 184; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 184; goto st671;} + {stack[top++] = 184; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 184; goto st673;} + {stack[top++] = 184; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 184; goto st728;} + {stack[top++] = 184; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 184; goto st739;} + {stack[top++] = 184; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 184; goto st756;} + {stack[top++] = 184; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 184; goto st767;} + {stack[top++] = 184; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 184; goto st778;} + {stack[top++] = 184; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 184; goto st791;} + {stack[top++] = 184; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 184; goto st801;} + {stack[top++] = 184; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 184; goto st840;} + {stack[top++] = 184; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 184; goto st994;} + {stack[top++] = 184; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 184; goto st997;} + {stack[top++] = 184; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 184; goto st1008;} + {stack[top++] = 184; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 184; goto st1010;} + {stack[top++] = 184; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 184; goto st1039;} + {stack[top++] = 184; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 184; goto st1052;} + {stack[top++] = 184; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 184; goto st1070;} + {stack[top++] = 184; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 184; goto st1065;} + {stack[top++] = 184; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 184; goto st1083;} + {stack[top++] = 184; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 184; goto st1089;} + {stack[top++] = 184; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 184; goto st1095;} + {stack[top++] = 184; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 184; goto st1103;} + {stack[top++] = 184; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -24929,76 +24938,76 @@ tr110: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 185; goto st616;} + {stack[top++] = 185; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 185; goto st618;} + {stack[top++] = 185; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 185; goto st620;} + {stack[top++] = 185; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 185; goto st652;} + {stack[top++] = 185; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 185; goto st657;} + {stack[top++] = 185; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 185; goto st662;} + {stack[top++] = 185; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 185; goto st667;} + {stack[top++] = 185; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 185; goto st671;} + {stack[top++] = 185; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 185; goto st673;} + {stack[top++] = 185; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 185; goto st728;} + {stack[top++] = 185; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 185; goto st739;} + {stack[top++] = 185; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 185; goto st756;} + {stack[top++] = 185; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 185; goto st767;} + {stack[top++] = 185; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 185; goto st778;} + {stack[top++] = 185; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 185; goto st791;} + {stack[top++] = 185; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 185; goto st801;} + {stack[top++] = 185; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 185; goto st840;} + {stack[top++] = 185; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 185; goto st994;} + {stack[top++] = 185; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 185; goto st997;} + {stack[top++] = 185; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 185; goto st1008;} + {stack[top++] = 185; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 185; goto st1010;} + {stack[top++] = 185; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 185; goto st1039;} + {stack[top++] = 185; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 185; goto st1052;} + {stack[top++] = 185; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 185; goto st1070;} + {stack[top++] = 185; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 185; goto st1065;} + {stack[top++] = 185; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 185; goto st1083;} + {stack[top++] = 185; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 185; goto st1089;} + {stack[top++] = 185; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 185; goto st1095;} + {stack[top++] = 185; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 185; goto st1103;} + {stack[top++] = 185; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -25049,76 +25058,76 @@ tr111: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 186; goto st616;} + {stack[top++] = 186; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 186; goto st618;} + {stack[top++] = 186; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 186; goto st620;} + {stack[top++] = 186; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 186; goto st652;} + {stack[top++] = 186; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 186; goto st657;} + {stack[top++] = 186; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 186; goto st662;} + {stack[top++] = 186; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 186; goto st667;} + {stack[top++] = 186; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 186; goto st671;} + {stack[top++] = 186; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 186; goto st673;} + {stack[top++] = 186; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 186; goto st728;} + {stack[top++] = 186; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 186; goto st739;} + {stack[top++] = 186; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 186; goto st756;} + {stack[top++] = 186; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 186; goto st767;} + {stack[top++] = 186; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 186; goto st778;} + {stack[top++] = 186; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 186; goto st791;} + {stack[top++] = 186; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 186; goto st801;} + {stack[top++] = 186; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 186; goto st840;} + {stack[top++] = 186; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 186; goto st994;} + {stack[top++] = 186; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 186; goto st997;} + {stack[top++] = 186; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 186; goto st1008;} + {stack[top++] = 186; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 186; goto st1010;} + {stack[top++] = 186; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 186; goto st1039;} + {stack[top++] = 186; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 186; goto st1052;} + {stack[top++] = 186; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 186; goto st1070;} + {stack[top++] = 186; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 186; goto st1065;} + {stack[top++] = 186; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 186; goto st1083;} + {stack[top++] = 186; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 186; goto st1089;} + {stack[top++] = 186; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 186; goto st1095;} + {stack[top++] = 186; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 186; goto st1103;} + {stack[top++] = 186; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -25165,76 +25174,76 @@ tr112: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 187; goto st616;} + {stack[top++] = 187; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 187; goto st618;} + {stack[top++] = 187; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 187; goto st620;} + {stack[top++] = 187; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 187; goto st652;} + {stack[top++] = 187; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 187; goto st657;} + {stack[top++] = 187; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 187; goto st662;} + {stack[top++] = 187; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 187; goto st667;} + {stack[top++] = 187; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 187; goto st671;} + {stack[top++] = 187; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 187; goto st673;} + {stack[top++] = 187; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 187; goto st728;} + {stack[top++] = 187; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 187; goto st739;} + {stack[top++] = 187; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 187; goto st756;} + {stack[top++] = 187; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 187; goto st767;} + {stack[top++] = 187; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 187; goto st778;} + {stack[top++] = 187; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 187; goto st791;} + {stack[top++] = 187; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 187; goto st801;} + {stack[top++] = 187; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 187; goto st840;} + {stack[top++] = 187; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 187; goto st994;} + {stack[top++] = 187; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 187; goto st997;} + {stack[top++] = 187; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 187; goto st1008;} + {stack[top++] = 187; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 187; goto st1010;} + {stack[top++] = 187; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 187; goto st1039;} + {stack[top++] = 187; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 187; goto st1052;} + {stack[top++] = 187; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 187; goto st1070;} + {stack[top++] = 187; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 187; goto st1065;} + {stack[top++] = 187; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 187; goto st1083;} + {stack[top++] = 187; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 187; goto st1089;} + {stack[top++] = 187; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 187; goto st1095;} + {stack[top++] = 187; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 187; goto st1103;} + {stack[top++] = 187; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -25285,76 +25294,76 @@ tr113: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 188; goto st616;} + {stack[top++] = 188; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 188; goto st618;} + {stack[top++] = 188; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 188; goto st620;} + {stack[top++] = 188; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 188; goto st652;} + {stack[top++] = 188; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 188; goto st657;} + {stack[top++] = 188; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 188; goto st662;} + {stack[top++] = 188; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 188; goto st667;} + {stack[top++] = 188; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 188; goto st671;} + {stack[top++] = 188; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 188; goto st673;} + {stack[top++] = 188; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 188; goto st728;} + {stack[top++] = 188; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 188; goto st739;} + {stack[top++] = 188; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 188; goto st756;} + {stack[top++] = 188; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 188; goto st767;} + {stack[top++] = 188; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 188; goto st778;} + {stack[top++] = 188; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 188; goto st791;} + {stack[top++] = 188; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 188; goto st801;} + {stack[top++] = 188; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 188; goto st840;} + {stack[top++] = 188; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 188; goto st994;} + {stack[top++] = 188; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 188; goto st997;} + {stack[top++] = 188; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 188; goto st1008;} + {stack[top++] = 188; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 188; goto st1010;} + {stack[top++] = 188; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 188; goto st1039;} + {stack[top++] = 188; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 188; goto st1052;} + {stack[top++] = 188; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 188; goto st1070;} + {stack[top++] = 188; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 188; goto st1065;} + {stack[top++] = 188; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 188; goto st1083;} + {stack[top++] = 188; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 188; goto st1089;} + {stack[top++] = 188; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 188; goto st1095;} + {stack[top++] = 188; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 188; goto st1103;} + {stack[top++] = 188; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -25407,76 +25416,76 @@ tr114: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 189; goto st616;} + {stack[top++] = 189; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 189; goto st618;} + {stack[top++] = 189; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 189; goto st620;} + {stack[top++] = 189; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 189; goto st652;} + {stack[top++] = 189; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 189; goto st657;} + {stack[top++] = 189; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 189; goto st662;} + {stack[top++] = 189; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 189; goto st667;} + {stack[top++] = 189; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 189; goto st671;} + {stack[top++] = 189; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 189; goto st673;} + {stack[top++] = 189; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 189; goto st728;} + {stack[top++] = 189; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 189; goto st739;} + {stack[top++] = 189; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 189; goto st756;} + {stack[top++] = 189; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 189; goto st767;} + {stack[top++] = 189; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 189; goto st778;} + {stack[top++] = 189; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 189; goto st791;} + {stack[top++] = 189; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 189; goto st801;} + {stack[top++] = 189; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 189; goto st840;} + {stack[top++] = 189; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 189; goto st994;} + {stack[top++] = 189; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 189; goto st997;} + {stack[top++] = 189; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 189; goto st1008;} + {stack[top++] = 189; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 189; goto st1010;} + {stack[top++] = 189; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 189; goto st1039;} + {stack[top++] = 189; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 189; goto st1052;} + {stack[top++] = 189; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 189; goto st1070;} + {stack[top++] = 189; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 189; goto st1065;} + {stack[top++] = 189; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 189; goto st1083;} + {stack[top++] = 189; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 189; goto st1089;} + {stack[top++] = 189; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 189; goto st1095;} + {stack[top++] = 189; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 189; goto st1103;} + {stack[top++] = 189; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -25527,76 +25536,76 @@ tr115: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 190; goto st616;} + {stack[top++] = 190; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 190; goto st618;} + {stack[top++] = 190; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 190; goto st620;} + {stack[top++] = 190; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 190; goto st652;} + {stack[top++] = 190; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 190; goto st657;} + {stack[top++] = 190; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 190; goto st662;} + {stack[top++] = 190; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 190; goto st667;} + {stack[top++] = 190; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 190; goto st671;} + {stack[top++] = 190; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 190; goto st673;} + {stack[top++] = 190; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 190; goto st728;} + {stack[top++] = 190; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 190; goto st739;} + {stack[top++] = 190; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 190; goto st756;} + {stack[top++] = 190; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 190; goto st767;} + {stack[top++] = 190; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 190; goto st778;} + {stack[top++] = 190; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 190; goto st791;} + {stack[top++] = 190; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 190; goto st801;} + {stack[top++] = 190; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 190; goto st840;} + {stack[top++] = 190; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 190; goto st994;} + {stack[top++] = 190; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 190; goto st997;} + {stack[top++] = 190; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 190; goto st1008;} + {stack[top++] = 190; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 190; goto st1010;} + {stack[top++] = 190; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 190; goto st1039;} + {stack[top++] = 190; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 190; goto st1052;} + {stack[top++] = 190; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 190; goto st1070;} + {stack[top++] = 190; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 190; goto st1065;} + {stack[top++] = 190; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 190; goto st1083;} + {stack[top++] = 190; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 190; goto st1089;} + {stack[top++] = 190; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 190; goto st1095;} + {stack[top++] = 190; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 190; goto st1103;} + {stack[top++] = 190; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -25641,7 +25650,7 @@ tr761: rdata_tail = s->r_data; } goto st191; -tr3388: +tr3399: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -25685,7 +25694,7 @@ tr116: { s->line_counter++; } - goto st1119; + goto st1128; tr728: { s->line_counter++; @@ -25706,15 +25715,15 @@ tr728: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1119; goto _out;} + {p++; cs = 1128; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1119; goto _out;} + p--; {p++; cs = 1128; goto _out;} } } - goto st1119; + goto st1128; tr760: { s->r_owner_length = s->dname_tmp_length; @@ -25742,16 +25751,16 @@ tr760: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1119; goto _out;} + {p++; cs = 1128; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1119; goto _out;} + p--; {p++; cs = 1128; goto _out;} } } - goto st1119; -tr3325: + goto st1128; +tr3336: { s->line_counter++; } @@ -25761,11 +25770,11 @@ tr3325: p--; {goto st261;} } } - goto st1119; -st1119: + goto st1128; +st1128: if ( ++p == pe ) - goto _test_eof1119; -case 1119: + goto _test_eof1128; +case 1128: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -25783,53 +25792,53 @@ case 1119: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr3319; - case 32: goto tr3319; - case 36: goto tr3320; - case 40: goto tr3321; - case 41: goto tr3322; - case 42: goto tr3323; + case 9: goto tr3330; + case 32: goto tr3330; + case 36: goto tr3331; + case 40: goto tr3332; + case 41: goto tr3333; + case 42: goto tr3334; case 58: goto tr69; - case 65: goto tr3392; - case 67: goto tr3393; - case 68: goto tr3394; - case 69: goto tr3395; - case 72: goto tr3396; - case 73: goto tr3397; - case 75: goto tr3398; - case 76: goto tr3399; - case 77: goto tr3400; - case 78: goto tr3401; - case 80: goto tr3402; - case 82: goto tr3403; - case 83: goto tr3404; - case 84: goto tr3405; - case 85: goto tr3406; - case 92: goto tr3324; - case 95: goto tr3323; - case 97: goto tr3392; - case 99: goto tr3393; - case 100: goto tr3394; - case 101: goto tr3395; - case 104: goto tr3396; - case 105: goto tr3397; - case 107: goto tr3398; - case 108: goto tr3399; - case 109: goto tr3400; - case 110: goto tr3401; - case 112: goto tr3402; - case 114: goto tr3403; - case 115: goto tr3404; - case 116: goto tr3405; - case 117: goto tr3406; + case 65: goto tr3403; + case 67: goto tr3404; + case 68: goto tr3405; + case 69: goto tr3406; + case 72: goto tr3407; + case 73: goto tr3408; + case 75: goto tr3409; + case 76: goto tr3410; + case 77: goto tr3411; + case 78: goto tr3412; + case 80: goto tr3413; + case 82: goto tr3414; + case 83: goto tr3415; + case 84: goto tr3416; + case 85: goto tr3417; + case 92: goto tr3335; + case 95: goto tr3334; + case 97: goto tr3403; + case 99: goto tr3404; + case 100: goto tr3405; + case 101: goto tr3406; + case 104: goto tr3407; + case 105: goto tr3408; + case 107: goto tr3409; + case 108: goto tr3410; + case 109: goto tr3411; + case 110: goto tr3412; + case 112: goto tr3413; + case 114: goto tr3414; + case 115: goto tr3415; + case 116: goto tr3416; + case 117: goto tr3417; case 1802: goto tr20; case 1851: goto st149; - case 2058: goto tr3325; - case 2107: goto tr3326; + case 2058: goto tr3336; + case 2107: goto tr3337; case 2314: goto tr118; case 2363: goto tr119; - case 2570: goto tr3327; - case 2619: goto tr3328; + case 2570: goto tr3338; + case 2619: goto tr3339; } if ( _widec < 60 ) { if ( _widec < 11 ) { @@ -25838,101 +25847,101 @@ case 1119: } else if ( _widec > 44 ) { if ( _widec > 47 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3391; + goto tr3402; } else if ( _widec >= 45 ) - goto tr3323; + goto tr3334; } else goto tr69; } else if ( _widec > 63 ) { if ( _widec < 91 ) { if ( 64 <= _widec && _widec <= 90 ) - goto tr3323; + goto tr3334; } else if ( _widec > 96 ) { if ( _widec > 122 ) { if ( 123 <= _widec ) goto tr69; } else if ( _widec >= 98 ) - goto tr3323; + goto tr3334; } else goto tr69; } else goto tr69; - goto tr3390; -tr3320: + goto tr3401; +tr3331: { p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 192; goto st616;} + {stack[top++] = 192; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 192; goto st618;} + {stack[top++] = 192; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 192; goto st620;} + {stack[top++] = 192; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 192; goto st652;} + {stack[top++] = 192; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 192; goto st657;} + {stack[top++] = 192; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 192; goto st662;} + {stack[top++] = 192; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 192; goto st667;} + {stack[top++] = 192; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 192; goto st671;} + {stack[top++] = 192; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 192; goto st673;} + {stack[top++] = 192; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 192; goto st728;} + {stack[top++] = 192; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 192; goto st739;} + {stack[top++] = 192; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 192; goto st756;} + {stack[top++] = 192; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 192; goto st767;} + {stack[top++] = 192; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 192; goto st778;} + {stack[top++] = 192; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 192; goto st791;} + {stack[top++] = 192; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 192; goto st801;} + {stack[top++] = 192; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 192; goto st840;} + {stack[top++] = 192; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 192; goto st994;} + {stack[top++] = 192; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 192; goto st997;} + {stack[top++] = 192; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 192; goto st1008;} + {stack[top++] = 192; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 192; goto st1010;} + {stack[top++] = 192; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 192; goto st1039;} + {stack[top++] = 192; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 192; goto st1052;} + {stack[top++] = 192; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 192; goto st1070;} + {stack[top++] = 192; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 192; goto st1065;} + {stack[top++] = 192; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 192; goto st1083;} + {stack[top++] = 192; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 192; goto st1089;} + {stack[top++] = 192; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 192; goto st1095;} + {stack[top++] = 192; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 192; goto st1103;} + {stack[top++] = 192; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -26073,81 +26082,81 @@ case 201: } else if ( (*p) >= 9 ) goto tr738; goto tr639; -tr3323: +tr3334: { p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 202; goto st616;} + {stack[top++] = 202; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 202; goto st618;} + {stack[top++] = 202; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 202; goto st620;} + {stack[top++] = 202; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 202; goto st652;} + {stack[top++] = 202; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 202; goto st657;} + {stack[top++] = 202; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 202; goto st662;} + {stack[top++] = 202; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 202; goto st667;} + {stack[top++] = 202; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 202; goto st671;} + {stack[top++] = 202; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 202; goto st673;} + {stack[top++] = 202; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 202; goto st728;} + {stack[top++] = 202; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 202; goto st739;} + {stack[top++] = 202; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 202; goto st756;} + {stack[top++] = 202; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 202; goto st767;} + {stack[top++] = 202; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 202; goto st778;} + {stack[top++] = 202; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 202; goto st791;} + {stack[top++] = 202; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 202; goto st801;} + {stack[top++] = 202; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 202; goto st840;} + {stack[top++] = 202; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 202; goto st994;} + {stack[top++] = 202; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 202; goto st997;} + {stack[top++] = 202; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 202; goto st1008;} + {stack[top++] = 202; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 202; goto st1010;} + {stack[top++] = 202; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 202; goto st1039;} + {stack[top++] = 202; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 202; goto st1052;} + {stack[top++] = 202; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 202; goto st1070;} + {stack[top++] = 202; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 202; goto st1065;} + {stack[top++] = 202; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 202; goto st1083;} + {stack[top++] = 202; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 202; goto st1089;} + {stack[top++] = 202; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 202; goto st1095;} + {stack[top++] = 202; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 202; goto st1103;} + {stack[top++] = 202; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -26186,7 +26195,7 @@ case 202: case 1083: goto tr744; } goto tr739; -tr3391: +tr3402: { s->number64 = 0; } @@ -26208,76 +26217,76 @@ tr3391: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 203; goto st616;} + {stack[top++] = 203; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 203; goto st618;} + {stack[top++] = 203; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 203; goto st620;} + {stack[top++] = 203; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 203; goto st652;} + {stack[top++] = 203; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 203; goto st657;} + {stack[top++] = 203; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 203; goto st662;} + {stack[top++] = 203; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 203; goto st667;} + {stack[top++] = 203; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 203; goto st671;} + {stack[top++] = 203; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 203; goto st673;} + {stack[top++] = 203; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 203; goto st728;} + {stack[top++] = 203; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 203; goto st739;} + {stack[top++] = 203; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 203; goto st756;} + {stack[top++] = 203; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 203; goto st767;} + {stack[top++] = 203; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 203; goto st778;} + {stack[top++] = 203; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 203; goto st791;} + {stack[top++] = 203; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 203; goto st801;} + {stack[top++] = 203; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 203; goto st840;} + {stack[top++] = 203; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 203; goto st994;} + {stack[top++] = 203; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 203; goto st997;} + {stack[top++] = 203; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 203; goto st1008;} + {stack[top++] = 203; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 203; goto st1010;} + {stack[top++] = 203; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 203; goto st1039;} + {stack[top++] = 203; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 203; goto st1052;} + {stack[top++] = 203; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 203; goto st1070;} + {stack[top++] = 203; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 203; goto st1065;} + {stack[top++] = 203; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 203; goto st1083;} + {stack[top++] = 203; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 203; goto st1089;} + {stack[top++] = 203; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 203; goto st1095;} + {stack[top++] = 203; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 203; goto st1103;} + {stack[top++] = 203; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -26503,7 +26512,7 @@ case 205: } else if ( _widec >= 640 ) goto st8; goto tr128; -tr3392: +tr3403: { s->r_class = s->default_class; } @@ -26514,76 +26523,76 @@ tr3392: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 206; goto st616;} + {stack[top++] = 206; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 206; goto st618;} + {stack[top++] = 206; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 206; goto st620;} + {stack[top++] = 206; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 206; goto st652;} + {stack[top++] = 206; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 206; goto st657;} + {stack[top++] = 206; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 206; goto st662;} + {stack[top++] = 206; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 206; goto st667;} + {stack[top++] = 206; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 206; goto st671;} + {stack[top++] = 206; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 206; goto st673;} + {stack[top++] = 206; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 206; goto st728;} + {stack[top++] = 206; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 206; goto st739;} + {stack[top++] = 206; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 206; goto st756;} + {stack[top++] = 206; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 206; goto st767;} + {stack[top++] = 206; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 206; goto st778;} + {stack[top++] = 206; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 206; goto st791;} + {stack[top++] = 206; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 206; goto st801;} + {stack[top++] = 206; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 206; goto st840;} + {stack[top++] = 206; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 206; goto st994;} + {stack[top++] = 206; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 206; goto st997;} + {stack[top++] = 206; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 206; goto st1008;} + {stack[top++] = 206; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 206; goto st1010;} + {stack[top++] = 206; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 206; goto st1039;} + {stack[top++] = 206; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 206; goto st1052;} + {stack[top++] = 206; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 206; goto st1070;} + {stack[top++] = 206; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 206; goto st1065;} + {stack[top++] = 206; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 206; goto st1083;} + {stack[top++] = 206; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 206; goto st1089;} + {stack[top++] = 206; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 206; goto st1095;} + {stack[top++] = 206; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 206; goto st1103;} + {stack[top++] = 206; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -26781,82 +26790,82 @@ tr120: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1120; goto st616;} + {stack[top++] = 1129; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1120; goto st618;} + {stack[top++] = 1129; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1120; goto st620;} + {stack[top++] = 1129; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1120; goto st652;} + {stack[top++] = 1129; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1120; goto st657;} + {stack[top++] = 1129; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1120; goto st662;} + {stack[top++] = 1129; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1120; goto st667;} + {stack[top++] = 1129; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1120; goto st671;} + {stack[top++] = 1129; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1120; goto st673;} + {stack[top++] = 1129; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1120; goto st728;} + {stack[top++] = 1129; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1120; goto st739;} + {stack[top++] = 1129; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1120; goto st756;} + {stack[top++] = 1129; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1120; goto st767;} + {stack[top++] = 1129; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1120; goto st778;} + {stack[top++] = 1129; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1120; goto st791;} + {stack[top++] = 1129; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1120; goto st801;} + {stack[top++] = 1129; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1120; goto st840;} + {stack[top++] = 1129; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1120; goto st994;} + {stack[top++] = 1129; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1120; goto st997;} + {stack[top++] = 1129; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1120; goto st1008;} + {stack[top++] = 1129; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1120; goto st1010;} + {stack[top++] = 1129; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1120; goto st1039;} + {stack[top++] = 1129; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1120; goto st1052;} + {stack[top++] = 1129; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1120; goto st1070;} + {stack[top++] = 1129; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1120; goto st1065;} + {stack[top++] = 1129; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1120; goto st1083;} + {stack[top++] = 1129; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1120; goto st1089;} + {stack[top++] = 1129; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1120; goto st1095;} + {stack[top++] = 1129; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1120; goto st1103;} + {stack[top++] = 1129; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} } } - goto st1120; + goto st1129; tr767: { s->line_counter++; @@ -26865,76 +26874,76 @@ tr767: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1120; goto st616;} + {stack[top++] = 1129; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1120; goto st618;} + {stack[top++] = 1129; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1120; goto st620;} + {stack[top++] = 1129; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1120; goto st652;} + {stack[top++] = 1129; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1120; goto st657;} + {stack[top++] = 1129; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1120; goto st662;} + {stack[top++] = 1129; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1120; goto st667;} + {stack[top++] = 1129; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1120; goto st671;} + {stack[top++] = 1129; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1120; goto st673;} + {stack[top++] = 1129; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1120; goto st728;} + {stack[top++] = 1129; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1120; goto st739;} + {stack[top++] = 1129; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1120; goto st756;} + {stack[top++] = 1129; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1120; goto st767;} + {stack[top++] = 1129; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1120; goto st778;} + {stack[top++] = 1129; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1120; goto st791;} + {stack[top++] = 1129; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1120; goto st801;} + {stack[top++] = 1129; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1120; goto st840;} + {stack[top++] = 1129; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1120; goto st994;} + {stack[top++] = 1129; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1120; goto st997;} + {stack[top++] = 1129; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1120; goto st1008;} + {stack[top++] = 1129; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1120; goto st1010;} + {stack[top++] = 1129; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1120; goto st1039;} + {stack[top++] = 1129; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1120; goto st1052;} + {stack[top++] = 1129; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1120; goto st1070;} + {stack[top++] = 1129; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1120; goto st1065;} + {stack[top++] = 1129; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1120; goto st1083;} + {stack[top++] = 1129; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1120; goto st1089;} + {stack[top++] = 1129; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1120; goto st1095;} + {stack[top++] = 1129; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1120; goto st1103;} + {stack[top++] = 1129; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -26956,15 +26965,15 @@ tr767: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1120; goto _out;} + {p++; cs = 1129; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1120; goto _out;} + p--; {p++; cs = 1129; goto _out;} } } - goto st1120; + goto st1129; tr762: { s->r_owner_length = s->dname_tmp_length; @@ -26980,76 +26989,76 @@ tr762: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1120; goto st616;} + {stack[top++] = 1129; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1120; goto st618;} + {stack[top++] = 1129; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1120; goto st620;} + {stack[top++] = 1129; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1120; goto st652;} + {stack[top++] = 1129; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1120; goto st657;} + {stack[top++] = 1129; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1120; goto st662;} + {stack[top++] = 1129; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1120; goto st667;} + {stack[top++] = 1129; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1120; goto st671;} + {stack[top++] = 1129; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1120; goto st673;} + {stack[top++] = 1129; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1120; goto st728;} + {stack[top++] = 1129; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1120; goto st739;} + {stack[top++] = 1129; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1120; goto st756;} + {stack[top++] = 1129; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1120; goto st767;} + {stack[top++] = 1129; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1120; goto st778;} + {stack[top++] = 1129; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1120; goto st791;} + {stack[top++] = 1129; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1120; goto st801;} + {stack[top++] = 1129; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1120; goto st840;} + {stack[top++] = 1129; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1120; goto st994;} + {stack[top++] = 1129; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1120; goto st997;} + {stack[top++] = 1129; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1120; goto st1008;} + {stack[top++] = 1129; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1120; goto st1010;} + {stack[top++] = 1129; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1120; goto st1039;} + {stack[top++] = 1129; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1120; goto st1052;} + {stack[top++] = 1129; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1120; goto st1070;} + {stack[top++] = 1129; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1120; goto st1065;} + {stack[top++] = 1129; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1120; goto st1083;} + {stack[top++] = 1129; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1120; goto st1089;} + {stack[top++] = 1129; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1120; goto st1095;} + {stack[top++] = 1129; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1120; goto st1103;} + {stack[top++] = 1129; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -27071,16 +27080,16 @@ tr762: // Stop the scanner if required. if (s->state == ZS_STATE_STOP) { - {p++; cs = 1120; goto _out;} + {p++; cs = 1129; goto _out;} } } } else { // Return if external processing. - p--; {p++; cs = 1120; goto _out;} + p--; {p++; cs = 1129; goto _out;} } } - goto st1120; -tr3327: + goto st1129; +tr3338: { s->line_counter++; } @@ -27088,76 +27097,76 @@ tr3327: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 1120; goto st616;} + {stack[top++] = 1129; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 1120; goto st618;} + {stack[top++] = 1129; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 1120; goto st620;} + {stack[top++] = 1129; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 1120; goto st652;} + {stack[top++] = 1129; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 1120; goto st657;} + {stack[top++] = 1129; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 1120; goto st662;} + {stack[top++] = 1129; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 1120; goto st667;} + {stack[top++] = 1129; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 1120; goto st671;} + {stack[top++] = 1129; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 1120; goto st673;} + {stack[top++] = 1129; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 1120; goto st728;} + {stack[top++] = 1129; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 1120; goto st739;} + {stack[top++] = 1129; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 1120; goto st756;} + {stack[top++] = 1129; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 1120; goto st767;} + {stack[top++] = 1129; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 1120; goto st778;} + {stack[top++] = 1129; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 1120; goto st791;} + {stack[top++] = 1129; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 1120; goto st801;} + {stack[top++] = 1129; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 1120; goto st840;} + {stack[top++] = 1129; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 1120; goto st994;} + {stack[top++] = 1129; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 1120; goto st997;} + {stack[top++] = 1129; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 1120; goto st1008;} + {stack[top++] = 1129; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 1120; goto st1010;} + {stack[top++] = 1129; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 1120; goto st1039;} + {stack[top++] = 1129; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 1120; goto st1052;} + {stack[top++] = 1129; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 1120; goto st1070;} + {stack[top++] = 1129; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 1120; goto st1065;} + {stack[top++] = 1129; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 1120; goto st1083;} + {stack[top++] = 1129; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 1120; goto st1089;} + {stack[top++] = 1129; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 1120; goto st1095;} + {stack[top++] = 1129; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 1120; goto st1103;} + {stack[top++] = 1129; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -27169,11 +27178,11 @@ tr3327: p--; {goto st261;} } } - goto st1120; -st1120: + goto st1129; +st1129: if ( ++p == pe ) - goto _test_eof1120; -case 1120: + goto _test_eof1129; +case 1129: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -27191,53 +27200,53 @@ case 1120: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr3385; - case 32: goto tr3385; - case 36: goto tr3320; - case 40: goto tr3386; - case 41: goto tr3387; - case 42: goto tr3323; + case 9: goto tr3396; + case 32: goto tr3396; + case 36: goto tr3331; + case 40: goto tr3397; + case 41: goto tr3398; + case 42: goto tr3334; case 58: goto tr69; - case 65: goto tr3392; - case 67: goto tr3393; - case 68: goto tr3394; - case 69: goto tr3395; - case 72: goto tr3396; - case 73: goto tr3397; - case 75: goto tr3398; - case 76: goto tr3399; - case 77: goto tr3400; - case 78: goto tr3401; - case 80: goto tr3402; - case 82: goto tr3403; - case 83: goto tr3404; - case 84: goto tr3405; - case 85: goto tr3406; - case 92: goto tr3324; - case 95: goto tr3323; - case 97: goto tr3392; - case 99: goto tr3393; - case 100: goto tr3394; - case 101: goto tr3395; - case 104: goto tr3396; - case 105: goto tr3397; - case 107: goto tr3398; - case 108: goto tr3399; - case 109: goto tr3400; - case 110: goto tr3401; - case 112: goto tr3402; - case 114: goto tr3403; - case 115: goto tr3404; - case 116: goto tr3405; - case 117: goto tr3406; + case 65: goto tr3403; + case 67: goto tr3404; + case 68: goto tr3405; + case 69: goto tr3406; + case 72: goto tr3407; + case 73: goto tr3408; + case 75: goto tr3409; + case 76: goto tr3410; + case 77: goto tr3411; + case 78: goto tr3412; + case 80: goto tr3413; + case 82: goto tr3414; + case 83: goto tr3415; + case 84: goto tr3416; + case 85: goto tr3417; + case 92: goto tr3335; + case 95: goto tr3334; + case 97: goto tr3403; + case 99: goto tr3404; + case 100: goto tr3405; + case 101: goto tr3406; + case 104: goto tr3407; + case 105: goto tr3408; + case 107: goto tr3409; + case 108: goto tr3410; + case 109: goto tr3411; + case 110: goto tr3412; + case 112: goto tr3413; + case 114: goto tr3414; + case 115: goto tr3415; + case 116: goto tr3416; + case 117: goto tr3417; case 1802: goto tr83; case 1851: goto st8; - case 2058: goto tr3407; - case 2107: goto tr3388; + case 2058: goto tr3418; + case 2107: goto tr3399; case 2314: goto tr92; case 2363: goto tr93; - case 2570: goto tr3407; - case 2619: goto tr3389; + case 2570: goto tr3418; + case 2619: goto tr3400; } if ( _widec < 60 ) { if ( _widec < 11 ) { @@ -27246,27 +27255,27 @@ case 1120: } else if ( _widec > 44 ) { if ( _widec > 47 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3391; + goto tr3402; } else if ( _widec >= 45 ) - goto tr3323; + goto tr3334; } else goto tr69; } else if ( _widec > 63 ) { if ( _widec < 91 ) { if ( 64 <= _widec && _widec <= 90 ) - goto tr3323; + goto tr3334; } else if ( _widec > 96 ) { if ( _widec > 122 ) { if ( 123 <= _widec ) goto tr69; } else if ( _widec >= 98 ) - goto tr3323; + goto tr3334; } else goto tr69; } else goto tr69; - goto tr3390; -tr3393: + goto tr3401; +tr3404: { s->r_class = s->default_class; } @@ -27277,76 +27286,76 @@ tr3393: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 208; goto st616;} + {stack[top++] = 208; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 208; goto st618;} + {stack[top++] = 208; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 208; goto st620;} + {stack[top++] = 208; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 208; goto st652;} + {stack[top++] = 208; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 208; goto st657;} + {stack[top++] = 208; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 208; goto st662;} + {stack[top++] = 208; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 208; goto st667;} + {stack[top++] = 208; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 208; goto st671;} + {stack[top++] = 208; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 208; goto st673;} + {stack[top++] = 208; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 208; goto st728;} + {stack[top++] = 208; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 208; goto st739;} + {stack[top++] = 208; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 208; goto st756;} + {stack[top++] = 208; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 208; goto st767;} + {stack[top++] = 208; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 208; goto st778;} + {stack[top++] = 208; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 208; goto st791;} + {stack[top++] = 208; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 208; goto st801;} + {stack[top++] = 208; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 208; goto st840;} + {stack[top++] = 208; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 208; goto st994;} + {stack[top++] = 208; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 208; goto st997;} + {stack[top++] = 208; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 208; goto st1008;} + {stack[top++] = 208; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 208; goto st1010;} + {stack[top++] = 208; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 208; goto st1039;} + {stack[top++] = 208; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 208; goto st1052;} + {stack[top++] = 208; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 208; goto st1070;} + {stack[top++] = 208; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 208; goto st1065;} + {stack[top++] = 208; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 208; goto st1083;} + {stack[top++] = 208; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 208; goto st1089;} + {stack[top++] = 208; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 208; goto st1095;} + {stack[top++] = 208; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 208; goto st1103;} + {stack[top++] = 208; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -27393,7 +27402,7 @@ case 208: case 1083: goto tr744; } goto tr756; -tr3394: +tr3405: { s->r_class = s->default_class; } @@ -27404,76 +27413,76 @@ tr3394: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 209; goto st616;} + {stack[top++] = 209; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 209; goto st618;} + {stack[top++] = 209; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 209; goto st620;} + {stack[top++] = 209; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 209; goto st652;} + {stack[top++] = 209; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 209; goto st657;} + {stack[top++] = 209; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 209; goto st662;} + {stack[top++] = 209; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 209; goto st667;} + {stack[top++] = 209; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 209; goto st671;} + {stack[top++] = 209; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 209; goto st673;} + {stack[top++] = 209; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 209; goto st728;} + {stack[top++] = 209; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 209; goto st739;} + {stack[top++] = 209; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 209; goto st756;} + {stack[top++] = 209; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 209; goto st767;} + {stack[top++] = 209; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 209; goto st778;} + {stack[top++] = 209; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 209; goto st791;} + {stack[top++] = 209; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 209; goto st801;} + {stack[top++] = 209; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 209; goto st840;} + {stack[top++] = 209; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 209; goto st994;} + {stack[top++] = 209; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 209; goto st997;} + {stack[top++] = 209; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 209; goto st1008;} + {stack[top++] = 209; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 209; goto st1010;} + {stack[top++] = 209; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 209; goto st1039;} + {stack[top++] = 209; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 209; goto st1052;} + {stack[top++] = 209; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 209; goto st1070;} + {stack[top++] = 209; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 209; goto st1065;} + {stack[top++] = 209; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 209; goto st1083;} + {stack[top++] = 209; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 209; goto st1089;} + {stack[top++] = 209; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 209; goto st1095;} + {stack[top++] = 209; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 209; goto st1103;} + {stack[top++] = 209; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -27518,7 +27527,7 @@ case 209: case 1083: goto tr744; } goto tr756; -tr3395: +tr3406: { s->r_class = s->default_class; } @@ -27529,76 +27538,76 @@ tr3395: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 210; goto st616;} + {stack[top++] = 210; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 210; goto st618;} + {stack[top++] = 210; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 210; goto st620;} + {stack[top++] = 210; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 210; goto st652;} + {stack[top++] = 210; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 210; goto st657;} + {stack[top++] = 210; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 210; goto st662;} + {stack[top++] = 210; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 210; goto st667;} + {stack[top++] = 210; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 210; goto st671;} + {stack[top++] = 210; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 210; goto st673;} + {stack[top++] = 210; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 210; goto st728;} + {stack[top++] = 210; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 210; goto st739;} + {stack[top++] = 210; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 210; goto st756;} + {stack[top++] = 210; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 210; goto st767;} + {stack[top++] = 210; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 210; goto st778;} + {stack[top++] = 210; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 210; goto st791;} + {stack[top++] = 210; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 210; goto st801;} + {stack[top++] = 210; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 210; goto st840;} + {stack[top++] = 210; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 210; goto st994;} + {stack[top++] = 210; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 210; goto st997;} + {stack[top++] = 210; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 210; goto st1008;} + {stack[top++] = 210; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 210; goto st1010;} + {stack[top++] = 210; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 210; goto st1039;} + {stack[top++] = 210; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 210; goto st1052;} + {stack[top++] = 210; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 210; goto st1070;} + {stack[top++] = 210; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 210; goto st1065;} + {stack[top++] = 210; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 210; goto st1083;} + {stack[top++] = 210; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 210; goto st1089;} + {stack[top++] = 210; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 210; goto st1095;} + {stack[top++] = 210; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 210; goto st1103;} + {stack[top++] = 210; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -27639,7 +27648,7 @@ case 210: case 1083: goto tr744; } goto tr756; -tr3396: +tr3407: { s->r_class = s->default_class; } @@ -27650,76 +27659,76 @@ tr3396: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 211; goto st616;} + {stack[top++] = 211; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 211; goto st618;} + {stack[top++] = 211; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 211; goto st620;} + {stack[top++] = 211; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 211; goto st652;} + {stack[top++] = 211; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 211; goto st657;} + {stack[top++] = 211; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 211; goto st662;} + {stack[top++] = 211; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 211; goto st667;} + {stack[top++] = 211; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 211; goto st671;} + {stack[top++] = 211; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 211; goto st673;} + {stack[top++] = 211; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 211; goto st728;} + {stack[top++] = 211; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 211; goto st739;} + {stack[top++] = 211; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 211; goto st756;} + {stack[top++] = 211; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 211; goto st767;} + {stack[top++] = 211; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 211; goto st778;} + {stack[top++] = 211; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 211; goto st791;} + {stack[top++] = 211; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 211; goto st801;} + {stack[top++] = 211; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 211; goto st840;} + {stack[top++] = 211; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 211; goto st994;} + {stack[top++] = 211; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 211; goto st997;} + {stack[top++] = 211; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 211; goto st1008;} + {stack[top++] = 211; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 211; goto st1010;} + {stack[top++] = 211; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 211; goto st1039;} + {stack[top++] = 211; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 211; goto st1052;} + {stack[top++] = 211; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 211; goto st1070;} + {stack[top++] = 211; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 211; goto st1065;} + {stack[top++] = 211; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 211; goto st1083;} + {stack[top++] = 211; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 211; goto st1089;} + {stack[top++] = 211; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 211; goto st1095;} + {stack[top++] = 211; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 211; goto st1103;} + {stack[top++] = 211; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -27760,7 +27769,7 @@ case 211: case 1083: goto tr744; } goto tr756; -tr3397: +tr3408: { s->r_class = s->default_class; } @@ -27771,76 +27780,76 @@ tr3397: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 212; goto st616;} + {stack[top++] = 212; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 212; goto st618;} + {stack[top++] = 212; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 212; goto st620;} + {stack[top++] = 212; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 212; goto st652;} + {stack[top++] = 212; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 212; goto st657;} + {stack[top++] = 212; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 212; goto st662;} + {stack[top++] = 212; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 212; goto st667;} + {stack[top++] = 212; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 212; goto st671;} + {stack[top++] = 212; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 212; goto st673;} + {stack[top++] = 212; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 212; goto st728;} + {stack[top++] = 212; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 212; goto st739;} + {stack[top++] = 212; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 212; goto st756;} + {stack[top++] = 212; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 212; goto st767;} + {stack[top++] = 212; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 212; goto st778;} + {stack[top++] = 212; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 212; goto st791;} + {stack[top++] = 212; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 212; goto st801;} + {stack[top++] = 212; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 212; goto st840;} + {stack[top++] = 212; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 212; goto st994;} + {stack[top++] = 212; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 212; goto st997;} + {stack[top++] = 212; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 212; goto st1008;} + {stack[top++] = 212; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 212; goto st1010;} + {stack[top++] = 212; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 212; goto st1039;} + {stack[top++] = 212; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 212; goto st1052;} + {stack[top++] = 212; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 212; goto st1070;} + {stack[top++] = 212; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 212; goto st1065;} + {stack[top++] = 212; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 212; goto st1083;} + {stack[top++] = 212; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 212; goto st1089;} + {stack[top++] = 212; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 212; goto st1095;} + {stack[top++] = 212; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 212; goto st1103;} + {stack[top++] = 212; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -27883,7 +27892,7 @@ case 212: case 1083: goto tr744; } goto tr756; -tr3398: +tr3409: { s->r_class = s->default_class; } @@ -27894,76 +27903,76 @@ tr3398: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 213; goto st616;} + {stack[top++] = 213; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 213; goto st618;} + {stack[top++] = 213; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 213; goto st620;} + {stack[top++] = 213; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 213; goto st652;} + {stack[top++] = 213; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 213; goto st657;} + {stack[top++] = 213; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 213; goto st662;} + {stack[top++] = 213; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 213; goto st667;} + {stack[top++] = 213; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 213; goto st671;} + {stack[top++] = 213; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 213; goto st673;} + {stack[top++] = 213; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 213; goto st728;} + {stack[top++] = 213; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 213; goto st739;} + {stack[top++] = 213; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 213; goto st756;} + {stack[top++] = 213; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 213; goto st767;} + {stack[top++] = 213; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 213; goto st778;} + {stack[top++] = 213; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 213; goto st791;} + {stack[top++] = 213; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 213; goto st801;} + {stack[top++] = 213; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 213; goto st840;} + {stack[top++] = 213; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 213; goto st994;} + {stack[top++] = 213; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 213; goto st997;} + {stack[top++] = 213; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 213; goto st1008;} + {stack[top++] = 213; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 213; goto st1010;} + {stack[top++] = 213; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 213; goto st1039;} + {stack[top++] = 213; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 213; goto st1052;} + {stack[top++] = 213; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 213; goto st1070;} + {stack[top++] = 213; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 213; goto st1065;} + {stack[top++] = 213; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 213; goto st1083;} + {stack[top++] = 213; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 213; goto st1089;} + {stack[top++] = 213; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 213; goto st1095;} + {stack[top++] = 213; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 213; goto st1103;} + {stack[top++] = 213; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28006,7 +28015,7 @@ case 213: case 1083: goto tr744; } goto tr756; -tr3399: +tr3410: { s->r_class = s->default_class; } @@ -28017,76 +28026,76 @@ tr3399: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 214; goto st616;} + {stack[top++] = 214; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 214; goto st618;} + {stack[top++] = 214; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 214; goto st620;} + {stack[top++] = 214; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 214; goto st652;} + {stack[top++] = 214; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 214; goto st657;} + {stack[top++] = 214; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 214; goto st662;} + {stack[top++] = 214; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 214; goto st667;} + {stack[top++] = 214; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 214; goto st671;} + {stack[top++] = 214; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 214; goto st673;} + {stack[top++] = 214; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 214; goto st728;} + {stack[top++] = 214; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 214; goto st739;} + {stack[top++] = 214; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 214; goto st756;} + {stack[top++] = 214; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 214; goto st767;} + {stack[top++] = 214; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 214; goto st778;} + {stack[top++] = 214; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 214; goto st791;} + {stack[top++] = 214; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 214; goto st801;} + {stack[top++] = 214; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 214; goto st840;} + {stack[top++] = 214; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 214; goto st994;} + {stack[top++] = 214; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 214; goto st997;} + {stack[top++] = 214; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 214; goto st1008;} + {stack[top++] = 214; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 214; goto st1010;} + {stack[top++] = 214; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 214; goto st1039;} + {stack[top++] = 214; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 214; goto st1052;} + {stack[top++] = 214; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 214; goto st1070;} + {stack[top++] = 214; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 214; goto st1065;} + {stack[top++] = 214; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 214; goto st1083;} + {stack[top++] = 214; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 214; goto st1089;} + {stack[top++] = 214; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 214; goto st1095;} + {stack[top++] = 214; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 214; goto st1103;} + {stack[top++] = 214; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28131,7 +28140,7 @@ case 214: case 1083: goto tr744; } goto tr756; -tr3400: +tr3411: { s->r_class = s->default_class; } @@ -28142,76 +28151,76 @@ tr3400: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 215; goto st616;} + {stack[top++] = 215; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 215; goto st618;} + {stack[top++] = 215; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 215; goto st620;} + {stack[top++] = 215; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 215; goto st652;} + {stack[top++] = 215; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 215; goto st657;} + {stack[top++] = 215; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 215; goto st662;} + {stack[top++] = 215; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 215; goto st667;} + {stack[top++] = 215; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 215; goto st671;} + {stack[top++] = 215; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 215; goto st673;} + {stack[top++] = 215; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 215; goto st728;} + {stack[top++] = 215; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 215; goto st739;} + {stack[top++] = 215; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 215; goto st756;} + {stack[top++] = 215; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 215; goto st767;} + {stack[top++] = 215; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 215; goto st778;} + {stack[top++] = 215; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 215; goto st791;} + {stack[top++] = 215; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 215; goto st801;} + {stack[top++] = 215; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 215; goto st840;} + {stack[top++] = 215; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 215; goto st994;} + {stack[top++] = 215; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 215; goto st997;} + {stack[top++] = 215; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 215; goto st1008;} + {stack[top++] = 215; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 215; goto st1010;} + {stack[top++] = 215; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 215; goto st1039;} + {stack[top++] = 215; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 215; goto st1052;} + {stack[top++] = 215; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 215; goto st1070;} + {stack[top++] = 215; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 215; goto st1065;} + {stack[top++] = 215; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 215; goto st1083;} + {stack[top++] = 215; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 215; goto st1089;} + {stack[top++] = 215; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 215; goto st1095;} + {stack[top++] = 215; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 215; goto st1103;} + {stack[top++] = 215; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28254,7 +28263,7 @@ case 215: case 1083: goto tr744; } goto tr756; -tr3401: +tr3412: { s->r_class = s->default_class; } @@ -28265,76 +28274,76 @@ tr3401: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 216; goto st616;} + {stack[top++] = 216; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 216; goto st618;} + {stack[top++] = 216; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 216; goto st620;} + {stack[top++] = 216; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 216; goto st652;} + {stack[top++] = 216; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 216; goto st657;} + {stack[top++] = 216; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 216; goto st662;} + {stack[top++] = 216; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 216; goto st667;} + {stack[top++] = 216; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 216; goto st671;} + {stack[top++] = 216; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 216; goto st673;} + {stack[top++] = 216; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 216; goto st728;} + {stack[top++] = 216; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 216; goto st739;} + {stack[top++] = 216; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 216; goto st756;} + {stack[top++] = 216; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 216; goto st767;} + {stack[top++] = 216; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 216; goto st778;} + {stack[top++] = 216; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 216; goto st791;} + {stack[top++] = 216; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 216; goto st801;} + {stack[top++] = 216; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 216; goto st840;} + {stack[top++] = 216; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 216; goto st994;} + {stack[top++] = 216; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 216; goto st997;} + {stack[top++] = 216; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 216; goto st1008;} + {stack[top++] = 216; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 216; goto st1010;} + {stack[top++] = 216; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 216; goto st1039;} + {stack[top++] = 216; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 216; goto st1052;} + {stack[top++] = 216; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 216; goto st1070;} + {stack[top++] = 216; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 216; goto st1065;} + {stack[top++] = 216; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 216; goto st1083;} + {stack[top++] = 216; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 216; goto st1089;} + {stack[top++] = 216; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 216; goto st1095;} + {stack[top++] = 216; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 216; goto st1103;} + {stack[top++] = 216; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28379,7 +28388,7 @@ case 216: case 1083: goto tr744; } goto tr756; -tr3402: +tr3413: { s->r_class = s->default_class; } @@ -28390,76 +28399,76 @@ tr3402: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 217; goto st616;} + {stack[top++] = 217; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 217; goto st618;} + {stack[top++] = 217; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 217; goto st620;} + {stack[top++] = 217; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 217; goto st652;} + {stack[top++] = 217; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 217; goto st657;} + {stack[top++] = 217; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 217; goto st662;} + {stack[top++] = 217; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 217; goto st667;} + {stack[top++] = 217; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 217; goto st671;} + {stack[top++] = 217; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 217; goto st673;} + {stack[top++] = 217; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 217; goto st728;} + {stack[top++] = 217; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 217; goto st739;} + {stack[top++] = 217; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 217; goto st756;} + {stack[top++] = 217; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 217; goto st767;} + {stack[top++] = 217; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 217; goto st778;} + {stack[top++] = 217; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 217; goto st791;} + {stack[top++] = 217; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 217; goto st801;} + {stack[top++] = 217; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 217; goto st840;} + {stack[top++] = 217; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 217; goto st994;} + {stack[top++] = 217; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 217; goto st997;} + {stack[top++] = 217; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 217; goto st1008;} + {stack[top++] = 217; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 217; goto st1010;} + {stack[top++] = 217; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 217; goto st1039;} + {stack[top++] = 217; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 217; goto st1052;} + {stack[top++] = 217; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 217; goto st1070;} + {stack[top++] = 217; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 217; goto st1065;} + {stack[top++] = 217; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 217; goto st1083;} + {stack[top++] = 217; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 217; goto st1089;} + {stack[top++] = 217; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 217; goto st1095;} + {stack[top++] = 217; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 217; goto st1103;} + {stack[top++] = 217; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28500,7 +28509,7 @@ case 217: case 1083: goto tr744; } goto tr756; -tr3403: +tr3414: { s->r_class = s->default_class; } @@ -28511,76 +28520,76 @@ tr3403: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 218; goto st616;} + {stack[top++] = 218; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 218; goto st618;} + {stack[top++] = 218; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 218; goto st620;} + {stack[top++] = 218; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 218; goto st652;} + {stack[top++] = 218; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 218; goto st657;} + {stack[top++] = 218; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 218; goto st662;} + {stack[top++] = 218; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 218; goto st667;} + {stack[top++] = 218; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 218; goto st671;} + {stack[top++] = 218; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 218; goto st673;} + {stack[top++] = 218; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 218; goto st728;} + {stack[top++] = 218; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 218; goto st739;} + {stack[top++] = 218; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 218; goto st756;} + {stack[top++] = 218; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 218; goto st767;} + {stack[top++] = 218; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 218; goto st778;} + {stack[top++] = 218; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 218; goto st791;} + {stack[top++] = 218; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 218; goto st801;} + {stack[top++] = 218; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 218; goto st840;} + {stack[top++] = 218; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 218; goto st994;} + {stack[top++] = 218; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 218; goto st997;} + {stack[top++] = 218; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 218; goto st1008;} + {stack[top++] = 218; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 218; goto st1010;} + {stack[top++] = 218; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 218; goto st1039;} + {stack[top++] = 218; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 218; goto st1052;} + {stack[top++] = 218; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 218; goto st1070;} + {stack[top++] = 218; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 218; goto st1065;} + {stack[top++] = 218; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 218; goto st1083;} + {stack[top++] = 218; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 218; goto st1089;} + {stack[top++] = 218; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 218; goto st1095;} + {stack[top++] = 218; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 218; goto st1103;} + {stack[top++] = 218; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28625,7 +28634,7 @@ case 218: case 1083: goto tr744; } goto tr756; -tr3404: +tr3415: { s->r_class = s->default_class; } @@ -28636,76 +28645,76 @@ tr3404: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 219; goto st616;} + {stack[top++] = 219; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 219; goto st618;} + {stack[top++] = 219; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 219; goto st620;} + {stack[top++] = 219; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 219; goto st652;} + {stack[top++] = 219; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 219; goto st657;} + {stack[top++] = 219; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 219; goto st662;} + {stack[top++] = 219; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 219; goto st667;} + {stack[top++] = 219; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 219; goto st671;} + {stack[top++] = 219; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 219; goto st673;} + {stack[top++] = 219; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 219; goto st728;} + {stack[top++] = 219; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 219; goto st739;} + {stack[top++] = 219; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 219; goto st756;} + {stack[top++] = 219; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 219; goto st767;} + {stack[top++] = 219; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 219; goto st778;} + {stack[top++] = 219; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 219; goto st791;} + {stack[top++] = 219; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 219; goto st801;} + {stack[top++] = 219; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 219; goto st840;} + {stack[top++] = 219; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 219; goto st994;} + {stack[top++] = 219; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 219; goto st997;} + {stack[top++] = 219; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 219; goto st1008;} + {stack[top++] = 219; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 219; goto st1010;} + {stack[top++] = 219; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 219; goto st1039;} + {stack[top++] = 219; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 219; goto st1052;} + {stack[top++] = 219; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 219; goto st1070;} + {stack[top++] = 219; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 219; goto st1065;} + {stack[top++] = 219; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 219; goto st1083;} + {stack[top++] = 219; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 219; goto st1089;} + {stack[top++] = 219; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 219; goto st1095;} + {stack[top++] = 219; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 219; goto st1103;} + {stack[top++] = 219; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28752,7 +28761,7 @@ case 219: case 1083: goto tr744; } goto tr756; -tr3405: +tr3416: { s->r_class = s->default_class; } @@ -28763,76 +28772,76 @@ tr3405: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 220; goto st616;} + {stack[top++] = 220; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 220; goto st618;} + {stack[top++] = 220; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 220; goto st620;} + {stack[top++] = 220; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 220; goto st652;} + {stack[top++] = 220; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 220; goto st657;} + {stack[top++] = 220; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 220; goto st662;} + {stack[top++] = 220; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 220; goto st667;} + {stack[top++] = 220; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 220; goto st671;} + {stack[top++] = 220; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 220; goto st673;} + {stack[top++] = 220; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 220; goto st728;} + {stack[top++] = 220; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 220; goto st739;} + {stack[top++] = 220; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 220; goto st756;} + {stack[top++] = 220; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 220; goto st767;} + {stack[top++] = 220; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 220; goto st778;} + {stack[top++] = 220; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 220; goto st791;} + {stack[top++] = 220; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 220; goto st801;} + {stack[top++] = 220; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 220; goto st840;} + {stack[top++] = 220; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 220; goto st994;} + {stack[top++] = 220; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 220; goto st997;} + {stack[top++] = 220; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 220; goto st1008;} + {stack[top++] = 220; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 220; goto st1010;} + {stack[top++] = 220; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 220; goto st1039;} + {stack[top++] = 220; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 220; goto st1052;} + {stack[top++] = 220; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 220; goto st1070;} + {stack[top++] = 220; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 220; goto st1065;} + {stack[top++] = 220; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 220; goto st1083;} + {stack[top++] = 220; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 220; goto st1089;} + {stack[top++] = 220; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 220; goto st1095;} + {stack[top++] = 220; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 220; goto st1103;} + {stack[top++] = 220; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28877,7 +28886,7 @@ case 220: case 1083: goto tr744; } goto tr756; -tr3406: +tr3417: { s->r_class = s->default_class; } @@ -28888,76 +28897,76 @@ tr3406: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 221; goto st616;} + {stack[top++] = 221; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 221; goto st618;} + {stack[top++] = 221; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 221; goto st620;} + {stack[top++] = 221; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 221; goto st652;} + {stack[top++] = 221; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 221; goto st657;} + {stack[top++] = 221; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 221; goto st662;} + {stack[top++] = 221; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 221; goto st667;} + {stack[top++] = 221; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 221; goto st671;} + {stack[top++] = 221; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 221; goto st673;} + {stack[top++] = 221; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 221; goto st728;} + {stack[top++] = 221; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 221; goto st739;} + {stack[top++] = 221; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 221; goto st756;} + {stack[top++] = 221; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 221; goto st767;} + {stack[top++] = 221; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 221; goto st778;} + {stack[top++] = 221; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 221; goto st791;} + {stack[top++] = 221; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 221; goto st801;} + {stack[top++] = 221; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 221; goto st840;} + {stack[top++] = 221; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 221; goto st994;} + {stack[top++] = 221; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 221; goto st997;} + {stack[top++] = 221; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 221; goto st1008;} + {stack[top++] = 221; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 221; goto st1010;} + {stack[top++] = 221; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 221; goto st1039;} + {stack[top++] = 221; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 221; goto st1052;} + {stack[top++] = 221; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 221; goto st1070;} + {stack[top++] = 221; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 221; goto st1065;} + {stack[top++] = 221; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 221; goto st1083;} + {stack[top++] = 221; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 221; goto st1089;} + {stack[top++] = 221; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 221; goto st1095;} + {stack[top++] = 221; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 221; goto st1103;} + {stack[top++] = 221; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -28998,7 +29007,7 @@ case 221: case 1083: goto tr744; } goto tr756; -tr3324: +tr3335: { s->dname = s->r_owner; s->r_owner_length = 0; @@ -29050,76 +29059,76 @@ tr768: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 223; goto st616;} + {stack[top++] = 223; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 223; goto st618;} + {stack[top++] = 223; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 223; goto st620;} + {stack[top++] = 223; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 223; goto st652;} + {stack[top++] = 223; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 223; goto st657;} + {stack[top++] = 223; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 223; goto st662;} + {stack[top++] = 223; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 223; goto st667;} + {stack[top++] = 223; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 223; goto st671;} + {stack[top++] = 223; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 223; goto st673;} + {stack[top++] = 223; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 223; goto st728;} + {stack[top++] = 223; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 223; goto st739;} + {stack[top++] = 223; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 223; goto st756;} + {stack[top++] = 223; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 223; goto st767;} + {stack[top++] = 223; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 223; goto st778;} + {stack[top++] = 223; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 223; goto st791;} + {stack[top++] = 223; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 223; goto st801;} + {stack[top++] = 223; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 223; goto st840;} + {stack[top++] = 223; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 223; goto st994;} + {stack[top++] = 223; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 223; goto st997;} + {stack[top++] = 223; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 223; goto st1008;} + {stack[top++] = 223; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 223; goto st1010;} + {stack[top++] = 223; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 223; goto st1039;} + {stack[top++] = 223; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 223; goto st1052;} + {stack[top++] = 223; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 223; goto st1070;} + {stack[top++] = 223; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 223; goto st1065;} + {stack[top++] = 223; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 223; goto st1083;} + {stack[top++] = 223; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 223; goto st1089;} + {stack[top++] = 223; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 223; goto st1095;} + {stack[top++] = 223; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 223; goto st1103;} + {stack[top++] = 223; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -29142,76 +29151,76 @@ tr770: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 223; goto st616;} + {stack[top++] = 223; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 223; goto st618;} + {stack[top++] = 223; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 223; goto st620;} + {stack[top++] = 223; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 223; goto st652;} + {stack[top++] = 223; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 223; goto st657;} + {stack[top++] = 223; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 223; goto st662;} + {stack[top++] = 223; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 223; goto st667;} + {stack[top++] = 223; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 223; goto st671;} + {stack[top++] = 223; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 223; goto st673;} + {stack[top++] = 223; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 223; goto st728;} + {stack[top++] = 223; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 223; goto st739;} + {stack[top++] = 223; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 223; goto st756;} + {stack[top++] = 223; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 223; goto st767;} + {stack[top++] = 223; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 223; goto st778;} + {stack[top++] = 223; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 223; goto st791;} + {stack[top++] = 223; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 223; goto st801;} + {stack[top++] = 223; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 223; goto st840;} + {stack[top++] = 223; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 223; goto st994;} + {stack[top++] = 223; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 223; goto st997;} + {stack[top++] = 223; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 223; goto st1008;} + {stack[top++] = 223; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 223; goto st1010;} + {stack[top++] = 223; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 223; goto st1039;} + {stack[top++] = 223; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 223; goto st1052;} + {stack[top++] = 223; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 223; goto st1070;} + {stack[top++] = 223; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 223; goto st1065;} + {stack[top++] = 223; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 223; goto st1083;} + {stack[top++] = 223; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 223; goto st1089;} + {stack[top++] = 223; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 223; goto st1095;} + {stack[top++] = 223; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 223; goto st1103;} + {stack[top++] = 223; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -29234,76 +29243,76 @@ tr771: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 223; goto st616;} + {stack[top++] = 223; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 223; goto st618;} + {stack[top++] = 223; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 223; goto st620;} + {stack[top++] = 223; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 223; goto st652;} + {stack[top++] = 223; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 223; goto st657;} + {stack[top++] = 223; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 223; goto st662;} + {stack[top++] = 223; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 223; goto st667;} + {stack[top++] = 223; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 223; goto st671;} + {stack[top++] = 223; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 223; goto st673;} + {stack[top++] = 223; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 223; goto st728;} + {stack[top++] = 223; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 223; goto st739;} + {stack[top++] = 223; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 223; goto st756;} + {stack[top++] = 223; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 223; goto st767;} + {stack[top++] = 223; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 223; goto st778;} + {stack[top++] = 223; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 223; goto st791;} + {stack[top++] = 223; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 223; goto st801;} + {stack[top++] = 223; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 223; goto st840;} + {stack[top++] = 223; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 223; goto st994;} + {stack[top++] = 223; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 223; goto st997;} + {stack[top++] = 223; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 223; goto st1008;} + {stack[top++] = 223; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 223; goto st1010;} + {stack[top++] = 223; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 223; goto st1039;} + {stack[top++] = 223; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 223; goto st1052;} + {stack[top++] = 223; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 223; goto st1070;} + {stack[top++] = 223; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 223; goto st1065;} + {stack[top++] = 223; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 223; goto st1083;} + {stack[top++] = 223; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 223; goto st1089;} + {stack[top++] = 223; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 223; goto st1095;} + {stack[top++] = 223; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 223; goto st1103;} + {stack[top++] = 223; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -29322,76 +29331,76 @@ tr772: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 223; goto st616;} + {stack[top++] = 223; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 223; goto st618;} + {stack[top++] = 223; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 223; goto st620;} + {stack[top++] = 223; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 223; goto st652;} + {stack[top++] = 223; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 223; goto st657;} + {stack[top++] = 223; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 223; goto st662;} + {stack[top++] = 223; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 223; goto st667;} + {stack[top++] = 223; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 223; goto st671;} + {stack[top++] = 223; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 223; goto st673;} + {stack[top++] = 223; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 223; goto st728;} + {stack[top++] = 223; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 223; goto st739;} + {stack[top++] = 223; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 223; goto st756;} + {stack[top++] = 223; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 223; goto st767;} + {stack[top++] = 223; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 223; goto st778;} + {stack[top++] = 223; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 223; goto st791;} + {stack[top++] = 223; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 223; goto st801;} + {stack[top++] = 223; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 223; goto st840;} + {stack[top++] = 223; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 223; goto st994;} + {stack[top++] = 223; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 223; goto st997;} + {stack[top++] = 223; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 223; goto st1008;} + {stack[top++] = 223; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 223; goto st1010;} + {stack[top++] = 223; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 223; goto st1039;} + {stack[top++] = 223; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 223; goto st1052;} + {stack[top++] = 223; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 223; goto st1070;} + {stack[top++] = 223; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 223; goto st1065;} + {stack[top++] = 223; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 223; goto st1083;} + {stack[top++] = 223; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 223; goto st1089;} + {stack[top++] = 223; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 223; goto st1095;} + {stack[top++] = 223; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 223; goto st1103;} + {stack[top++] = 223; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -29466,76 +29475,76 @@ tr773: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 224; goto st616;} + {stack[top++] = 224; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 224; goto st618;} + {stack[top++] = 224; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 224; goto st620;} + {stack[top++] = 224; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 224; goto st652;} + {stack[top++] = 224; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 224; goto st657;} + {stack[top++] = 224; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 224; goto st662;} + {stack[top++] = 224; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 224; goto st667;} + {stack[top++] = 224; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 224; goto st671;} + {stack[top++] = 224; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 224; goto st673;} + {stack[top++] = 224; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 224; goto st728;} + {stack[top++] = 224; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 224; goto st739;} + {stack[top++] = 224; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 224; goto st756;} + {stack[top++] = 224; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 224; goto st767;} + {stack[top++] = 224; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 224; goto st778;} + {stack[top++] = 224; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 224; goto st791;} + {stack[top++] = 224; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 224; goto st801;} + {stack[top++] = 224; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 224; goto st840;} + {stack[top++] = 224; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 224; goto st994;} + {stack[top++] = 224; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 224; goto st997;} + {stack[top++] = 224; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 224; goto st1008;} + {stack[top++] = 224; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 224; goto st1010;} + {stack[top++] = 224; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 224; goto st1039;} + {stack[top++] = 224; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 224; goto st1052;} + {stack[top++] = 224; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 224; goto st1070;} + {stack[top++] = 224; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 224; goto st1065;} + {stack[top++] = 224; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 224; goto st1083;} + {stack[top++] = 224; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 224; goto st1089;} + {stack[top++] = 224; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 224; goto st1095;} + {stack[top++] = 224; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 224; goto st1103;} + {stack[top++] = 224; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -29685,76 +29694,76 @@ tr727: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 226; goto st616;} + {stack[top++] = 226; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 226; goto st618;} + {stack[top++] = 226; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 226; goto st620;} + {stack[top++] = 226; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 226; goto st652;} + {stack[top++] = 226; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 226; goto st657;} + {stack[top++] = 226; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 226; goto st662;} + {stack[top++] = 226; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 226; goto st667;} + {stack[top++] = 226; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 226; goto st671;} + {stack[top++] = 226; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 226; goto st673;} + {stack[top++] = 226; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 226; goto st728;} + {stack[top++] = 226; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 226; goto st739;} + {stack[top++] = 226; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 226; goto st756;} + {stack[top++] = 226; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 226; goto st767;} + {stack[top++] = 226; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 226; goto st778;} + {stack[top++] = 226; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 226; goto st791;} + {stack[top++] = 226; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 226; goto st801;} + {stack[top++] = 226; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 226; goto st840;} + {stack[top++] = 226; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 226; goto st994;} + {stack[top++] = 226; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 226; goto st997;} + {stack[top++] = 226; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 226; goto st1008;} + {stack[top++] = 226; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 226; goto st1010;} + {stack[top++] = 226; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 226; goto st1039;} + {stack[top++] = 226; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 226; goto st1052;} + {stack[top++] = 226; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 226; goto st1070;} + {stack[top++] = 226; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 226; goto st1065;} + {stack[top++] = 226; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 226; goto st1083;} + {stack[top++] = 226; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 226; goto st1089;} + {stack[top++] = 226; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 226; goto st1095;} + {stack[top++] = 226; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 226; goto st1103;} + {stack[top++] = 226; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -29773,157 +29782,157 @@ tr763: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 226; goto st616;} + {stack[top++] = 226; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 226; goto st618;} + {stack[top++] = 226; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 226; goto st620;} + {stack[top++] = 226; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 226; goto st652;} + {stack[top++] = 226; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 226; goto st657;} + {stack[top++] = 226; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 226; goto st662;} + {stack[top++] = 226; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 226; goto st667;} + {stack[top++] = 226; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 226; goto st671;} + {stack[top++] = 226; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 226; goto st673;} + {stack[top++] = 226; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 226; goto st728;} + {stack[top++] = 226; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 226; goto st739;} + {stack[top++] = 226; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 226; goto st756;} + {stack[top++] = 226; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 226; goto st767;} + {stack[top++] = 226; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 226; goto st778;} + {stack[top++] = 226; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 226; goto st791;} + {stack[top++] = 226; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 226; goto st801;} + {stack[top++] = 226; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 226; goto st840;} + {stack[top++] = 226; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 226; goto st994;} + {stack[top++] = 226; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 226; goto st997;} + {stack[top++] = 226; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 226; goto st1008;} + {stack[top++] = 226; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 226; goto st1010;} + {stack[top++] = 226; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 226; goto st1039;} + {stack[top++] = 226; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 226; goto st1052;} + {stack[top++] = 226; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 226; goto st1070;} + {stack[top++] = 226; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 226; goto st1065;} + {stack[top++] = 226; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 226; goto st1083;} + {stack[top++] = 226; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 226; goto st1089;} + {stack[top++] = 226; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 226; goto st1095;} + {stack[top++] = 226; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 226; goto st1103;} + {stack[top++] = 226; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} } } goto st226; -tr3389: +tr3400: { p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 226; goto st616;} + {stack[top++] = 226; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 226; goto st618;} + {stack[top++] = 226; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 226; goto st620;} + {stack[top++] = 226; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 226; goto st652;} + {stack[top++] = 226; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 226; goto st657;} + {stack[top++] = 226; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 226; goto st662;} + {stack[top++] = 226; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 226; goto st667;} + {stack[top++] = 226; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 226; goto st671;} + {stack[top++] = 226; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 226; goto st673;} + {stack[top++] = 226; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 226; goto st728;} + {stack[top++] = 226; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 226; goto st739;} + {stack[top++] = 226; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 226; goto st756;} + {stack[top++] = 226; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 226; goto st767;} + {stack[top++] = 226; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 226; goto st778;} + {stack[top++] = 226; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 226; goto st791;} + {stack[top++] = 226; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 226; goto st801;} + {stack[top++] = 226; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 226; goto st840;} + {stack[top++] = 226; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 226; goto st994;} + {stack[top++] = 226; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 226; goto st997;} + {stack[top++] = 226; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 226; goto st1008;} + {stack[top++] = 226; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 226; goto st1010;} + {stack[top++] = 226; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 226; goto st1039;} + {stack[top++] = 226; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 226; goto st1052;} + {stack[top++] = 226; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 226; goto st1070;} + {stack[top++] = 226; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 226; goto st1065;} + {stack[top++] = 226; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 226; goto st1083;} + {stack[top++] = 226; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 226; goto st1089;} + {stack[top++] = 226; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 226; goto st1095;} + {stack[top++] = 226; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 226; goto st1103;} + {stack[top++] = 226; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -30141,7 +30150,7 @@ case 235: case 2619: goto tr809; } goto tr57; -tr3326: +tr3337: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -30186,76 +30195,76 @@ tr119: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 237; goto st616;} + {stack[top++] = 237; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 237; goto st618;} + {stack[top++] = 237; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 237; goto st620;} + {stack[top++] = 237; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 237; goto st652;} + {stack[top++] = 237; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 237; goto st657;} + {stack[top++] = 237; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 237; goto st662;} + {stack[top++] = 237; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 237; goto st667;} + {stack[top++] = 237; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 237; goto st671;} + {stack[top++] = 237; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 237; goto st673;} + {stack[top++] = 237; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 237; goto st728;} + {stack[top++] = 237; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 237; goto st739;} + {stack[top++] = 237; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 237; goto st756;} + {stack[top++] = 237; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 237; goto st767;} + {stack[top++] = 237; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 237; goto st778;} + {stack[top++] = 237; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 237; goto st791;} + {stack[top++] = 237; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 237; goto st801;} + {stack[top++] = 237; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 237; goto st840;} + {stack[top++] = 237; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 237; goto st994;} + {stack[top++] = 237; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 237; goto st997;} + {stack[top++] = 237; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 237; goto st1008;} + {stack[top++] = 237; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 237; goto st1010;} + {stack[top++] = 237; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 237; goto st1039;} + {stack[top++] = 237; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 237; goto st1052;} + {stack[top++] = 237; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 237; goto st1070;} + {stack[top++] = 237; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 237; goto st1065;} + {stack[top++] = 237; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 237; goto st1083;} + {stack[top++] = 237; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 237; goto st1089;} + {stack[top++] = 237; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 237; goto st1095;} + {stack[top++] = 237; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 237; goto st1103;} + {stack[top++] = 237; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -30373,157 +30382,157 @@ tr121: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 239; goto st616;} + {stack[top++] = 239; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 239; goto st618;} + {stack[top++] = 239; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 239; goto st620;} + {stack[top++] = 239; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 239; goto st652;} + {stack[top++] = 239; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 239; goto st657;} + {stack[top++] = 239; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 239; goto st662;} + {stack[top++] = 239; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 239; goto st667;} + {stack[top++] = 239; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 239; goto st671;} + {stack[top++] = 239; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 239; goto st673;} + {stack[top++] = 239; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 239; goto st728;} + {stack[top++] = 239; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 239; goto st739;} + {stack[top++] = 239; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 239; goto st756;} + {stack[top++] = 239; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 239; goto st767;} + {stack[top++] = 239; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 239; goto st778;} + {stack[top++] = 239; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 239; goto st791;} + {stack[top++] = 239; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 239; goto st801;} + {stack[top++] = 239; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 239; goto st840;} + {stack[top++] = 239; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 239; goto st994;} + {stack[top++] = 239; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 239; goto st997;} + {stack[top++] = 239; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 239; goto st1008;} + {stack[top++] = 239; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 239; goto st1010;} + {stack[top++] = 239; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 239; goto st1039;} + {stack[top++] = 239; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 239; goto st1052;} + {stack[top++] = 239; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 239; goto st1070;} + {stack[top++] = 239; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 239; goto st1065;} + {stack[top++] = 239; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 239; goto st1083;} + {stack[top++] = 239; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 239; goto st1089;} + {stack[top++] = 239; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 239; goto st1095;} + {stack[top++] = 239; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 239; goto st1103;} + {stack[top++] = 239; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} } } goto st239; -tr3328: +tr3339: { p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 239; goto st616;} + {stack[top++] = 239; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 239; goto st618;} + {stack[top++] = 239; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 239; goto st620;} + {stack[top++] = 239; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 239; goto st652;} + {stack[top++] = 239; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 239; goto st657;} + {stack[top++] = 239; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 239; goto st662;} + {stack[top++] = 239; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 239; goto st667;} + {stack[top++] = 239; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 239; goto st671;} + {stack[top++] = 239; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 239; goto st673;} + {stack[top++] = 239; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 239; goto st728;} + {stack[top++] = 239; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 239; goto st739;} + {stack[top++] = 239; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 239; goto st756;} + {stack[top++] = 239; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 239; goto st767;} + {stack[top++] = 239; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 239; goto st778;} + {stack[top++] = 239; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 239; goto st791;} + {stack[top++] = 239; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 239; goto st801;} + {stack[top++] = 239; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 239; goto st840;} + {stack[top++] = 239; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 239; goto st994;} + {stack[top++] = 239; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 239; goto st997;} + {stack[top++] = 239; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 239; goto st1008;} + {stack[top++] = 239; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 239; goto st1010;} + {stack[top++] = 239; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 239; goto st1039;} + {stack[top++] = 239; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 239; goto st1052;} + {stack[top++] = 239; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 239; goto st1070;} + {stack[top++] = 239; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 239; goto st1065;} + {stack[top++] = 239; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 239; goto st1083;} + {stack[top++] = 239; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 239; goto st1089;} + {stack[top++] = 239; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 239; goto st1095;} + {stack[top++] = 239; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 239; goto st1103;} + {stack[top++] = 239; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -30617,76 +30626,76 @@ tr710: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 240; goto st616;} + {stack[top++] = 240; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 240; goto st618;} + {stack[top++] = 240; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 240; goto st620;} + {stack[top++] = 240; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 240; goto st652;} + {stack[top++] = 240; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 240; goto st657;} + {stack[top++] = 240; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 240; goto st662;} + {stack[top++] = 240; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 240; goto st667;} + {stack[top++] = 240; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 240; goto st671;} + {stack[top++] = 240; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 240; goto st673;} + {stack[top++] = 240; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 240; goto st728;} + {stack[top++] = 240; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 240; goto st739;} + {stack[top++] = 240; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 240; goto st756;} + {stack[top++] = 240; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 240; goto st767;} + {stack[top++] = 240; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 240; goto st778;} + {stack[top++] = 240; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 240; goto st791;} + {stack[top++] = 240; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 240; goto st801;} + {stack[top++] = 240; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 240; goto st840;} + {stack[top++] = 240; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 240; goto st994;} + {stack[top++] = 240; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 240; goto st997;} + {stack[top++] = 240; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 240; goto st1008;} + {stack[top++] = 240; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 240; goto st1010;} + {stack[top++] = 240; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 240; goto st1039;} + {stack[top++] = 240; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 240; goto st1052;} + {stack[top++] = 240; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 240; goto st1070;} + {stack[top++] = 240; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 240; goto st1065;} + {stack[top++] = 240; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 240; goto st1083;} + {stack[top++] = 240; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 240; goto st1089;} + {stack[top++] = 240; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 240; goto st1095;} + {stack[top++] = 240; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 240; goto st1103;} + {stack[top++] = 240; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -30698,76 +30707,76 @@ tr94: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 240; goto st616;} + {stack[top++] = 240; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 240; goto st618;} + {stack[top++] = 240; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 240; goto st620;} + {stack[top++] = 240; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 240; goto st652;} + {stack[top++] = 240; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 240; goto st657;} + {stack[top++] = 240; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 240; goto st662;} + {stack[top++] = 240; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 240; goto st667;} + {stack[top++] = 240; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 240; goto st671;} + {stack[top++] = 240; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 240; goto st673;} + {stack[top++] = 240; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 240; goto st728;} + {stack[top++] = 240; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 240; goto st739;} + {stack[top++] = 240; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 240; goto st756;} + {stack[top++] = 240; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 240; goto st767;} + {stack[top++] = 240; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 240; goto st778;} + {stack[top++] = 240; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 240; goto st791;} + {stack[top++] = 240; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 240; goto st801;} + {stack[top++] = 240; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 240; goto st840;} + {stack[top++] = 240; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 240; goto st994;} + {stack[top++] = 240; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 240; goto st997;} + {stack[top++] = 240; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 240; goto st1008;} + {stack[top++] = 240; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 240; goto st1010;} + {stack[top++] = 240; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 240; goto st1039;} + {stack[top++] = 240; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 240; goto st1052;} + {stack[top++] = 240; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 240; goto st1070;} + {stack[top++] = 240; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 240; goto st1065;} + {stack[top++] = 240; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 240; goto st1083;} + {stack[top++] = 240; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 240; goto st1089;} + {stack[top++] = 240; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 240; goto st1095;} + {stack[top++] = 240; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 240; goto st1103;} + {stack[top++] = 240; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -30885,76 +30894,76 @@ tr700: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 242; goto st616;} + {stack[top++] = 242; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 242; goto st618;} + {stack[top++] = 242; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 242; goto st620;} + {stack[top++] = 242; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 242; goto st652;} + {stack[top++] = 242; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 242; goto st657;} + {stack[top++] = 242; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 242; goto st662;} + {stack[top++] = 242; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 242; goto st667;} + {stack[top++] = 242; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 242; goto st671;} + {stack[top++] = 242; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 242; goto st673;} + {stack[top++] = 242; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 242; goto st728;} + {stack[top++] = 242; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 242; goto st739;} + {stack[top++] = 242; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 242; goto st756;} + {stack[top++] = 242; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 242; goto st767;} + {stack[top++] = 242; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 242; goto st778;} + {stack[top++] = 242; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 242; goto st791;} + {stack[top++] = 242; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 242; goto st801;} + {stack[top++] = 242; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 242; goto st840;} + {stack[top++] = 242; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 242; goto st994;} + {stack[top++] = 242; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 242; goto st997;} + {stack[top++] = 242; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 242; goto st1008;} + {stack[top++] = 242; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 242; goto st1010;} + {stack[top++] = 242; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 242; goto st1039;} + {stack[top++] = 242; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 242; goto st1052;} + {stack[top++] = 242; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 242; goto st1070;} + {stack[top++] = 242; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 242; goto st1065;} + {stack[top++] = 242; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 242; goto st1083;} + {stack[top++] = 242; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 242; goto st1089;} + {stack[top++] = 242; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 242; goto st1095;} + {stack[top++] = 242; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 242; goto st1103;} + {stack[top++] = 242; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -30973,76 +30982,76 @@ tr693: p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = 242; goto st616;} + {stack[top++] = 242; goto st625;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = 242; goto st618;} + {stack[top++] = 242; goto st627;} case KNOT_RRTYPE_SOA: - {stack[top++] = 242; goto st620;} + {stack[top++] = 242; goto st629;} case KNOT_RRTYPE_HINFO: - {stack[top++] = 242; goto st652;} + {stack[top++] = 242; goto st661;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = 242; goto st657;} + {stack[top++] = 242; goto st666;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = 242; goto st662;} + {stack[top++] = 242; goto st671;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = 242; goto st667;} + {stack[top++] = 242; goto st676;} case KNOT_RRTYPE_AAAA: - {stack[top++] = 242; goto st671;} + {stack[top++] = 242; goto st680;} case KNOT_RRTYPE_LOC: - {stack[top++] = 242; goto st673;} + {stack[top++] = 242; goto st682;} case KNOT_RRTYPE_SRV: - {stack[top++] = 242; goto st728;} + {stack[top++] = 242; goto st737;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = 242; goto st739;} + {stack[top++] = 242; goto st748;} case KNOT_RRTYPE_CERT: - {stack[top++] = 242; goto st756;} + {stack[top++] = 242; goto st765;} case KNOT_RRTYPE_APL: - {stack[top++] = 242; goto st767;} + {stack[top++] = 242; goto st776;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = 242; goto st778;} + {stack[top++] = 242; goto st787;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = 242; goto st791;} + {stack[top++] = 242; goto st800;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = 242; goto st801;} + {stack[top++] = 242; goto st810;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = 242; goto st840;} + {stack[top++] = 242; goto st849;} case KNOT_RRTYPE_NSEC: - {stack[top++] = 242; goto st994;} + {stack[top++] = 242; goto st1003;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = 242; goto st997;} + {stack[top++] = 242; goto st1006;} case KNOT_RRTYPE_DHCID: - {stack[top++] = 242; goto st1008;} + {stack[top++] = 242; goto st1017;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = 242; goto st1010;} + {stack[top++] = 242; goto st1019;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = 242; goto st1039;} + {stack[top++] = 242; goto st1048;} case KNOT_RRTYPE_TLSA: - {stack[top++] = 242; goto st1052;} + {stack[top++] = 242; goto st1061;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = 242; goto st1070;} + {stack[top++] = 242; goto st1079;} case KNOT_RRTYPE_L32: - {stack[top++] = 242; goto st1065;} + {stack[top++] = 242; goto st1074;} case KNOT_RRTYPE_EUI48: - {stack[top++] = 242; goto st1083;} + {stack[top++] = 242; goto st1092;} case KNOT_RRTYPE_EUI64: - {stack[top++] = 242; goto st1089;} + {stack[top++] = 242; goto st1098;} case KNOT_RRTYPE_URI: - {stack[top++] = 242; goto st1095;} + {stack[top++] = 242; goto st1104;} case KNOT_RRTYPE_CAA: - {stack[top++] = 242; goto st1103;} + {stack[top++] = 242; goto st1112;} default: WARN(ZS_CANNOT_TEXT_DATA); {goto st261;} @@ -31100,7 +31109,7 @@ case 242: if ( 896 <= _widec && _widec <= 1151 ) goto st241; goto tr79; -tr3334: +tr3345: { s->r_class = s->default_class; } @@ -31110,7 +31119,7 @@ tr3334: } { p--; {stack[top++] = 243; goto st263;} } goto st243; -tr3353: +tr3364: { s->r_class = s->default_class; } @@ -31156,7 +31165,7 @@ case 243: case 1083: goto tr655; } goto tr822; -tr3335: +tr3346: { s->r_class = s->default_class; } @@ -31166,7 +31175,7 @@ tr3335: } { p--; {stack[top++] = 244; goto st263;} } goto st244; -tr3354: +tr3365: { s->r_class = s->default_class; } @@ -31210,7 +31219,7 @@ case 244: case 1083: goto tr655; } goto tr822; -tr3336: +tr3347: { s->r_class = s->default_class; } @@ -31220,7 +31229,7 @@ tr3336: } { p--; {stack[top++] = 245; goto st263;} } goto st245; -tr3355: +tr3366: { s->r_class = s->default_class; } @@ -31260,7 +31269,7 @@ case 245: case 1083: goto tr655; } goto tr822; -tr3337: +tr3348: { s->r_class = s->default_class; } @@ -31270,7 +31279,7 @@ tr3337: } { p--; {stack[top++] = 246; goto st263;} } goto st246; -tr3356: +tr3367: { s->r_class = s->default_class; } @@ -31310,7 +31319,7 @@ case 246: case 1083: goto tr655; } goto tr822; -tr3357: +tr3368: { s->r_class = s->default_class; } @@ -31352,7 +31361,7 @@ case 247: case 1083: goto tr655; } goto tr822; -tr3339: +tr3350: { s->r_class = s->default_class; } @@ -31362,7 +31371,7 @@ tr3339: } { p--; {stack[top++] = 248; goto st263;} } goto st248; -tr3358: +tr3369: { s->r_class = s->default_class; } @@ -31404,7 +31413,7 @@ case 248: case 1083: goto tr655; } goto tr822; -tr3340: +tr3351: { s->r_class = s->default_class; } @@ -31414,7 +31423,7 @@ tr3340: } { p--; {stack[top++] = 249; goto st263;} } goto st249; -tr3359: +tr3370: { s->r_class = s->default_class; } @@ -31458,7 +31467,7 @@ case 249: case 1083: goto tr655; } goto tr822; -tr3341: +tr3352: { s->r_class = s->default_class; } @@ -31468,7 +31477,7 @@ tr3341: } { p--; {stack[top++] = 250; goto st263;} } goto st250; -tr3360: +tr3371: { s->r_class = s->default_class; } @@ -31510,7 +31519,7 @@ case 250: case 1083: goto tr655; } goto tr822; -tr3342: +tr3353: { s->r_class = s->default_class; } @@ -31520,7 +31529,7 @@ tr3342: } { p--; {stack[top++] = 251; goto st263;} } goto st251; -tr3361: +tr3372: { s->r_class = s->default_class; } @@ -31564,7 +31573,7 @@ case 251: case 1083: goto tr655; } goto tr822; -tr3343: +tr3354: { s->r_class = s->default_class; } @@ -31574,7 +31583,7 @@ tr3343: } { p--; {stack[top++] = 252; goto st263;} } goto st252; -tr3362: +tr3373: { s->r_class = s->default_class; } @@ -31614,7 +31623,7 @@ case 252: case 1083: goto tr655; } goto tr822; -tr3344: +tr3355: { s->r_class = s->default_class; } @@ -31624,7 +31633,7 @@ tr3344: } { p--; {stack[top++] = 253; goto st263;} } goto st253; -tr3363: +tr3374: { s->r_class = s->default_class; } @@ -31668,7 +31677,7 @@ case 253: case 1083: goto tr655; } goto tr822; -tr3345: +tr3356: { s->r_class = s->default_class; } @@ -31678,7 +31687,7 @@ tr3345: } { p--; {stack[top++] = 254; goto st263;} } goto st254; -tr3364: +tr3375: { s->r_class = s->default_class; } @@ -31724,7 +31733,7 @@ case 254: case 1083: goto tr655; } goto tr822; -tr3346: +tr3357: { s->r_class = s->default_class; } @@ -31734,7 +31743,7 @@ tr3346: } { p--; {stack[top++] = 255; goto st263;} } goto st255; -tr3365: +tr3376: { s->r_class = s->default_class; } @@ -31778,7 +31787,7 @@ case 255: case 1083: goto tr655; } goto tr822; -tr3347: +tr3358: { s->r_class = s->default_class; } @@ -31788,7 +31797,7 @@ tr3347: } { p--; {stack[top++] = 256; goto st263;} } goto st256; -tr3366: +tr3377: { s->r_class = s->default_class; } @@ -31828,7 +31837,7 @@ case 256: case 1083: goto tr655; } goto tr822; -tr3318: +tr3329: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -31836,12 +31845,12 @@ tr3318: } } goto st257; -tr3376: +tr3387: cs = 257; { NOERR; if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } } { @@ -31883,7 +31892,7 @@ case 257: } else if ( _widec >= 640 ) goto st149; goto tr85; -tr3349: +tr3360: { if (s->r_owner_length == 0) { WARN(ZS_BAD_PREVIOUS_OWNER); @@ -31923,7 +31932,7 @@ case 258: } else if ( _widec >= 640 ) goto st149; goto tr128; -tr3338: +tr3349: { s->r_class = s->default_class; } @@ -32044,7 +32053,7 @@ case 262: goto tr826; goto tr825; tr824: - cs = 1121; + cs = 1130; { s->buffer_length = 0; } @@ -32089,14 +32098,14 @@ tr824: } { if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } else { - {goto st1111;} + {goto st1120;} } } goto _again; tr826: - cs = 1121; + cs = 1130; { // Terminate the error context string. s->buffer[s->buffer_length++] = 0; @@ -32138,16 +32147,16 @@ tr826: } { if (escape) { - cs = 1111; {p++; goto _out;} + cs = 1120; {p++; goto _out;} } else { - {goto st1111;} + {goto st1120;} } } goto _again; -st1121: +st1130: if ( ++p == pe ) - goto _test_eof1121; -case 1121: + goto _test_eof1130; +case 1130: goto st0; st263: if ( ++p == pe ) @@ -32287,7 +32296,7 @@ tr832: { p--; {cs = stack[--top];goto _again;} } - goto st1122; + goto st1131; tr836: { // Enough room for the terminal label is guaranteed (_label_exit). @@ -32296,7 +32305,7 @@ tr836: { p--; {cs = stack[--top];goto _again;} } - goto st1122; + goto st1131; tr843: { s->dname_tmp_length++; @@ -32328,7 +32337,7 @@ tr843: { p--; {cs = stack[--top];goto _again;} } - goto st1122; + goto st1131; tr847: { // Copy already verified zone origin. @@ -32341,11 +32350,11 @@ tr847: { p--; {cs = stack[--top];goto _again;} } - goto st1122; -st1122: + goto st1131; +st1131: if ( ++p == pe ) - goto _test_eof1122; -case 1122: + goto _test_eof1131; +case 1131: goto st0; tr834: { @@ -32624,7 +32633,7 @@ tr852: { p--; {cs = stack[--top];goto _again;} } - goto st1123; + goto st1132; tr858: { rdata_tail++; @@ -32632,11 +32641,11 @@ tr858: { p--; {cs = stack[--top];goto _again;} } - goto st1123; -st1123: + goto st1132; +st1132: if ( ++p == pe ) - goto _test_eof1123; -case 1123: + goto _test_eof1132; +case 1132: goto st0; tr853: { @@ -32664,7 +32673,7 @@ tr853: { p--; {cs = stack[--top];goto _again;} } - goto st1124; + goto st1133; tr860: { rdata_tail++; @@ -32694,11 +32703,11 @@ tr860: { p--; {cs = stack[--top];goto _again;} } - goto st1124; -st1124: + goto st1133; +st1133: if ( ++p == pe ) - goto _test_eof1124; -case 1124: + goto _test_eof1133; +case 1133: switch( (*p) ) { case 32: goto tr852; case 33: goto tr849; @@ -33288,7 +33297,7 @@ tr890: { s->line_counter++; } - goto st1125; + goto st1134; tr905: { if (s->number64 + s->number64_tmp < UINT32_MAX) { @@ -33312,11 +33321,11 @@ tr905: { s->line_counter++; } - goto st1125; -st1125: + goto st1134; +st1134: if ( ++p == pe ) - goto _test_eof1125; -case 1125: + goto _test_eof1134; +case 1134: goto st0; tr906: { @@ -33908,7 +33917,7 @@ tr925: { s->line_counter++; } - goto st1126; + goto st1135; tr930: { s->zone_origin_length = s->dname_tmp_length; @@ -33919,11 +33928,11 @@ tr930: { s->line_counter++; } - goto st1126; -st1126: + goto st1135; +st1135: if ( ++p == pe ) - goto _test_eof1126; -case 1126: + goto _test_eof1135; +case 1135: goto st0; tr926: { @@ -34642,7 +34651,7 @@ tr950: { s->line_counter++; } - goto st1127; + goto st1136; tr960: { // Extend relative file path. @@ -34707,7 +34716,7 @@ tr960: { s->line_counter++; } - goto st1127; + goto st1136; tr972: { // Enough room for the terminal label is guaranteed (_label_exit). @@ -34779,11 +34788,11 @@ tr972: { s->line_counter++; } - goto st1127; -st1127: + goto st1136; +st1136: if ( ++p == pe ) - goto _test_eof1127; -case 1127: + goto _test_eof1136; +case 1136: goto st0; tr951: { @@ -35056,11 +35065,11 @@ tr984: { p--; {cs = stack[--top];goto _again;} } - goto st1128; -st1128: + goto st1137; +st1137: if ( ++p == pe ) - goto _test_eof1128; -case 1128: + goto _test_eof1137; +case 1137: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -35407,11 +35416,11 @@ tr1001: { p--; {cs = stack[--top];goto _again;} } - goto st1129; -st1129: + goto st1138; +st1138: if ( ++p == pe ) - goto _test_eof1129; -case 1129: + goto _test_eof1138; +case 1138: goto st0; tr1002: { @@ -35420,11 +35429,11 @@ tr1002: { p--; {cs = stack[--top];goto _again;} } - goto st1130; -st1130: + goto st1139; +st1139: if ( ++p == pe ) - goto _test_eof1130; -case 1130: + goto _test_eof1139; +case 1139: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -35467,11 +35476,11 @@ tr1003: { p--; {cs = stack[--top];goto _again;} } - goto st1131; -st1131: + goto st1140; +st1140: if ( ++p == pe ) - goto _test_eof1131; -case 1131: + goto _test_eof1140; +case 1140: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -37227,7 +37236,7 @@ tr1010: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1033: { for (window = 0; window <= s->last_window; window++) { @@ -37255,7 +37264,7 @@ tr1033: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1044: { window_add_bit(KNOT_RRTYPE_A, s); } { @@ -37284,7 +37293,7 @@ tr1044: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1054: { window_add_bit(KNOT_RRTYPE_AAAA, s); } { @@ -37313,7 +37322,7 @@ tr1054: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1067: { window_add_bit(KNOT_RRTYPE_CAA, s); } { @@ -37342,7 +37351,7 @@ tr1067: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1081: { window_add_bit(KNOT_RRTYPE_CDNSKEY, s); } { @@ -37371,7 +37380,7 @@ tr1081: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1089: { window_add_bit(KNOT_RRTYPE_CDS, s); } { @@ -37400,7 +37409,7 @@ tr1089: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1099: { window_add_bit(KNOT_RRTYPE_CERT, s); } { @@ -37429,7 +37438,7 @@ tr1099: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1110: { window_add_bit(KNOT_RRTYPE_CNAME, s); } { @@ -37458,7 +37467,7 @@ tr1110: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1124: { window_add_bit(KNOT_RRTYPE_DHCID, s); } { @@ -37487,7 +37496,7 @@ tr1124: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1136: { window_add_bit(KNOT_RRTYPE_DNAME, s); } { @@ -37516,7 +37525,7 @@ tr1136: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1147: { window_add_bit(KNOT_RRTYPE_DNSKEY, s); } { @@ -37545,7 +37554,7 @@ tr1147: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1155: { window_add_bit(KNOT_RRTYPE_DS, s); } { @@ -37574,7 +37583,7 @@ tr1155: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1168: { window_add_bit(KNOT_RRTYPE_EUI48, s); } { @@ -37603,7 +37612,7 @@ tr1168: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1177: { window_add_bit(KNOT_RRTYPE_EUI64, s); } { @@ -37632,7 +37641,7 @@ tr1177: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1189: { window_add_bit(KNOT_RRTYPE_HINFO, s); } { @@ -37661,7 +37670,7 @@ tr1189: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1204: { window_add_bit(KNOT_RRTYPE_IPSECKEY, s); } { @@ -37690,7 +37699,7 @@ tr1204: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1215: { window_add_bit(KNOT_RRTYPE_KEY, s); } { @@ -37719,7 +37728,7 @@ tr1215: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1223: { window_add_bit(KNOT_RRTYPE_KX, s); } { @@ -37748,7 +37757,7 @@ tr1223: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1236: { window_add_bit(KNOT_RRTYPE_L32, s); } { @@ -37777,7 +37786,7 @@ tr1236: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1245: { window_add_bit(KNOT_RRTYPE_L64, s); } { @@ -37806,7 +37815,7 @@ tr1245: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1254: { window_add_bit(KNOT_RRTYPE_LOC, s); } { @@ -37835,7 +37844,7 @@ tr1254: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1262: { window_add_bit(KNOT_RRTYPE_LP, s); } { @@ -37864,7 +37873,7 @@ tr1262: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1275: { window_add_bit(KNOT_RRTYPE_MINFO, s); } { @@ -37893,7 +37902,7 @@ tr1275: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1283: { window_add_bit(KNOT_RRTYPE_MX, s); } { @@ -37922,7 +37931,7 @@ tr1283: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1297: { window_add_bit(KNOT_RRTYPE_NAPTR, s); } { @@ -37951,7 +37960,7 @@ tr1297: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1306: { window_add_bit(KNOT_RRTYPE_NID, s); } { @@ -37980,7 +37989,7 @@ tr1306: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1315: { window_add_bit(KNOT_RRTYPE_NS, s); } { @@ -38009,7 +38018,7 @@ tr1315: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1325: { window_add_bit(KNOT_RRTYPE_NSEC, s); } { @@ -38038,7 +38047,7 @@ tr1325: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1334: { window_add_bit(KNOT_RRTYPE_NSEC3, s); } { @@ -38067,7 +38076,7 @@ tr1334: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1346: { window_add_bit(KNOT_RRTYPE_NSEC3PARAM, s); } { @@ -38096,7 +38105,7 @@ tr1346: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1356: { window_add_bit(KNOT_RRTYPE_PTR, s); } { @@ -38125,7 +38134,7 @@ tr1356: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1367: { window_add_bit(KNOT_RRTYPE_RP, s); } { @@ -38154,7 +38163,7 @@ tr1367: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1378: { window_add_bit(KNOT_RRTYPE_RRSIG, s); } { @@ -38183,7 +38192,7 @@ tr1378: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1386: { window_add_bit(KNOT_RRTYPE_RT, s); } { @@ -38212,7 +38221,7 @@ tr1386: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1399: { window_add_bit(KNOT_RRTYPE_SOA, s); } { @@ -38241,7 +38250,7 @@ tr1399: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1408: { window_add_bit(KNOT_RRTYPE_SPF, s); } { @@ -38270,7 +38279,7 @@ tr1408: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1417: { window_add_bit(KNOT_RRTYPE_SRV, s); } { @@ -38299,7 +38308,7 @@ tr1417: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1428: { window_add_bit(KNOT_RRTYPE_SSHFP, s); } { @@ -38328,7 +38337,7 @@ tr1428: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1441: { window_add_bit(KNOT_RRTYPE_TLSA, s); } { @@ -38357,7 +38366,7 @@ tr1441: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1450: { window_add_bit(KNOT_RRTYPE_TXT, s); } { @@ -38386,7 +38395,7 @@ tr1450: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1462: { if (s->number64 <= UINT16_MAX) { @@ -38422,7 +38431,7 @@ tr1462: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1472: { window_add_bit(KNOT_RRTYPE_URI, s); } { @@ -38451,7 +38460,7 @@ tr1472: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1483: { window_add_bit(KNOT_RRTYPE_AFSDB, s); } { @@ -38480,7 +38489,7 @@ tr1483: { p--; {cs = stack[--top];goto _again;} } - goto st1132; + goto st1141; tr1492: { window_add_bit(KNOT_RRTYPE_APL, s); } { @@ -38509,11 +38518,11 @@ tr1492: { p--; {cs = stack[--top];goto _again;} } - goto st1132; -st1132: + goto st1141; +st1141: if ( ++p == pe ) - goto _test_eof1132; -case 1132: + goto _test_eof1141; +case 1141: goto st0; tr1011: { @@ -38549,7 +38558,7 @@ tr1011: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1034: { s->line_counter++; @@ -38580,7 +38589,7 @@ tr1034: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1045: { window_add_bit(KNOT_RRTYPE_A, s); } { @@ -38612,7 +38621,7 @@ tr1045: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1055: { window_add_bit(KNOT_RRTYPE_AAAA, s); } { @@ -38644,7 +38653,7 @@ tr1055: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1068: { window_add_bit(KNOT_RRTYPE_CAA, s); } { @@ -38676,7 +38685,7 @@ tr1068: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1082: { window_add_bit(KNOT_RRTYPE_CDNSKEY, s); } { @@ -38708,7 +38717,7 @@ tr1082: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1090: { window_add_bit(KNOT_RRTYPE_CDS, s); } { @@ -38740,7 +38749,7 @@ tr1090: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1100: { window_add_bit(KNOT_RRTYPE_CERT, s); } { @@ -38772,7 +38781,7 @@ tr1100: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1111: { window_add_bit(KNOT_RRTYPE_CNAME, s); } { @@ -38804,7 +38813,7 @@ tr1111: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1125: { window_add_bit(KNOT_RRTYPE_DHCID, s); } { @@ -38836,7 +38845,7 @@ tr1125: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1137: { window_add_bit(KNOT_RRTYPE_DNAME, s); } { @@ -38868,7 +38877,7 @@ tr1137: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1148: { window_add_bit(KNOT_RRTYPE_DNSKEY, s); } { @@ -38900,7 +38909,7 @@ tr1148: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1156: { window_add_bit(KNOT_RRTYPE_DS, s); } { @@ -38932,7 +38941,7 @@ tr1156: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1169: { window_add_bit(KNOT_RRTYPE_EUI48, s); } { @@ -38964,7 +38973,7 @@ tr1169: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1178: { window_add_bit(KNOT_RRTYPE_EUI64, s); } { @@ -38996,7 +39005,7 @@ tr1178: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1190: { window_add_bit(KNOT_RRTYPE_HINFO, s); } { @@ -39028,7 +39037,7 @@ tr1190: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1205: { window_add_bit(KNOT_RRTYPE_IPSECKEY, s); } { @@ -39060,7 +39069,7 @@ tr1205: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1216: { window_add_bit(KNOT_RRTYPE_KEY, s); } { @@ -39092,7 +39101,7 @@ tr1216: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1224: { window_add_bit(KNOT_RRTYPE_KX, s); } { @@ -39124,7 +39133,7 @@ tr1224: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1237: { window_add_bit(KNOT_RRTYPE_L32, s); } { @@ -39156,7 +39165,7 @@ tr1237: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1246: { window_add_bit(KNOT_RRTYPE_L64, s); } { @@ -39188,7 +39197,7 @@ tr1246: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1255: { window_add_bit(KNOT_RRTYPE_LOC, s); } { @@ -39220,7 +39229,7 @@ tr1255: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1263: { window_add_bit(KNOT_RRTYPE_LP, s); } { @@ -39252,7 +39261,7 @@ tr1263: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1276: { window_add_bit(KNOT_RRTYPE_MINFO, s); } { @@ -39284,7 +39293,7 @@ tr1276: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1284: { window_add_bit(KNOT_RRTYPE_MX, s); } { @@ -39316,7 +39325,7 @@ tr1284: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1298: { window_add_bit(KNOT_RRTYPE_NAPTR, s); } { @@ -39348,7 +39357,7 @@ tr1298: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1307: { window_add_bit(KNOT_RRTYPE_NID, s); } { @@ -39380,7 +39389,7 @@ tr1307: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1316: { window_add_bit(KNOT_RRTYPE_NS, s); } { @@ -39412,7 +39421,7 @@ tr1316: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1326: { window_add_bit(KNOT_RRTYPE_NSEC, s); } { @@ -39444,7 +39453,7 @@ tr1326: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1335: { window_add_bit(KNOT_RRTYPE_NSEC3, s); } { @@ -39476,7 +39485,7 @@ tr1335: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1347: { window_add_bit(KNOT_RRTYPE_NSEC3PARAM, s); } { @@ -39508,7 +39517,7 @@ tr1347: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1357: { window_add_bit(KNOT_RRTYPE_PTR, s); } { @@ -39540,7 +39549,7 @@ tr1357: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1368: { window_add_bit(KNOT_RRTYPE_RP, s); } { @@ -39572,7 +39581,7 @@ tr1368: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1379: { window_add_bit(KNOT_RRTYPE_RRSIG, s); } { @@ -39604,7 +39613,7 @@ tr1379: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1387: { window_add_bit(KNOT_RRTYPE_RT, s); } { @@ -39636,7 +39645,7 @@ tr1387: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1400: { window_add_bit(KNOT_RRTYPE_SOA, s); } { @@ -39668,7 +39677,7 @@ tr1400: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1409: { window_add_bit(KNOT_RRTYPE_SPF, s); } { @@ -39700,7 +39709,7 @@ tr1409: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1418: { window_add_bit(KNOT_RRTYPE_SRV, s); } { @@ -39732,7 +39741,7 @@ tr1418: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1429: { window_add_bit(KNOT_RRTYPE_SSHFP, s); } { @@ -39764,7 +39773,7 @@ tr1429: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1442: { window_add_bit(KNOT_RRTYPE_TLSA, s); } { @@ -39796,7 +39805,7 @@ tr1442: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1451: { window_add_bit(KNOT_RRTYPE_TXT, s); } { @@ -39828,7 +39837,7 @@ tr1451: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1463: { if (s->number64 <= UINT16_MAX) { @@ -39867,7 +39876,7 @@ tr1463: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1473: { window_add_bit(KNOT_RRTYPE_URI, s); } { @@ -39899,7 +39908,7 @@ tr1473: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1484: { window_add_bit(KNOT_RRTYPE_AFSDB, s); } { @@ -39931,7 +39940,7 @@ tr1484: { p--; {cs = stack[--top];goto _again;} } - goto st1133; + goto st1142; tr1493: { window_add_bit(KNOT_RRTYPE_APL, s); } { @@ -39963,11 +39972,11 @@ tr1493: { p--; {cs = stack[--top];goto _again;} } - goto st1133; -st1133: + goto st1142; +st1142: if ( ++p == pe ) - goto _test_eof1133; -case 1133: + goto _test_eof1142; +case 1142: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -40115,7 +40124,7 @@ tr1012: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1035: { for (window = 0; window <= s->last_window; window++) { @@ -40143,7 +40152,7 @@ tr1035: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1046: { window_add_bit(KNOT_RRTYPE_A, s); } { @@ -40172,7 +40181,7 @@ tr1046: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1056: { window_add_bit(KNOT_RRTYPE_AAAA, s); } { @@ -40201,7 +40210,7 @@ tr1056: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1069: { window_add_bit(KNOT_RRTYPE_CAA, s); } { @@ -40230,7 +40239,7 @@ tr1069: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1083: { window_add_bit(KNOT_RRTYPE_CDNSKEY, s); } { @@ -40259,7 +40268,7 @@ tr1083: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1091: { window_add_bit(KNOT_RRTYPE_CDS, s); } { @@ -40288,7 +40297,7 @@ tr1091: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1101: { window_add_bit(KNOT_RRTYPE_CERT, s); } { @@ -40317,7 +40326,7 @@ tr1101: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1112: { window_add_bit(KNOT_RRTYPE_CNAME, s); } { @@ -40346,7 +40355,7 @@ tr1112: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1126: { window_add_bit(KNOT_RRTYPE_DHCID, s); } { @@ -40375,7 +40384,7 @@ tr1126: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1138: { window_add_bit(KNOT_RRTYPE_DNAME, s); } { @@ -40404,7 +40413,7 @@ tr1138: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1149: { window_add_bit(KNOT_RRTYPE_DNSKEY, s); } { @@ -40433,7 +40442,7 @@ tr1149: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1157: { window_add_bit(KNOT_RRTYPE_DS, s); } { @@ -40462,7 +40471,7 @@ tr1157: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1170: { window_add_bit(KNOT_RRTYPE_EUI48, s); } { @@ -40491,7 +40500,7 @@ tr1170: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1179: { window_add_bit(KNOT_RRTYPE_EUI64, s); } { @@ -40520,7 +40529,7 @@ tr1179: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1191: { window_add_bit(KNOT_RRTYPE_HINFO, s); } { @@ -40549,7 +40558,7 @@ tr1191: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1206: { window_add_bit(KNOT_RRTYPE_IPSECKEY, s); } { @@ -40578,7 +40587,7 @@ tr1206: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1217: { window_add_bit(KNOT_RRTYPE_KEY, s); } { @@ -40607,7 +40616,7 @@ tr1217: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1225: { window_add_bit(KNOT_RRTYPE_KX, s); } { @@ -40636,7 +40645,7 @@ tr1225: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1238: { window_add_bit(KNOT_RRTYPE_L32, s); } { @@ -40665,7 +40674,7 @@ tr1238: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1247: { window_add_bit(KNOT_RRTYPE_L64, s); } { @@ -40694,7 +40703,7 @@ tr1247: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1256: { window_add_bit(KNOT_RRTYPE_LOC, s); } { @@ -40723,7 +40732,7 @@ tr1256: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1264: { window_add_bit(KNOT_RRTYPE_LP, s); } { @@ -40752,7 +40761,7 @@ tr1264: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1277: { window_add_bit(KNOT_RRTYPE_MINFO, s); } { @@ -40781,7 +40790,7 @@ tr1277: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1285: { window_add_bit(KNOT_RRTYPE_MX, s); } { @@ -40810,7 +40819,7 @@ tr1285: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1299: { window_add_bit(KNOT_RRTYPE_NAPTR, s); } { @@ -40839,7 +40848,7 @@ tr1299: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1308: { window_add_bit(KNOT_RRTYPE_NID, s); } { @@ -40868,7 +40877,7 @@ tr1308: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1317: { window_add_bit(KNOT_RRTYPE_NS, s); } { @@ -40897,7 +40906,7 @@ tr1317: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1327: { window_add_bit(KNOT_RRTYPE_NSEC, s); } { @@ -40926,7 +40935,7 @@ tr1327: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1336: { window_add_bit(KNOT_RRTYPE_NSEC3, s); } { @@ -40955,7 +40964,7 @@ tr1336: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1348: { window_add_bit(KNOT_RRTYPE_NSEC3PARAM, s); } { @@ -40984,7 +40993,7 @@ tr1348: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1358: { window_add_bit(KNOT_RRTYPE_PTR, s); } { @@ -41013,7 +41022,7 @@ tr1358: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1369: { window_add_bit(KNOT_RRTYPE_RP, s); } { @@ -41042,7 +41051,7 @@ tr1369: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1380: { window_add_bit(KNOT_RRTYPE_RRSIG, s); } { @@ -41071,7 +41080,7 @@ tr1380: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1388: { window_add_bit(KNOT_RRTYPE_RT, s); } { @@ -41100,7 +41109,7 @@ tr1388: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1401: { window_add_bit(KNOT_RRTYPE_SOA, s); } { @@ -41129,7 +41138,7 @@ tr1401: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1410: { window_add_bit(KNOT_RRTYPE_SPF, s); } { @@ -41158,7 +41167,7 @@ tr1410: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1419: { window_add_bit(KNOT_RRTYPE_SRV, s); } { @@ -41187,7 +41196,7 @@ tr1419: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1430: { window_add_bit(KNOT_RRTYPE_SSHFP, s); } { @@ -41216,7 +41225,7 @@ tr1430: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1443: { window_add_bit(KNOT_RRTYPE_TLSA, s); } { @@ -41245,7 +41254,7 @@ tr1443: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1452: { window_add_bit(KNOT_RRTYPE_TXT, s); } { @@ -41274,7 +41283,7 @@ tr1452: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1464: { if (s->number64 <= UINT16_MAX) { @@ -41310,7 +41319,7 @@ tr1464: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1474: { window_add_bit(KNOT_RRTYPE_URI, s); } { @@ -41339,7 +41348,7 @@ tr1474: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1485: { window_add_bit(KNOT_RRTYPE_AFSDB, s); } { @@ -41368,7 +41377,7 @@ tr1485: { p--; {cs = stack[--top];goto _again;} } - goto st1134; + goto st1143; tr1494: { window_add_bit(KNOT_RRTYPE_APL, s); } { @@ -41397,11 +41406,11 @@ tr1494: { p--; {cs = stack[--top];goto _again;} } - goto st1134; -st1134: + goto st1143; +st1143: if ( ++p == pe ) - goto _test_eof1134; -case 1134: + goto _test_eof1143; +case 1143: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -43929,11 +43938,11 @@ tr1522: { p--; {cs = stack[--top];goto _again;} } - goto st1135; -st1135: + goto st1144; +st1144: if ( ++p == pe ) - goto _test_eof1135; -case 1135: + goto _test_eof1144; +case 1144: goto st0; tr1523: { @@ -43948,11 +43957,11 @@ tr1523: { p--; {cs = stack[--top];goto _again;} } - goto st1136; -st1136: + goto st1145; +st1145: if ( ++p == pe ) - goto _test_eof1136; -case 1136: + goto _test_eof1145; +case 1145: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -44000,11 +44009,11 @@ tr1524: { p--; {cs = stack[--top];goto _again;} } - goto st1137; -st1137: + goto st1146; +st1146: if ( ++p == pe ) - goto _test_eof1137; -case 1137: + goto _test_eof1146; +case 1146: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -44228,7 +44237,7 @@ tr1532: p--; {goto st261;} } } - goto st1138; + goto st1147; tr1533: { p--; {cs = stack[--top];goto _again;} @@ -44248,7 +44257,7 @@ tr1533: } s->multiline = true; } - goto st1138; + goto st1147; tr1534: { p--; {cs = stack[--top];goto _again;} @@ -44268,7 +44277,7 @@ tr1534: } s->multiline = false; } - goto st1138; + goto st1147; tr1537: { p--; {cs = stack[--top];goto _again;} @@ -44284,11 +44293,11 @@ tr1537: { s->line_counter++; } - goto st1138; -st1138: + goto st1147; +st1147: if ( ++p == pe ) - goto _test_eof1138; -case 1138: + goto _test_eof1147; +case 1147: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -44555,7 +44564,7 @@ tr1536: { p--; {cs = stack[--top];goto _again;} } - goto st1139; + goto st1148; tr1551: { if ((rdata_tail - s->r_data) != s->r_data_length) { @@ -44566,11 +44575,11 @@ tr1551: { p--; {cs = stack[--top];goto _again;} } - goto st1139; -st1139: + goto st1148; +st1148: if ( ++p == pe ) - goto _test_eof1139; -case 1139: + goto _test_eof1148; +case 1148: goto tr1495; tr1552: { @@ -44585,11 +44594,11 @@ tr1552: { p--; {cs = stack[--top];goto _again;} } - goto st1140; -st1140: + goto st1149; +st1149: if ( ++p == pe ) - goto _test_eof1140; -case 1140: + goto _test_eof1149; +case 1149: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -44637,11 +44646,11 @@ tr1553: { p--; {cs = stack[--top];goto _again;} } - goto st1141; -st1141: + goto st1150; +st1150: if ( ++p == pe ) - goto _test_eof1141; -case 1141: + goto _test_eof1150; +case 1150: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -44776,11 +44785,11 @@ tr1538: p--; {goto st261;} } } - goto st1142; -st1142: + goto st1151; +st1151: if ( ++p == pe ) - goto _test_eof1142; -case 1142: + goto _test_eof1151; +case 1151: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -44838,14 +44847,14 @@ case 480: switch( (*p) ) { case 68: goto st482; case 69: goto st497; - case 73: goto st527; - case 80: goto st535; - case 82: goto st548; + case 73: goto st536; + case 80: goto st544; + case 82: goto st557; case 100: goto st482; case 101: goto st497; - case 105: goto st527; - case 112: goto st535; - case 114: goto st548; + case 105: goto st536; + case 112: goto st544; + case 114: goto st557; } if ( 48 <= (*p) && (*p) <= 57 ) goto tr1560; @@ -44915,7 +44924,7 @@ tr1566: { p--; {cs = stack[--top];goto _again;} } - goto st1143; + goto st1152; tr1570: { *(rdata_tail++) = 2; @@ -44923,7 +44932,7 @@ tr1570: { p--; {cs = stack[--top];goto _again;} } - goto st1143; + goto st1152; tr1572: { *(rdata_tail++) = 3; @@ -44931,7 +44940,7 @@ tr1572: { p--; {cs = stack[--top];goto _again;} } - goto st1143; + goto st1152; tr1584: { *(rdata_tail++) = 6; @@ -44939,99 +44948,115 @@ tr1584: { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1593: + goto st1152; +tr1594: { *(rdata_tail++) = 12; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1607: + goto st1152; +tr1608: { *(rdata_tail++) = 13; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1616: + goto st1152; +tr1617: { *(rdata_tail++) = 14; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; + goto st1152; tr1624: { - *(rdata_tail++) = 252; + *(rdata_tail++) = 15; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; + goto st1152; +tr1627: + { + *(rdata_tail++) = 16; + } + { + p--; {cs = stack[--top];goto _again;} + } + goto st1152; tr1635: + { + *(rdata_tail++) = 252; + } + { + p--; {cs = stack[--top];goto _again;} + } + goto st1152; +tr1646: { *(rdata_tail++) = 253; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1638: + goto st1152; +tr1649: { *(rdata_tail++) = 254; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1645: + goto st1152; +tr1656: { *(rdata_tail++) = 1; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1651: + goto st1152; +tr1662: { *(rdata_tail++) = 5; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1663: + goto st1152; +tr1674: { *(rdata_tail++) = 7; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1666: + goto st1152; +tr1677: { *(rdata_tail++) = 8; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -tr1669: + goto st1152; +tr1680: { *(rdata_tail++) = 10; } { p--; {cs = stack[--top];goto _again;} } - goto st1143; -st1143: + goto st1152; +st1152: if ( ++p == pe ) - goto _test_eof1143; -case 1143: + goto _test_eof1152; +case 1152: goto st0; st482: if ( ++p == pe ) @@ -45186,7 +45211,9 @@ st497: case 497: switch( (*p) ) { case 67: goto st498; + case 68: goto st527; case 99: goto st498; + case 100: goto st527; } goto tr1559; st498: @@ -45248,14 +45275,14 @@ st504: goto _test_eof504; case 504: switch( (*p) ) { - case 32: goto tr1593; - case 59: goto tr1593; + case 32: goto tr1594; + case 59: goto tr1594; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1593; + goto tr1594; } else if ( (*p) >= 9 ) - goto tr1593; + goto tr1594; goto tr1559; st505: if ( ++p == pe ) @@ -45360,14 +45387,14 @@ st517: goto _test_eof517; case 517: switch( (*p) ) { - case 32: goto tr1607; - case 59: goto tr1607; + case 32: goto tr1608; + case 59: goto tr1608; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1607; + goto tr1608; } else if ( (*p) >= 9 ) - goto tr1607; + goto tr1608; goto tr1559; st518: if ( ++p == pe ) @@ -45436,108 +45463,101 @@ st526: goto _test_eof526; case 526: switch( (*p) ) { - case 32: goto tr1616; - case 59: goto tr1616; + case 32: goto tr1617; + case 59: goto tr1617; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1616; + goto tr1617; } else if ( (*p) >= 9 ) - goto tr1616; + goto tr1617; goto tr1559; st527: if ( ++p == pe ) goto _test_eof527; case 527: switch( (*p) ) { - case 78: goto st528; - case 110: goto st528; + case 50: goto st528; + case 52: goto st533; } goto tr1559; st528: if ( ++p == pe ) goto _test_eof528; case 528: - switch( (*p) ) { - case 68: goto st529; - case 100: goto st529; - } + if ( (*p) == 53 ) + goto st529; goto tr1559; st529: if ( ++p == pe ) goto _test_eof529; case 529: - switch( (*p) ) { - case 73: goto st530; - case 105: goto st530; - } + if ( (*p) == 53 ) + goto st530; goto tr1559; st530: if ( ++p == pe ) goto _test_eof530; case 530: - switch( (*p) ) { - case 82: goto st531; - case 114: goto st531; - } + if ( (*p) == 49 ) + goto st531; goto tr1559; st531: if ( ++p == pe ) goto _test_eof531; case 531: - switch( (*p) ) { - case 69: goto st532; - case 101: goto st532; - } + if ( (*p) == 57 ) + goto st532; goto tr1559; st532: if ( ++p == pe ) goto _test_eof532; case 532: switch( (*p) ) { - case 67: goto st533; - case 99: goto st533; + case 32: goto tr1624; + case 59: goto tr1624; } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1624; + } else if ( (*p) >= 9 ) + goto tr1624; goto tr1559; st533: if ( ++p == pe ) goto _test_eof533; case 533: - switch( (*p) ) { - case 84: goto st534; - case 116: goto st534; - } + if ( (*p) == 52 ) + goto st534; goto tr1559; st534: if ( ++p == pe ) goto _test_eof534; case 534: - switch( (*p) ) { - case 32: goto tr1624; - case 59: goto tr1624; - } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1624; - } else if ( (*p) >= 9 ) - goto tr1624; + if ( (*p) == 56 ) + goto st535; goto tr1559; st535: if ( ++p == pe ) goto _test_eof535; case 535: switch( (*p) ) { - case 82: goto st536; - case 114: goto st536; + case 32: goto tr1627; + case 59: goto tr1627; } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1627; + } else if ( (*p) >= 9 ) + goto tr1627; goto tr1559; st536: if ( ++p == pe ) goto _test_eof536; case 536: switch( (*p) ) { - case 73: goto st537; - case 105: goto st537; + case 78: goto st537; + case 110: goto st537; } goto tr1559; st537: @@ -45545,8 +45565,8 @@ st537: goto _test_eof537; case 537: switch( (*p) ) { - case 86: goto st538; - case 118: goto st538; + case 68: goto st538; + case 100: goto st538; } goto tr1559; st538: @@ -45554,8 +45574,8 @@ st538: goto _test_eof538; case 538: switch( (*p) ) { - case 65: goto st539; - case 97: goto st539; + case 73: goto st539; + case 105: goto st539; } goto tr1559; st539: @@ -45563,8 +45583,8 @@ st539: goto _test_eof539; case 539: switch( (*p) ) { - case 84: goto st540; - case 116: goto st540; + case 82: goto st540; + case 114: goto st540; } goto tr1559; st540: @@ -45581,10 +45601,8 @@ st541: goto _test_eof541; case 541: switch( (*p) ) { - case 68: goto st542; - case 79: goto st545; - case 100: goto st542; - case 111: goto st545; + case 67: goto st542; + case 99: goto st542; } goto tr1559; st542: @@ -45592,23 +45610,14 @@ st542: goto _test_eof542; case 542: switch( (*p) ) { - case 78: goto st543; - case 110: goto st543; + case 84: goto st543; + case 116: goto st543; } goto tr1559; st543: if ( ++p == pe ) goto _test_eof543; case 543: - switch( (*p) ) { - case 83: goto st544; - case 115: goto st544; - } - goto tr1559; -st544: - if ( ++p == pe ) - goto _test_eof544; -case 544: switch( (*p) ) { case 32: goto tr1635; case 59: goto tr1635; @@ -45619,6 +45628,15 @@ case 544: } else if ( (*p) >= 9 ) goto tr1635; goto tr1559; +st544: + if ( ++p == pe ) + goto _test_eof544; +case 544: + switch( (*p) ) { + case 82: goto st545; + case 114: goto st545; + } + goto tr1559; st545: if ( ++p == pe ) goto _test_eof545; @@ -45633,8 +45651,8 @@ st546: goto _test_eof546; case 546: switch( (*p) ) { - case 68: goto st547; - case 100: goto st547; + case 86: goto st547; + case 118: goto st547; } goto tr1559; st547: @@ -45642,22 +45660,17 @@ st547: goto _test_eof547; case 547: switch( (*p) ) { - case 32: goto tr1638; - case 59: goto tr1638; + case 65: goto st548; + case 97: goto st548; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1638; - } else if ( (*p) >= 9 ) - goto tr1638; goto tr1559; st548: if ( ++p == pe ) goto _test_eof548; case 548: switch( (*p) ) { - case 83: goto st549; - case 115: goto st549; + case 84: goto st549; + case 116: goto st549; } goto tr1559; st549: @@ -45665,8 +45678,8 @@ st549: goto _test_eof549; case 549: switch( (*p) ) { - case 65: goto st550; - case 97: goto st550; + case 69: goto st550; + case 101: goto st550; } goto tr1559; st550: @@ -45674,10 +45687,10 @@ st550: goto _test_eof550; case 550: switch( (*p) ) { - case 77: goto st551; - case 83: goto st554; - case 109: goto st551; - case 115: goto st554; + case 68: goto st551; + case 79: goto st554; + case 100: goto st551; + case 111: goto st554; } goto tr1559; st551: @@ -45685,38 +45698,40 @@ st551: goto _test_eof551; case 551: switch( (*p) ) { - case 68: goto st552; - case 100: goto st552; + case 78: goto st552; + case 110: goto st552; } goto tr1559; st552: if ( ++p == pe ) goto _test_eof552; case 552: - if ( (*p) == 53 ) - goto st553; + switch( (*p) ) { + case 83: goto st553; + case 115: goto st553; + } goto tr1559; st553: if ( ++p == pe ) goto _test_eof553; case 553: switch( (*p) ) { - case 32: goto tr1645; - case 59: goto tr1645; + case 32: goto tr1646; + case 59: goto tr1646; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1645; + goto tr1646; } else if ( (*p) >= 9 ) - goto tr1645; + goto tr1646; goto tr1559; st554: if ( ++p == pe ) goto _test_eof554; case 554: switch( (*p) ) { - case 72: goto st555; - case 104: goto st555; + case 73: goto st555; + case 105: goto st555; } goto tr1559; st555: @@ -45724,8 +45739,8 @@ st555: goto _test_eof555; case 555: switch( (*p) ) { - case 65: goto st556; - case 97: goto st556; + case 68: goto st556; + case 100: goto st556; } goto tr1559; st556: @@ -45733,33 +45748,31 @@ st556: goto _test_eof556; case 556: switch( (*p) ) { - case 49: goto st557; - case 50: goto st569; - case 53: goto st572; + case 32: goto tr1649; + case 59: goto tr1649; } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1649; + } else if ( (*p) >= 9 ) + goto tr1649; goto tr1559; st557: if ( ++p == pe ) goto _test_eof557; case 557: switch( (*p) ) { - case 32: goto tr1651; - case 45: goto st558; - case 59: goto tr1651; + case 83: goto st558; + case 115: goto st558; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1651; - } else if ( (*p) >= 9 ) - goto tr1651; goto tr1559; st558: if ( ++p == pe ) goto _test_eof558; case 558: switch( (*p) ) { - case 78: goto st559; - case 110: goto st559; + case 65: goto st559; + case 97: goto st559; } goto tr1559; st559: @@ -45767,8 +45780,10 @@ st559: goto _test_eof559; case 559: switch( (*p) ) { - case 83: goto st560; - case 115: goto st560; + case 77: goto st560; + case 83: goto st563; + case 109: goto st560; + case 115: goto st563; } goto tr1559; st560: @@ -45776,40 +45791,47 @@ st560: goto _test_eof560; case 560: switch( (*p) ) { - case 69: goto st561; - case 101: goto st561; + case 68: goto st561; + case 100: goto st561; } goto tr1559; st561: if ( ++p == pe ) goto _test_eof561; case 561: - switch( (*p) ) { - case 67: goto st562; - case 99: goto st562; - } + if ( (*p) == 53 ) + goto st562; goto tr1559; st562: if ( ++p == pe ) goto _test_eof562; case 562: - if ( (*p) == 51 ) - goto st563; + switch( (*p) ) { + case 32: goto tr1656; + case 59: goto tr1656; + } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1656; + } else if ( (*p) >= 9 ) + goto tr1656; goto tr1559; st563: if ( ++p == pe ) goto _test_eof563; case 563: - if ( (*p) == 45 ) - goto st564; + switch( (*p) ) { + case 72: goto st564; + case 104: goto st564; + } goto tr1559; st564: if ( ++p == pe ) goto _test_eof564; case 564: switch( (*p) ) { - case 83: goto st565; - case 115: goto st565; + case 65: goto st565; + case 97: goto st565; } goto tr1559; st565: @@ -45817,8 +45839,9 @@ st565: goto _test_eof565; case 565: switch( (*p) ) { - case 72: goto st566; - case 104: goto st566; + case 49: goto st566; + case 50: goto st578; + case 53: goto st581; } goto tr1559; st566: @@ -45826,109 +45849,192 @@ st566: goto _test_eof566; case 566: switch( (*p) ) { - case 65: goto st567; - case 97: goto st567; + case 32: goto tr1662; + case 45: goto st567; + case 59: goto tr1662; } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1662; + } else if ( (*p) >= 9 ) + goto tr1662; goto tr1559; st567: if ( ++p == pe ) goto _test_eof567; case 567: - if ( (*p) == 49 ) - goto st568; + switch( (*p) ) { + case 78: goto st568; + case 110: goto st568; + } goto tr1559; st568: if ( ++p == pe ) goto _test_eof568; case 568: switch( (*p) ) { - case 32: goto tr1663; - case 59: goto tr1663; + case 83: goto st569; + case 115: goto st569; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1663; - } else if ( (*p) >= 9 ) - goto tr1663; goto tr1559; st569: if ( ++p == pe ) goto _test_eof569; case 569: - if ( (*p) == 53 ) - goto st570; + switch( (*p) ) { + case 69: goto st570; + case 101: goto st570; + } goto tr1559; st570: if ( ++p == pe ) goto _test_eof570; case 570: - if ( (*p) == 54 ) - goto st571; + switch( (*p) ) { + case 67: goto st571; + case 99: goto st571; + } goto tr1559; st571: if ( ++p == pe ) goto _test_eof571; case 571: - switch( (*p) ) { - case 32: goto tr1666; - case 59: goto tr1666; - } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1666; - } else if ( (*p) >= 9 ) - goto tr1666; + if ( (*p) == 51 ) + goto st572; goto tr1559; st572: if ( ++p == pe ) goto _test_eof572; case 572: - if ( (*p) == 49 ) + if ( (*p) == 45 ) goto st573; goto tr1559; st573: if ( ++p == pe ) goto _test_eof573; case 573: - if ( (*p) == 50 ) - goto st574; + switch( (*p) ) { + case 83: goto st574; + case 115: goto st574; + } goto tr1559; st574: if ( ++p == pe ) goto _test_eof574; case 574: switch( (*p) ) { - case 32: goto tr1669; - case 59: goto tr1669; + case 72: goto st575; + case 104: goto st575; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1669; - } else if ( (*p) >= 9 ) - goto tr1669; goto tr1559; st575: if ( ++p == pe ) goto _test_eof575; case 575: switch( (*p) ) { - case 65: goto st577; - case 73: goto st583; - case 79: goto st600; - case 80: goto st603; - case 83: goto st609; - case 85: goto st613; - case 97: goto st577; - case 105: goto st583; - case 111: goto st600; - case 112: goto st603; - case 115: goto st609; - case 117: goto st613; + case 65: goto st576; + case 97: goto st576; + } + goto tr1559; +st576: + if ( ++p == pe ) + goto _test_eof576; +case 576: + if ( (*p) == 49 ) + goto st577; + goto tr1559; +st577: + if ( ++p == pe ) + goto _test_eof577; +case 577: + switch( (*p) ) { + case 32: goto tr1674; + case 59: goto tr1674; + } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1674; + } else if ( (*p) >= 9 ) + goto tr1674; + goto tr1559; +st578: + if ( ++p == pe ) + goto _test_eof578; +case 578: + if ( (*p) == 53 ) + goto st579; + goto tr1559; +st579: + if ( ++p == pe ) + goto _test_eof579; +case 579: + if ( (*p) == 54 ) + goto st580; + goto tr1559; +st580: + if ( ++p == pe ) + goto _test_eof580; +case 580: + switch( (*p) ) { + case 32: goto tr1677; + case 59: goto tr1677; + } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1677; + } else if ( (*p) >= 9 ) + goto tr1677; + goto tr1559; +st581: + if ( ++p == pe ) + goto _test_eof581; +case 581: + if ( (*p) == 49 ) + goto st582; + goto tr1559; +st582: + if ( ++p == pe ) + goto _test_eof582; +case 582: + if ( (*p) == 50 ) + goto st583; + goto tr1559; +st583: + if ( ++p == pe ) + goto _test_eof583; +case 583: + switch( (*p) ) { + case 32: goto tr1680; + case 59: goto tr1680; + } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1680; + } else if ( (*p) >= 9 ) + goto tr1680; + goto tr1559; +st584: + if ( ++p == pe ) + goto _test_eof584; +case 584: + switch( (*p) ) { + case 65: goto st586; + case 73: goto st592; + case 79: goto st609; + case 80: goto st612; + case 83: goto st618; + case 85: goto st622; + case 97: goto st586; + case 105: goto st592; + case 111: goto st609; + case 112: goto st612; + case 115: goto st618; + case 117: goto st622; } if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1671; - goto tr1670; -tr1671: + goto tr1682; + goto tr1681; +tr1682: { s->number64 = 0; } @@ -45946,8 +46052,8 @@ tr1671: p--; {goto st261;} } } - goto st576; -tr1679: + goto st585; +tr1690: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -45962,25 +46068,25 @@ tr1679: p--; {goto st261;} } } - goto st576; -st576: + goto st585; +st585: if ( ++p == pe ) - goto _test_eof576; -case 576: + goto _test_eof585; +case 585: switch( (*p) ) { - case 32: goto tr1678; - case 59: goto tr1678; + case 32: goto tr1689; + case 59: goto tr1689; } if ( (*p) < 40 ) { if ( 9 <= (*p) && (*p) <= 10 ) - goto tr1678; + goto tr1689; } else if ( (*p) > 41 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1679; + goto tr1690; } else - goto tr1678; - goto tr1670; -tr1678: + goto tr1689; + goto tr1681; +tr1689: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -45993,8 +46099,8 @@ tr1678: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1685: + goto st1153; +tr1696: { *((uint16_t *)rdata_tail) = htons(7); rdata_tail += 2; @@ -46002,8 +46108,8 @@ tr1685: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1694: + goto st1153; +tr1705: { *((uint16_t *)rdata_tail) = htons(8); rdata_tail += 2; @@ -46011,8 +46117,8 @@ tr1694: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1698: + goto st1153; +tr1709: { *((uint16_t *)rdata_tail) = htons(6); rdata_tail += 2; @@ -46020,8 +46126,8 @@ tr1698: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1701: + goto st1153; +tr1712: { *((uint16_t *)rdata_tail) = htons(4); rdata_tail += 2; @@ -46029,8 +46135,8 @@ tr1701: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1705: + goto st1153; +tr1716: { *((uint16_t *)rdata_tail) = htons(5); rdata_tail += 2; @@ -46038,8 +46144,8 @@ tr1705: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1708: + goto st1153; +tr1719: { *((uint16_t *)rdata_tail) = htons(254); rdata_tail += 2; @@ -46047,8 +46153,8 @@ tr1708: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1712: + goto st1153; +tr1723: { *((uint16_t *)rdata_tail) = htons(3); rdata_tail += 2; @@ -46056,8 +46162,8 @@ tr1712: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1715: + goto st1153; +tr1726: { *((uint16_t *)rdata_tail) = htons(1); rdata_tail += 2; @@ -46065,8 +46171,8 @@ tr1715: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1719: + goto st1153; +tr1730: { *((uint16_t *)rdata_tail) = htons(2); rdata_tail += 2; @@ -46074,8 +46180,8 @@ tr1719: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -tr1722: + goto st1153; +tr1733: { *((uint16_t *)rdata_tail) = htons(253); rdata_tail += 2; @@ -46083,240 +46189,133 @@ tr1722: { p--; {cs = stack[--top];goto _again;} } - goto st1144; -st1144: + goto st1153; +st1153: if ( ++p == pe ) - goto _test_eof1144; -case 1144: + goto _test_eof1153; +case 1153: goto st0; -st577: - if ( ++p == pe ) - goto _test_eof577; -case 577: - switch( (*p) ) { - case 67: goto st578; - case 99: goto st578; - } - goto tr1670; -st578: - if ( ++p == pe ) - goto _test_eof578; -case 578: - switch( (*p) ) { - case 80: goto st579; - case 112: goto st579; - } - goto tr1670; -st579: - if ( ++p == pe ) - goto _test_eof579; -case 579: - switch( (*p) ) { - case 75: goto st580; - case 107: goto st580; - } - goto tr1670; -st580: - if ( ++p == pe ) - goto _test_eof580; -case 580: - switch( (*p) ) { - case 73: goto st581; - case 105: goto st581; - } - goto tr1670; -st581: - if ( ++p == pe ) - goto _test_eof581; -case 581: - switch( (*p) ) { - case 88: goto st582; - case 120: goto st582; - } - goto tr1670; -st582: - if ( ++p == pe ) - goto _test_eof582; -case 582: - switch( (*p) ) { - case 32: goto tr1685; - case 59: goto tr1685; - } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1685; - } else if ( (*p) >= 9 ) - goto tr1685; - goto tr1670; -st583: - if ( ++p == pe ) - goto _test_eof583; -case 583: - switch( (*p) ) { - case 65: goto st584; - case 80: goto st590; - case 83: goto st596; - case 97: goto st584; - case 112: goto st590; - case 115: goto st596; - } - goto tr1670; -st584: - if ( ++p == pe ) - goto _test_eof584; -case 584: - switch( (*p) ) { - case 67: goto st585; - case 99: goto st585; - } - goto tr1670; -st585: - if ( ++p == pe ) - goto _test_eof585; -case 585: - switch( (*p) ) { - case 80: goto st586; - case 112: goto st586; - } - goto tr1670; st586: if ( ++p == pe ) goto _test_eof586; case 586: switch( (*p) ) { - case 75: goto st587; - case 107: goto st587; + case 67: goto st587; + case 99: goto st587; } - goto tr1670; + goto tr1681; st587: if ( ++p == pe ) goto _test_eof587; case 587: switch( (*p) ) { - case 73: goto st588; - case 105: goto st588; + case 80: goto st588; + case 112: goto st588; } - goto tr1670; + goto tr1681; st588: if ( ++p == pe ) goto _test_eof588; case 588: switch( (*p) ) { - case 88: goto st589; - case 120: goto st589; + case 75: goto st589; + case 107: goto st589; } - goto tr1670; + goto tr1681; st589: if ( ++p == pe ) goto _test_eof589; case 589: switch( (*p) ) { - case 32: goto tr1694; - case 59: goto tr1694; + case 73: goto st590; + case 105: goto st590; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1694; - } else if ( (*p) >= 9 ) - goto tr1694; - goto tr1670; + goto tr1681; st590: if ( ++p == pe ) goto _test_eof590; case 590: switch( (*p) ) { - case 71: goto st591; - case 75: goto st593; - case 103: goto st591; - case 107: goto st593; + case 88: goto st591; + case 120: goto st591; } - goto tr1670; + goto tr1681; st591: if ( ++p == pe ) goto _test_eof591; case 591: switch( (*p) ) { - case 80: goto st592; - case 112: goto st592; + case 32: goto tr1696; + case 59: goto tr1696; } - goto tr1670; + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1696; + } else if ( (*p) >= 9 ) + goto tr1696; + goto tr1681; st592: if ( ++p == pe ) goto _test_eof592; case 592: switch( (*p) ) { - case 32: goto tr1698; - case 59: goto tr1698; - } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1698; - } else if ( (*p) >= 9 ) - goto tr1698; - goto tr1670; + case 65: goto st593; + case 80: goto st599; + case 83: goto st605; + case 97: goto st593; + case 112: goto st599; + case 115: goto st605; + } + goto tr1681; st593: if ( ++p == pe ) goto _test_eof593; case 593: switch( (*p) ) { - case 73: goto st594; - case 105: goto st594; + case 67: goto st594; + case 99: goto st594; } - goto tr1670; + goto tr1681; st594: if ( ++p == pe ) goto _test_eof594; case 594: switch( (*p) ) { - case 88: goto st595; - case 120: goto st595; + case 80: goto st595; + case 112: goto st595; } - goto tr1670; + goto tr1681; st595: if ( ++p == pe ) goto _test_eof595; case 595: switch( (*p) ) { - case 32: goto tr1701; - case 59: goto tr1701; + case 75: goto st596; + case 107: goto st596; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1701; - } else if ( (*p) >= 9 ) - goto tr1701; - goto tr1670; + goto tr1681; st596: if ( ++p == pe ) goto _test_eof596; case 596: switch( (*p) ) { - case 80: goto st597; - case 112: goto st597; + case 73: goto st597; + case 105: goto st597; } - goto tr1670; + goto tr1681; st597: if ( ++p == pe ) goto _test_eof597; case 597: switch( (*p) ) { - case 75: goto st598; - case 107: goto st598; + case 88: goto st598; + case 120: goto st598; } - goto tr1670; + goto tr1681; st598: if ( ++p == pe ) goto _test_eof598; case 598: - switch( (*p) ) { - case 73: goto st599; - case 105: goto st599; - } - goto tr1670; -st599: - if ( ++p == pe ) - goto _test_eof599; -case 599: switch( (*p) ) { case 32: goto tr1705; case 59: goto tr1705; @@ -46326,63 +46325,63 @@ case 599: goto tr1705; } else if ( (*p) >= 9 ) goto tr1705; - goto tr1670; + goto tr1681; +st599: + if ( ++p == pe ) + goto _test_eof599; +case 599: + switch( (*p) ) { + case 71: goto st600; + case 75: goto st602; + case 103: goto st600; + case 107: goto st602; + } + goto tr1681; st600: if ( ++p == pe ) goto _test_eof600; case 600: switch( (*p) ) { - case 73: goto st601; - case 105: goto st601; + case 80: goto st601; + case 112: goto st601; } - goto tr1670; + goto tr1681; st601: if ( ++p == pe ) goto _test_eof601; case 601: switch( (*p) ) { - case 68: goto st602; - case 100: goto st602; + case 32: goto tr1709; + case 59: goto tr1709; } - goto tr1670; + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1709; + } else if ( (*p) >= 9 ) + goto tr1709; + goto tr1681; st602: if ( ++p == pe ) goto _test_eof602; case 602: switch( (*p) ) { - case 32: goto tr1708; - case 59: goto tr1708; + case 73: goto st603; + case 105: goto st603; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1708; - } else if ( (*p) >= 9 ) - goto tr1708; - goto tr1670; + goto tr1681; st603: if ( ++p == pe ) goto _test_eof603; case 603: switch( (*p) ) { - case 71: goto st604; - case 75: goto st606; - case 103: goto st604; - case 107: goto st606; + case 88: goto st604; + case 120: goto st604; } - goto tr1670; + goto tr1681; st604: if ( ++p == pe ) goto _test_eof604; case 604: - switch( (*p) ) { - case 80: goto st605; - case 112: goto st605; - } - goto tr1670; -st605: - if ( ++p == pe ) - goto _test_eof605; -case 605: switch( (*p) ) { case 32: goto tr1712; case 59: goto tr1712; @@ -46392,70 +46391,70 @@ case 605: goto tr1712; } else if ( (*p) >= 9 ) goto tr1712; - goto tr1670; + goto tr1681; +st605: + if ( ++p == pe ) + goto _test_eof605; +case 605: + switch( (*p) ) { + case 80: goto st606; + case 112: goto st606; + } + goto tr1681; st606: if ( ++p == pe ) goto _test_eof606; case 606: switch( (*p) ) { - case 73: goto st607; - case 105: goto st607; + case 75: goto st607; + case 107: goto st607; } - goto tr1670; + goto tr1681; st607: if ( ++p == pe ) goto _test_eof607; case 607: switch( (*p) ) { - case 88: goto st608; - case 120: goto st608; + case 73: goto st608; + case 105: goto st608; } - goto tr1670; + goto tr1681; st608: if ( ++p == pe ) goto _test_eof608; case 608: switch( (*p) ) { - case 32: goto tr1715; - case 59: goto tr1715; + case 32: goto tr1716; + case 59: goto tr1716; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1715; + goto tr1716; } else if ( (*p) >= 9 ) - goto tr1715; - goto tr1670; + goto tr1716; + goto tr1681; st609: if ( ++p == pe ) goto _test_eof609; case 609: switch( (*p) ) { - case 80: goto st610; - case 112: goto st610; + case 73: goto st610; + case 105: goto st610; } - goto tr1670; + goto tr1681; st610: if ( ++p == pe ) goto _test_eof610; case 610: switch( (*p) ) { - case 75: goto st611; - case 107: goto st611; + case 68: goto st611; + case 100: goto st611; } - goto tr1670; + goto tr1681; st611: if ( ++p == pe ) goto _test_eof611; case 611: - switch( (*p) ) { - case 73: goto st612; - case 105: goto st612; - } - goto tr1670; -st612: - if ( ++p == pe ) - goto _test_eof612; -case 612: switch( (*p) ) { case 32: goto tr1719; case 59: goto tr1719; @@ -46465,49 +46464,156 @@ case 612: goto tr1719; } else if ( (*p) >= 9 ) goto tr1719; - goto tr1670; + goto tr1681; +st612: + if ( ++p == pe ) + goto _test_eof612; +case 612: + switch( (*p) ) { + case 71: goto st613; + case 75: goto st615; + case 103: goto st613; + case 107: goto st615; + } + goto tr1681; st613: if ( ++p == pe ) goto _test_eof613; case 613: switch( (*p) ) { - case 82: goto st614; - case 114: goto st614; + case 80: goto st614; + case 112: goto st614; } - goto tr1670; + goto tr1681; st614: if ( ++p == pe ) goto _test_eof614; case 614: switch( (*p) ) { - case 73: goto st615; - case 105: goto st615; + case 32: goto tr1723; + case 59: goto tr1723; } - goto tr1670; + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1723; + } else if ( (*p) >= 9 ) + goto tr1723; + goto tr1681; st615: if ( ++p == pe ) goto _test_eof615; case 615: switch( (*p) ) { - case 32: goto tr1722; - case 59: goto tr1722; + case 73: goto st616; + case 105: goto st616; } - if ( (*p) > 10 ) { - if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1722; - } else if ( (*p) >= 9 ) - goto tr1722; - goto tr1670; + goto tr1681; st616: if ( ++p == pe ) goto _test_eof616; case 616: + switch( (*p) ) { + case 88: goto st617; + case 120: goto st617; + } + goto tr1681; +st617: + if ( ++p == pe ) + goto _test_eof617; +case 617: + switch( (*p) ) { + case 32: goto tr1726; + case 59: goto tr1726; + } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1726; + } else if ( (*p) >= 9 ) + goto tr1726; + goto tr1681; +st618: + if ( ++p == pe ) + goto _test_eof618; +case 618: + switch( (*p) ) { + case 80: goto st619; + case 112: goto st619; + } + goto tr1681; +st619: + if ( ++p == pe ) + goto _test_eof619; +case 619: + switch( (*p) ) { + case 75: goto st620; + case 107: goto st620; + } + goto tr1681; +st620: + if ( ++p == pe ) + goto _test_eof620; +case 620: + switch( (*p) ) { + case 73: goto st621; + case 105: goto st621; + } + goto tr1681; +st621: + if ( ++p == pe ) + goto _test_eof621; +case 621: + switch( (*p) ) { + case 32: goto tr1730; + case 59: goto tr1730; + } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1730; + } else if ( (*p) >= 9 ) + goto tr1730; + goto tr1681; +st622: + if ( ++p == pe ) + goto _test_eof622; +case 622: + switch( (*p) ) { + case 82: goto st623; + case 114: goto st623; + } + goto tr1681; +st623: + if ( ++p == pe ) + goto _test_eof623; +case 623: + switch( (*p) ) { + case 73: goto st624; + case 105: goto st624; + } + goto tr1681; +st624: + if ( ++p == pe ) + goto _test_eof624; +case 624: + switch( (*p) ) { + case 32: goto tr1733; + case 59: goto tr1733; + } + if ( (*p) > 10 ) { + if ( 40 <= (*p) && (*p) <= 41 ) + goto tr1733; + } else if ( (*p) >= 9 ) + goto tr1733; + goto tr1681; +st625: + if ( ++p == pe ) + goto _test_eof625; +case 625: if ( (*p) == 46 ) - goto tr1724; + goto tr1735; if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1724; - goto tr1723; -tr1724: + goto tr1735; + goto tr1734; +tr1735: { s->buffer_length = 0; } @@ -46520,8 +46626,8 @@ tr1724: p--; {goto st261;} } } - goto st617; -tr1726: + goto st626; +tr1737: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -46531,26 +46637,26 @@ tr1726: p--; {goto st261;} } } - goto st617; -st617: + goto st626; +st626: if ( ++p == pe ) - goto _test_eof617; -case 617: + goto _test_eof626; +case 626: switch( (*p) ) { - case 32: goto tr1725; - case 46: goto tr1726; - case 59: goto tr1725; + case 32: goto tr1736; + case 46: goto tr1737; + case 59: goto tr1736; } if ( (*p) < 40 ) { if ( 9 <= (*p) && (*p) <= 10 ) - goto tr1725; + goto tr1736; } else if ( (*p) > 41 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1726; + goto tr1737; } else - goto tr1725; - goto tr1723; -tr1725: + goto tr1736; + goto tr1734; +tr1736: { s->buffer[s->buffer_length] = 0; @@ -46566,91 +46672,91 @@ tr1725: { p--; {cs = stack[--top];goto _again;} } - goto st1145; -st1145: + goto st1154; +st1154: if ( ++p == pe ) - goto _test_eof1145; -case 1145: + goto _test_eof1154; +case 1154: goto st0; -st618: +st627: if ( ++p == pe ) - goto _test_eof618; -case 618: + goto _test_eof627; +case 627: switch( (*p) ) { - case 42: goto tr1727; - case 92: goto tr1727; - case 95: goto tr1727; + case 42: goto tr1738; + case 92: goto tr1738; + case 95: goto tr1738; } if ( (*p) < 64 ) { if ( 45 <= (*p) && (*p) <= 57 ) - goto tr1727; + goto tr1738; } else if ( (*p) > 90 ) { if ( 97 <= (*p) && (*p) <= 122 ) - goto tr1727; + goto tr1738; } else - goto tr1727; + goto tr1738; goto tr71; -tr1727: +tr1738: { s->dname = rdata_tail; } - { p--; {stack[top++] = 619; goto st263;} } - goto st619; -st619: + { p--; {stack[top++] = 628; goto st263;} } + goto st628; +st628: if ( ++p == pe ) - goto _test_eof619; -case 619: + goto _test_eof628; +case 628: switch( (*p) ) { - case 32: goto tr1728; - case 59: goto tr1728; + case 32: goto tr1739; + case 59: goto tr1739; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1728; + goto tr1739; } else if ( (*p) >= 9 ) - goto tr1728; + goto tr1739; goto tr71; -tr1728: +tr1739: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1146; -st1146: + goto st1155; +st1155: if ( ++p == pe ) - goto _test_eof1146; -case 1146: + goto _test_eof1155; +case 1155: goto st0; -st620: +st629: if ( ++p == pe ) - goto _test_eof620; -case 620: + goto _test_eof629; +case 629: switch( (*p) ) { - case 42: goto tr1729; - case 92: goto tr1729; - case 95: goto tr1729; + case 42: goto tr1740; + case 92: goto tr1740; + case 95: goto tr1740; } if ( (*p) < 64 ) { if ( 45 <= (*p) && (*p) <= 57 ) - goto tr1729; + goto tr1740; } else if ( (*p) > 90 ) { if ( 97 <= (*p) && (*p) <= 122 ) - goto tr1729; + goto tr1740; } else - goto tr1729; + goto tr1740; goto tr71; -tr1729: +tr1740: { s->dname = rdata_tail; } - { p--; {stack[top++] = 621; goto st263;} } - goto st621; -st621: + { p--; {stack[top++] = 630; goto st263;} } + goto st630; +st630: if ( ++p == pe ) - goto _test_eof621; -case 621: + goto _test_eof630; +case 630: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -46664,15 +46770,15 @@ case 621: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1730; - case 32: goto tr1730; - case 40: goto tr1731; - case 41: goto tr1732; - case 1034: goto tr1733; - case 1083: goto tr1734; + case 9: goto tr1741; + case 32: goto tr1741; + case 40: goto tr1742; + case 41: goto tr1743; + case 1034: goto tr1744; + case 1083: goto tr1745; } goto tr71; -tr1736: +tr1747: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -46680,8 +46786,8 @@ tr1736: } s->multiline = true; } - goto st622; -tr1737: + goto st631; +tr1748: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -46689,18 +46795,18 @@ tr1737: } s->multiline = false; } - goto st622; -tr1739: + goto st631; +tr1750: { s->line_counter++; } - goto st622; -tr1730: + goto st631; +tr1741: { rdata_tail += s->dname_tmp_length; } - goto st622; -tr1731: + goto st631; +tr1742: { rdata_tail += s->dname_tmp_length; } @@ -46711,8 +46817,8 @@ tr1731: } s->multiline = true; } - goto st622; -tr1732: + goto st631; +tr1743: { rdata_tail += s->dname_tmp_length; } @@ -46723,19 +46829,19 @@ tr1732: } s->multiline = false; } - goto st622; -tr1733: + goto st631; +tr1744: { rdata_tail += s->dname_tmp_length; } { s->line_counter++; } - goto st622; -st622: + goto st631; +st631: if ( ++p == pe ) - goto _test_eof622; -case 622: + goto _test_eof631; +case 631: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -46749,35 +46855,35 @@ case 622: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st622; - case 32: goto st622; - case 40: goto tr1736; - case 41: goto tr1737; - case 42: goto tr1738; - case 92: goto tr1738; - case 95: goto tr1738; - case 1034: goto tr1739; - case 1083: goto st651; + case 9: goto st631; + case 32: goto st631; + case 40: goto tr1747; + case 41: goto tr1748; + case 42: goto tr1749; + case 92: goto tr1749; + case 95: goto tr1749; + case 1034: goto tr1750; + case 1083: goto st660; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr1738; + goto tr1749; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr1738; + goto tr1749; } else - goto tr1738; + goto tr1749; goto tr71; -tr1738: +tr1749: { s->dname = rdata_tail; } - { p--; {stack[top++] = 623; goto st263;} } - goto st623; -st623: + { p--; {stack[top++] = 632; goto st263;} } + goto st632; +st632: if ( ++p == pe ) - goto _test_eof623; -case 623: + goto _test_eof632; +case 632: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -46791,15 +46897,15 @@ case 623: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1741; - case 32: goto tr1741; - case 40: goto tr1742; - case 41: goto tr1743; - case 1034: goto tr1744; - case 1083: goto tr1745; + case 9: goto tr1752; + case 32: goto tr1752; + case 40: goto tr1753; + case 41: goto tr1754; + case 1034: goto tr1755; + case 1083: goto tr1756; } goto tr71; -tr1748: +tr1759: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -46807,8 +46913,8 @@ tr1748: } s->multiline = true; } - goto st624; -tr1749: + goto st633; +tr1760: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -46816,18 +46922,18 @@ tr1749: } s->multiline = false; } - goto st624; -tr1751: + goto st633; +tr1762: { s->line_counter++; } - goto st624; -tr1741: + goto st633; +tr1752: { rdata_tail += s->dname_tmp_length; } - goto st624; -tr1742: + goto st633; +tr1753: { rdata_tail += s->dname_tmp_length; } @@ -46838,8 +46944,8 @@ tr1742: } s->multiline = true; } - goto st624; -tr1743: + goto st633; +tr1754: { rdata_tail += s->dname_tmp_length; } @@ -46850,19 +46956,19 @@ tr1743: } s->multiline = false; } - goto st624; -tr1744: + goto st633; +tr1755: { rdata_tail += s->dname_tmp_length; } { s->line_counter++; } - goto st624; -st624: + goto st633; +st633: if ( ++p == pe ) - goto _test_eof624; -case 624: + goto _test_eof633; +case 633: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -46876,17 +46982,17 @@ case 624: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st624; - case 32: goto st624; - case 40: goto tr1748; - case 41: goto tr1749; - case 1034: goto tr1751; - case 1083: goto st650; + case 9: goto st633; + case 32: goto st633; + case 40: goto tr1759; + case 41: goto tr1760; + case 1034: goto tr1762; + case 1083: goto st659; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1750; - goto tr1746; -tr1750: + goto tr1761; + goto tr1757; +tr1761: { s->number64 = 0; } @@ -46904,8 +47010,8 @@ tr1750: p--; {goto st261;} } } - goto st625; -tr1756: + goto st634; +tr1767: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -46920,11 +47026,11 @@ tr1756: p--; {goto st261;} } } - goto st625; -st625: + goto st634; +st634: if ( ++p == pe ) - goto _test_eof625; -case 625: + goto _test_eof634; +case 634: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -46938,17 +47044,17 @@ case 625: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1753; - case 32: goto tr1753; - case 40: goto tr1754; - case 41: goto tr1755; - case 1034: goto tr1757; - case 1083: goto tr1758; + case 9: goto tr1764; + case 32: goto tr1764; + case 40: goto tr1765; + case 41: goto tr1766; + case 1034: goto tr1768; + case 1083: goto tr1769; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1756; - goto tr1746; -tr1760: + goto tr1767; + goto tr1757; +tr1771: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -46956,8 +47062,8 @@ tr1760: } s->multiline = true; } - goto st626; -tr1761: + goto st635; +tr1772: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -46965,13 +47071,13 @@ tr1761: } s->multiline = false; } - goto st626; -tr1763: + goto st635; +tr1774: { s->line_counter++; } - goto st626; -tr1753: + goto st635; +tr1764: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -46981,8 +47087,8 @@ tr1753: p--; {goto st261;} } } - goto st626; -tr1754: + goto st635; +tr1765: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -46999,8 +47105,8 @@ tr1754: } s->multiline = true; } - goto st626; -tr1755: + goto st635; +tr1766: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47017,8 +47123,8 @@ tr1755: } s->multiline = false; } - goto st626; -tr1757: + goto st635; +tr1768: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47031,11 +47137,11 @@ tr1757: { s->line_counter++; } - goto st626; -st626: + goto st635; +st635: if ( ++p == pe ) - goto _test_eof626; -case 626: + goto _test_eof635; +case 635: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -47049,17 +47155,17 @@ case 626: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st626; - case 32: goto st626; - case 40: goto tr1760; - case 41: goto tr1761; - case 1034: goto tr1763; - case 1083: goto st649; + case 9: goto st635; + case 32: goto st635; + case 40: goto tr1771; + case 41: goto tr1772; + case 1034: goto tr1774; + case 1083: goto st658; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1762; - goto tr1746; -tr1762: + goto tr1773; + goto tr1757; +tr1773: { s->number64 = 0; } @@ -47077,8 +47183,8 @@ tr1762: p--; {goto st261;} } } - goto st627; -tr1769: + goto st636; +tr1780: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -47093,11 +47199,11 @@ tr1769: p--; {goto st261;} } } - goto st627; -st627: + goto st636; +st636: if ( ++p == pe ) - goto _test_eof627; -case 627: + goto _test_eof636; +case 636: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -47111,27 +47217,27 @@ case 627: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1766; - case 32: goto tr1766; - case 40: goto tr1767; - case 41: goto tr1768; - case 68: goto tr1770; - case 72: goto tr1771; - case 77: goto tr1772; - case 83: goto st646; - case 87: goto tr1774; - case 100: goto tr1770; - case 104: goto tr1771; - case 109: goto tr1772; - case 115: goto st646; - case 119: goto tr1774; - case 1034: goto tr1775; - case 1083: goto tr1776; + case 9: goto tr1777; + case 32: goto tr1777; + case 40: goto tr1778; + case 41: goto tr1779; + case 68: goto tr1781; + case 72: goto tr1782; + case 77: goto tr1783; + case 83: goto st655; + case 87: goto tr1785; + case 100: goto tr1781; + case 104: goto tr1782; + case 109: goto tr1783; + case 115: goto st655; + case 119: goto tr1785; + case 1034: goto tr1786; + case 1083: goto tr1787; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1769; - goto tr1765; -tr1778: + goto tr1780; + goto tr1776; +tr1789: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -47139,8 +47245,8 @@ tr1778: } s->multiline = true; } - goto st628; -tr1779: + goto st637; +tr1790: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -47148,13 +47254,13 @@ tr1779: } s->multiline = false; } - goto st628; -tr1781: + goto st637; +tr1792: { s->line_counter++; } - goto st628; -tr1766: + goto st637; +tr1777: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47164,8 +47270,8 @@ tr1766: p--; {goto st261;} } } - goto st628; -tr1767: + goto st637; +tr1778: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47182,8 +47288,8 @@ tr1767: } s->multiline = true; } - goto st628; -tr1768: + goto st637; +tr1779: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47200,8 +47306,8 @@ tr1768: } s->multiline = false; } - goto st628; -tr1775: + goto st637; +tr1786: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47214,8 +47320,8 @@ tr1775: { s->line_counter++; } - goto st628; -tr1866: + goto st637; +tr1877: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47233,8 +47339,8 @@ tr1866: p--; {goto st261;} } } - goto st628; -tr1867: + goto st637; +tr1878: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47259,8 +47365,8 @@ tr1867: } s->multiline = true; } - goto st628; -tr1868: + goto st637; +tr1879: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47285,8 +47391,8 @@ tr1868: } s->multiline = false; } - goto st628; -tr1870: + goto st637; +tr1881: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47307,11 +47413,11 @@ tr1870: { s->line_counter++; } - goto st628; -st628: + goto st637; +st637: if ( ++p == pe ) - goto _test_eof628; -case 628: + goto _test_eof637; +case 637: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -47325,17 +47431,17 @@ case 628: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st628; - case 32: goto st628; - case 40: goto tr1778; - case 41: goto tr1779; - case 1034: goto tr1781; - case 1083: goto st645; + case 9: goto st637; + case 32: goto st637; + case 40: goto tr1789; + case 41: goto tr1790; + case 1034: goto tr1792; + case 1083: goto st654; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1780; - goto tr1746; -tr1780: + goto tr1791; + goto tr1757; +tr1791: { s->number64 = 0; } @@ -47353,8 +47459,8 @@ tr1780: p--; {goto st261;} } } - goto st629; -tr1786: + goto st638; +tr1797: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -47369,11 +47475,11 @@ tr1786: p--; {goto st261;} } } - goto st629; -st629: + goto st638; +st638: if ( ++p == pe ) - goto _test_eof629; -case 629: + goto _test_eof638; +case 638: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -47387,27 +47493,27 @@ case 629: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1783; - case 32: goto tr1783; - case 40: goto tr1784; - case 41: goto tr1785; - case 68: goto tr1787; - case 72: goto tr1788; - case 77: goto tr1789; - case 83: goto st642; - case 87: goto tr1791; - case 100: goto tr1787; - case 104: goto tr1788; - case 109: goto tr1789; - case 115: goto st642; - case 119: goto tr1791; - case 1034: goto tr1792; - case 1083: goto tr1793; + case 9: goto tr1794; + case 32: goto tr1794; + case 40: goto tr1795; + case 41: goto tr1796; + case 68: goto tr1798; + case 72: goto tr1799; + case 77: goto tr1800; + case 83: goto st651; + case 87: goto tr1802; + case 100: goto tr1798; + case 104: goto tr1799; + case 109: goto tr1800; + case 115: goto st651; + case 119: goto tr1802; + case 1034: goto tr1803; + case 1083: goto tr1804; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1786; - goto tr1765; -tr1795: + goto tr1797; + goto tr1776; +tr1806: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -47415,8 +47521,8 @@ tr1795: } s->multiline = true; } - goto st630; -tr1796: + goto st639; +tr1807: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -47424,13 +47530,13 @@ tr1796: } s->multiline = false; } - goto st630; -tr1798: + goto st639; +tr1809: { s->line_counter++; } - goto st630; -tr1783: + goto st639; +tr1794: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47440,8 +47546,8 @@ tr1783: p--; {goto st261;} } } - goto st630; -tr1784: + goto st639; +tr1795: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47458,8 +47564,8 @@ tr1784: } s->multiline = true; } - goto st630; -tr1785: + goto st639; +tr1796: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47476,8 +47582,8 @@ tr1785: } s->multiline = false; } - goto st630; -tr1792: + goto st639; +tr1803: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47490,8 +47596,8 @@ tr1792: { s->line_counter++; } - goto st630; -tr1853: + goto st639; +tr1864: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47509,8 +47615,8 @@ tr1853: p--; {goto st261;} } } - goto st630; -tr1854: + goto st639; +tr1865: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47535,8 +47641,8 @@ tr1854: } s->multiline = true; } - goto st630; -tr1855: + goto st639; +tr1866: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47561,8 +47667,8 @@ tr1855: } s->multiline = false; } - goto st630; -tr1857: + goto st639; +tr1868: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47583,11 +47689,11 @@ tr1857: { s->line_counter++; } - goto st630; -st630: + goto st639; +st639: if ( ++p == pe ) - goto _test_eof630; -case 630: + goto _test_eof639; +case 639: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -47601,17 +47707,17 @@ case 630: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st630; - case 32: goto st630; - case 40: goto tr1795; - case 41: goto tr1796; - case 1034: goto tr1798; - case 1083: goto st641; + case 9: goto st639; + case 32: goto st639; + case 40: goto tr1806; + case 41: goto tr1807; + case 1034: goto tr1809; + case 1083: goto st650; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1797; - goto tr1746; -tr1797: + goto tr1808; + goto tr1757; +tr1808: { s->number64 = 0; } @@ -47629,8 +47735,8 @@ tr1797: p--; {goto st261;} } } - goto st631; -tr1803: + goto st640; +tr1814: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -47645,11 +47751,11 @@ tr1803: p--; {goto st261;} } } - goto st631; -st631: + goto st640; +st640: if ( ++p == pe ) - goto _test_eof631; -case 631: + goto _test_eof640; +case 640: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -47663,27 +47769,27 @@ case 631: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1800; - case 32: goto tr1800; - case 40: goto tr1801; - case 41: goto tr1802; - case 68: goto tr1804; - case 72: goto tr1805; - case 77: goto tr1806; - case 83: goto st638; - case 87: goto tr1808; - case 100: goto tr1804; - case 104: goto tr1805; - case 109: goto tr1806; - case 115: goto st638; - case 119: goto tr1808; - case 1034: goto tr1809; - case 1083: goto tr1810; + case 9: goto tr1811; + case 32: goto tr1811; + case 40: goto tr1812; + case 41: goto tr1813; + case 68: goto tr1815; + case 72: goto tr1816; + case 77: goto tr1817; + case 83: goto st647; + case 87: goto tr1819; + case 100: goto tr1815; + case 104: goto tr1816; + case 109: goto tr1817; + case 115: goto st647; + case 119: goto tr1819; + case 1034: goto tr1820; + case 1083: goto tr1821; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1803; - goto tr1765; -tr1812: + goto tr1814; + goto tr1776; +tr1823: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -47691,8 +47797,8 @@ tr1812: } s->multiline = true; } - goto st632; -tr1813: + goto st641; +tr1824: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -47700,13 +47806,13 @@ tr1813: } s->multiline = false; } - goto st632; -tr1815: + goto st641; +tr1826: { s->line_counter++; } - goto st632; -tr1800: + goto st641; +tr1811: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47716,8 +47822,8 @@ tr1800: p--; {goto st261;} } } - goto st632; -tr1801: + goto st641; +tr1812: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47734,8 +47840,8 @@ tr1801: } s->multiline = true; } - goto st632; -tr1802: + goto st641; +tr1813: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47752,8 +47858,8 @@ tr1802: } s->multiline = false; } - goto st632; -tr1809: + goto st641; +tr1820: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47766,8 +47872,8 @@ tr1809: { s->line_counter++; } - goto st632; -tr1840: + goto st641; +tr1851: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47785,8 +47891,8 @@ tr1840: p--; {goto st261;} } } - goto st632; -tr1841: + goto st641; +tr1852: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47811,8 +47917,8 @@ tr1841: } s->multiline = true; } - goto st632; -tr1842: + goto st641; +tr1853: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47837,8 +47943,8 @@ tr1842: } s->multiline = false; } - goto st632; -tr1844: + goto st641; +tr1855: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47859,11 +47965,11 @@ tr1844: { s->line_counter++; } - goto st632; -st632: + goto st641; +st641: if ( ++p == pe ) - goto _test_eof632; -case 632: + goto _test_eof641; +case 641: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -47877,17 +47983,17 @@ case 632: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st632; - case 32: goto st632; - case 40: goto tr1812; - case 41: goto tr1813; - case 1034: goto tr1815; - case 1083: goto st637; + case 9: goto st641; + case 32: goto st641; + case 40: goto tr1823; + case 41: goto tr1824; + case 1034: goto tr1826; + case 1083: goto st646; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1814; - goto tr1746; -tr1814: + goto tr1825; + goto tr1757; +tr1825: { s->number64 = 0; } @@ -47905,8 +48011,8 @@ tr1814: p--; {goto st261;} } } - goto st633; -tr1818: + goto st642; +tr1829: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -47921,35 +48027,35 @@ tr1818: p--; {goto st261;} } } - goto st633; -st633: + goto st642; +st642: if ( ++p == pe ) - goto _test_eof633; -case 633: + goto _test_eof642; +case 642: switch( (*p) ) { - case 32: goto tr1817; - case 59: goto tr1817; - case 68: goto tr1819; - case 72: goto tr1820; - case 77: goto tr1821; - case 83: goto st634; - case 87: goto tr1823; - case 100: goto tr1819; - case 104: goto tr1820; - case 109: goto tr1821; - case 115: goto st634; - case 119: goto tr1823; + case 32: goto tr1828; + case 59: goto tr1828; + case 68: goto tr1830; + case 72: goto tr1831; + case 77: goto tr1832; + case 83: goto st643; + case 87: goto tr1834; + case 100: goto tr1830; + case 104: goto tr1831; + case 109: goto tr1832; + case 115: goto st643; + case 119: goto tr1834; } if ( (*p) < 40 ) { if ( 9 <= (*p) && (*p) <= 10 ) - goto tr1817; + goto tr1828; } else if ( (*p) > 41 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1818; + goto tr1829; } else - goto tr1817; - goto tr1765; -tr1817: + goto tr1828; + goto tr1776; +tr1828: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -47962,8 +48068,8 @@ tr1817: { p--; {cs = stack[--top];goto _again;} } - goto st1147; -tr1831: + goto st1156; +tr1842: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -47984,13 +48090,13 @@ tr1831: { p--; {cs = stack[--top];goto _again;} } - goto st1147; -st1147: + goto st1156; +st1156: if ( ++p == pe ) - goto _test_eof1147; -case 1147: + goto _test_eof1156; +case 1156: goto st0; -tr1819: +tr1830: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -47998,8 +48104,8 @@ tr1819: p--; {goto st261;} } } - goto st634; -tr1820: + goto st643; +tr1831: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48007,8 +48113,8 @@ tr1820: p--; {goto st261;} } } - goto st634; -tr1821: + goto st643; +tr1832: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48016,8 +48122,8 @@ tr1821: p--; {goto st261;} } } - goto st634; -tr1823: + goto st643; +tr1834: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48025,25 +48131,25 @@ tr1823: p--; {goto st261;} } } - goto st634; -st634: + goto st643; +st643: if ( ++p == pe ) - goto _test_eof634; -case 634: + goto _test_eof643; +case 643: switch( (*p) ) { - case 32: goto tr1817; - case 59: goto tr1817; + case 32: goto tr1828; + case 59: goto tr1828; } if ( (*p) < 40 ) { if ( 9 <= (*p) && (*p) <= 10 ) - goto tr1817; + goto tr1828; } else if ( (*p) > 41 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1824; + goto tr1835; } else - goto tr1817; - goto tr1765; -tr1825: + goto tr1828; + goto tr1776; +tr1836: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -48058,8 +48164,8 @@ tr1825: p--; {goto st261;} } } - goto st635; -tr1824: + goto st644; +tr1835: { s->number64_tmp = s->number64; } @@ -48080,8 +48186,8 @@ tr1824: p--; {goto st261;} } } - goto st635; -tr1832: + goto st644; +tr1843: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -48110,27 +48216,27 @@ tr1832: p--; {goto st261;} } } - goto st635; -st635: + goto st644; +st644: if ( ++p == pe ) - goto _test_eof635; -case 635: + goto _test_eof644; +case 644: switch( (*p) ) { - case 68: goto tr1826; - case 72: goto tr1827; - case 77: goto tr1828; - case 83: goto st636; - case 87: goto tr1830; - case 100: goto tr1826; - case 104: goto tr1827; - case 109: goto tr1828; - case 115: goto st636; - case 119: goto tr1830; + case 68: goto tr1837; + case 72: goto tr1838; + case 77: goto tr1839; + case 83: goto st645; + case 87: goto tr1841; + case 100: goto tr1837; + case 104: goto tr1838; + case 109: goto tr1839; + case 115: goto st645; + case 119: goto tr1841; } if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1825; - goto tr1765; -tr1826: + goto tr1836; + goto tr1776; +tr1837: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -48138,8 +48244,8 @@ tr1826: p--; {goto st261;} } } - goto st636; -tr1827: + goto st645; +tr1838: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48147,8 +48253,8 @@ tr1827: p--; {goto st261;} } } - goto st636; -tr1828: + goto st645; +tr1839: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48156,8 +48262,8 @@ tr1828: p--; {goto st261;} } } - goto st636; -tr1830: + goto st645; +tr1841: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48165,25 +48271,25 @@ tr1830: p--; {goto st261;} } } - goto st636; -st636: + goto st645; +st645: if ( ++p == pe ) - goto _test_eof636; -case 636: + goto _test_eof645; +case 645: switch( (*p) ) { - case 32: goto tr1831; - case 59: goto tr1831; + case 32: goto tr1842; + case 59: goto tr1842; } if ( (*p) < 40 ) { if ( 9 <= (*p) && (*p) <= 10 ) - goto tr1831; + goto tr1842; } else if ( (*p) > 41 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1832; + goto tr1843; } else - goto tr1831; - goto tr1765; -tr1810: + goto tr1842; + goto tr1776; +tr1821: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -48193,8 +48299,8 @@ tr1810: p--; {goto st261;} } } - goto st637; -tr1845: + goto st646; +tr1856: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -48212,11 +48318,11 @@ tr1845: p--; {goto st261;} } } - goto st637; -st637: + goto st646; +st646: if ( ++p == pe ) - goto _test_eof637; -case 637: + goto _test_eof646; +case 646: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -48236,11 +48342,11 @@ case 637: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1815; + goto tr1826; if ( 896 <= _widec && _widec <= 1151 ) - goto st637; + goto st646; goto tr71; -tr1804: +tr1815: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -48248,8 +48354,8 @@ tr1804: p--; {goto st261;} } } - goto st638; -tr1805: + goto st647; +tr1816: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48257,8 +48363,8 @@ tr1805: p--; {goto st261;} } } - goto st638; -tr1806: + goto st647; +tr1817: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48266,8 +48372,8 @@ tr1806: p--; {goto st261;} } } - goto st638; -tr1808: + goto st647; +tr1819: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48275,11 +48381,11 @@ tr1808: p--; {goto st261;} } } - goto st638; -st638: + goto st647; +st647: if ( ++p == pe ) - goto _test_eof638; -case 638: + goto _test_eof647; +case 647: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -48293,17 +48399,17 @@ case 638: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1800; - case 32: goto tr1800; - case 40: goto tr1801; - case 41: goto tr1802; - case 1034: goto tr1809; - case 1083: goto tr1810; + case 9: goto tr1811; + case 32: goto tr1811; + case 40: goto tr1812; + case 41: goto tr1813; + case 1034: goto tr1820; + case 1083: goto tr1821; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1833; - goto tr1765; -tr1834: + goto tr1844; + goto tr1776; +tr1845: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -48318,8 +48424,8 @@ tr1834: p--; {goto st261;} } } - goto st639; -tr1833: + goto st648; +tr1844: { s->number64_tmp = s->number64; } @@ -48340,8 +48446,8 @@ tr1833: p--; {goto st261;} } } - goto st639; -tr1843: + goto st648; +tr1854: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -48370,27 +48476,27 @@ tr1843: p--; {goto st261;} } } - goto st639; -st639: + goto st648; +st648: if ( ++p == pe ) - goto _test_eof639; -case 639: + goto _test_eof648; +case 648: switch( (*p) ) { - case 68: goto tr1835; - case 72: goto tr1836; - case 77: goto tr1837; - case 83: goto st640; - case 87: goto tr1839; - case 100: goto tr1835; - case 104: goto tr1836; - case 109: goto tr1837; - case 115: goto st640; - case 119: goto tr1839; + case 68: goto tr1846; + case 72: goto tr1847; + case 77: goto tr1848; + case 83: goto st649; + case 87: goto tr1850; + case 100: goto tr1846; + case 104: goto tr1847; + case 109: goto tr1848; + case 115: goto st649; + case 119: goto tr1850; } if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1834; - goto tr1765; -tr1835: + goto tr1845; + goto tr1776; +tr1846: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -48398,8 +48504,8 @@ tr1835: p--; {goto st261;} } } - goto st640; -tr1836: + goto st649; +tr1847: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48407,8 +48513,8 @@ tr1836: p--; {goto st261;} } } - goto st640; -tr1837: + goto st649; +tr1848: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48416,8 +48522,8 @@ tr1837: p--; {goto st261;} } } - goto st640; -tr1839: + goto st649; +tr1850: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48425,11 +48531,11 @@ tr1839: p--; {goto st261;} } } - goto st640; -st640: + goto st649; +st649: if ( ++p == pe ) - goto _test_eof640; -case 640: + goto _test_eof649; +case 649: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -48443,17 +48549,17 @@ case 640: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1840; - case 32: goto tr1840; - case 40: goto tr1841; - case 41: goto tr1842; - case 1034: goto tr1844; - case 1083: goto tr1845; + case 9: goto tr1851; + case 32: goto tr1851; + case 40: goto tr1852; + case 41: goto tr1853; + case 1034: goto tr1855; + case 1083: goto tr1856; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1843; - goto tr1765; -tr1793: + goto tr1854; + goto tr1776; +tr1804: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -48463,8 +48569,8 @@ tr1793: p--; {goto st261;} } } - goto st641; -tr1858: + goto st650; +tr1869: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -48482,11 +48588,11 @@ tr1858: p--; {goto st261;} } } - goto st641; -st641: + goto st650; +st650: if ( ++p == pe ) - goto _test_eof641; -case 641: + goto _test_eof650; +case 650: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -48506,11 +48612,11 @@ case 641: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1798; + goto tr1809; if ( 896 <= _widec && _widec <= 1151 ) - goto st641; + goto st650; goto tr71; -tr1787: +tr1798: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -48518,8 +48624,8 @@ tr1787: p--; {goto st261;} } } - goto st642; -tr1788: + goto st651; +tr1799: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48527,8 +48633,8 @@ tr1788: p--; {goto st261;} } } - goto st642; -tr1789: + goto st651; +tr1800: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48536,8 +48642,8 @@ tr1789: p--; {goto st261;} } } - goto st642; -tr1791: + goto st651; +tr1802: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48545,11 +48651,11 @@ tr1791: p--; {goto st261;} } } - goto st642; -st642: + goto st651; +st651: if ( ++p == pe ) - goto _test_eof642; -case 642: + goto _test_eof651; +case 651: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -48563,17 +48669,17 @@ case 642: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1783; - case 32: goto tr1783; - case 40: goto tr1784; - case 41: goto tr1785; - case 1034: goto tr1792; - case 1083: goto tr1793; + case 9: goto tr1794; + case 32: goto tr1794; + case 40: goto tr1795; + case 41: goto tr1796; + case 1034: goto tr1803; + case 1083: goto tr1804; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1846; - goto tr1765; -tr1847: + goto tr1857; + goto tr1776; +tr1858: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -48588,8 +48694,8 @@ tr1847: p--; {goto st261;} } } - goto st643; -tr1846: + goto st652; +tr1857: { s->number64_tmp = s->number64; } @@ -48610,8 +48716,8 @@ tr1846: p--; {goto st261;} } } - goto st643; -tr1856: + goto st652; +tr1867: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -48640,27 +48746,27 @@ tr1856: p--; {goto st261;} } } - goto st643; -st643: + goto st652; +st652: if ( ++p == pe ) - goto _test_eof643; -case 643: + goto _test_eof652; +case 652: switch( (*p) ) { - case 68: goto tr1848; - case 72: goto tr1849; - case 77: goto tr1850; - case 83: goto st644; - case 87: goto tr1852; - case 100: goto tr1848; - case 104: goto tr1849; - case 109: goto tr1850; - case 115: goto st644; - case 119: goto tr1852; + case 68: goto tr1859; + case 72: goto tr1860; + case 77: goto tr1861; + case 83: goto st653; + case 87: goto tr1863; + case 100: goto tr1859; + case 104: goto tr1860; + case 109: goto tr1861; + case 115: goto st653; + case 119: goto tr1863; } if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1847; - goto tr1765; -tr1848: + goto tr1858; + goto tr1776; +tr1859: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -48668,8 +48774,8 @@ tr1848: p--; {goto st261;} } } - goto st644; -tr1849: + goto st653; +tr1860: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48677,8 +48783,8 @@ tr1849: p--; {goto st261;} } } - goto st644; -tr1850: + goto st653; +tr1861: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48686,8 +48792,8 @@ tr1850: p--; {goto st261;} } } - goto st644; -tr1852: + goto st653; +tr1863: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48695,11 +48801,11 @@ tr1852: p--; {goto st261;} } } - goto st644; -st644: + goto st653; +st653: if ( ++p == pe ) - goto _test_eof644; -case 644: + goto _test_eof653; +case 653: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -48713,17 +48819,17 @@ case 644: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1853; - case 32: goto tr1853; - case 40: goto tr1854; - case 41: goto tr1855; - case 1034: goto tr1857; - case 1083: goto tr1858; + case 9: goto tr1864; + case 32: goto tr1864; + case 40: goto tr1865; + case 41: goto tr1866; + case 1034: goto tr1868; + case 1083: goto tr1869; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1856; - goto tr1765; -tr1776: + goto tr1867; + goto tr1776; +tr1787: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -48733,8 +48839,8 @@ tr1776: p--; {goto st261;} } } - goto st645; -tr1871: + goto st654; +tr1882: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -48752,11 +48858,11 @@ tr1871: p--; {goto st261;} } } - goto st645; -st645: + goto st654; +st654: if ( ++p == pe ) - goto _test_eof645; -case 645: + goto _test_eof654; +case 654: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -48776,11 +48882,11 @@ case 645: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1781; + goto tr1792; if ( 896 <= _widec && _widec <= 1151 ) - goto st645; + goto st654; goto tr71; -tr1770: +tr1781: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -48788,8 +48894,8 @@ tr1770: p--; {goto st261;} } } - goto st646; -tr1771: + goto st655; +tr1782: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48797,8 +48903,8 @@ tr1771: p--; {goto st261;} } } - goto st646; -tr1772: + goto st655; +tr1783: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48806,8 +48912,8 @@ tr1772: p--; {goto st261;} } } - goto st646; -tr1774: + goto st655; +tr1785: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48815,11 +48921,11 @@ tr1774: p--; {goto st261;} } } - goto st646; -st646: + goto st655; +st655: if ( ++p == pe ) - goto _test_eof646; -case 646: + goto _test_eof655; +case 655: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -48833,17 +48939,17 @@ case 646: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1766; - case 32: goto tr1766; - case 40: goto tr1767; - case 41: goto tr1768; - case 1034: goto tr1775; - case 1083: goto tr1776; + case 9: goto tr1777; + case 32: goto tr1777; + case 40: goto tr1778; + case 41: goto tr1779; + case 1034: goto tr1786; + case 1083: goto tr1787; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1859; - goto tr1765; -tr1860: + goto tr1870; + goto tr1776; +tr1871: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -48858,8 +48964,8 @@ tr1860: p--; {goto st261;} } } - goto st647; -tr1859: + goto st656; +tr1870: { s->number64_tmp = s->number64; } @@ -48880,8 +48986,8 @@ tr1859: p--; {goto st261;} } } - goto st647; -tr1869: + goto st656; +tr1880: { if (s->number64 + s->number64_tmp < UINT32_MAX) { s->number64 += s->number64_tmp; @@ -48910,27 +49016,27 @@ tr1869: p--; {goto st261;} } } - goto st647; -st647: + goto st656; +st656: if ( ++p == pe ) - goto _test_eof647; -case 647: + goto _test_eof656; +case 656: switch( (*p) ) { - case 68: goto tr1861; - case 72: goto tr1862; - case 77: goto tr1863; - case 83: goto st648; - case 87: goto tr1865; - case 100: goto tr1861; - case 104: goto tr1862; - case 109: goto tr1863; - case 115: goto st648; - case 119: goto tr1865; + case 68: goto tr1872; + case 72: goto tr1873; + case 77: goto tr1874; + case 83: goto st657; + case 87: goto tr1876; + case 100: goto tr1872; + case 104: goto tr1873; + case 109: goto tr1874; + case 115: goto st657; + case 119: goto tr1876; } if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1860; - goto tr1765; -tr1861: + goto tr1871; + goto tr1776; +tr1872: { if (s->number64 <= (UINT32_MAX / 86400)) { s->number64 *= 86400; } else { @@ -48938,8 +49044,8 @@ tr1861: p--; {goto st261;} } } - goto st648; -tr1862: + goto st657; +tr1873: { if (s->number64 <= (UINT32_MAX / 3600)) { s->number64 *= 3600; } else { @@ -48947,8 +49053,8 @@ tr1862: p--; {goto st261;} } } - goto st648; -tr1863: + goto st657; +tr1874: { if (s->number64 <= (UINT32_MAX / 60)) { s->number64 *= 60; } else { @@ -48956,8 +49062,8 @@ tr1863: p--; {goto st261;} } } - goto st648; -tr1865: + goto st657; +tr1876: { if (s->number64 <= (UINT32_MAX / 604800)) { s->number64 *= 604800; } else { @@ -48965,11 +49071,11 @@ tr1865: p--; {goto st261;} } } - goto st648; -st648: + goto st657; +st657: if ( ++p == pe ) - goto _test_eof648; -case 648: + goto _test_eof657; +case 657: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -48983,17 +49089,17 @@ case 648: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1866; - case 32: goto tr1866; - case 40: goto tr1867; - case 41: goto tr1868; - case 1034: goto tr1870; - case 1083: goto tr1871; + case 9: goto tr1877; + case 32: goto tr1877; + case 40: goto tr1878; + case 41: goto tr1879; + case 1034: goto tr1881; + case 1083: goto tr1882; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1869; - goto tr1765; -tr1758: + goto tr1880; + goto tr1776; +tr1769: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -49003,11 +49109,11 @@ tr1758: p--; {goto st261;} } } - goto st649; -st649: + goto st658; +st658: if ( ++p == pe ) - goto _test_eof649; -case 649: + goto _test_eof658; +case 658: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -49027,19 +49133,19 @@ case 649: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1763; + goto tr1774; if ( 896 <= _widec && _widec <= 1151 ) - goto st649; + goto st658; goto tr71; -tr1745: +tr1756: { rdata_tail += s->dname_tmp_length; } - goto st650; -st650: + goto st659; +st659: if ( ++p == pe ) - goto _test_eof650; -case 650: + goto _test_eof659; +case 659: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -49059,19 +49165,19 @@ case 650: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1751; + goto tr1762; if ( 896 <= _widec && _widec <= 1151 ) - goto st650; + goto st659; goto tr71; -tr1734: +tr1745: { rdata_tail += s->dname_tmp_length; } - goto st651; -st651: + goto st660; +st660: if ( ++p == pe ) - goto _test_eof651; -case 651: + goto _test_eof660; +case 660: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -49091,14 +49197,14 @@ case 651: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1739; + goto tr1750; if ( 896 <= _widec && _widec <= 1151 ) - goto st651; + goto st660; goto tr71; -st652: +st661: if ( ++p == pe ) - goto _test_eof652; -case 652: + goto _test_eof661; +case 661: switch( (*p) ) { case 32: goto tr71; case 59: goto tr71; @@ -49108,8 +49214,8 @@ case 652: goto tr71; } else if ( (*p) >= 9 ) goto tr71; - goto tr1872; -tr1872: + goto tr1883; +tr1883: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -49118,12 +49224,12 @@ tr1872: p--; {goto st261;} } } - { p--; {stack[top++] = 653; goto st272;} } - goto st653; -st653: + { p--; {stack[top++] = 662; goto st272;} } + goto st662; +st662: if ( ++p == pe ) - goto _test_eof653; -case 653: + goto _test_eof662; +case 662: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -49137,15 +49243,15 @@ case 653: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1873; - case 32: goto tr1873; - case 40: goto tr1874; - case 41: goto tr1875; - case 1034: goto tr1876; - case 1083: goto tr1877; + case 9: goto tr1884; + case 32: goto tr1884; + case 40: goto tr1885; + case 41: goto tr1886; + case 1034: goto tr1887; + case 1083: goto tr1888; } goto tr71; -tr1880: +tr1891: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -49153,8 +49259,8 @@ tr1880: } s->multiline = true; } - goto st654; -tr1881: + goto st663; +tr1892: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -49162,13 +49268,13 @@ tr1881: } s->multiline = false; } - goto st654; -tr1882: + goto st663; +tr1893: { s->line_counter++; } - goto st654; -tr1873: + goto st663; +tr1884: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49179,8 +49285,8 @@ tr1873: p--; {goto st261;} } } - goto st654; -tr1874: + goto st663; +tr1885: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49198,8 +49304,8 @@ tr1874: } s->multiline = true; } - goto st654; -tr1875: + goto st663; +tr1886: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49217,8 +49323,8 @@ tr1875: } s->multiline = false; } - goto st654; -tr1876: + goto st663; +tr1887: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49232,11 +49338,11 @@ tr1876: { s->line_counter++; } - goto st654; -st654: + goto st663; +st663: if ( ++p == pe ) - goto _test_eof654; -case 654: + goto _test_eof663; +case 663: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -49250,23 +49356,23 @@ case 654: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st654; - case 32: goto st654; - case 40: goto tr1880; - case 41: goto tr1881; - case 1034: goto tr1882; - case 1083: goto st656; + case 9: goto st663; + case 32: goto st663; + case 40: goto tr1891; + case 41: goto tr1892; + case 1034: goto tr1893; + case 1083: goto st665; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr1878; + goto tr1889; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr1878; + goto tr1889; } else - goto tr1878; + goto tr1889; goto tr71; -tr1878: +tr1889: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -49275,23 +49381,23 @@ tr1878: p--; {goto st261;} } } - { p--; {stack[top++] = 655; goto st272;} } - goto st655; -st655: + { p--; {stack[top++] = 664; goto st272;} } + goto st664; +st664: if ( ++p == pe ) - goto _test_eof655; -case 655: + goto _test_eof664; +case 664: switch( (*p) ) { - case 32: goto tr1884; - case 59: goto tr1884; + case 32: goto tr1895; + case 59: goto tr1895; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1884; + goto tr1895; } else if ( (*p) >= 9 ) - goto tr1884; + goto tr1895; goto tr71; -tr1884: +tr1895: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49305,13 +49411,13 @@ tr1884: { p--; {cs = stack[--top];goto _again;} } - goto st1148; -st1148: + goto st1157; +st1157: if ( ++p == pe ) - goto _test_eof1148; -case 1148: + goto _test_eof1157; +case 1157: goto st0; -tr1877: +tr1888: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49322,11 +49428,11 @@ tr1877: p--; {goto st261;} } } - goto st656; -st656: + goto st665; +st665: if ( ++p == pe ) - goto _test_eof656; -case 656: + goto _test_eof665; +case 665: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -49346,38 +49452,38 @@ case 656: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1882; + goto tr1893; if ( 896 <= _widec && _widec <= 1151 ) - goto st656; + goto st665; goto tr71; -st657: +st666: if ( ++p == pe ) - goto _test_eof657; -case 657: + goto _test_eof666; +case 666: switch( (*p) ) { - case 42: goto tr1885; - case 92: goto tr1885; - case 95: goto tr1885; + case 42: goto tr1896; + case 92: goto tr1896; + case 95: goto tr1896; } if ( (*p) < 64 ) { if ( 45 <= (*p) && (*p) <= 57 ) - goto tr1885; + goto tr1896; } else if ( (*p) > 90 ) { if ( 97 <= (*p) && (*p) <= 122 ) - goto tr1885; + goto tr1896; } else - goto tr1885; + goto tr1896; goto tr71; -tr1885: +tr1896: { s->dname = rdata_tail; } - { p--; {stack[top++] = 658; goto st263;} } - goto st658; -st658: + { p--; {stack[top++] = 667; goto st263;} } + goto st667; +st667: if ( ++p == pe ) - goto _test_eof658; -case 658: + goto _test_eof667; +case 667: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -49391,15 +49497,15 @@ case 658: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1886; - case 32: goto tr1886; - case 40: goto tr1887; - case 41: goto tr1888; - case 1034: goto tr1889; - case 1083: goto tr1890; + case 9: goto tr1897; + case 32: goto tr1897; + case 40: goto tr1898; + case 41: goto tr1899; + case 1034: goto tr1900; + case 1083: goto tr1901; } goto tr71; -tr1892: +tr1903: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -49407,8 +49513,8 @@ tr1892: } s->multiline = true; } - goto st659; -tr1893: + goto st668; +tr1904: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -49416,18 +49522,18 @@ tr1893: } s->multiline = false; } - goto st659; -tr1895: + goto st668; +tr1906: { s->line_counter++; } - goto st659; -tr1886: + goto st668; +tr1897: { rdata_tail += s->dname_tmp_length; } - goto st659; -tr1887: + goto st668; +tr1898: { rdata_tail += s->dname_tmp_length; } @@ -49438,8 +49544,8 @@ tr1887: } s->multiline = true; } - goto st659; -tr1888: + goto st668; +tr1899: { rdata_tail += s->dname_tmp_length; } @@ -49450,19 +49556,19 @@ tr1888: } s->multiline = false; } - goto st659; -tr1889: + goto st668; +tr1900: { rdata_tail += s->dname_tmp_length; } { s->line_counter++; } - goto st659; -st659: + goto st668; +st668: if ( ++p == pe ) - goto _test_eof659; -case 659: + goto _test_eof668; +case 668: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -49476,67 +49582,67 @@ case 659: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st659; - case 32: goto st659; - case 40: goto tr1892; - case 41: goto tr1893; - case 42: goto tr1894; - case 92: goto tr1894; - case 95: goto tr1894; - case 1034: goto tr1895; - case 1083: goto st661; + case 9: goto st668; + case 32: goto st668; + case 40: goto tr1903; + case 41: goto tr1904; + case 42: goto tr1905; + case 92: goto tr1905; + case 95: goto tr1905; + case 1034: goto tr1906; + case 1083: goto st670; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr1894; + goto tr1905; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr1894; + goto tr1905; } else - goto tr1894; + goto tr1905; goto tr71; -tr1894: +tr1905: { s->dname = rdata_tail; } - { p--; {stack[top++] = 660; goto st263;} } - goto st660; -st660: + { p--; {stack[top++] = 669; goto st263;} } + goto st669; +st669: if ( ++p == pe ) - goto _test_eof660; -case 660: + goto _test_eof669; +case 669: switch( (*p) ) { - case 32: goto tr1897; - case 59: goto tr1897; + case 32: goto tr1908; + case 59: goto tr1908; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1897; + goto tr1908; } else if ( (*p) >= 9 ) - goto tr1897; + goto tr1908; goto tr71; -tr1897: +tr1908: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1149; -st1149: + goto st1158; +st1158: if ( ++p == pe ) - goto _test_eof1149; -case 1149: + goto _test_eof1158; +case 1158: goto st0; -tr1890: +tr1901: { rdata_tail += s->dname_tmp_length; } - goto st661; -st661: + goto st670; +st670: if ( ++p == pe ) - goto _test_eof661; -case 661: + goto _test_eof670; +case 670: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -49556,18 +49662,18 @@ case 661: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1895; + goto tr1906; if ( 896 <= _widec && _widec <= 1151 ) - goto st661; + goto st670; goto tr71; -st662: +st671: if ( ++p == pe ) - goto _test_eof662; -case 662: + goto _test_eof671; +case 671: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1898; - goto tr1746; -tr1898: + goto tr1909; + goto tr1757; +tr1909: { s->number64 = 0; } @@ -49585,8 +49691,8 @@ tr1898: p--; {goto st261;} } } - goto st663; -tr1902: + goto st672; +tr1913: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -49601,11 +49707,11 @@ tr1902: p--; {goto st261;} } } - goto st663; -st663: + goto st672; +st672: if ( ++p == pe ) - goto _test_eof663; -case 663: + goto _test_eof672; +case 672: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -49619,17 +49725,17 @@ case 663: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1899; - case 32: goto tr1899; - case 40: goto tr1900; - case 41: goto tr1901; - case 1034: goto tr1903; - case 1083: goto tr1904; + case 9: goto tr1910; + case 32: goto tr1910; + case 40: goto tr1911; + case 41: goto tr1912; + case 1034: goto tr1914; + case 1083: goto tr1915; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1902; - goto tr1746; -tr1906: + goto tr1913; + goto tr1757; +tr1917: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -49637,8 +49743,8 @@ tr1906: } s->multiline = true; } - goto st664; -tr1907: + goto st673; +tr1918: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -49646,13 +49752,13 @@ tr1907: } s->multiline = false; } - goto st664; -tr1909: + goto st673; +tr1920: { s->line_counter++; } - goto st664; -tr1899: + goto st673; +tr1910: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -49662,8 +49768,8 @@ tr1899: p--; {goto st261;} } } - goto st664; -tr1900: + goto st673; +tr1911: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -49680,8 +49786,8 @@ tr1900: } s->multiline = true; } - goto st664; -tr1901: + goto st673; +tr1912: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -49698,8 +49804,8 @@ tr1901: } s->multiline = false; } - goto st664; -tr1903: + goto st673; +tr1914: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -49712,11 +49818,11 @@ tr1903: { s->line_counter++; } - goto st664; -st664: + goto st673; +st673: if ( ++p == pe ) - goto _test_eof664; -case 664: + goto _test_eof673; +case 673: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -49730,59 +49836,59 @@ case 664: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st664; - case 32: goto st664; - case 40: goto tr1906; - case 41: goto tr1907; - case 42: goto tr1908; - case 92: goto tr1908; - case 95: goto tr1908; - case 1034: goto tr1909; - case 1083: goto st666; + case 9: goto st673; + case 32: goto st673; + case 40: goto tr1917; + case 41: goto tr1918; + case 42: goto tr1919; + case 92: goto tr1919; + case 95: goto tr1919; + case 1034: goto tr1920; + case 1083: goto st675; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr1908; + goto tr1919; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr1908; + goto tr1919; } else - goto tr1908; + goto tr1919; goto tr71; -tr1908: +tr1919: { s->dname = rdata_tail; } - { p--; {stack[top++] = 665; goto st263;} } - goto st665; -st665: + { p--; {stack[top++] = 674; goto st263;} } + goto st674; +st674: if ( ++p == pe ) - goto _test_eof665; -case 665: + goto _test_eof674; +case 674: switch( (*p) ) { - case 32: goto tr1911; - case 59: goto tr1911; + case 32: goto tr1922; + case 59: goto tr1922; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1911; + goto tr1922; } else if ( (*p) >= 9 ) - goto tr1911; + goto tr1922; goto tr71; -tr1911: +tr1922: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1150; -st1150: + goto st1159; +st1159: if ( ++p == pe ) - goto _test_eof1150; -case 1150: + goto _test_eof1159; +case 1159: goto st0; -tr1904: +tr1915: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -49792,11 +49898,11 @@ tr1904: p--; {goto st261;} } } - goto st666; -st666: + goto st675; +st675: if ( ++p == pe ) - goto _test_eof666; -case 666: + goto _test_eof675; +case 675: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -49816,25 +49922,25 @@ case 666: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1909; + goto tr1920; if ( 896 <= _widec && _widec <= 1151 ) - goto st666; + goto st675; goto tr71; -st667: +st676: if ( ++p == pe ) - goto _test_eof667; -case 667: + goto _test_eof676; +case 676: switch( (*p) ) { - case 32: goto tr1913; - case 59: goto tr1913; + case 32: goto tr1924; + case 59: goto tr1924; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1913; + goto tr1924; } else if ( (*p) >= 9 ) - goto tr1913; - goto tr1912; -tr1922: + goto tr1924; + goto tr1923; +tr1933: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -49843,9 +49949,9 @@ tr1922: p--; {goto st261;} } } - { p--; {stack[top++] = 668; goto st272;} } - goto st668; -tr1912: + { p--; {stack[top++] = 677; goto st272;} } + goto st677; +tr1923: { s->long_string = true; } @@ -49857,12 +49963,12 @@ tr1912: p--; {goto st261;} } } - { p--; {stack[top++] = 668; goto st272;} } - goto st668; -st668: + { p--; {stack[top++] = 677; goto st272;} } + goto st677; +st677: if ( ++p == pe ) - goto _test_eof668; -case 668: + goto _test_eof677; +case 677: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -49880,19 +49986,19 @@ case 668: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr1914; - case 32: goto tr1914; - case 40: goto tr1915; - case 41: goto tr1916; - case 2058: goto tr1917; - case 2107: goto tr1918; - case 2314: goto tr1919; - case 2363: goto tr1919; - case 2570: goto tr1920; - case 2619: goto tr1921; - } - goto tr1913; -tr1924: + case 9: goto tr1925; + case 32: goto tr1925; + case 40: goto tr1926; + case 41: goto tr1927; + case 2058: goto tr1928; + case 2107: goto tr1929; + case 2314: goto tr1930; + case 2363: goto tr1930; + case 2570: goto tr1931; + case 2619: goto tr1932; + } + goto tr1924; +tr1935: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -49900,8 +50006,8 @@ tr1924: } s->multiline = true; } - goto st669; -tr1925: + goto st678; +tr1936: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -49909,13 +50015,13 @@ tr1925: } s->multiline = false; } - goto st669; -tr1926: + goto st678; +tr1937: { s->line_counter++; } - goto st669; -tr1914: + goto st678; +tr1925: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49926,8 +50032,8 @@ tr1914: p--; {goto st261;} } } - goto st669; -tr1915: + goto st678; +tr1926: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49945,8 +50051,8 @@ tr1915: } s->multiline = true; } - goto st669; -tr1916: + goto st678; +tr1927: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49964,8 +50070,8 @@ tr1916: } s->multiline = false; } - goto st669; -tr1917: + goto st678; +tr1928: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -49979,11 +50085,11 @@ tr1917: { s->line_counter++; } - goto st669; -st669: + goto st678; +st678: if ( ++p == pe ) - goto _test_eof669; -case 669: + goto _test_eof678; +case 678: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50001,27 +50107,27 @@ case 669: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st669; - case 32: goto st669; - case 40: goto tr1924; - case 41: goto tr1925; - case 2058: goto tr1926; - case 2107: goto st670; - case 2314: goto tr1928; - case 2363: goto tr1928; - case 2570: goto tr1929; - case 2619: goto tr1930; + case 9: goto st678; + case 32: goto st678; + case 40: goto tr1935; + case 41: goto tr1936; + case 2058: goto tr1937; + case 2107: goto st679; + case 2314: goto tr1939; + case 2363: goto tr1939; + case 2570: goto tr1940; + case 2619: goto tr1941; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr1922; + goto tr1933; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr1922; + goto tr1933; } else - goto tr1922; - goto tr1913; -tr1918: + goto tr1933; + goto tr1924; +tr1929: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -50032,11 +50138,11 @@ tr1918: p--; {goto st261;} } } - goto st670; -st670: + goto st679; +st679: if ( ++p == pe ) - goto _test_eof670; -case 670: + goto _test_eof679; +case 679: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -50056,11 +50162,11 @@ case 670: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1926; + goto tr1937; if ( 896 <= _widec && _widec <= 1151 ) - goto st670; - goto tr1913; -tr1919: + goto st679; + goto tr1924; +tr1930: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -50077,21 +50183,21 @@ tr1919: { p--; {cs = stack[--top];goto _again;} } - goto st1151; -tr1928: + goto st1160; +tr1939: { s->long_string = false; } { p--; {cs = stack[--top];goto _again;} } - goto st1151; -st1151: + goto st1160; +st1160: if ( ++p == pe ) - goto _test_eof1151; -case 1151: + goto _test_eof1160; +case 1160: goto st0; -tr1920: +tr1931: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -50111,8 +50217,8 @@ tr1920: { p--; {cs = stack[--top];goto _again;} } - goto st1152; -tr1929: + goto st1161; +tr1940: { s->line_counter++; } @@ -50122,11 +50228,11 @@ tr1929: { p--; {cs = stack[--top];goto _again;} } - goto st1152; -st1152: + goto st1161; +st1161: if ( ++p == pe ) - goto _test_eof1152; -case 1152: + goto _test_eof1161; +case 1161: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50144,27 +50250,27 @@ case 1152: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st669; - case 32: goto st669; - case 40: goto tr1924; - case 41: goto tr1925; - case 2058: goto tr1926; - case 2107: goto st670; - case 2314: goto tr1928; - case 2363: goto tr1928; - case 2570: goto tr1929; - case 2619: goto tr1930; + case 9: goto st678; + case 32: goto st678; + case 40: goto tr1935; + case 41: goto tr1936; + case 2058: goto tr1937; + case 2107: goto st679; + case 2314: goto tr1939; + case 2363: goto tr1939; + case 2570: goto tr1940; + case 2619: goto tr1941; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr1922; + goto tr1933; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr1922; + goto tr1933; } else - goto tr1922; - goto tr1913; -tr1921: + goto tr1933; + goto tr1924; +tr1932: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -50181,19 +50287,19 @@ tr1921: { p--; {cs = stack[--top];goto _again;} } - goto st1153; -tr1930: + goto st1162; +tr1941: { s->long_string = false; } { p--; {cs = stack[--top];goto _again;} } - goto st1153; -st1153: + goto st1162; +st1162: if ( ++p == pe ) - goto _test_eof1153; -case 1153: + goto _test_eof1162; +case 1162: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -50213,26 +50319,26 @@ case 1153: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1926; + goto tr1937; if ( 896 <= _widec && _widec <= 1151 ) - goto st670; - goto tr1913; -st671: + goto st679; + goto tr1924; +st680: if ( ++p == pe ) - goto _test_eof671; -case 671: + goto _test_eof680; +case 680: if ( (*p) == 46 ) - goto tr1931; + goto tr1942; if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 58 ) - goto tr1931; + goto tr1942; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr1931; + goto tr1942; } else - goto tr1931; - goto tr1723; -tr1931: + goto tr1942; + goto tr1734; +tr1942: { s->buffer_length = 0; } @@ -50245,8 +50351,8 @@ tr1931: p--; {goto st261;} } } - goto st672; -tr1933: + goto st681; +tr1944: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -50256,32 +50362,32 @@ tr1933: p--; {goto st261;} } } - goto st672; -st672: + goto st681; +st681: if ( ++p == pe ) - goto _test_eof672; -case 672: + goto _test_eof681; +case 681: switch( (*p) ) { - case 32: goto tr1932; - case 46: goto tr1933; - case 59: goto tr1932; + case 32: goto tr1943; + case 46: goto tr1944; + case 59: goto tr1943; } if ( (*p) < 48 ) { if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr1932; + goto tr1943; } else if ( (*p) >= 9 ) - goto tr1932; + goto tr1943; } else if ( (*p) > 58 ) { if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr1933; + goto tr1944; } else if ( (*p) >= 65 ) - goto tr1933; + goto tr1944; } else - goto tr1933; - goto tr1723; -tr1932: + goto tr1944; + goto tr1734; +tr1943: { s->buffer[s->buffer_length] = 0; @@ -50297,20 +50403,20 @@ tr1932: { p--; {cs = stack[--top];goto _again;} } - goto st1154; -st1154: + goto st1163; +st1163: if ( ++p == pe ) - goto _test_eof1154; -case 1154: + goto _test_eof1163; +case 1163: goto st0; -st673: +st682: if ( ++p == pe ) - goto _test_eof673; -case 673: + goto _test_eof682; +case 682: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr1935; - goto tr1934; -tr1939: + goto tr1946; + goto tr1945; +tr1950: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -50325,8 +50431,8 @@ tr1939: p--; {goto st261;} } } - goto st674; -tr1935: + goto st683; +tr1946: { memset(&(s->loc), 0, sizeof(s->loc)); // Defaults. @@ -50354,11 +50460,11 @@ tr1935: p--; {goto st261;} } } - goto st674; -st674: + goto st683; +st683: if ( ++p == pe ) - goto _test_eof674; -case 674: + goto _test_eof683; +case 683: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50372,17 +50478,17 @@ case 674: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1936; - case 32: goto tr1936; - case 40: goto tr1937; - case 41: goto tr1938; - case 1034: goto tr1940; - case 1083: goto tr1941; + case 9: goto tr1947; + case 32: goto tr1947; + case 40: goto tr1948; + case 41: goto tr1949; + case 1034: goto tr1951; + case 1083: goto tr1952; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1939; - goto tr1934; -tr1943: + goto tr1950; + goto tr1945; +tr1954: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -50390,8 +50496,8 @@ tr1943: } s->multiline = true; } - goto st675; -tr1944: + goto st684; +tr1955: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -50399,13 +50505,13 @@ tr1944: } s->multiline = false; } - goto st675; -tr1948: + goto st684; +tr1959: { s->line_counter++; } - goto st675; -tr1936: + goto st684; +tr1947: { if (s->number64 <= 90) { s->loc.d1 = (uint32_t)(s->number64); @@ -50414,8 +50520,8 @@ tr1936: p--; {goto st261;} } } - goto st675; -tr1937: + goto st684; +tr1948: { if (s->number64 <= 90) { s->loc.d1 = (uint32_t)(s->number64); @@ -50431,8 +50537,8 @@ tr1937: } s->multiline = true; } - goto st675; -tr1938: + goto st684; +tr1949: { if (s->number64 <= 90) { s->loc.d1 = (uint32_t)(s->number64); @@ -50448,8 +50554,8 @@ tr1938: } s->multiline = false; } - goto st675; -tr1940: + goto st684; +tr1951: { if (s->number64 <= 90) { s->loc.d1 = (uint32_t)(s->number64); @@ -50461,11 +50567,11 @@ tr1940: { s->line_counter++; } - goto st675; -st675: + goto st684; +st684: if ( ++p == pe ) - goto _test_eof675; -case 675: + goto _test_eof684; +case 684: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50479,19 +50585,19 @@ case 675: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st675; - case 32: goto st675; - case 40: goto tr1943; - case 41: goto tr1944; - case 78: goto st680; - case 83: goto st722; - case 1034: goto tr1948; - case 1083: goto st727; + case 9: goto st684; + case 32: goto st684; + case 40: goto tr1954; + case 41: goto tr1955; + case 78: goto st689; + case 83: goto st731; + case 1034: goto tr1959; + case 1083: goto st736; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1945; - goto tr1934; -tr1945: + goto tr1956; + goto tr1945; +tr1956: { s->number64 = 0; } @@ -50509,8 +50615,8 @@ tr1945: p--; {goto st261;} } } - goto st676; -tr1953: + goto st685; +tr1964: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -50525,11 +50631,11 @@ tr1953: p--; {goto st261;} } } - goto st676; -st676: + goto st685; +st685: if ( ++p == pe ) - goto _test_eof676; -case 676: + goto _test_eof685; +case 685: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50543,17 +50649,17 @@ case 676: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1950; - case 32: goto tr1950; - case 40: goto tr1951; - case 41: goto tr1952; - case 1034: goto tr1954; - case 1083: goto tr1955; + case 9: goto tr1961; + case 32: goto tr1961; + case 40: goto tr1962; + case 41: goto tr1963; + case 1034: goto tr1965; + case 1083: goto tr1966; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1953; - goto tr1934; -tr1957: + goto tr1964; + goto tr1945; +tr1968: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -50561,8 +50667,8 @@ tr1957: } s->multiline = true; } - goto st677; -tr1958: + goto st686; +tr1969: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -50570,13 +50676,13 @@ tr1958: } s->multiline = false; } - goto st677; -tr1960: + goto st686; +tr1971: { s->line_counter++; } - goto st677; -tr1950: + goto st686; +tr1961: { if (s->number64 <= 59) { s->loc.m1 = (uint32_t)(s->number64); @@ -50585,8 +50691,8 @@ tr1950: p--; {goto st261;} } } - goto st677; -tr1951: + goto st686; +tr1962: { if (s->number64 <= 59) { s->loc.m1 = (uint32_t)(s->number64); @@ -50602,8 +50708,8 @@ tr1951: } s->multiline = true; } - goto st677; -tr1952: + goto st686; +tr1963: { if (s->number64 <= 59) { s->loc.m1 = (uint32_t)(s->number64); @@ -50619,8 +50725,8 @@ tr1952: } s->multiline = false; } - goto st677; -tr1954: + goto st686; +tr1965: { if (s->number64 <= 59) { s->loc.m1 = (uint32_t)(s->number64); @@ -50632,11 +50738,11 @@ tr1954: { s->line_counter++; } - goto st677; -st677: + goto st686; +st686: if ( ++p == pe ) - goto _test_eof677; -case 677: + goto _test_eof686; +case 686: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50650,19 +50756,19 @@ case 677: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st677; - case 32: goto st677; - case 40: goto tr1957; - case 41: goto tr1958; - case 78: goto st680; - case 83: goto st722; - case 1034: goto tr1960; - case 1083: goto st726; + case 9: goto st686; + case 32: goto st686; + case 40: goto tr1968; + case 41: goto tr1969; + case 78: goto st689; + case 83: goto st731; + case 1034: goto tr1971; + case 1083: goto st735; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1959; - goto tr1934; -tr1966: + goto tr1970; + goto tr1945; +tr1977: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -50677,8 +50783,8 @@ tr1966: p--; {goto st261;} } } - goto st678; -tr1959: + goto st687; +tr1970: { s->decimals = 3; } @@ -50702,11 +50808,11 @@ tr1959: p--; {goto st261;} } } - goto st678; -st678: + goto st687; +st687: if ( ++p == pe ) - goto _test_eof678; -case 678: + goto _test_eof687; +case 687: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50720,18 +50826,18 @@ case 678: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1962; - case 32: goto tr1962; - case 40: goto tr1963; - case 41: goto tr1964; - case 46: goto st724; - case 1034: goto tr1967; - case 1083: goto tr1968; + case 9: goto tr1973; + case 32: goto tr1973; + case 40: goto tr1974; + case 41: goto tr1975; + case 46: goto st733; + case 1034: goto tr1978; + case 1083: goto tr1979; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1966; - goto tr1934; -tr1970: + goto tr1977; + goto tr1945; +tr1981: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -50739,8 +50845,8 @@ tr1970: } s->multiline = true; } - goto st679; -tr1971: + goto st688; +tr1982: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -50748,13 +50854,13 @@ tr1971: } s->multiline = false; } - goto st679; -tr1972: + goto st688; +tr1983: { s->line_counter++; } - goto st679; -tr1962: + goto st688; +tr1973: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -50775,8 +50881,8 @@ tr1962: p--; {goto st261;} } } - goto st679; -tr1963: + goto st688; +tr1974: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -50804,8 +50910,8 @@ tr1963: } s->multiline = true; } - goto st679; -tr1964: + goto st688; +tr1975: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -50833,8 +50939,8 @@ tr1964: } s->multiline = false; } - goto st679; -tr1967: + goto st688; +tr1978: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -50858,8 +50964,8 @@ tr1967: { s->line_counter++; } - goto st679; -tr2161: + goto st688; +tr2172: { s->number64_tmp = s->number64; } @@ -50883,8 +50989,8 @@ tr2161: p--; {goto st261;} } } - goto st679; -tr2162: + goto st688; +tr2173: { s->number64_tmp = s->number64; } @@ -50915,8 +51021,8 @@ tr2162: } s->multiline = true; } - goto st679; -tr2163: + goto st688; +tr2174: { s->number64_tmp = s->number64; } @@ -50947,8 +51053,8 @@ tr2163: } s->multiline = false; } - goto st679; -tr2165: + goto st688; +tr2176: { s->number64_tmp = s->number64; } @@ -50975,11 +51081,11 @@ tr2165: { s->line_counter++; } - goto st679; -st679: + goto st688; +st688: if ( ++p == pe ) - goto _test_eof679; -case 679: + goto _test_eof688; +case 688: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -50993,20 +51099,20 @@ case 679: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st679; - case 32: goto st679; - case 40: goto tr1970; - case 41: goto tr1971; - case 78: goto st680; - case 83: goto st722; - case 1034: goto tr1972; - case 1083: goto st723; + case 9: goto st688; + case 32: goto st688; + case 40: goto tr1981; + case 41: goto tr1982; + case 78: goto st689; + case 83: goto st731; + case 1034: goto tr1983; + case 1083: goto st732; } - goto tr1934; -st680: + goto tr1945; +st689: if ( ++p == pe ) - goto _test_eof680; -case 680: + goto _test_eof689; +case 689: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51020,15 +51126,15 @@ case 680: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st681; - case 32: goto st681; - case 40: goto tr1975; - case 41: goto tr1976; - case 1034: goto tr1977; - case 1083: goto st721; - } - goto tr1934; -tr1975: + case 9: goto st690; + case 32: goto st690; + case 40: goto tr1986; + case 41: goto tr1987; + case 1034: goto tr1988; + case 1083: goto st730; + } + goto tr1945; +tr1986: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -51036,8 +51142,8 @@ tr1975: } s->multiline = true; } - goto st681; -tr1976: + goto st690; +tr1987: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -51045,18 +51151,18 @@ tr1976: } s->multiline = false; } - goto st681; -tr1977: + goto st690; +tr1988: { s->line_counter++; } - goto st681; -tr2156: + goto st690; +tr2167: { s->loc.lat_sign = -1; } - goto st681; -tr2157: + goto st690; +tr2168: { s->loc.lat_sign = -1; } @@ -51067,8 +51173,8 @@ tr2157: } s->multiline = true; } - goto st681; -tr2158: + goto st690; +tr2169: { s->loc.lat_sign = -1; } @@ -51079,19 +51185,19 @@ tr2158: } s->multiline = false; } - goto st681; -tr2159: + goto st690; +tr2170: { s->loc.lat_sign = -1; } { s->line_counter++; } - goto st681; -st681: + goto st690; +st690: if ( ++p == pe ) - goto _test_eof681; -case 681: + goto _test_eof690; +case 690: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51105,17 +51211,17 @@ case 681: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st681; - case 32: goto st681; - case 40: goto tr1975; - case 41: goto tr1976; - case 1034: goto tr1977; - case 1083: goto st721; + case 9: goto st690; + case 32: goto st690; + case 40: goto tr1986; + case 41: goto tr1987; + case 1034: goto tr1988; + case 1083: goto st730; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1979; - goto tr1934; -tr1979: + goto tr1990; + goto tr1945; +tr1990: { s->number64 = 0; } @@ -51133,8 +51239,8 @@ tr1979: p--; {goto st261;} } } - goto st682; -tr1983: + goto st691; +tr1994: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -51149,11 +51255,11 @@ tr1983: p--; {goto st261;} } } - goto st682; -st682: + goto st691; +st691: if ( ++p == pe ) - goto _test_eof682; -case 682: + goto _test_eof691; +case 691: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51167,17 +51273,17 @@ case 682: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1980; - case 32: goto tr1980; - case 40: goto tr1981; - case 41: goto tr1982; - case 1034: goto tr1984; - case 1083: goto tr1985; + case 9: goto tr1991; + case 32: goto tr1991; + case 40: goto tr1992; + case 41: goto tr1993; + case 1034: goto tr1995; + case 1083: goto tr1996; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1983; - goto tr1934; -tr1987: + goto tr1994; + goto tr1945; +tr1998: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -51185,8 +51291,8 @@ tr1987: } s->multiline = true; } - goto st683; -tr1988: + goto st692; +tr1999: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -51194,13 +51300,13 @@ tr1988: } s->multiline = false; } - goto st683; -tr1992: + goto st692; +tr2003: { s->line_counter++; } - goto st683; -tr1980: + goto st692; +tr1991: { if (s->number64 <= 180) { s->loc.d2 = (uint32_t)(s->number64); @@ -51209,8 +51315,8 @@ tr1980: p--; {goto st261;} } } - goto st683; -tr1981: + goto st692; +tr1992: { if (s->number64 <= 180) { s->loc.d2 = (uint32_t)(s->number64); @@ -51226,8 +51332,8 @@ tr1981: } s->multiline = true; } - goto st683; -tr1982: + goto st692; +tr1993: { if (s->number64 <= 180) { s->loc.d2 = (uint32_t)(s->number64); @@ -51243,8 +51349,8 @@ tr1982: } s->multiline = false; } - goto st683; -tr1984: + goto st692; +tr1995: { if (s->number64 <= 180) { s->loc.d2 = (uint32_t)(s->number64); @@ -51256,11 +51362,11 @@ tr1984: { s->line_counter++; } - goto st683; -st683: + goto st692; +st692: if ( ++p == pe ) - goto _test_eof683; -case 683: + goto _test_eof692; +case 692: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51274,19 +51380,19 @@ case 683: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st683; - case 32: goto st683; - case 40: goto tr1987; - case 41: goto tr1988; - case 69: goto st688; - case 87: goto st715; - case 1034: goto tr1992; - case 1083: goto st720; + case 9: goto st692; + case 32: goto st692; + case 40: goto tr1998; + case 41: goto tr1999; + case 69: goto st697; + case 87: goto st724; + case 1034: goto tr2003; + case 1083: goto st729; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1989; - goto tr1934; -tr1989: + goto tr2000; + goto tr1945; +tr2000: { s->number64 = 0; } @@ -51304,8 +51410,8 @@ tr1989: p--; {goto st261;} } } - goto st684; -tr1997: + goto st693; +tr2008: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -51320,11 +51426,11 @@ tr1997: p--; {goto st261;} } } - goto st684; -st684: + goto st693; +st693: if ( ++p == pe ) - goto _test_eof684; -case 684: + goto _test_eof693; +case 693: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51338,17 +51444,17 @@ case 684: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1994; - case 32: goto tr1994; - case 40: goto tr1995; - case 41: goto tr1996; - case 1034: goto tr1998; - case 1083: goto tr1999; + case 9: goto tr2005; + case 32: goto tr2005; + case 40: goto tr2006; + case 41: goto tr2007; + case 1034: goto tr2009; + case 1083: goto tr2010; } if ( 48 <= _widec && _widec <= 57 ) - goto tr1997; - goto tr1934; -tr2001: + goto tr2008; + goto tr1945; +tr2012: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -51356,8 +51462,8 @@ tr2001: } s->multiline = true; } - goto st685; -tr2002: + goto st694; +tr2013: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -51365,13 +51471,13 @@ tr2002: } s->multiline = false; } - goto st685; -tr2004: + goto st694; +tr2015: { s->line_counter++; } - goto st685; -tr1994: + goto st694; +tr2005: { if (s->number64 <= 59) { s->loc.m2 = (uint32_t)(s->number64); @@ -51380,8 +51486,8 @@ tr1994: p--; {goto st261;} } } - goto st685; -tr1995: + goto st694; +tr2006: { if (s->number64 <= 59) { s->loc.m2 = (uint32_t)(s->number64); @@ -51397,8 +51503,8 @@ tr1995: } s->multiline = true; } - goto st685; -tr1996: + goto st694; +tr2007: { if (s->number64 <= 59) { s->loc.m2 = (uint32_t)(s->number64); @@ -51414,8 +51520,8 @@ tr1996: } s->multiline = false; } - goto st685; -tr1998: + goto st694; +tr2009: { if (s->number64 <= 59) { s->loc.m2 = (uint32_t)(s->number64); @@ -51427,11 +51533,11 @@ tr1998: { s->line_counter++; } - goto st685; -st685: + goto st694; +st694: if ( ++p == pe ) - goto _test_eof685; -case 685: + goto _test_eof694; +case 694: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51445,19 +51551,19 @@ case 685: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st685; - case 32: goto st685; - case 40: goto tr2001; - case 41: goto tr2002; - case 69: goto st688; - case 87: goto st715; - case 1034: goto tr2004; - case 1083: goto st719; + case 9: goto st694; + case 32: goto st694; + case 40: goto tr2012; + case 41: goto tr2013; + case 69: goto st697; + case 87: goto st724; + case 1034: goto tr2015; + case 1083: goto st728; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2003; - goto tr1934; -tr2010: + goto tr2014; + goto tr1945; +tr2021: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -51472,8 +51578,8 @@ tr2010: p--; {goto st261;} } } - goto st686; -tr2003: + goto st695; +tr2014: { s->decimals = 3; } @@ -51497,11 +51603,11 @@ tr2003: p--; {goto st261;} } } - goto st686; -st686: + goto st695; +st695: if ( ++p == pe ) - goto _test_eof686; -case 686: + goto _test_eof695; +case 695: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51515,18 +51621,18 @@ case 686: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2006; - case 32: goto tr2006; - case 40: goto tr2007; - case 41: goto tr2008; - case 46: goto st717; - case 1034: goto tr2011; - case 1083: goto tr2012; + case 9: goto tr2017; + case 32: goto tr2017; + case 40: goto tr2018; + case 41: goto tr2019; + case 46: goto st726; + case 1034: goto tr2022; + case 1083: goto tr2023; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2010; - goto tr1934; -tr2014: + goto tr2021; + goto tr1945; +tr2025: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -51534,8 +51640,8 @@ tr2014: } s->multiline = true; } - goto st687; -tr2015: + goto st696; +tr2026: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -51543,13 +51649,13 @@ tr2015: } s->multiline = false; } - goto st687; -tr2016: + goto st696; +tr2027: { s->line_counter++; } - goto st687; -tr2006: + goto st696; +tr2017: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -51570,8 +51676,8 @@ tr2006: p--; {goto st261;} } } - goto st687; -tr2007: + goto st696; +tr2018: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -51599,8 +51705,8 @@ tr2007: } s->multiline = true; } - goto st687; -tr2008: + goto st696; +tr2019: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -51628,8 +51734,8 @@ tr2008: } s->multiline = false; } - goto st687; -tr2011: + goto st696; +tr2022: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -51653,8 +51759,8 @@ tr2011: { s->line_counter++; } - goto st687; -tr2149: + goto st696; +tr2160: { s->number64_tmp = s->number64; } @@ -51678,8 +51784,8 @@ tr2149: p--; {goto st261;} } } - goto st687; -tr2150: + goto st696; +tr2161: { s->number64_tmp = s->number64; } @@ -51710,8 +51816,8 @@ tr2150: } s->multiline = true; } - goto st687; -tr2151: + goto st696; +tr2162: { s->number64_tmp = s->number64; } @@ -51742,8 +51848,8 @@ tr2151: } s->multiline = false; } - goto st687; -tr2153: + goto st696; +tr2164: { s->number64_tmp = s->number64; } @@ -51770,11 +51876,11 @@ tr2153: { s->line_counter++; } - goto st687; -st687: + goto st696; +st696: if ( ++p == pe ) - goto _test_eof687; -case 687: + goto _test_eof696; +case 696: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51788,20 +51894,20 @@ case 687: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st687; - case 32: goto st687; - case 40: goto tr2014; - case 41: goto tr2015; - case 69: goto st688; - case 87: goto st715; - case 1034: goto tr2016; - case 1083: goto st716; - } - goto tr1934; -st688: + case 9: goto st696; + case 32: goto st696; + case 40: goto tr2025; + case 41: goto tr2026; + case 69: goto st697; + case 87: goto st724; + case 1034: goto tr2027; + case 1083: goto st725; + } + goto tr1945; +st697: if ( ++p == pe ) - goto _test_eof688; -case 688: + goto _test_eof697; +case 697: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51815,15 +51921,15 @@ case 688: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st689; - case 32: goto st689; - case 40: goto tr2019; - case 41: goto tr2020; - case 1034: goto tr2021; - case 1083: goto st714; - } - goto tr1934; -tr2019: + case 9: goto st698; + case 32: goto st698; + case 40: goto tr2030; + case 41: goto tr2031; + case 1034: goto tr2032; + case 1083: goto st723; + } + goto tr1945; +tr2030: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -51831,8 +51937,8 @@ tr2019: } s->multiline = true; } - goto st689; -tr2020: + goto st698; +tr2031: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -51840,18 +51946,18 @@ tr2020: } s->multiline = false; } - goto st689; -tr2021: + goto st698; +tr2032: { s->line_counter++; } - goto st689; -tr2144: + goto st698; +tr2155: { s->loc.long_sign = -1; } - goto st689; -tr2145: + goto st698; +tr2156: { s->loc.long_sign = -1; } @@ -51862,8 +51968,8 @@ tr2145: } s->multiline = true; } - goto st689; -tr2146: + goto st698; +tr2157: { s->loc.long_sign = -1; } @@ -51874,19 +51980,19 @@ tr2146: } s->multiline = false; } - goto st689; -tr2147: + goto st698; +tr2158: { s->loc.long_sign = -1; } { s->line_counter++; } - goto st689; -st689: + goto st698; +st698: if ( ++p == pe ) - goto _test_eof689; -case 689: + goto _test_eof698; +case 698: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -51900,25 +52006,25 @@ case 689: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st689; - case 32: goto st689; - case 40: goto tr2019; - case 41: goto tr2020; - case 45: goto st690; - case 1034: goto tr2021; - case 1083: goto st714; + case 9: goto st698; + case 32: goto st698; + case 40: goto tr2030; + case 41: goto tr2031; + case 45: goto st699; + case 1034: goto tr2032; + case 1083: goto st723; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2024; - goto tr1934; -st690: + goto tr2035; + goto tr1945; +st699: if ( ++p == pe ) - goto _test_eof690; -case 690: + goto _test_eof699; +case 699: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2025; - goto tr1934; -tr2030: + goto tr2036; + goto tr1945; +tr2041: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -51933,8 +52039,8 @@ tr2030: p--; {goto st261;} } } - goto st691; -tr2024: + goto st700; +tr2035: { s->decimals = 2; } @@ -51958,8 +52064,8 @@ tr2024: p--; {goto st261;} } } - goto st691; -tr2025: + goto st700; +tr2036: { s->loc.alt_sign = -1; } @@ -51986,11 +52092,11 @@ tr2025: p--; {goto st261;} } } - goto st691; -st691: + goto st700; +st700: if ( ++p == pe ) - goto _test_eof691; -case 691: + goto _test_eof700; +case 700: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -52008,23 +52114,92 @@ case 691: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2026; - case 32: goto tr2026; - case 40: goto tr2027; - case 41: goto tr2028; - case 46: goto st711; - case 109: goto tr2031; - case 2058: goto tr2032; - case 2107: goto tr2033; - case 2314: goto tr2034; - case 2363: goto tr2034; - case 2570: goto tr2035; - case 2619: goto tr2036; + case 9: goto tr2037; + case 32: goto tr2037; + case 40: goto tr2038; + case 41: goto tr2039; + case 46: goto st720; + case 109: goto tr2042; + case 2058: goto tr2043; + case 2107: goto tr2044; + case 2314: goto tr2045; + case 2363: goto tr2045; + case 2570: goto tr2046; + case 2619: goto tr2047; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2030; - goto tr1934; + goto tr2041; + goto tr1945; +tr2049: + { + if (s->multiline == true) { + ERR(ZS_LEFT_PARENTHESIS); + p--; {goto st261;} + } + s->multiline = true; + } + goto st701; +tr2050: + { + if (s->multiline == false) { + ERR(ZS_RIGHT_PARENTHESIS); + p--; {goto st261;} + } + s->multiline = false; + } + goto st701; +tr2052: + { + s->line_counter++; + } + goto st701; +tr2037: + { + if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { + s->number64 *= pow(10, s->decimals); + } else if (s->decimal_counter <= s->decimals && + s->number64_tmp < UINT32_MAX) { + s->number64 *= pow(10, s->decimals - s->decimal_counter); + s->number64 += s->number64_tmp * pow(10, s->decimals); + } else { + WARN(ZS_FLOAT_OVERFLOW); + p--; {goto st261;} + } + } + { + if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || + (s->loc.alt_sign == -1 && s->number64 <= 10000000)) + { + s->loc.alt = (uint32_t)(s->number64); + } else { + WARN(ZS_BAD_NUMBER); + p--; {goto st261;} + } + } + goto st701; tr2038: + { + if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { + s->number64 *= pow(10, s->decimals); + } else if (s->decimal_counter <= s->decimals && + s->number64_tmp < UINT32_MAX) { + s->number64 *= pow(10, s->decimals - s->decimal_counter); + s->number64 += s->number64_tmp * pow(10, s->decimals); + } else { + WARN(ZS_FLOAT_OVERFLOW); + p--; {goto st261;} + } + } + { + if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || + (s->loc.alt_sign == -1 && s->number64 <= 10000000)) + { + s->loc.alt = (uint32_t)(s->number64); + } else { + WARN(ZS_BAD_NUMBER); + p--; {goto st261;} + } + } { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -52032,8 +52207,30 @@ tr2038: } s->multiline = true; } - goto st692; + goto st701; tr2039: + { + if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { + s->number64 *= pow(10, s->decimals); + } else if (s->decimal_counter <= s->decimals && + s->number64_tmp < UINT32_MAX) { + s->number64 *= pow(10, s->decimals - s->decimal_counter); + s->number64 += s->number64_tmp * pow(10, s->decimals); + } else { + WARN(ZS_FLOAT_OVERFLOW); + p--; {goto st261;} + } + } + { + if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || + (s->loc.alt_sign == -1 && s->number64 <= 10000000)) + { + s->loc.alt = (uint32_t)(s->number64); + } else { + WARN(ZS_BAD_NUMBER); + p--; {goto st261;} + } + } { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -52041,13 +52238,38 @@ tr2039: } s->multiline = false; } - goto st692; -tr2041: + goto st701; +tr2043: + { + if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { + s->number64 *= pow(10, s->decimals); + } else if (s->decimal_counter <= s->decimals && + s->number64_tmp < UINT32_MAX) { + s->number64 *= pow(10, s->decimals - s->decimal_counter); + s->number64 += s->number64_tmp * pow(10, s->decimals); + } else { + WARN(ZS_FLOAT_OVERFLOW); + p--; {goto st261;} + } + } + { + if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || + (s->loc.alt_sign == -1 && s->number64 <= 10000000)) + { + s->loc.alt = (uint32_t)(s->number64); + } else { + WARN(ZS_BAD_NUMBER); + p--; {goto st261;} + } + } { s->line_counter++; } - goto st692; -tr2026: + goto st701; +tr2144: + { + s->number64_tmp = s->number64; + } { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52070,8 +52292,11 @@ tr2026: p--; {goto st261;} } } - goto st692; -tr2027: + goto st701; +tr2145: + { + s->number64_tmp = s->number64; + } { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52101,8 +52326,11 @@ tr2027: } s->multiline = true; } - goto st692; -tr2028: + goto st701; +tr2146: + { + s->number64_tmp = s->number64; + } { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52132,8 +52360,11 @@ tr2028: } s->multiline = false; } - goto st692; -tr2032: + goto st701; +tr2149: + { + s->number64_tmp = s->number64; + } { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52159,136 +52390,11 @@ tr2032: { s->line_counter++; } - goto st692; -tr2133: - { - s->number64_tmp = s->number64; - } - { - if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { - s->number64 *= pow(10, s->decimals); - } else if (s->decimal_counter <= s->decimals && - s->number64_tmp < UINT32_MAX) { - s->number64 *= pow(10, s->decimals - s->decimal_counter); - s->number64 += s->number64_tmp * pow(10, s->decimals); - } else { - WARN(ZS_FLOAT_OVERFLOW); - p--; {goto st261;} - } - } - { - if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || - (s->loc.alt_sign == -1 && s->number64 <= 10000000)) - { - s->loc.alt = (uint32_t)(s->number64); - } else { - WARN(ZS_BAD_NUMBER); - p--; {goto st261;} - } - } - goto st692; -tr2134: - { - s->number64_tmp = s->number64; - } - { - if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { - s->number64 *= pow(10, s->decimals); - } else if (s->decimal_counter <= s->decimals && - s->number64_tmp < UINT32_MAX) { - s->number64 *= pow(10, s->decimals - s->decimal_counter); - s->number64 += s->number64_tmp * pow(10, s->decimals); - } else { - WARN(ZS_FLOAT_OVERFLOW); - p--; {goto st261;} - } - } - { - if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || - (s->loc.alt_sign == -1 && s->number64 <= 10000000)) - { - s->loc.alt = (uint32_t)(s->number64); - } else { - WARN(ZS_BAD_NUMBER); - p--; {goto st261;} - } - } - { - if (s->multiline == true) { - ERR(ZS_LEFT_PARENTHESIS); - p--; {goto st261;} - } - s->multiline = true; - } - goto st692; -tr2135: - { - s->number64_tmp = s->number64; - } - { - if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { - s->number64 *= pow(10, s->decimals); - } else if (s->decimal_counter <= s->decimals && - s->number64_tmp < UINT32_MAX) { - s->number64 *= pow(10, s->decimals - s->decimal_counter); - s->number64 += s->number64_tmp * pow(10, s->decimals); - } else { - WARN(ZS_FLOAT_OVERFLOW); - p--; {goto st261;} - } - } - { - if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || - (s->loc.alt_sign == -1 && s->number64 <= 10000000)) - { - s->loc.alt = (uint32_t)(s->number64); - } else { - WARN(ZS_BAD_NUMBER); - p--; {goto st261;} - } - } - { - if (s->multiline == false) { - ERR(ZS_RIGHT_PARENTHESIS); - p--; {goto st261;} - } - s->multiline = false; - } - goto st692; -tr2138: - { - s->number64_tmp = s->number64; - } - { - if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { - s->number64 *= pow(10, s->decimals); - } else if (s->decimal_counter <= s->decimals && - s->number64_tmp < UINT32_MAX) { - s->number64 *= pow(10, s->decimals - s->decimal_counter); - s->number64 += s->number64_tmp * pow(10, s->decimals); - } else { - WARN(ZS_FLOAT_OVERFLOW); - p--; {goto st261;} - } - } - { - if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || - (s->loc.alt_sign == -1 && s->number64 <= 10000000)) - { - s->loc.alt = (uint32_t)(s->number64); - } else { - WARN(ZS_BAD_NUMBER); - p--; {goto st261;} - } - } - { - s->line_counter++; - } - goto st692; -st692: + goto st701; +st701: if ( ++p == pe ) - goto _test_eof692; -case 692: + goto _test_eof701; +case 701: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -52306,21 +52412,21 @@ case 692: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st692; - case 32: goto st692; - case 40: goto tr2038; - case 41: goto tr2039; - case 2058: goto tr2041; - case 2107: goto st710; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2044; - case 2619: goto tr2045; + case 9: goto st701; + case 32: goto st701; + case 40: goto tr2049; + case 41: goto tr2050; + case 2058: goto tr2052; + case 2107: goto st719; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2055; + case 2619: goto tr2056; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2040; - goto tr1934; -tr2050: + goto tr2051; + goto tr1945; +tr2061: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -52335,8 +52441,8 @@ tr2050: p--; {goto st261;} } } - goto st693; -tr2040: + goto st702; +tr2051: { s->decimals = 2; } @@ -52360,11 +52466,11 @@ tr2040: p--; {goto st261;} } } - goto st693; -st693: + goto st702; +st702: if ( ++p == pe ) - goto _test_eof693; -case 693: + goto _test_eof702; +case 702: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -52382,23 +52488,23 @@ case 693: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2046; - case 32: goto tr2046; - case 40: goto tr2047; - case 41: goto tr2048; - case 46: goto st707; - case 109: goto tr2051; - case 2058: goto tr2052; - case 2107: goto tr2053; - case 2314: goto tr2054; - case 2363: goto tr2054; - case 2570: goto tr2055; - case 2619: goto tr2056; + case 9: goto tr2057; + case 32: goto tr2057; + case 40: goto tr2058; + case 41: goto tr2059; + case 46: goto st716; + case 109: goto tr2062; + case 2058: goto tr2063; + case 2107: goto tr2064; + case 2314: goto tr2065; + case 2363: goto tr2065; + case 2570: goto tr2066; + case 2619: goto tr2067; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2050; - goto tr1934; -tr2058: + goto tr2061; + goto tr1945; +tr2069: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -52406,8 +52512,8 @@ tr2058: } s->multiline = true; } - goto st694; -tr2059: + goto st703; +tr2070: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -52415,13 +52521,13 @@ tr2059: } s->multiline = false; } - goto st694; -tr2061: + goto st703; +tr2072: { s->line_counter++; } - goto st694; -tr2046: + goto st703; +tr2057: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52442,8 +52548,8 @@ tr2046: p--; {goto st261;} } } - goto st694; -tr2047: + goto st703; +tr2058: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52471,8 +52577,8 @@ tr2047: } s->multiline = true; } - goto st694; -tr2048: + goto st703; +tr2059: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52500,8 +52606,8 @@ tr2048: } s->multiline = false; } - goto st694; -tr2052: + goto st703; +tr2063: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52525,8 +52631,8 @@ tr2052: { s->line_counter++; } - goto st694; -tr2122: + goto st703; +tr2133: { s->number64_tmp = s->number64; } @@ -52550,8 +52656,8 @@ tr2122: p--; {goto st261;} } } - goto st694; -tr2123: + goto st703; +tr2134: { s->number64_tmp = s->number64; } @@ -52582,8 +52688,8 @@ tr2123: } s->multiline = true; } - goto st694; -tr2124: + goto st703; +tr2135: { s->number64_tmp = s->number64; } @@ -52614,8 +52720,8 @@ tr2124: } s->multiline = false; } - goto st694; -tr2127: + goto st703; +tr2138: { s->number64_tmp = s->number64; } @@ -52642,11 +52748,11 @@ tr2127: { s->line_counter++; } - goto st694; -st694: + goto st703; +st703: if ( ++p == pe ) - goto _test_eof694; -case 694: + goto _test_eof703; +case 703: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -52664,21 +52770,21 @@ case 694: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st694; - case 32: goto st694; - case 40: goto tr2058; - case 41: goto tr2059; - case 2058: goto tr2061; - case 2107: goto st706; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2063; - case 2619: goto tr2064; + case 9: goto st703; + case 32: goto st703; + case 40: goto tr2069; + case 41: goto tr2070; + case 2058: goto tr2072; + case 2107: goto st715; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2074; + case 2619: goto tr2075; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2060; - goto tr1934; -tr2069: + goto tr2071; + goto tr1945; +tr2080: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -52693,8 +52799,8 @@ tr2069: p--; {goto st261;} } } - goto st695; -tr2060: + goto st704; +tr2071: { s->decimals = 2; } @@ -52718,11 +52824,11 @@ tr2060: p--; {goto st261;} } } - goto st695; -st695: + goto st704; +st704: if ( ++p == pe ) - goto _test_eof695; -case 695: + goto _test_eof704; +case 704: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -52740,23 +52846,23 @@ case 695: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2065; - case 32: goto tr2065; - case 40: goto tr2066; - case 41: goto tr2067; - case 46: goto st703; - case 109: goto tr2070; - case 2058: goto tr2071; - case 2107: goto tr2072; - case 2314: goto tr2073; - case 2363: goto tr2073; - case 2570: goto tr2074; - case 2619: goto tr2075; + case 9: goto tr2076; + case 32: goto tr2076; + case 40: goto tr2077; + case 41: goto tr2078; + case 46: goto st712; + case 109: goto tr2081; + case 2058: goto tr2082; + case 2107: goto tr2083; + case 2314: goto tr2084; + case 2363: goto tr2084; + case 2570: goto tr2085; + case 2619: goto tr2086; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2069; - goto tr1934; -tr2077: + goto tr2080; + goto tr1945; +tr2088: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -52764,8 +52870,8 @@ tr2077: } s->multiline = true; } - goto st696; -tr2078: + goto st705; +tr2089: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -52773,13 +52879,13 @@ tr2078: } s->multiline = false; } - goto st696; -tr2080: + goto st705; +tr2091: { s->line_counter++; } - goto st696; -tr2065: + goto st705; +tr2076: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52800,8 +52906,8 @@ tr2065: p--; {goto st261;} } } - goto st696; -tr2066: + goto st705; +tr2077: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52829,8 +52935,8 @@ tr2066: } s->multiline = true; } - goto st696; -tr2067: + goto st705; +tr2078: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52858,8 +52964,8 @@ tr2067: } s->multiline = false; } - goto st696; -tr2071: + goto st705; +tr2082: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -52883,8 +52989,8 @@ tr2071: { s->line_counter++; } - goto st696; -tr2111: + goto st705; +tr2122: { s->number64_tmp = s->number64; } @@ -52908,8 +53014,8 @@ tr2111: p--; {goto st261;} } } - goto st696; -tr2112: + goto st705; +tr2123: { s->number64_tmp = s->number64; } @@ -52940,8 +53046,8 @@ tr2112: } s->multiline = true; } - goto st696; -tr2113: + goto st705; +tr2124: { s->number64_tmp = s->number64; } @@ -52972,8 +53078,8 @@ tr2113: } s->multiline = false; } - goto st696; -tr2116: + goto st705; +tr2127: { s->number64_tmp = s->number64; } @@ -53000,11 +53106,11 @@ tr2116: { s->line_counter++; } - goto st696; -st696: + goto st705; +st705: if ( ++p == pe ) - goto _test_eof696; -case 696: + goto _test_eof705; +case 705: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -53022,21 +53128,21 @@ case 696: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st696; - case 32: goto st696; - case 40: goto tr2077; - case 41: goto tr2078; - case 2058: goto tr2080; - case 2107: goto st702; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2082; - case 2619: goto tr2083; + case 9: goto st705; + case 32: goto st705; + case 40: goto tr2088; + case 41: goto tr2089; + case 2058: goto tr2091; + case 2107: goto st711; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2093; + case 2619: goto tr2094; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2079; - goto tr1934; -tr2088: + goto tr2090; + goto tr1945; +tr2099: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -53051,8 +53157,8 @@ tr2088: p--; {goto st261;} } } - goto st697; -tr2079: + goto st706; +tr2090: { s->decimals = 2; } @@ -53076,11 +53182,11 @@ tr2079: p--; {goto st261;} } } - goto st697; -st697: + goto st706; +st706: if ( ++p == pe ) - goto _test_eof697; -case 697: + goto _test_eof706; +case 706: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -53098,23 +53204,23 @@ case 697: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2084; - case 32: goto tr2084; - case 40: goto tr2085; - case 41: goto tr2086; - case 46: goto st700; - case 109: goto tr2084; - case 2058: goto tr2089; - case 2107: goto tr2090; - case 2314: goto tr2091; - case 2363: goto tr2091; - case 2570: goto tr2092; - case 2619: goto tr2093; + case 9: goto tr2095; + case 32: goto tr2095; + case 40: goto tr2096; + case 41: goto tr2097; + case 46: goto st709; + case 109: goto tr2095; + case 2058: goto tr2100; + case 2107: goto tr2101; + case 2314: goto tr2102; + case 2363: goto tr2102; + case 2570: goto tr2103; + case 2619: goto tr2104; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2088; - goto tr1934; -tr2095: + goto tr2099; + goto tr1945; +tr2106: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -53122,8 +53228,8 @@ tr2095: } s->multiline = true; } - goto st698; -tr2096: + goto st707; +tr2107: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -53131,13 +53237,13 @@ tr2096: } s->multiline = false; } - goto st698; -tr2097: + goto st707; +tr2108: { s->line_counter++; } - goto st698; -tr2084: + goto st707; +tr2095: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53158,8 +53264,8 @@ tr2084: p--; {goto st261;} } } - goto st698; -tr2085: + goto st707; +tr2096: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53187,8 +53293,8 @@ tr2085: } s->multiline = true; } - goto st698; -tr2086: + goto st707; +tr2097: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53216,8 +53322,8 @@ tr2086: } s->multiline = false; } - goto st698; -tr2089: + goto st707; +tr2100: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53241,8 +53347,8 @@ tr2089: { s->line_counter++; } - goto st698; -tr2101: + goto st707; +tr2112: { s->number64_tmp = s->number64; } @@ -53266,8 +53372,8 @@ tr2101: p--; {goto st261;} } } - goto st698; -tr2102: + goto st707; +tr2113: { s->number64_tmp = s->number64; } @@ -53298,8 +53404,8 @@ tr2102: } s->multiline = true; } - goto st698; -tr2103: + goto st707; +tr2114: { s->number64_tmp = s->number64; } @@ -53330,8 +53436,8 @@ tr2103: } s->multiline = false; } - goto st698; -tr2105: + goto st707; +tr2116: { s->number64_tmp = s->number64; } @@ -53358,11 +53464,11 @@ tr2105: { s->line_counter++; } - goto st698; -st698: + goto st707; +st707: if ( ++p == pe ) - goto _test_eof698; -case 698: + goto _test_eof707; +case 707: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -53380,19 +53486,19 @@ case 698: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st698; - case 32: goto st698; - case 40: goto tr2095; - case 41: goto tr2096; - case 2058: goto tr2097; - case 2107: goto st699; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2099; - case 2619: goto tr2100; - } - goto tr1934; -tr2090: + case 9: goto st707; + case 32: goto st707; + case 40: goto tr2106; + case 41: goto tr2107; + case 2058: goto tr2108; + case 2107: goto st708; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2110; + case 2619: goto tr2111; + } + goto tr1945; +tr2101: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53413,8 +53519,8 @@ tr2090: p--; {goto st261;} } } - goto st699; -tr2106: + goto st708; +tr2117: { s->number64_tmp = s->number64; } @@ -53438,11 +53544,11 @@ tr2106: p--; {goto st261;} } } - goto st699; -st699: + goto st708; +st708: if ( ++p == pe ) - goto _test_eof699; -case 699: + goto _test_eof708; +case 708: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -53462,11 +53568,11 @@ case 699: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2097; + goto tr2108; if ( 896 <= _widec && _widec <= 1151 ) - goto st699; - goto tr1934; -tr2034: + goto st708; + goto tr1945; +tr2045: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53518,8 +53624,8 @@ tr2034: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2043: + goto st1164; +tr2054: { // Write version. *(rdata_tail) = 0; @@ -53549,8 +53655,8 @@ tr2043: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2054: + goto st1164; +tr2065: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53600,8 +53706,8 @@ tr2054: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2073: + goto st1164; +tr2084: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53651,8 +53757,8 @@ tr2073: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2091: + goto st1164; +tr2102: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -53702,8 +53808,8 @@ tr2091: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2107: + goto st1164; +tr2118: { s->number64_tmp = s->number64; } @@ -53756,8 +53862,8 @@ tr2107: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2118: + goto st1164; +tr2129: { s->number64_tmp = s->number64; } @@ -53810,8 +53916,8 @@ tr2118: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2129: + goto st1164; +tr2140: { s->number64_tmp = s->number64; } @@ -53864,8 +53970,8 @@ tr2129: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -tr2140: + goto st1164; +tr2151: { s->number64_tmp = s->number64; } @@ -53920,13 +54026,13 @@ tr2140: { p--; {cs = stack[--top];goto _again;} } - goto st1155; -st1155: + goto st1164; +st1164: if ( ++p == pe ) - goto _test_eof1155; -case 1155: + goto _test_eof1164; +case 1164: goto st0; -tr2099: +tr2110: { s->line_counter++; } @@ -53959,8 +54065,8 @@ tr2099: { p--; {cs = stack[--top];goto _again;} } - goto st1156; -tr2092: + goto st1165; +tr2103: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -54013,8 +54119,8 @@ tr2092: { p--; {cs = stack[--top];goto _again;} } - goto st1156; -tr2108: + goto st1165; +tr2119: { s->number64_tmp = s->number64; } @@ -54070,11 +54176,11 @@ tr2108: { p--; {cs = stack[--top];goto _again;} } - goto st1156; -st1156: + goto st1165; +st1165: if ( ++p == pe ) - goto _test_eof1156; -case 1156: + goto _test_eof1165; +case 1165: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -54092,19 +54198,19 @@ case 1156: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st698; - case 32: goto st698; - case 40: goto tr2095; - case 41: goto tr2096; - case 2058: goto tr2097; - case 2107: goto st699; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2099; - case 2619: goto tr2100; - } - goto tr1934; -tr2100: + case 9: goto st707; + case 32: goto st707; + case 40: goto tr2106; + case 41: goto tr2107; + case 2058: goto tr2108; + case 2107: goto st708; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2110; + case 2619: goto tr2111; + } + goto tr1945; +tr2111: { // Write version. *(rdata_tail) = 0; @@ -54134,8 +54240,8 @@ tr2100: { p--; {cs = stack[--top];goto _again;} } - goto st1157; -tr2093: + goto st1166; +tr2104: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -54185,8 +54291,8 @@ tr2093: { p--; {cs = stack[--top];goto _again;} } - goto st1157; -tr2109: + goto st1166; +tr2120: { s->number64_tmp = s->number64; } @@ -54239,11 +54345,11 @@ tr2109: { p--; {cs = stack[--top];goto _again;} } - goto st1157; -st1157: + goto st1166; +st1166: if ( ++p == pe ) - goto _test_eof1157; -case 1157: + goto _test_eof1166; +case 1166: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -54263,14 +54369,14 @@ case 1157: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2097; + goto tr2108; if ( 896 <= _widec && _widec <= 1151 ) - goto st699; - goto tr1934; -st700: + goto st708; + goto tr1945; +st709: if ( ++p == pe ) - goto _test_eof700; -case 700: + goto _test_eof709; +case 709: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -54288,22 +54394,22 @@ case 700: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2101; - case 32: goto tr2101; - case 40: goto tr2102; - case 41: goto tr2103; - case 109: goto tr2101; - case 2058: goto tr2105; - case 2107: goto tr2106; - case 2314: goto tr2107; - case 2363: goto tr2107; - case 2570: goto tr2108; - case 2619: goto tr2109; + case 9: goto tr2112; + case 32: goto tr2112; + case 40: goto tr2113; + case 41: goto tr2114; + case 109: goto tr2112; + case 2058: goto tr2116; + case 2107: goto tr2117; + case 2314: goto tr2118; + case 2363: goto tr2118; + case 2570: goto tr2119; + case 2619: goto tr2120; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2104; - goto tr1934; -tr2104: + goto tr2115; + goto tr1945; +tr2115: { s->number64_tmp = s->number64; } @@ -54327,8 +54433,8 @@ tr2104: { s->decimal_counter++; } - goto st701; -tr2110: + goto st710; +tr2121: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -54346,11 +54452,11 @@ tr2110: { s->decimal_counter++; } - goto st701; -st701: + goto st710; +st710: if ( ++p == pe ) - goto _test_eof701; -case 701: + goto _test_eof710; +case 710: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -54368,22 +54474,22 @@ case 701: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2084; - case 32: goto tr2084; - case 40: goto tr2085; - case 41: goto tr2086; - case 109: goto tr2084; - case 2058: goto tr2089; - case 2107: goto tr2090; - case 2314: goto tr2091; - case 2363: goto tr2091; - case 2570: goto tr2092; - case 2619: goto tr2093; + case 9: goto tr2095; + case 32: goto tr2095; + case 40: goto tr2096; + case 41: goto tr2097; + case 109: goto tr2095; + case 2058: goto tr2100; + case 2107: goto tr2101; + case 2314: goto tr2102; + case 2363: goto tr2102; + case 2570: goto tr2103; + case 2619: goto tr2104; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2110; - goto tr1934; -tr2072: + goto tr2121; + goto tr1945; +tr2083: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -54404,8 +54510,8 @@ tr2072: p--; {goto st261;} } } - goto st702; -tr2117: + goto st711; +tr2128: { s->number64_tmp = s->number64; } @@ -54429,11 +54535,11 @@ tr2117: p--; {goto st261;} } } - goto st702; -st702: + goto st711; +st711: if ( ++p == pe ) - goto _test_eof702; -case 702: + goto _test_eof711; +case 711: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -54453,11 +54559,11 @@ case 702: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2080; + goto tr2091; if ( 896 <= _widec && _widec <= 1151 ) - goto st702; - goto tr1934; -tr2082: + goto st711; + goto tr1945; +tr2093: { s->line_counter++; } @@ -54490,8 +54596,8 @@ tr2082: { p--; {cs = stack[--top];goto _again;} } - goto st1158; -tr2074: + goto st1167; +tr2085: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -54544,8 +54650,8 @@ tr2074: { p--; {cs = stack[--top];goto _again;} } - goto st1158; -tr2119: + goto st1167; +tr2130: { s->number64_tmp = s->number64; } @@ -54601,11 +54707,11 @@ tr2119: { p--; {cs = stack[--top];goto _again;} } - goto st1158; -st1158: + goto st1167; +st1167: if ( ++p == pe ) - goto _test_eof1158; -case 1158: + goto _test_eof1167; +case 1167: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -54623,21 +54729,21 @@ case 1158: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st696; - case 32: goto st696; - case 40: goto tr2077; - case 41: goto tr2078; - case 2058: goto tr2080; - case 2107: goto st702; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2082; - case 2619: goto tr2083; + case 9: goto st705; + case 32: goto st705; + case 40: goto tr2088; + case 41: goto tr2089; + case 2058: goto tr2091; + case 2107: goto st711; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2093; + case 2619: goto tr2094; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2079; - goto tr1934; -tr2083: + goto tr2090; + goto tr1945; +tr2094: { // Write version. *(rdata_tail) = 0; @@ -54667,8 +54773,8 @@ tr2083: { p--; {cs = stack[--top];goto _again;} } - goto st1159; -tr2075: + goto st1168; +tr2086: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -54718,8 +54824,8 @@ tr2075: { p--; {cs = stack[--top];goto _again;} } - goto st1159; -tr2120: + goto st1168; +tr2131: { s->number64_tmp = s->number64; } @@ -54772,11 +54878,11 @@ tr2120: { p--; {cs = stack[--top];goto _again;} } - goto st1159; -st1159: + goto st1168; +st1168: if ( ++p == pe ) - goto _test_eof1159; -case 1159: + goto _test_eof1168; +case 1168: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -54796,14 +54902,14 @@ case 1159: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2080; + goto tr2091; if ( 896 <= _widec && _widec <= 1151 ) - goto st702; - goto tr1934; -st703: + goto st711; + goto tr1945; +st712: if ( ++p == pe ) - goto _test_eof703; -case 703: + goto _test_eof712; +case 712: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -54821,22 +54927,22 @@ case 703: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2111; - case 32: goto tr2111; - case 40: goto tr2112; - case 41: goto tr2113; - case 109: goto tr2115; - case 2058: goto tr2116; - case 2107: goto tr2117; - case 2314: goto tr2118; - case 2363: goto tr2118; - case 2570: goto tr2119; - case 2619: goto tr2120; + case 9: goto tr2122; + case 32: goto tr2122; + case 40: goto tr2123; + case 41: goto tr2124; + case 109: goto tr2126; + case 2058: goto tr2127; + case 2107: goto tr2128; + case 2314: goto tr2129; + case 2363: goto tr2129; + case 2570: goto tr2130; + case 2619: goto tr2131; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2114; - goto tr1934; -tr2114: + goto tr2125; + goto tr1945; +tr2125: { s->number64_tmp = s->number64; } @@ -54860,8 +54966,8 @@ tr2114: { s->decimal_counter++; } - goto st704; -tr2121: + goto st713; +tr2132: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -54879,11 +54985,11 @@ tr2121: { s->decimal_counter++; } - goto st704; -st704: + goto st713; +st713: if ( ++p == pe ) - goto _test_eof704; -case 704: + goto _test_eof713; +case 713: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -54901,22 +55007,22 @@ case 704: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2065; - case 32: goto tr2065; - case 40: goto tr2066; - case 41: goto tr2067; - case 109: goto tr2070; - case 2058: goto tr2071; - case 2107: goto tr2072; - case 2314: goto tr2073; - case 2363: goto tr2073; - case 2570: goto tr2074; - case 2619: goto tr2075; + case 9: goto tr2076; + case 32: goto tr2076; + case 40: goto tr2077; + case 41: goto tr2078; + case 109: goto tr2081; + case 2058: goto tr2082; + case 2107: goto tr2083; + case 2314: goto tr2084; + case 2363: goto tr2084; + case 2570: goto tr2085; + case 2619: goto tr2086; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2121; - goto tr1934; -tr2070: + goto tr2132; + goto tr1945; +tr2081: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -54937,8 +55043,8 @@ tr2070: p--; {goto st261;} } } - goto st705; -tr2115: + goto st714; +tr2126: { s->number64_tmp = s->number64; } @@ -54962,11 +55068,11 @@ tr2115: p--; {goto st261;} } } - goto st705; -st705: + goto st714; +st714: if ( ++p == pe ) - goto _test_eof705; -case 705: + goto _test_eof714; +case 714: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -54984,19 +55090,19 @@ case 705: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st696; - case 32: goto st696; - case 40: goto tr2077; - case 41: goto tr2078; - case 2058: goto tr2080; - case 2107: goto st702; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2082; - case 2619: goto tr2083; + case 9: goto st705; + case 32: goto st705; + case 40: goto tr2088; + case 41: goto tr2089; + case 2058: goto tr2091; + case 2107: goto st711; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2093; + case 2619: goto tr2094; } - goto tr1934; -tr2053: + goto tr1945; +tr2064: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -55017,8 +55123,8 @@ tr2053: p--; {goto st261;} } } - goto st706; -tr2128: + goto st715; +tr2139: { s->number64_tmp = s->number64; } @@ -55042,11 +55148,11 @@ tr2128: p--; {goto st261;} } } - goto st706; -st706: + goto st715; +st715: if ( ++p == pe ) - goto _test_eof706; -case 706: + goto _test_eof715; +case 715: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -55066,11 +55172,11 @@ case 706: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2061; + goto tr2072; if ( 896 <= _widec && _widec <= 1151 ) - goto st706; - goto tr1934; -tr2063: + goto st715; + goto tr1945; +tr2074: { s->line_counter++; } @@ -55103,8 +55209,8 @@ tr2063: { p--; {cs = stack[--top];goto _again;} } - goto st1160; -tr2055: + goto st1169; +tr2066: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -55157,8 +55263,8 @@ tr2055: { p--; {cs = stack[--top];goto _again;} } - goto st1160; -tr2130: + goto st1169; +tr2141: { s->number64_tmp = s->number64; } @@ -55214,11 +55320,11 @@ tr2130: { p--; {cs = stack[--top];goto _again;} } - goto st1160; -st1160: + goto st1169; +st1169: if ( ++p == pe ) - goto _test_eof1160; -case 1160: + goto _test_eof1169; +case 1169: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -55236,21 +55342,21 @@ case 1160: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st694; - case 32: goto st694; - case 40: goto tr2058; - case 41: goto tr2059; - case 2058: goto tr2061; - case 2107: goto st706; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2063; - case 2619: goto tr2064; + case 9: goto st703; + case 32: goto st703; + case 40: goto tr2069; + case 41: goto tr2070; + case 2058: goto tr2072; + case 2107: goto st715; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2074; + case 2619: goto tr2075; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2060; - goto tr1934; -tr2064: + goto tr2071; + goto tr1945; +tr2075: { // Write version. *(rdata_tail) = 0; @@ -55280,8 +55386,8 @@ tr2064: { p--; {cs = stack[--top];goto _again;} } - goto st1161; -tr2056: + goto st1170; +tr2067: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -55331,8 +55437,8 @@ tr2056: { p--; {cs = stack[--top];goto _again;} } - goto st1161; -tr2131: + goto st1170; +tr2142: { s->number64_tmp = s->number64; } @@ -55385,11 +55491,11 @@ tr2131: { p--; {cs = stack[--top];goto _again;} } - goto st1161; -st1161: + goto st1170; +st1170: if ( ++p == pe ) - goto _test_eof1161; -case 1161: + goto _test_eof1170; +case 1170: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -55409,14 +55515,14 @@ case 1161: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2061; + goto tr2072; if ( 896 <= _widec && _widec <= 1151 ) - goto st706; - goto tr1934; -st707: + goto st715; + goto tr1945; +st716: if ( ++p == pe ) - goto _test_eof707; -case 707: + goto _test_eof716; +case 716: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -55434,22 +55540,22 @@ case 707: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2122; - case 32: goto tr2122; - case 40: goto tr2123; - case 41: goto tr2124; - case 109: goto tr2126; - case 2058: goto tr2127; - case 2107: goto tr2128; - case 2314: goto tr2129; - case 2363: goto tr2129; - case 2570: goto tr2130; - case 2619: goto tr2131; + case 9: goto tr2133; + case 32: goto tr2133; + case 40: goto tr2134; + case 41: goto tr2135; + case 109: goto tr2137; + case 2058: goto tr2138; + case 2107: goto tr2139; + case 2314: goto tr2140; + case 2363: goto tr2140; + case 2570: goto tr2141; + case 2619: goto tr2142; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2125; - goto tr1934; -tr2125: + goto tr2136; + goto tr1945; +tr2136: { s->number64_tmp = s->number64; } @@ -55473,8 +55579,8 @@ tr2125: { s->decimal_counter++; } - goto st708; -tr2132: + goto st717; +tr2143: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -55492,11 +55598,11 @@ tr2132: { s->decimal_counter++; } - goto st708; -st708: + goto st717; +st717: if ( ++p == pe ) - goto _test_eof708; -case 708: + goto _test_eof717; +case 717: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -55514,22 +55620,22 @@ case 708: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2046; - case 32: goto tr2046; - case 40: goto tr2047; - case 41: goto tr2048; - case 109: goto tr2051; - case 2058: goto tr2052; - case 2107: goto tr2053; - case 2314: goto tr2054; - case 2363: goto tr2054; - case 2570: goto tr2055; - case 2619: goto tr2056; + case 9: goto tr2057; + case 32: goto tr2057; + case 40: goto tr2058; + case 41: goto tr2059; + case 109: goto tr2062; + case 2058: goto tr2063; + case 2107: goto tr2064; + case 2314: goto tr2065; + case 2363: goto tr2065; + case 2570: goto tr2066; + case 2619: goto tr2067; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2132; - goto tr1934; -tr2051: + goto tr2143; + goto tr1945; +tr2062: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -55550,8 +55656,8 @@ tr2051: p--; {goto st261;} } } - goto st709; -tr2126: + goto st718; +tr2137: { s->number64_tmp = s->number64; } @@ -55575,11 +55681,11 @@ tr2126: p--; {goto st261;} } } - goto st709; -st709: + goto st718; +st718: if ( ++p == pe ) - goto _test_eof709; -case 709: + goto _test_eof718; +case 718: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -55597,19 +55703,19 @@ case 709: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st694; - case 32: goto st694; - case 40: goto tr2058; - case 41: goto tr2059; - case 2058: goto tr2061; - case 2107: goto st706; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2063; - case 2619: goto tr2064; + case 9: goto st703; + case 32: goto st703; + case 40: goto tr2069; + case 41: goto tr2070; + case 2058: goto tr2072; + case 2107: goto st715; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2074; + case 2619: goto tr2075; } - goto tr1934; -tr2033: + goto tr1945; +tr2044: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -55632,8 +55738,8 @@ tr2033: p--; {goto st261;} } } - goto st710; -tr2139: + goto st719; +tr2150: { s->number64_tmp = s->number64; } @@ -55659,11 +55765,11 @@ tr2139: p--; {goto st261;} } } - goto st710; -st710: + goto st719; +st719: if ( ++p == pe ) - goto _test_eof710; -case 710: + goto _test_eof719; +case 719: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -55683,11 +55789,11 @@ case 710: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2041; + goto tr2052; if ( 896 <= _widec && _widec <= 1151 ) - goto st710; - goto tr1934; -tr2035: + goto st719; + goto tr1945; +tr2046: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -55742,8 +55848,8 @@ tr2035: { p--; {cs = stack[--top];goto _again;} } - goto st1162; -tr2044: + goto st1171; +tr2055: { s->line_counter++; } @@ -55776,8 +55882,8 @@ tr2044: { p--; {cs = stack[--top];goto _again;} } - goto st1162; -tr2141: + goto st1171; +tr2152: { s->number64_tmp = s->number64; } @@ -55835,11 +55941,11 @@ tr2141: { p--; {cs = stack[--top];goto _again;} } - goto st1162; -st1162: + goto st1171; +st1171: if ( ++p == pe ) - goto _test_eof1162; -case 1162: + goto _test_eof1171; +case 1171: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -55857,21 +55963,21 @@ case 1162: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st692; - case 32: goto st692; - case 40: goto tr2038; - case 41: goto tr2039; - case 2058: goto tr2041; - case 2107: goto st710; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2044; - case 2619: goto tr2045; + case 9: goto st701; + case 32: goto st701; + case 40: goto tr2049; + case 41: goto tr2050; + case 2058: goto tr2052; + case 2107: goto st719; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2055; + case 2619: goto tr2056; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2040; - goto tr1934; -tr2036: + goto tr2051; + goto tr1945; +tr2047: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -55923,8 +56029,8 @@ tr2036: { p--; {cs = stack[--top];goto _again;} } - goto st1163; -tr2045: + goto st1172; +tr2056: { // Write version. *(rdata_tail) = 0; @@ -55954,8 +56060,8 @@ tr2045: { p--; {cs = stack[--top];goto _again;} } - goto st1163; -tr2142: + goto st1172; +tr2153: { s->number64_tmp = s->number64; } @@ -56010,11 +56116,11 @@ tr2142: { p--; {cs = stack[--top];goto _again;} } - goto st1163; -st1163: + goto st1172; +st1172: if ( ++p == pe ) - goto _test_eof1163; -case 1163: + goto _test_eof1172; +case 1172: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56034,14 +56140,14 @@ case 1163: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2041; + goto tr2052; if ( 896 <= _widec && _widec <= 1151 ) - goto st710; - goto tr1934; -st711: + goto st719; + goto tr1945; +st720: if ( ++p == pe ) - goto _test_eof711; -case 711: + goto _test_eof720; +case 720: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56059,22 +56165,22 @@ case 711: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2133; - case 32: goto tr2133; - case 40: goto tr2134; - case 41: goto tr2135; - case 109: goto tr2137; - case 2058: goto tr2138; - case 2107: goto tr2139; - case 2314: goto tr2140; - case 2363: goto tr2140; - case 2570: goto tr2141; - case 2619: goto tr2142; + case 9: goto tr2144; + case 32: goto tr2144; + case 40: goto tr2145; + case 41: goto tr2146; + case 109: goto tr2148; + case 2058: goto tr2149; + case 2107: goto tr2150; + case 2314: goto tr2151; + case 2363: goto tr2151; + case 2570: goto tr2152; + case 2619: goto tr2153; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2136; - goto tr1934; -tr2136: + goto tr2147; + goto tr1945; +tr2147: { s->number64_tmp = s->number64; } @@ -56098,8 +56204,8 @@ tr2136: { s->decimal_counter++; } - goto st712; -tr2143: + goto st721; +tr2154: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -56117,11 +56223,11 @@ tr2143: { s->decimal_counter++; } - goto st712; -st712: + goto st721; +st721: if ( ++p == pe ) - goto _test_eof712; -case 712: + goto _test_eof721; +case 721: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56139,22 +56245,22 @@ case 712: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2026; - case 32: goto tr2026; - case 40: goto tr2027; - case 41: goto tr2028; - case 109: goto tr2031; - case 2058: goto tr2032; - case 2107: goto tr2033; - case 2314: goto tr2034; - case 2363: goto tr2034; - case 2570: goto tr2035; - case 2619: goto tr2036; + case 9: goto tr2037; + case 32: goto tr2037; + case 40: goto tr2038; + case 41: goto tr2039; + case 109: goto tr2042; + case 2058: goto tr2043; + case 2107: goto tr2044; + case 2314: goto tr2045; + case 2363: goto tr2045; + case 2570: goto tr2046; + case 2619: goto tr2047; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2143; - goto tr1934; -tr2031: + goto tr2154; + goto tr1945; +tr2042: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -56177,8 +56283,8 @@ tr2031: p--; {goto st261;} } } - goto st713; -tr2137: + goto st722; +tr2148: { s->number64_tmp = s->number64; } @@ -56204,11 +56310,11 @@ tr2137: p--; {goto st261;} } } - goto st713; -st713: + goto st722; +st722: if ( ++p == pe ) - goto _test_eof713; -case 713: + goto _test_eof722; +case 722: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56226,27 +56332,27 @@ case 713: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st692; - case 32: goto st692; - case 40: goto tr2038; - case 41: goto tr2039; - case 2058: goto tr2041; - case 2107: goto st710; - case 2314: goto tr2043; - case 2363: goto tr2043; - case 2570: goto tr2044; - case 2619: goto tr2045; - } - goto tr1934; -tr2148: + case 9: goto st701; + case 32: goto st701; + case 40: goto tr2049; + case 41: goto tr2050; + case 2058: goto tr2052; + case 2107: goto st719; + case 2314: goto tr2054; + case 2363: goto tr2054; + case 2570: goto tr2055; + case 2619: goto tr2056; + } + goto tr1945; +tr2159: { s->loc.long_sign = -1; } - goto st714; -st714: + goto st723; +st723: if ( ++p == pe ) - goto _test_eof714; -case 714: + goto _test_eof723; +case 723: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56266,14 +56372,14 @@ case 714: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2021; + goto tr2032; if ( 896 <= _widec && _widec <= 1151 ) - goto st714; - goto tr1934; -st715: + goto st723; + goto tr1945; +st724: if ( ++p == pe ) - goto _test_eof715; -case 715: + goto _test_eof724; +case 724: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56287,15 +56393,15 @@ case 715: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2144; - case 32: goto tr2144; - case 40: goto tr2145; - case 41: goto tr2146; - case 1034: goto tr2147; - case 1083: goto tr2148; + case 9: goto tr2155; + case 32: goto tr2155; + case 40: goto tr2156; + case 41: goto tr2157; + case 1034: goto tr2158; + case 1083: goto tr2159; } - goto tr1934; -tr2012: + goto tr1945; +tr2023: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -56316,8 +56422,8 @@ tr2012: p--; {goto st261;} } } - goto st716; -tr2154: + goto st725; +tr2165: { s->number64_tmp = s->number64; } @@ -56341,11 +56447,11 @@ tr2154: p--; {goto st261;} } } - goto st716; -st716: + goto st725; +st725: if ( ++p == pe ) - goto _test_eof716; -case 716: + goto _test_eof725; +case 725: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56365,14 +56471,14 @@ case 716: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2016; + goto tr2027; if ( 896 <= _widec && _widec <= 1151 ) - goto st716; - goto tr1934; -st717: + goto st725; + goto tr1945; +st726: if ( ++p == pe ) - goto _test_eof717; -case 717: + goto _test_eof726; +case 726: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56386,17 +56492,17 @@ case 717: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2149; - case 32: goto tr2149; - case 40: goto tr2150; - case 41: goto tr2151; - case 1034: goto tr2153; - case 1083: goto tr2154; + case 9: goto tr2160; + case 32: goto tr2160; + case 40: goto tr2161; + case 41: goto tr2162; + case 1034: goto tr2164; + case 1083: goto tr2165; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2152; - goto tr1934; -tr2152: + goto tr2163; + goto tr1945; +tr2163: { s->number64_tmp = s->number64; } @@ -56420,8 +56526,8 @@ tr2152: { s->decimal_counter++; } - goto st718; -tr2155: + goto st727; +tr2166: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -56439,11 +56545,11 @@ tr2155: { s->decimal_counter++; } - goto st718; -st718: + goto st727; +st727: if ( ++p == pe ) - goto _test_eof718; -case 718: + goto _test_eof727; +case 727: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56457,17 +56563,17 @@ case 718: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2006; - case 32: goto tr2006; - case 40: goto tr2007; - case 41: goto tr2008; - case 1034: goto tr2011; - case 1083: goto tr2012; + case 9: goto tr2017; + case 32: goto tr2017; + case 40: goto tr2018; + case 41: goto tr2019; + case 1034: goto tr2022; + case 1083: goto tr2023; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2155; - goto tr1934; -tr1999: + goto tr2166; + goto tr1945; +tr2010: { if (s->number64 <= 59) { s->loc.m2 = (uint32_t)(s->number64); @@ -56476,11 +56582,11 @@ tr1999: p--; {goto st261;} } } - goto st719; -st719: + goto st728; +st728: if ( ++p == pe ) - goto _test_eof719; -case 719: + goto _test_eof728; +case 728: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56500,11 +56606,11 @@ case 719: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2004; + goto tr2015; if ( 896 <= _widec && _widec <= 1151 ) - goto st719; - goto tr1934; -tr1985: + goto st728; + goto tr1945; +tr1996: { if (s->number64 <= 180) { s->loc.d2 = (uint32_t)(s->number64); @@ -56513,11 +56619,11 @@ tr1985: p--; {goto st261;} } } - goto st720; -st720: + goto st729; +st729: if ( ++p == pe ) - goto _test_eof720; -case 720: + goto _test_eof729; +case 729: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56537,19 +56643,19 @@ case 720: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1992; + goto tr2003; if ( 896 <= _widec && _widec <= 1151 ) - goto st720; - goto tr1934; -tr2160: + goto st729; + goto tr1945; +tr2171: { s->loc.lat_sign = -1; } - goto st721; -st721: + goto st730; +st730: if ( ++p == pe ) - goto _test_eof721; -case 721: + goto _test_eof730; +case 730: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56569,14 +56675,14 @@ case 721: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1977; + goto tr1988; if ( 896 <= _widec && _widec <= 1151 ) - goto st721; - goto tr1934; -st722: + goto st730; + goto tr1945; +st731: if ( ++p == pe ) - goto _test_eof722; -case 722: + goto _test_eof731; +case 731: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56590,15 +56696,15 @@ case 722: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2156; - case 32: goto tr2156; - case 40: goto tr2157; - case 41: goto tr2158; - case 1034: goto tr2159; - case 1083: goto tr2160; - } - goto tr1934; -tr1968: + case 9: goto tr2167; + case 32: goto tr2167; + case 40: goto tr2168; + case 41: goto tr2169; + case 1034: goto tr2170; + case 1083: goto tr2171; + } + goto tr1945; +tr1979: { if (s->decimal_counter == 0 && s->number64 < UINT32_MAX) { s->number64 *= pow(10, s->decimals); @@ -56619,8 +56725,8 @@ tr1968: p--; {goto st261;} } } - goto st723; -tr2166: + goto st732; +tr2177: { s->number64_tmp = s->number64; } @@ -56644,11 +56750,11 @@ tr2166: p--; {goto st261;} } } - goto st723; -st723: + goto st732; +st732: if ( ++p == pe ) - goto _test_eof723; -case 723: + goto _test_eof732; +case 732: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56668,14 +56774,14 @@ case 723: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1972; + goto tr1983; if ( 896 <= _widec && _widec <= 1151 ) - goto st723; - goto tr1934; -st724: + goto st732; + goto tr1945; +st733: if ( ++p == pe ) - goto _test_eof724; -case 724: + goto _test_eof733; +case 733: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56689,17 +56795,17 @@ case 724: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2161; - case 32: goto tr2161; - case 40: goto tr2162; - case 41: goto tr2163; - case 1034: goto tr2165; - case 1083: goto tr2166; + case 9: goto tr2172; + case 32: goto tr2172; + case 40: goto tr2173; + case 41: goto tr2174; + case 1034: goto tr2176; + case 1083: goto tr2177; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2164; - goto tr1934; -tr2164: + goto tr2175; + goto tr1945; +tr2175: { s->number64_tmp = s->number64; } @@ -56723,8 +56829,8 @@ tr2164: { s->decimal_counter++; } - goto st725; -tr2167: + goto st734; +tr2178: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -56742,11 +56848,11 @@ tr2167: { s->decimal_counter++; } - goto st725; -st725: + goto st734; +st734: if ( ++p == pe ) - goto _test_eof725; -case 725: + goto _test_eof734; +case 734: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56760,17 +56866,17 @@ case 725: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr1962; - case 32: goto tr1962; - case 40: goto tr1963; - case 41: goto tr1964; - case 1034: goto tr1967; - case 1083: goto tr1968; + case 9: goto tr1973; + case 32: goto tr1973; + case 40: goto tr1974; + case 41: goto tr1975; + case 1034: goto tr1978; + case 1083: goto tr1979; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2167; - goto tr1934; -tr1955: + goto tr2178; + goto tr1945; +tr1966: { if (s->number64 <= 59) { s->loc.m1 = (uint32_t)(s->number64); @@ -56779,11 +56885,11 @@ tr1955: p--; {goto st261;} } } - goto st726; -st726: + goto st735; +st735: if ( ++p == pe ) - goto _test_eof726; -case 726: + goto _test_eof735; +case 735: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56803,11 +56909,11 @@ case 726: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1960; + goto tr1971; if ( 896 <= _widec && _widec <= 1151 ) - goto st726; - goto tr1934; -tr1941: + goto st735; + goto tr1945; +tr1952: { if (s->number64 <= 90) { s->loc.d1 = (uint32_t)(s->number64); @@ -56816,11 +56922,11 @@ tr1941: p--; {goto st261;} } } - goto st727; -st727: + goto st736; +st736: if ( ++p == pe ) - goto _test_eof727; -case 727: + goto _test_eof736; +case 736: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -56840,18 +56946,18 @@ case 727: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr1948; + goto tr1959; if ( 896 <= _widec && _widec <= 1151 ) - goto st727; - goto tr1934; -st728: + goto st736; + goto tr1945; +st737: if ( ++p == pe ) - goto _test_eof728; -case 728: + goto _test_eof737; +case 737: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2168; - goto tr1746; -tr2168: + goto tr2179; + goto tr1757; +tr2179: { s->number64 = 0; } @@ -56869,8 +56975,8 @@ tr2168: p--; {goto st261;} } } - goto st729; -tr2172: + goto st738; +tr2183: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -56885,11 +56991,11 @@ tr2172: p--; {goto st261;} } } - goto st729; -st729: + goto st738; +st738: if ( ++p == pe ) - goto _test_eof729; -case 729: + goto _test_eof738; +case 738: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -56903,17 +57009,17 @@ case 729: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2169; - case 32: goto tr2169; - case 40: goto tr2170; - case 41: goto tr2171; - case 1034: goto tr2173; - case 1083: goto tr2174; + case 9: goto tr2180; + case 32: goto tr2180; + case 40: goto tr2181; + case 41: goto tr2182; + case 1034: goto tr2184; + case 1083: goto tr2185; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2172; - goto tr1746; -tr2176: + goto tr2183; + goto tr1757; +tr2187: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -56921,8 +57027,8 @@ tr2176: } s->multiline = true; } - goto st730; -tr2177: + goto st739; +tr2188: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -56930,13 +57036,13 @@ tr2177: } s->multiline = false; } - goto st730; -tr2179: + goto st739; +tr2190: { s->line_counter++; } - goto st730; -tr2169: + goto st739; +tr2180: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -56946,8 +57052,8 @@ tr2169: p--; {goto st261;} } } - goto st730; -tr2170: + goto st739; +tr2181: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -56964,8 +57070,8 @@ tr2170: } s->multiline = true; } - goto st730; -tr2171: + goto st739; +tr2182: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -56982,8 +57088,8 @@ tr2171: } s->multiline = false; } - goto st730; -tr2173: + goto st739; +tr2184: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -56996,11 +57102,11 @@ tr2173: { s->line_counter++; } - goto st730; -st730: + goto st739; +st739: if ( ++p == pe ) - goto _test_eof730; -case 730: + goto _test_eof739; +case 739: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57014,17 +57120,17 @@ case 730: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st730; - case 32: goto st730; - case 40: goto tr2176; - case 41: goto tr2177; - case 1034: goto tr2179; - case 1083: goto st738; + case 9: goto st739; + case 32: goto st739; + case 40: goto tr2187; + case 41: goto tr2188; + case 1034: goto tr2190; + case 1083: goto st747; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2178; - goto tr1746; -tr2178: + goto tr2189; + goto tr1757; +tr2189: { s->number64 = 0; } @@ -57042,8 +57148,8 @@ tr2178: p--; {goto st261;} } } - goto st731; -tr2184: + goto st740; +tr2195: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -57058,11 +57164,11 @@ tr2184: p--; {goto st261;} } } - goto st731; -st731: + goto st740; +st740: if ( ++p == pe ) - goto _test_eof731; -case 731: + goto _test_eof740; +case 740: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57076,17 +57182,17 @@ case 731: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2181; - case 32: goto tr2181; - case 40: goto tr2182; - case 41: goto tr2183; - case 1034: goto tr2185; - case 1083: goto tr2186; + case 9: goto tr2192; + case 32: goto tr2192; + case 40: goto tr2193; + case 41: goto tr2194; + case 1034: goto tr2196; + case 1083: goto tr2197; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2184; - goto tr1746; -tr2188: + goto tr2195; + goto tr1757; +tr2199: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -57094,8 +57200,8 @@ tr2188: } s->multiline = true; } - goto st732; -tr2189: + goto st741; +tr2200: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -57103,13 +57209,13 @@ tr2189: } s->multiline = false; } - goto st732; -tr2191: + goto st741; +tr2202: { s->line_counter++; } - goto st732; -tr2181: + goto st741; +tr2192: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57119,8 +57225,8 @@ tr2181: p--; {goto st261;} } } - goto st732; -tr2182: + goto st741; +tr2193: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57137,8 +57243,8 @@ tr2182: } s->multiline = true; } - goto st732; -tr2183: + goto st741; +tr2194: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57155,8 +57261,8 @@ tr2183: } s->multiline = false; } - goto st732; -tr2185: + goto st741; +tr2196: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57169,11 +57275,11 @@ tr2185: { s->line_counter++; } - goto st732; -st732: + goto st741; +st741: if ( ++p == pe ) - goto _test_eof732; -case 732: + goto _test_eof741; +case 741: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57187,17 +57293,17 @@ case 732: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st732; - case 32: goto st732; - case 40: goto tr2188; - case 41: goto tr2189; - case 1034: goto tr2191; - case 1083: goto st737; + case 9: goto st741; + case 32: goto st741; + case 40: goto tr2199; + case 41: goto tr2200; + case 1034: goto tr2202; + case 1083: goto st746; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2190; - goto tr1746; -tr2190: + goto tr2201; + goto tr1757; +tr2201: { s->number64 = 0; } @@ -57215,8 +57321,8 @@ tr2190: p--; {goto st261;} } } - goto st733; -tr2196: + goto st742; +tr2207: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -57231,11 +57337,11 @@ tr2196: p--; {goto st261;} } } - goto st733; -st733: + goto st742; +st742: if ( ++p == pe ) - goto _test_eof733; -case 733: + goto _test_eof742; +case 742: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57249,17 +57355,17 @@ case 733: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2193; - case 32: goto tr2193; - case 40: goto tr2194; - case 41: goto tr2195; - case 1034: goto tr2197; - case 1083: goto tr2198; + case 9: goto tr2204; + case 32: goto tr2204; + case 40: goto tr2205; + case 41: goto tr2206; + case 1034: goto tr2208; + case 1083: goto tr2209; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2196; - goto tr1746; -tr2200: + goto tr2207; + goto tr1757; +tr2211: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -57267,8 +57373,8 @@ tr2200: } s->multiline = true; } - goto st734; -tr2201: + goto st743; +tr2212: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -57276,13 +57382,13 @@ tr2201: } s->multiline = false; } - goto st734; -tr2203: + goto st743; +tr2214: { s->line_counter++; } - goto st734; -tr2193: + goto st743; +tr2204: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57292,8 +57398,8 @@ tr2193: p--; {goto st261;} } } - goto st734; -tr2194: + goto st743; +tr2205: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57310,8 +57416,8 @@ tr2194: } s->multiline = true; } - goto st734; -tr2195: + goto st743; +tr2206: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57328,8 +57434,8 @@ tr2195: } s->multiline = false; } - goto st734; -tr2197: + goto st743; +tr2208: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57342,11 +57448,11 @@ tr2197: { s->line_counter++; } - goto st734; -st734: + goto st743; +st743: if ( ++p == pe ) - goto _test_eof734; -case 734: + goto _test_eof743; +case 743: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57360,59 +57466,59 @@ case 734: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st734; - case 32: goto st734; - case 40: goto tr2200; - case 41: goto tr2201; - case 42: goto tr2202; - case 92: goto tr2202; - case 95: goto tr2202; - case 1034: goto tr2203; - case 1083: goto st736; + case 9: goto st743; + case 32: goto st743; + case 40: goto tr2211; + case 41: goto tr2212; + case 42: goto tr2213; + case 92: goto tr2213; + case 95: goto tr2213; + case 1034: goto tr2214; + case 1083: goto st745; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr2202; + goto tr2213; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2202; + goto tr2213; } else - goto tr2202; + goto tr2213; goto tr71; -tr2202: +tr2213: { s->dname = rdata_tail; } - { p--; {stack[top++] = 735; goto st263;} } - goto st735; -st735: + { p--; {stack[top++] = 744; goto st263;} } + goto st744; +st744: if ( ++p == pe ) - goto _test_eof735; -case 735: + goto _test_eof744; +case 744: switch( (*p) ) { - case 32: goto tr2205; - case 59: goto tr2205; + case 32: goto tr2216; + case 59: goto tr2216; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr2205; + goto tr2216; } else if ( (*p) >= 9 ) - goto tr2205; + goto tr2216; goto tr71; -tr2205: +tr2216: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1164; -st1164: + goto st1173; +st1173: if ( ++p == pe ) - goto _test_eof1164; -case 1164: + goto _test_eof1173; +case 1173: goto st0; -tr2198: +tr2209: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57422,11 +57528,11 @@ tr2198: p--; {goto st261;} } } - goto st736; -st736: + goto st745; +st745: if ( ++p == pe ) - goto _test_eof736; -case 736: + goto _test_eof745; +case 745: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -57446,11 +57552,11 @@ case 736: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2203; + goto tr2214; if ( 896 <= _widec && _widec <= 1151 ) - goto st736; + goto st745; goto tr71; -tr2186: +tr2197: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57460,11 +57566,11 @@ tr2186: p--; {goto st261;} } } - goto st737; -st737: + goto st746; +st746: if ( ++p == pe ) - goto _test_eof737; -case 737: + goto _test_eof746; +case 746: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -57484,11 +57590,11 @@ case 737: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2191; + goto tr2202; if ( 896 <= _widec && _widec <= 1151 ) - goto st737; + goto st746; goto tr71; -tr2174: +tr2185: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57498,11 +57604,11 @@ tr2174: p--; {goto st261;} } } - goto st738; -st738: + goto st747; +st747: if ( ++p == pe ) - goto _test_eof738; -case 738: + goto _test_eof747; +case 747: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -57522,18 +57628,18 @@ case 738: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2179; + goto tr2190; if ( 896 <= _widec && _widec <= 1151 ) - goto st738; + goto st747; goto tr71; -st739: +st748: if ( ++p == pe ) - goto _test_eof739; -case 739: + goto _test_eof748; +case 748: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2206; - goto tr1746; -tr2206: + goto tr2217; + goto tr1757; +tr2217: { s->number64 = 0; } @@ -57551,8 +57657,8 @@ tr2206: p--; {goto st261;} } } - goto st740; -tr2210: + goto st749; +tr2221: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -57567,11 +57673,11 @@ tr2210: p--; {goto st261;} } } - goto st740; -st740: + goto st749; +st749: if ( ++p == pe ) - goto _test_eof740; -case 740: + goto _test_eof749; +case 749: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57585,17 +57691,17 @@ case 740: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2207; - case 32: goto tr2207; - case 40: goto tr2208; - case 41: goto tr2209; - case 1034: goto tr2211; - case 1083: goto tr2212; + case 9: goto tr2218; + case 32: goto tr2218; + case 40: goto tr2219; + case 41: goto tr2220; + case 1034: goto tr2222; + case 1083: goto tr2223; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2210; - goto tr1746; -tr2214: + goto tr2221; + goto tr1757; +tr2225: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -57603,8 +57709,8 @@ tr2214: } s->multiline = true; } - goto st741; -tr2215: + goto st750; +tr2226: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -57612,13 +57718,13 @@ tr2215: } s->multiline = false; } - goto st741; -tr2217: + goto st750; +tr2228: { s->line_counter++; } - goto st741; -tr2207: + goto st750; +tr2218: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57628,8 +57734,8 @@ tr2207: p--; {goto st261;} } } - goto st741; -tr2208: + goto st750; +tr2219: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57646,8 +57752,8 @@ tr2208: } s->multiline = true; } - goto st741; -tr2209: + goto st750; +tr2220: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57664,8 +57770,8 @@ tr2209: } s->multiline = false; } - goto st741; -tr2211: + goto st750; +tr2222: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57678,11 +57784,11 @@ tr2211: { s->line_counter++; } - goto st741; -st741: + goto st750; +st750: if ( ++p == pe ) - goto _test_eof741; -case 741: + goto _test_eof750; +case 750: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57696,17 +57802,17 @@ case 741: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st741; - case 32: goto st741; - case 40: goto tr2214; - case 41: goto tr2215; - case 1034: goto tr2217; - case 1083: goto st755; + case 9: goto st750; + case 32: goto st750; + case 40: goto tr2225; + case 41: goto tr2226; + case 1034: goto tr2228; + case 1083: goto st764; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2216; - goto tr1746; -tr2216: + goto tr2227; + goto tr1757; +tr2227: { s->number64 = 0; } @@ -57724,8 +57830,8 @@ tr2216: p--; {goto st261;} } } - goto st742; -tr2222: + goto st751; +tr2233: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -57740,11 +57846,11 @@ tr2222: p--; {goto st261;} } } - goto st742; -st742: + goto st751; +st751: if ( ++p == pe ) - goto _test_eof742; -case 742: + goto _test_eof751; +case 751: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57758,17 +57864,17 @@ case 742: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2219; - case 32: goto tr2219; - case 40: goto tr2220; - case 41: goto tr2221; - case 1034: goto tr2223; - case 1083: goto tr2224; + case 9: goto tr2230; + case 32: goto tr2230; + case 40: goto tr2231; + case 41: goto tr2232; + case 1034: goto tr2234; + case 1083: goto tr2235; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2222; - goto tr1746; -tr2227: + goto tr2233; + goto tr1757; +tr2238: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -57776,8 +57882,8 @@ tr2227: } s->multiline = true; } - goto st743; -tr2228: + goto st752; +tr2239: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -57785,13 +57891,13 @@ tr2228: } s->multiline = false; } - goto st743; -tr2229: + goto st752; +tr2240: { s->line_counter++; } - goto st743; -tr2219: + goto st752; +tr2230: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57801,8 +57907,8 @@ tr2219: p--; {goto st261;} } } - goto st743; -tr2220: + goto st752; +tr2231: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57819,8 +57925,8 @@ tr2220: } s->multiline = true; } - goto st743; -tr2221: + goto st752; +tr2232: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57837,8 +57943,8 @@ tr2221: } s->multiline = false; } - goto st743; -tr2223: + goto st752; +tr2234: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -57851,11 +57957,11 @@ tr2223: { s->line_counter++; } - goto st743; -st743: + goto st752; +st752: if ( ++p == pe ) - goto _test_eof743; -case 743: + goto _test_eof752; +case 752: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57869,23 +57975,23 @@ case 743: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st743; - case 32: goto st743; - case 40: goto tr2227; - case 41: goto tr2228; - case 1034: goto tr2229; - case 1083: goto st754; + case 9: goto st752; + case 32: goto st752; + case 40: goto tr2238; + case 41: goto tr2239; + case 1034: goto tr2240; + case 1083: goto st763; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr2225; + goto tr2236; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr2225; + goto tr2236; } else - goto tr2225; + goto tr2236; goto tr71; -tr2225: +tr2236: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -57894,12 +58000,12 @@ tr2225: p--; {goto st261;} } } - { p--; {stack[top++] = 744; goto st272;} } - goto st744; -st744: + { p--; {stack[top++] = 753; goto st272;} } + goto st753; +st753: if ( ++p == pe ) - goto _test_eof744; -case 744: + goto _test_eof753; +case 753: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -57913,15 +58019,15 @@ case 744: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2231; - case 32: goto tr2231; - case 40: goto tr2232; - case 41: goto tr2233; - case 1034: goto tr2234; - case 1083: goto tr2235; + case 9: goto tr2242; + case 32: goto tr2242; + case 40: goto tr2243; + case 41: goto tr2244; + case 1034: goto tr2245; + case 1083: goto tr2246; } goto tr71; -tr2238: +tr2249: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -57929,8 +58035,8 @@ tr2238: } s->multiline = true; } - goto st745; -tr2239: + goto st754; +tr2250: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -57938,13 +58044,13 @@ tr2239: } s->multiline = false; } - goto st745; -tr2240: + goto st754; +tr2251: { s->line_counter++; } - goto st745; -tr2231: + goto st754; +tr2242: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -57955,8 +58061,8 @@ tr2231: p--; {goto st261;} } } - goto st745; -tr2232: + goto st754; +tr2243: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -57974,8 +58080,8 @@ tr2232: } s->multiline = true; } - goto st745; -tr2233: + goto st754; +tr2244: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -57993,9 +58099,9 @@ tr2233: } s->multiline = false; } - goto st745; -tr2234: - { + goto st754; +tr2245: + { s->item_length = rdata_tail - s->item_length_location - 1; if (s->item_length <= MAX_ITEM_LENGTH) { @@ -58008,11 +58114,11 @@ tr2234: { s->line_counter++; } - goto st745; -st745: + goto st754; +st754: if ( ++p == pe ) - goto _test_eof745; -case 745: + goto _test_eof754; +case 754: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58026,23 +58132,23 @@ case 745: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st745; - case 32: goto st745; - case 40: goto tr2238; - case 41: goto tr2239; - case 1034: goto tr2240; - case 1083: goto st753; + case 9: goto st754; + case 32: goto st754; + case 40: goto tr2249; + case 41: goto tr2250; + case 1034: goto tr2251; + case 1083: goto st762; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr2236; + goto tr2247; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr2236; + goto tr2247; } else - goto tr2236; + goto tr2247; goto tr71; -tr2236: +tr2247: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -58051,12 +58157,12 @@ tr2236: p--; {goto st261;} } } - { p--; {stack[top++] = 746; goto st272;} } - goto st746; -st746: + { p--; {stack[top++] = 755; goto st272;} } + goto st755; +st755: if ( ++p == pe ) - goto _test_eof746; -case 746: + goto _test_eof755; +case 755: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58070,15 +58176,15 @@ case 746: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2242; - case 32: goto tr2242; - case 40: goto tr2243; - case 41: goto tr2244; - case 1034: goto tr2245; - case 1083: goto tr2246; + case 9: goto tr2253; + case 32: goto tr2253; + case 40: goto tr2254; + case 41: goto tr2255; + case 1034: goto tr2256; + case 1083: goto tr2257; } goto tr71; -tr2249: +tr2260: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -58086,8 +58192,8 @@ tr2249: } s->multiline = true; } - goto st747; -tr2250: + goto st756; +tr2261: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -58095,13 +58201,13 @@ tr2250: } s->multiline = false; } - goto st747; -tr2251: + goto st756; +tr2262: { s->line_counter++; } - goto st747; -tr2242: + goto st756; +tr2253: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58112,8 +58218,8 @@ tr2242: p--; {goto st261;} } } - goto st747; -tr2243: + goto st756; +tr2254: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58131,8 +58237,8 @@ tr2243: } s->multiline = true; } - goto st747; -tr2244: + goto st756; +tr2255: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58150,8 +58256,8 @@ tr2244: } s->multiline = false; } - goto st747; -tr2245: + goto st756; +tr2256: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58165,11 +58271,11 @@ tr2245: { s->line_counter++; } - goto st747; -st747: + goto st756; +st756: if ( ++p == pe ) - goto _test_eof747; -case 747: + goto _test_eof756; +case 756: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58183,23 +58289,23 @@ case 747: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st747; - case 32: goto st747; - case 40: goto tr2249; - case 41: goto tr2250; - case 1034: goto tr2251; - case 1083: goto st752; + case 9: goto st756; + case 32: goto st756; + case 40: goto tr2260; + case 41: goto tr2261; + case 1034: goto tr2262; + case 1083: goto st761; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr2247; + goto tr2258; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr2247; + goto tr2258; } else - goto tr2247; + goto tr2258; goto tr71; -tr2247: +tr2258: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -58208,12 +58314,12 @@ tr2247: p--; {goto st261;} } } - { p--; {stack[top++] = 748; goto st272;} } - goto st748; -st748: + { p--; {stack[top++] = 757; goto st272;} } + goto st757; +st757: if ( ++p == pe ) - goto _test_eof748; -case 748: + goto _test_eof757; +case 757: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58227,15 +58333,15 @@ case 748: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2253; - case 32: goto tr2253; - case 40: goto tr2254; - case 41: goto tr2255; - case 1034: goto tr2256; - case 1083: goto tr2257; + case 9: goto tr2264; + case 32: goto tr2264; + case 40: goto tr2265; + case 41: goto tr2266; + case 1034: goto tr2267; + case 1083: goto tr2268; } goto tr71; -tr2259: +tr2270: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -58243,8 +58349,8 @@ tr2259: } s->multiline = true; } - goto st749; -tr2260: + goto st758; +tr2271: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -58252,13 +58358,13 @@ tr2260: } s->multiline = false; } - goto st749; -tr2262: + goto st758; +tr2273: { s->line_counter++; } - goto st749; -tr2253: + goto st758; +tr2264: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58269,8 +58375,8 @@ tr2253: p--; {goto st261;} } } - goto st749; -tr2254: + goto st758; +tr2265: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58288,8 +58394,8 @@ tr2254: } s->multiline = true; } - goto st749; -tr2255: + goto st758; +tr2266: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58307,8 +58413,8 @@ tr2255: } s->multiline = false; } - goto st749; -tr2256: + goto st758; +tr2267: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58322,11 +58428,11 @@ tr2256: { s->line_counter++; } - goto st749; -st749: + goto st758; +st758: if ( ++p == pe ) - goto _test_eof749; -case 749: + goto _test_eof758; +case 758: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58340,59 +58446,59 @@ case 749: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st749; - case 32: goto st749; - case 40: goto tr2259; - case 41: goto tr2260; - case 42: goto tr2261; - case 92: goto tr2261; - case 95: goto tr2261; - case 1034: goto tr2262; - case 1083: goto st751; + case 9: goto st758; + case 32: goto st758; + case 40: goto tr2270; + case 41: goto tr2271; + case 42: goto tr2272; + case 92: goto tr2272; + case 95: goto tr2272; + case 1034: goto tr2273; + case 1083: goto st760; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr2261; + goto tr2272; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2261; + goto tr2272; } else - goto tr2261; + goto tr2272; goto tr71; -tr2261: +tr2272: { s->dname = rdata_tail; } - { p--; {stack[top++] = 750; goto st263;} } - goto st750; -st750: + { p--; {stack[top++] = 759; goto st263;} } + goto st759; +st759: if ( ++p == pe ) - goto _test_eof750; -case 750: + goto _test_eof759; +case 759: switch( (*p) ) { - case 32: goto tr2264; - case 59: goto tr2264; + case 32: goto tr2275; + case 59: goto tr2275; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr2264; + goto tr2275; } else if ( (*p) >= 9 ) - goto tr2264; + goto tr2275; goto tr71; -tr2264: +tr2275: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1165; -st1165: + goto st1174; +st1174: if ( ++p == pe ) - goto _test_eof1165; -case 1165: + goto _test_eof1174; +case 1174: goto st0; -tr2257: +tr2268: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58403,11 +58509,11 @@ tr2257: p--; {goto st261;} } } - goto st751; -st751: + goto st760; +st760: if ( ++p == pe ) - goto _test_eof751; -case 751: + goto _test_eof760; +case 760: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -58427,11 +58533,11 @@ case 751: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2262; + goto tr2273; if ( 896 <= _widec && _widec <= 1151 ) - goto st751; + goto st760; goto tr71; -tr2246: +tr2257: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58442,11 +58548,11 @@ tr2246: p--; {goto st261;} } } - goto st752; -st752: + goto st761; +st761: if ( ++p == pe ) - goto _test_eof752; -case 752: + goto _test_eof761; +case 761: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -58466,11 +58572,11 @@ case 752: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2251; + goto tr2262; if ( 896 <= _widec && _widec <= 1151 ) - goto st752; + goto st761; goto tr71; -tr2235: +tr2246: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -58481,11 +58587,11 @@ tr2235: p--; {goto st261;} } } - goto st753; -st753: + goto st762; +st762: if ( ++p == pe ) - goto _test_eof753; -case 753: + goto _test_eof762; +case 762: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -58505,11 +58611,11 @@ case 753: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2240; + goto tr2251; if ( 896 <= _widec && _widec <= 1151 ) - goto st753; + goto st762; goto tr71; -tr2224: +tr2235: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -58519,11 +58625,11 @@ tr2224: p--; {goto st261;} } } - goto st754; -st754: + goto st763; +st763: if ( ++p == pe ) - goto _test_eof754; -case 754: + goto _test_eof763; +case 763: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -58543,11 +58649,11 @@ case 754: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2229; + goto tr2240; if ( 896 <= _widec && _widec <= 1151 ) - goto st754; + goto st763; goto tr71; -tr2212: +tr2223: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -58557,11 +58663,11 @@ tr2212: p--; {goto st261;} } } - goto st755; -st755: + goto st764; +st764: if ( ++p == pe ) - goto _test_eof755; -case 755: + goto _test_eof764; +case 764: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -58581,30 +58687,30 @@ case 755: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2217; + goto tr2228; if ( 896 <= _widec && _widec <= 1151 ) - goto st755; + goto st764; goto tr71; -st756: +st765: if ( ++p == pe ) - goto _test_eof756; -case 756: + goto _test_eof765; +case 765: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2265; + goto tr2276; } else if ( (*p) > 90 ) { if ( 97 <= (*p) && (*p) <= 122 ) - goto tr2265; + goto tr2276; } else - goto tr2265; + goto tr2276; goto tr71; -tr2265: - { p--; {stack[top++] = 757; goto st575;} } - goto st757; -st757: +tr2276: + { p--; {stack[top++] = 766; goto st584;} } + goto st766; +st766: if ( ++p == pe ) - goto _test_eof757; -case 757: + goto _test_eof766; +case 766: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58618,15 +58724,15 @@ case 757: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st758; - case 32: goto st758; - case 40: goto tr2267; - case 41: goto tr2268; - case 1034: goto tr2269; - case 1083: goto st766; + case 9: goto st767; + case 32: goto st767; + case 40: goto tr2278; + case 41: goto tr2279; + case 1034: goto tr2280; + case 1083: goto st775; } goto tr71; -tr2267: +tr2278: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -58634,8 +58740,8 @@ tr2267: } s->multiline = true; } - goto st758; -tr2268: + goto st767; +tr2279: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -58643,16 +58749,16 @@ tr2268: } s->multiline = false; } - goto st758; -tr2269: + goto st767; +tr2280: { s->line_counter++; } - goto st758; -st758: + goto st767; +st767: if ( ++p == pe ) - goto _test_eof758; -case 758: + goto _test_eof767; +case 767: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58666,17 +58772,17 @@ case 758: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st758; - case 32: goto st758; - case 40: goto tr2267; - case 41: goto tr2268; - case 1034: goto tr2269; - case 1083: goto st766; + case 9: goto st767; + case 32: goto st767; + case 40: goto tr2278; + case 41: goto tr2279; + case 1034: goto tr2280; + case 1083: goto st775; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2271; - goto tr1746; -tr2271: + goto tr2282; + goto tr1757; +tr2282: { s->number64 = 0; } @@ -58694,8 +58800,8 @@ tr2271: p--; {goto st261;} } } - goto st759; -tr2275: + goto st768; +tr2286: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -58710,11 +58816,11 @@ tr2275: p--; {goto st261;} } } - goto st759; -st759: + goto st768; +st768: if ( ++p == pe ) - goto _test_eof759; -case 759: + goto _test_eof768; +case 768: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58728,17 +58834,17 @@ case 759: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2272; - case 32: goto tr2272; - case 40: goto tr2273; - case 41: goto tr2274; - case 1034: goto tr2276; - case 1083: goto tr2277; + case 9: goto tr2283; + case 32: goto tr2283; + case 40: goto tr2284; + case 41: goto tr2285; + case 1034: goto tr2287; + case 1083: goto tr2288; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2275; - goto tr1746; -tr2279: + goto tr2286; + goto tr1757; +tr2290: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -58746,8 +58852,8 @@ tr2279: } s->multiline = true; } - goto st760; -tr2280: + goto st769; +tr2291: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -58755,13 +58861,13 @@ tr2280: } s->multiline = false; } - goto st760; -tr2282: + goto st769; +tr2293: { s->line_counter++; } - goto st760; -tr2272: + goto st769; +tr2283: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -58771,8 +58877,8 @@ tr2272: p--; {goto st261;} } } - goto st760; -tr2273: + goto st769; +tr2284: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -58789,8 +58895,8 @@ tr2273: } s->multiline = true; } - goto st760; -tr2274: + goto st769; +tr2285: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -58807,8 +58913,8 @@ tr2274: } s->multiline = false; } - goto st760; -tr2276: + goto st769; +tr2287: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -58821,11 +58927,11 @@ tr2276: { s->line_counter++; } - goto st760; -st760: + goto st769; +st769: if ( ++p == pe ) - goto _test_eof760; -case 760: + goto _test_eof769; +case 769: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58839,29 +58945,29 @@ case 760: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st760; - case 32: goto st760; - case 40: goto tr2279; - case 41: goto tr2280; - case 1034: goto tr2282; - case 1083: goto st765; + case 9: goto st769; + case 32: goto st769; + case 40: goto tr2290; + case 41: goto tr2291; + case 1034: goto tr2293; + case 1083: goto st774; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2281; + goto tr2292; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2281; + goto tr2292; } else - goto tr2281; + goto tr2292; goto tr71; -tr2281: - { p--; {stack[top++] = 761; goto st480;} } - goto st761; -st761: +tr2292: + { p--; {stack[top++] = 770; goto st480;} } + goto st770; +st770: if ( ++p == pe ) - goto _test_eof761; -case 761: + goto _test_eof770; +case 770: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58875,15 +58981,15 @@ case 761: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st762; - case 32: goto st762; - case 40: goto tr2285; - case 41: goto tr2286; - case 1034: goto tr2287; - case 1083: goto st764; + case 9: goto st771; + case 32: goto st771; + case 40: goto tr2296; + case 41: goto tr2297; + case 1034: goto tr2298; + case 1083: goto st773; } goto tr71; -tr2285: +tr2296: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -58891,8 +58997,8 @@ tr2285: } s->multiline = true; } - goto st762; -tr2286: + goto st771; +tr2297: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -58900,16 +59006,16 @@ tr2286: } s->multiline = false; } - goto st762; -tr2287: + goto st771; +tr2298: { s->line_counter++; } - goto st762; -st762: + goto st771; +st771: if ( ++p == pe ) - goto _test_eof762; -case 762: + goto _test_eof771; +case 771: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58923,30 +59029,30 @@ case 762: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st762; - case 32: goto st762; - case 40: goto tr2285; - case 41: goto tr2286; - case 43: goto tr2289; - case 1034: goto tr2287; - case 1083: goto st764; + case 9: goto st771; + case 32: goto st771; + case 40: goto tr2296; + case 41: goto tr2297; + case 43: goto tr2300; + case 1034: goto tr2298; + case 1083: goto st773; } if ( _widec < 65 ) { if ( 47 <= _widec && _widec <= 57 ) - goto tr2289; + goto tr2300; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2289; + goto tr2300; } else - goto tr2289; + goto tr2300; goto tr71; -tr2289: - { p--; {stack[top++] = 763; goto st322;} } - goto st763; -st763: +tr2300: + { p--; {stack[top++] = 772; goto st322;} } + goto st772; +st772: if ( ++p == pe ) - goto _test_eof763; -case 763: + goto _test_eof772; +case 772: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -58960,24 +59066,24 @@ case 763: !s->multiline ) _widec += 256; } switch( _widec ) { - case 1546: goto tr2290; - case 1595: goto tr2290; + case 1546: goto tr2301; + case 1595: goto tr2301; } goto tr71; -tr2290: +tr2301: { p--; {cs = stack[--top];goto _again;} } - goto st1166; -st1166: + goto st1175; +st1175: if ( ++p == pe ) - goto _test_eof1166; -case 1166: + goto _test_eof1175; +case 1175: goto st0; -st764: +st773: if ( ++p == pe ) - goto _test_eof764; -case 764: + goto _test_eof773; +case 773: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -58997,11 +59103,11 @@ case 764: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2287; + goto tr2298; if ( 896 <= _widec && _widec <= 1151 ) - goto st764; + goto st773; goto tr71; -tr2277: +tr2288: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -59011,11 +59117,11 @@ tr2277: p--; {goto st261;} } } - goto st765; -st765: + goto st774; +st774: if ( ++p == pe ) - goto _test_eof765; -case 765: + goto _test_eof774; +case 774: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -59035,14 +59141,14 @@ case 765: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2282; + goto tr2293; if ( 896 <= _widec && _widec <= 1151 ) - goto st765; + goto st774; goto tr71; -st766: +st775: if ( ++p == pe ) - goto _test_eof766; -case 766: + goto _test_eof775; +case 775: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -59062,11 +59168,11 @@ case 766: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2269; + goto tr2280; if ( 896 <= _widec && _widec <= 1151 ) - goto st766; + goto st775; goto tr71; -tr2294: +tr2305: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -59074,8 +59180,8 @@ tr2294: } s->multiline = true; } - goto st767; -tr2295: + goto st776; +tr2306: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -59083,13 +59189,13 @@ tr2295: } s->multiline = false; } - goto st767; -tr2298: + goto st776; +tr2309: { s->line_counter++; } - goto st767; -tr2311: + goto st776; +tr2322: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59135,8 +59241,8 @@ tr2311: memcpy(rdata_tail, s->buffer, len); rdata_tail += len; } - goto st767; -tr2312: + goto st776; +tr2323: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59189,8 +59295,8 @@ tr2312: } s->multiline = true; } - goto st767; -tr2313: + goto st776; +tr2324: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59243,8 +59349,8 @@ tr2313: } s->multiline = false; } - goto st767; -tr2315: + goto st776; +tr2326: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59293,11 +59399,11 @@ tr2315: { s->line_counter++; } - goto st767; -st767: + goto st776; +st776: if ( ++p == pe ) - goto _test_eof767; -case 767: + goto _test_eof776; +case 776: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -59315,68 +59421,68 @@ case 767: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st767; - case 32: goto st767; - case 33: goto tr2293; - case 40: goto tr2294; - case 41: goto tr2295; - case 49: goto tr2296; - case 50: goto tr2297; - case 2058: goto tr2298; - case 2107: goto st774; - case 2314: goto tr2300; - case 2363: goto tr2300; - case 2570: goto tr2301; - case 2619: goto tr2302; - } - goto tr2291; -tr2293: + case 9: goto st776; + case 32: goto st776; + case 33: goto tr2304; + case 40: goto tr2305; + case 41: goto tr2306; + case 49: goto tr2307; + case 50: goto tr2308; + case 2058: goto tr2309; + case 2107: goto st783; + case 2314: goto tr2311; + case 2363: goto tr2311; + case 2570: goto tr2312; + case 2619: goto tr2313; + } + goto tr2302; +tr2304: { memset(&(s->apl), 0, sizeof(s->apl)); } { s->apl.excl_flag = 128; // dec 128 = bin 10000000. } - goto st768; -st768: + goto st777; +st777: if ( ++p == pe ) - goto _test_eof768; -case 768: + goto _test_eof777; +case 777: switch( (*p) ) { - case 49: goto tr2303; - case 50: goto tr2304; + case 49: goto tr2314; + case 50: goto tr2315; } - goto tr2291; -tr2296: + goto tr2302; +tr2307: { memset(&(s->apl), 0, sizeof(s->apl)); } { s->apl.addr_family = 1; } - goto st769; -tr2303: + goto st778; +tr2314: { s->apl.addr_family = 1; } - goto st769; -st769: + goto st778; +st778: if ( ++p == pe ) - goto _test_eof769; -case 769: + goto _test_eof778; +case 778: if ( (*p) == 58 ) - goto st770; - goto tr2291; -st770: + goto st779; + goto tr2302; +st779: if ( ++p == pe ) - goto _test_eof770; -case 770: + goto _test_eof779; +case 779: if ( (*p) == 46 ) - goto tr2307; + goto tr2318; if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2307; - goto tr2306; -tr2307: + goto tr2318; + goto tr2317; +tr2318: { s->buffer_length = 0; } @@ -59389,8 +59495,8 @@ tr2307: p--; {goto st261;} } } - goto st771; -tr2308: + goto st780; +tr2319: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -59400,17 +59506,17 @@ tr2308: p--; {goto st261;} } } - goto st771; -st771: + goto st780; +st780: if ( ++p == pe ) - goto _test_eof771; -case 771: + goto _test_eof780; +case 780: if ( (*p) == 47 ) - goto tr2309; + goto tr2320; if ( 46 <= (*p) && (*p) <= 57 ) - goto tr2308; - goto tr2306; -tr2309: + goto tr2319; + goto tr2317; +tr2320: { s->buffer[s->buffer_length] = 0; @@ -59419,8 +59525,8 @@ tr2309: p--; {goto st261;} } } - goto st772; -tr2323: + goto st781; +tr2334: { s->buffer[s->buffer_length] = 0; @@ -59429,15 +59535,15 @@ tr2323: p--; {goto st261;} } } - goto st772; -st772: + goto st781; +st781: if ( ++p == pe ) - goto _test_eof772; -case 772: + goto _test_eof781; +case 781: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2310; - goto tr2291; -tr2310: + goto tr2321; + goto tr2302; +tr2321: { s->number64 = 0; } @@ -59455,8 +59561,8 @@ tr2310: p--; {goto st261;} } } - goto st773; -tr2314: + goto st782; +tr2325: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -59471,11 +59577,11 @@ tr2314: p--; {goto st261;} } } - goto st773; -st773: + goto st782; +st782: if ( ++p == pe ) - goto _test_eof773; -case 773: + goto _test_eof782; +case 782: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -59493,21 +59599,21 @@ case 773: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto tr2311; - case 32: goto tr2311; - case 40: goto tr2312; - case 41: goto tr2313; - case 2058: goto tr2315; - case 2107: goto tr2316; - case 2314: goto tr2317; - case 2363: goto tr2317; - case 2570: goto tr2318; - case 2619: goto tr2319; + case 9: goto tr2322; + case 32: goto tr2322; + case 40: goto tr2323; + case 41: goto tr2324; + case 2058: goto tr2326; + case 2107: goto tr2327; + case 2314: goto tr2328; + case 2363: goto tr2328; + case 2570: goto tr2329; + case 2619: goto tr2330; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2314; - goto tr2291; -tr2316: + goto tr2325; + goto tr2302; +tr2327: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59553,11 +59659,11 @@ tr2316: memcpy(rdata_tail, s->buffer, len); rdata_tail += len; } - goto st774; -st774: + goto st783; +st783: if ( ++p == pe ) - goto _test_eof774; -case 774: + goto _test_eof783; +case 783: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -59577,16 +59683,16 @@ case 774: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2298; + goto tr2309; if ( 896 <= _widec && _widec <= 1151 ) - goto st774; + goto st783; goto tr71; -tr2300: +tr2311: { p--; {cs = stack[--top];goto _again;} } - goto st1167; -tr2317: + goto st1176; +tr2328: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59635,21 +59741,21 @@ tr2317: { p--; {cs = stack[--top];goto _again;} } - goto st1167; -st1167: + goto st1176; +st1176: if ( ++p == pe ) - goto _test_eof1167; -case 1167: + goto _test_eof1176; +case 1176: goto st0; -tr2301: +tr2312: { s->line_counter++; } { p--; {cs = stack[--top];goto _again;} } - goto st1168; -tr2318: + goto st1177; +tr2329: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59701,11 +59807,11 @@ tr2318: { p--; {cs = stack[--top];goto _again;} } - goto st1168; -st1168: + goto st1177; +st1177: if ( ++p == pe ) - goto _test_eof1168; -case 1168: + goto _test_eof1177; +case 1177: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -59723,57 +59829,57 @@ case 1168: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st767; - case 32: goto st767; - case 33: goto tr2293; - case 40: goto tr2294; - case 41: goto tr2295; - case 49: goto tr2296; - case 50: goto tr2297; - case 2058: goto tr2298; - case 2107: goto st774; - case 2314: goto tr2300; - case 2363: goto tr2300; - case 2570: goto tr2301; - case 2619: goto tr2302; - } - goto tr2291; -tr2297: + case 9: goto st776; + case 32: goto st776; + case 33: goto tr2304; + case 40: goto tr2305; + case 41: goto tr2306; + case 49: goto tr2307; + case 50: goto tr2308; + case 2058: goto tr2309; + case 2107: goto st783; + case 2314: goto tr2311; + case 2363: goto tr2311; + case 2570: goto tr2312; + case 2619: goto tr2313; + } + goto tr2302; +tr2308: { memset(&(s->apl), 0, sizeof(s->apl)); } { s->apl.addr_family = 2; } - goto st775; -tr2304: + goto st784; +tr2315: { s->apl.addr_family = 2; } - goto st775; -st775: + goto st784; +st784: if ( ++p == pe ) - goto _test_eof775; -case 775: + goto _test_eof784; +case 784: if ( (*p) == 58 ) - goto st776; - goto tr2291; -st776: + goto st785; + goto tr2302; +st785: if ( ++p == pe ) - goto _test_eof776; -case 776: + goto _test_eof785; +case 785: if ( (*p) == 46 ) - goto tr2321; + goto tr2332; if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 58 ) - goto tr2321; + goto tr2332; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr2321; + goto tr2332; } else - goto tr2321; - goto tr2306; -tr2321: + goto tr2332; + goto tr2317; +tr2332: { s->buffer_length = 0; } @@ -59786,8 +59892,8 @@ tr2321: p--; {goto st261;} } } - goto st777; -tr2322: + goto st786; +tr2333: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -59797,28 +59903,28 @@ tr2322: p--; {goto st261;} } } - goto st777; -st777: + goto st786; +st786: if ( ++p == pe ) - goto _test_eof777; -case 777: + goto _test_eof786; +case 786: if ( (*p) == 47 ) - goto tr2323; + goto tr2334; if ( (*p) < 65 ) { if ( 46 <= (*p) && (*p) <= 58 ) - goto tr2322; + goto tr2333; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr2322; + goto tr2333; } else - goto tr2322; - goto tr2306; -tr2302: + goto tr2333; + goto tr2317; +tr2313: { p--; {cs = stack[--top];goto _again;} } - goto st1169; -tr2319: + goto st1178; +tr2330: { if ((s->apl.addr_family == 1 && s->number64 <= 32) || (s->apl.addr_family == 2 && s->number64 <= 128)) { @@ -59867,11 +59973,11 @@ tr2319: { p--; {cs = stack[--top];goto _again;} } - goto st1169; -st1169: + goto st1178; +st1178: if ( ++p == pe ) - goto _test_eof1169; -case 1169: + goto _test_eof1178; +case 1178: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -59891,18 +59997,18 @@ case 1169: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2298; + goto tr2309; if ( 896 <= _widec && _widec <= 1151 ) - goto st774; + goto st783; goto tr71; -st778: +st787: if ( ++p == pe ) - goto _test_eof778; -case 778: + goto _test_eof787; +case 787: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2324; - goto tr1746; -tr2324: + goto tr2335; + goto tr1757; +tr2335: { s->number64 = 0; } @@ -59920,8 +60026,8 @@ tr2324: p--; {goto st261;} } } - goto st779; -tr2328: + goto st788; +tr2339: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -59936,11 +60042,11 @@ tr2328: p--; {goto st261;} } } - goto st779; -st779: + goto st788; +st788: if ( ++p == pe ) - goto _test_eof779; -case 779: + goto _test_eof788; +case 788: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -59954,17 +60060,17 @@ case 779: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2325; - case 32: goto tr2325; - case 40: goto tr2326; - case 41: goto tr2327; - case 1034: goto tr2329; - case 1083: goto tr2330; + case 9: goto tr2336; + case 32: goto tr2336; + case 40: goto tr2337; + case 41: goto tr2338; + case 1034: goto tr2340; + case 1083: goto tr2341; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2328; - goto tr1746; -tr2332: + goto tr2339; + goto tr1757; +tr2343: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -59972,8 +60078,8 @@ tr2332: } s->multiline = true; } - goto st780; -tr2333: + goto st789; +tr2344: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -59981,13 +60087,13 @@ tr2333: } s->multiline = false; } - goto st780; -tr2335: + goto st789; +tr2346: { s->line_counter++; } - goto st780; -tr2325: + goto st789; +tr2336: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -59997,8 +60103,8 @@ tr2325: p--; {goto st261;} } } - goto st780; -tr2326: + goto st789; +tr2337: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -60015,8 +60121,8 @@ tr2326: } s->multiline = true; } - goto st780; -tr2327: + goto st789; +tr2338: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -60033,8 +60139,8 @@ tr2327: } s->multiline = false; } - goto st780; -tr2329: + goto st789; +tr2340: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -60047,11 +60153,11 @@ tr2329: { s->line_counter++; } - goto st780; -st780: + goto st789; +st789: if ( ++p == pe ) - goto _test_eof780; -case 780: + goto _test_eof789; +case 789: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60065,29 +60171,29 @@ case 780: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st780; - case 32: goto st780; - case 40: goto tr2332; - case 41: goto tr2333; - case 1034: goto tr2335; - case 1083: goto st790; + case 9: goto st789; + case 32: goto st789; + case 40: goto tr2343; + case 41: goto tr2344; + case 1034: goto tr2346; + case 1083: goto st799; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2334; + goto tr2345; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2334; + goto tr2345; } else - goto tr2334; + goto tr2345; goto tr71; -tr2334: - { p--; {stack[top++] = 781; goto st480;} } - goto st781; -st781: +tr2345: + { p--; {stack[top++] = 790; goto st480;} } + goto st790; +st790: if ( ++p == pe ) - goto _test_eof781; -case 781: + goto _test_eof790; +case 790: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60101,15 +60207,15 @@ case 781: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st782; - case 32: goto st782; - case 40: goto tr2338; - case 41: goto tr2339; - case 1034: goto tr2340; - case 1083: goto st789; + case 9: goto st791; + case 32: goto st791; + case 40: goto tr2349; + case 41: goto tr2350; + case 1034: goto tr2351; + case 1083: goto st798; } goto tr71; -tr2338: +tr2349: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -60117,8 +60223,8 @@ tr2338: } s->multiline = true; } - goto st782; -tr2339: + goto st791; +tr2350: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -60126,16 +60232,16 @@ tr2339: } s->multiline = false; } - goto st782; -tr2340: + goto st791; +tr2351: { s->line_counter++; } - goto st782; -st782: + goto st791; +st791: if ( ++p == pe ) - goto _test_eof782; -case 782: + goto _test_eof791; +case 791: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60149,17 +60255,17 @@ case 782: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st782; - case 32: goto st782; - case 40: goto tr2338; - case 41: goto tr2339; - case 1034: goto tr2340; - case 1083: goto st789; + case 9: goto st791; + case 32: goto st791; + case 40: goto tr2349; + case 41: goto tr2350; + case 1034: goto tr2351; + case 1083: goto st798; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2342; - goto tr1746; -tr2342: + goto tr2353; + goto tr1757; +tr2353: { s->number64 = 0; } @@ -60177,8 +60283,8 @@ tr2342: p--; {goto st261;} } } - goto st783; -tr2346: + goto st792; +tr2357: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -60193,11 +60299,11 @@ tr2346: p--; {goto st261;} } } - goto st783; -st783: + goto st792; +st792: if ( ++p == pe ) - goto _test_eof783; -case 783: + goto _test_eof792; +case 792: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60211,17 +60317,17 @@ case 783: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2343; - case 32: goto tr2343; - case 40: goto tr2344; - case 41: goto tr2345; - case 1034: goto tr2347; - case 1083: goto tr2348; + case 9: goto tr2354; + case 32: goto tr2354; + case 40: goto tr2355; + case 41: goto tr2356; + case 1034: goto tr2358; + case 1083: goto tr2359; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2346; - goto tr1746; -tr2351: + goto tr2357; + goto tr1757; +tr2362: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -60229,8 +60335,8 @@ tr2351: } s->multiline = true; } - goto st784; -tr2352: + goto st793; +tr2363: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -60238,13 +60344,13 @@ tr2352: } s->multiline = false; } - goto st784; -tr2354: + goto st793; +tr2365: { s->line_counter++; } - goto st784; -tr2343: + goto st793; +tr2354: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60254,8 +60360,8 @@ tr2343: p--; {goto st261;} } } - goto st784; -tr2344: + goto st793; +tr2355: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60272,8 +60378,8 @@ tr2344: } s->multiline = true; } - goto st784; -tr2345: + goto st793; +tr2356: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60290,8 +60396,8 @@ tr2345: } s->multiline = false; } - goto st784; -tr2347: + goto st793; +tr2358: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60304,11 +60410,11 @@ tr2347: { s->line_counter++; } - goto st784; -st784: + goto st793; +st793: if ( ++p == pe ) - goto _test_eof784; -case 784: + goto _test_eof793; +case 793: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60322,23 +60428,23 @@ case 784: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st784; - case 32: goto st784; - case 40: goto tr2351; - case 41: goto tr2352; - case 1034: goto tr2354; - case 1083: goto st788; + case 9: goto st793; + case 32: goto st793; + case 40: goto tr2362; + case 41: goto tr2363; + case 1034: goto tr2365; + case 1083: goto st797; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2353; + goto tr2364; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2353; + goto tr2364; } else - goto tr2353; - goto tr2349; -tr2353: + goto tr2364; + goto tr2360; +tr2364: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -60347,21 +60453,21 @@ tr2353: p--; {goto st261;} } } - goto st785; -st785: + goto st794; +st794: if ( ++p == pe ) - goto _test_eof785; -case 785: + goto _test_eof794; +case 794: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2356; + goto tr2367; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr2356; + goto tr2367; } else - goto tr2356; - goto tr2349; -tr2358: + goto tr2367; + goto tr2360; +tr2369: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -60369,8 +60475,8 @@ tr2358: } s->multiline = true; } - goto st786; -tr2359: + goto st795; +tr2370: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -60378,22 +60484,22 @@ tr2359: } s->multiline = false; } - goto st786; -tr2360: + goto st795; +tr2371: { s->line_counter++; } - goto st786; -tr2356: + goto st795; +tr2367: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st786; -st786: + goto st795; +st795: if ( ++p == pe ) - goto _test_eof786; -case 786: + goto _test_eof795; +case 795: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60411,30 +60517,30 @@ case 786: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st786; - case 32: goto st786; - case 40: goto tr2358; - case 41: goto tr2359; - case 2058: goto tr2360; - case 2107: goto st787; - case 2314: goto tr2362; - case 2363: goto tr2362; - case 2570: goto tr2363; - case 2619: goto tr2364; + case 9: goto st795; + case 32: goto st795; + case 40: goto tr2369; + case 41: goto tr2370; + case 2058: goto tr2371; + case 2107: goto st796; + case 2314: goto tr2373; + case 2363: goto tr2373; + case 2570: goto tr2374; + case 2619: goto tr2375; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2353; + goto tr2364; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2353; + goto tr2364; } else - goto tr2353; - goto tr2349; -st787: + goto tr2364; + goto tr2360; +st796: if ( ++p == pe ) - goto _test_eof787; -case 787: + goto _test_eof796; +case 796: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -60454,32 +60560,32 @@ case 787: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2360; + goto tr2371; if ( 896 <= _widec && _widec <= 1151 ) - goto st787; - goto tr2349; -tr2362: + goto st796; + goto tr2360; +tr2373: { p--; {cs = stack[--top];goto _again;} } - goto st1170; -st1170: + goto st1179; +st1179: if ( ++p == pe ) - goto _test_eof1170; -case 1170: + goto _test_eof1179; +case 1179: goto st0; -tr2363: +tr2374: { s->line_counter++; } { p--; {cs = stack[--top];goto _again;} } - goto st1171; -st1171: + goto st1180; +st1180: if ( ++p == pe ) - goto _test_eof1171; -case 1171: + goto _test_eof1180; +case 1180: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60497,35 +60603,35 @@ case 1171: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st786; - case 32: goto st786; - case 40: goto tr2358; - case 41: goto tr2359; - case 2058: goto tr2360; - case 2107: goto st787; - case 2314: goto tr2362; - case 2363: goto tr2362; - case 2570: goto tr2363; - case 2619: goto tr2364; + case 9: goto st795; + case 32: goto st795; + case 40: goto tr2369; + case 41: goto tr2370; + case 2058: goto tr2371; + case 2107: goto st796; + case 2314: goto tr2373; + case 2363: goto tr2373; + case 2570: goto tr2374; + case 2619: goto tr2375; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2353; + goto tr2364; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2353; + goto tr2364; } else - goto tr2353; - goto tr2349; -tr2364: + goto tr2364; + goto tr2360; +tr2375: { p--; {cs = stack[--top];goto _again;} } - goto st1172; -st1172: + goto st1181; +st1181: if ( ++p == pe ) - goto _test_eof1172; -case 1172: + goto _test_eof1181; +case 1181: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -60545,11 +60651,11 @@ case 1172: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2360; + goto tr2371; if ( 896 <= _widec && _widec <= 1151 ) - goto st787; - goto tr2349; -tr2348: + goto st796; + goto tr2360; +tr2359: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60559,11 +60665,11 @@ tr2348: p--; {goto st261;} } } - goto st788; -st788: + goto st797; +st797: if ( ++p == pe ) - goto _test_eof788; -case 788: + goto _test_eof797; +case 797: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -60583,14 +60689,14 @@ case 788: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2354; + goto tr2365; if ( 896 <= _widec && _widec <= 1151 ) - goto st788; + goto st797; goto tr71; -st789: +st798: if ( ++p == pe ) - goto _test_eof789; -case 789: + goto _test_eof798; +case 798: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -60610,11 +60716,11 @@ case 789: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2340; + goto tr2351; if ( 896 <= _widec && _widec <= 1151 ) - goto st789; + goto st798; goto tr71; -tr2330: +tr2341: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -60624,11 +60730,11 @@ tr2330: p--; {goto st261;} } } - goto st790; -st790: + goto st799; +st799: if ( ++p == pe ) - goto _test_eof790; -case 790: + goto _test_eof799; +case 799: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -60648,18 +60754,18 @@ case 790: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2335; + goto tr2346; if ( 896 <= _widec && _widec <= 1151 ) - goto st790; + goto st799; goto tr71; -st791: +st800: if ( ++p == pe ) - goto _test_eof791; -case 791: + goto _test_eof800; +case 800: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2365; - goto tr1746; -tr2365: + goto tr2376; + goto tr1757; +tr2376: { s->number64 = 0; } @@ -60677,8 +60783,8 @@ tr2365: p--; {goto st261;} } } - goto st792; -tr2369: + goto st801; +tr2380: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -60693,11 +60799,11 @@ tr2369: p--; {goto st261;} } } - goto st792; -st792: + goto st801; +st801: if ( ++p == pe ) - goto _test_eof792; -case 792: + goto _test_eof801; +case 801: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60711,17 +60817,17 @@ case 792: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2366; - case 32: goto tr2366; - case 40: goto tr2367; - case 41: goto tr2368; - case 1034: goto tr2370; - case 1083: goto tr2371; + case 9: goto tr2377; + case 32: goto tr2377; + case 40: goto tr2378; + case 41: goto tr2379; + case 1034: goto tr2381; + case 1083: goto tr2382; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2369; - goto tr1746; -tr2373: + goto tr2380; + goto tr1757; +tr2384: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -60729,8 +60835,8 @@ tr2373: } s->multiline = true; } - goto st793; -tr2374: + goto st802; +tr2385: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -60738,13 +60844,13 @@ tr2374: } s->multiline = false; } - goto st793; -tr2376: + goto st802; +tr2387: { s->line_counter++; } - goto st793; -tr2366: + goto st802; +tr2377: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60754,8 +60860,8 @@ tr2366: p--; {goto st261;} } } - goto st793; -tr2367: + goto st802; +tr2378: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60772,8 +60878,8 @@ tr2367: } s->multiline = true; } - goto st793; -tr2368: + goto st802; +tr2379: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60790,8 +60896,8 @@ tr2368: } s->multiline = false; } - goto st793; -tr2370: + goto st802; +tr2381: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60804,11 +60910,11 @@ tr2370: { s->line_counter++; } - goto st793; -st793: + goto st802; +st802: if ( ++p == pe ) - goto _test_eof793; -case 793: + goto _test_eof802; +case 802: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60822,17 +60928,17 @@ case 793: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st793; - case 32: goto st793; - case 40: goto tr2373; - case 41: goto tr2374; - case 1034: goto tr2376; - case 1083: goto st800; + case 9: goto st802; + case 32: goto st802; + case 40: goto tr2384; + case 41: goto tr2385; + case 1034: goto tr2387; + case 1083: goto st809; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2375; - goto tr1746; -tr2375: + goto tr2386; + goto tr1757; +tr2386: { s->number64 = 0; } @@ -60850,8 +60956,8 @@ tr2375: p--; {goto st261;} } } - goto st794; -tr2381: + goto st803; +tr2392: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -60866,11 +60972,11 @@ tr2381: p--; {goto st261;} } } - goto st794; -st794: + goto st803; +st803: if ( ++p == pe ) - goto _test_eof794; -case 794: + goto _test_eof803; +case 803: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60884,17 +60990,17 @@ case 794: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2378; - case 32: goto tr2378; - case 40: goto tr2379; - case 41: goto tr2380; - case 1034: goto tr2382; - case 1083: goto tr2383; + case 9: goto tr2389; + case 32: goto tr2389; + case 40: goto tr2390; + case 41: goto tr2391; + case 1034: goto tr2393; + case 1083: goto tr2394; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2381; - goto tr1746; -tr2385: + goto tr2392; + goto tr1757; +tr2396: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -60902,8 +61008,8 @@ tr2385: } s->multiline = true; } - goto st795; -tr2386: + goto st804; +tr2397: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -60911,13 +61017,13 @@ tr2386: } s->multiline = false; } - goto st795; -tr2388: + goto st804; +tr2399: { s->line_counter++; } - goto st795; -tr2378: + goto st804; +tr2389: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60927,8 +61033,8 @@ tr2378: p--; {goto st261;} } } - goto st795; -tr2379: + goto st804; +tr2390: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60945,8 +61051,8 @@ tr2379: } s->multiline = true; } - goto st795; -tr2380: + goto st804; +tr2391: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60963,8 +61069,8 @@ tr2380: } s->multiline = false; } - goto st795; -tr2382: + goto st804; +tr2393: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -60977,11 +61083,11 @@ tr2382: { s->line_counter++; } - goto st795; -st795: + goto st804; +st804: if ( ++p == pe ) - goto _test_eof795; -case 795: + goto _test_eof804; +case 804: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -60995,23 +61101,23 @@ case 795: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st795; - case 32: goto st795; - case 40: goto tr2385; - case 41: goto tr2386; - case 1034: goto tr2388; - case 1083: goto st799; + case 9: goto st804; + case 32: goto st804; + case 40: goto tr2396; + case 41: goto tr2397; + case 1034: goto tr2399; + case 1083: goto st808; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2387; + goto tr2398; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2387; + goto tr2398; } else - goto tr2387; - goto tr2349; -tr2387: + goto tr2398; + goto tr2360; +tr2398: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -61020,21 +61126,21 @@ tr2387: p--; {goto st261;} } } - goto st796; -st796: + goto st805; +st805: if ( ++p == pe ) - goto _test_eof796; -case 796: + goto _test_eof805; +case 805: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2390; + goto tr2401; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr2390; + goto tr2401; } else - goto tr2390; - goto tr2349; -tr2392: + goto tr2401; + goto tr2360; +tr2403: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -61042,8 +61148,8 @@ tr2392: } s->multiline = true; } - goto st797; -tr2393: + goto st806; +tr2404: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -61051,22 +61157,22 @@ tr2393: } s->multiline = false; } - goto st797; -tr2394: + goto st806; +tr2405: { s->line_counter++; } - goto st797; -tr2390: + goto st806; +tr2401: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st797; -st797: + goto st806; +st806: if ( ++p == pe ) - goto _test_eof797; -case 797: + goto _test_eof806; +case 806: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61084,30 +61190,30 @@ case 797: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st797; - case 32: goto st797; - case 40: goto tr2392; - case 41: goto tr2393; - case 2058: goto tr2394; - case 2107: goto st798; - case 2314: goto tr2396; - case 2363: goto tr2396; - case 2570: goto tr2397; - case 2619: goto tr2398; + case 9: goto st806; + case 32: goto st806; + case 40: goto tr2403; + case 41: goto tr2404; + case 2058: goto tr2405; + case 2107: goto st807; + case 2314: goto tr2407; + case 2363: goto tr2407; + case 2570: goto tr2408; + case 2619: goto tr2409; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2387; + goto tr2398; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2387; + goto tr2398; } else - goto tr2387; - goto tr2349; -st798: + goto tr2398; + goto tr2360; +st807: if ( ++p == pe ) - goto _test_eof798; -case 798: + goto _test_eof807; +case 807: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -61127,32 +61233,32 @@ case 798: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2394; + goto tr2405; if ( 896 <= _widec && _widec <= 1151 ) - goto st798; - goto tr2349; -tr2396: + goto st807; + goto tr2360; +tr2407: { p--; {cs = stack[--top];goto _again;} } - goto st1173; -st1173: + goto st1182; +st1182: if ( ++p == pe ) - goto _test_eof1173; -case 1173: + goto _test_eof1182; +case 1182: goto st0; -tr2397: +tr2408: { s->line_counter++; } { p--; {cs = stack[--top];goto _again;} } - goto st1174; -st1174: + goto st1183; +st1183: if ( ++p == pe ) - goto _test_eof1174; -case 1174: + goto _test_eof1183; +case 1183: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61170,35 +61276,35 @@ case 1174: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st797; - case 32: goto st797; - case 40: goto tr2392; - case 41: goto tr2393; - case 2058: goto tr2394; - case 2107: goto st798; - case 2314: goto tr2396; - case 2363: goto tr2396; - case 2570: goto tr2397; - case 2619: goto tr2398; + case 9: goto st806; + case 32: goto st806; + case 40: goto tr2403; + case 41: goto tr2404; + case 2058: goto tr2405; + case 2107: goto st807; + case 2314: goto tr2407; + case 2363: goto tr2407; + case 2570: goto tr2408; + case 2619: goto tr2409; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2387; + goto tr2398; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2387; + goto tr2398; } else - goto tr2387; - goto tr2349; -tr2398: + goto tr2398; + goto tr2360; +tr2409: { p--; {cs = stack[--top];goto _again;} } - goto st1175; -st1175: + goto st1184; +st1184: if ( ++p == pe ) - goto _test_eof1175; -case 1175: + goto _test_eof1184; +case 1184: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -61218,11 +61324,11 @@ case 1175: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2394; + goto tr2405; if ( 896 <= _widec && _widec <= 1151 ) - goto st798; - goto tr2349; -tr2383: + goto st807; + goto tr2360; +tr2394: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61232,11 +61338,11 @@ tr2383: p--; {goto st261;} } } - goto st799; -st799: + goto st808; +st808: if ( ++p == pe ) - goto _test_eof799; -case 799: + goto _test_eof808; +case 808: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -61256,11 +61362,11 @@ case 799: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2388; + goto tr2399; if ( 896 <= _widec && _widec <= 1151 ) - goto st799; + goto st808; goto tr71; -tr2371: +tr2382: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61270,11 +61376,11 @@ tr2371: p--; {goto st261;} } } - goto st800; -st800: + goto st809; +st809: if ( ++p == pe ) - goto _test_eof800; -case 800: + goto _test_eof809; +case 809: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -61294,18 +61400,18 @@ case 800: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2376; + goto tr2387; if ( 896 <= _widec && _widec <= 1151 ) - goto st800; + goto st809; goto tr71; -st801: +st810: if ( ++p == pe ) - goto _test_eof801; -case 801: + goto _test_eof810; +case 810: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2399; - goto tr1746; -tr2399: + goto tr2410; + goto tr1757; +tr2410: { s->number64 = 0; } @@ -61323,8 +61429,8 @@ tr2399: p--; {goto st261;} } } - goto st802; -tr2403: + goto st811; +tr2414: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -61339,11 +61445,11 @@ tr2403: p--; {goto st261;} } } - goto st802; -st802: + goto st811; +st811: if ( ++p == pe ) - goto _test_eof802; -case 802: + goto _test_eof811; +case 811: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61357,17 +61463,17 @@ case 802: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2400; - case 32: goto tr2400; - case 40: goto tr2401; - case 41: goto tr2402; - case 1034: goto tr2404; - case 1083: goto tr2405; + case 9: goto tr2411; + case 32: goto tr2411; + case 40: goto tr2412; + case 41: goto tr2413; + case 1034: goto tr2415; + case 1083: goto tr2416; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2403; - goto tr1746; -tr2408: + goto tr2414; + goto tr1757; +tr2419: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -61375,8 +61481,8 @@ tr2408: } s->multiline = true; } - goto st803; -tr2409: + goto st812; +tr2420: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -61384,13 +61490,13 @@ tr2409: } s->multiline = false; } - goto st803; -tr2414: + goto st812; +tr2425: { s->line_counter++; } - goto st803; -tr2400: + goto st812; +tr2411: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61400,8 +61506,8 @@ tr2400: p--; {goto st261;} } } - goto st803; -tr2401: + goto st812; +tr2412: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61418,8 +61524,8 @@ tr2401: } s->multiline = true; } - goto st803; -tr2402: + goto st812; +tr2413: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61436,8 +61542,8 @@ tr2402: } s->multiline = false; } - goto st803; -tr2404: + goto st812; +tr2415: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61450,11 +61556,11 @@ tr2404: { s->line_counter++; } - goto st803; -st803: + goto st812; +st812: if ( ++p == pe ) - goto _test_eof803; -case 803: + goto _test_eof812; +case 812: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61468,27 +61574,27 @@ case 803: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st803; - case 32: goto st803; - case 40: goto tr2408; - case 41: goto tr2409; - case 48: goto tr2410; - case 49: goto tr2411; - case 50: goto tr2412; - case 51: goto tr2413; - case 1034: goto tr2414; - case 1083: goto st839; - } - goto tr2406; -tr2410: + case 9: goto st812; + case 32: goto st812; + case 40: goto tr2419; + case 41: goto tr2420; + case 48: goto tr2421; + case 49: goto tr2422; + case 50: goto tr2423; + case 51: goto tr2424; + case 1034: goto tr2425; + case 1083: goto st848; + } + goto tr2417; +tr2421: { *(rdata_tail++) = 0; } - goto st804; -st804: + goto st813; +st813: if ( ++p == pe ) - goto _test_eof804; -case 804: + goto _test_eof813; +case 813: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61502,15 +61608,15 @@ case 804: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st805; - case 32: goto st805; - case 40: goto tr2417; - case 41: goto tr2418; - case 1034: goto tr2419; - case 1083: goto st817; - } - goto tr2406; -tr2417: + case 9: goto st814; + case 32: goto st814; + case 40: goto tr2428; + case 41: goto tr2429; + case 1034: goto tr2430; + case 1083: goto st826; + } + goto tr2417; +tr2428: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -61518,8 +61624,8 @@ tr2417: } s->multiline = true; } - goto st805; -tr2418: + goto st814; +tr2429: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -61527,16 +61633,16 @@ tr2418: } s->multiline = false; } - goto st805; -tr2419: + goto st814; +tr2430: { s->line_counter++; } - goto st805; -st805: + goto st814; +st814: if ( ++p == pe ) - goto _test_eof805; -case 805: + goto _test_eof814; +case 814: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61550,17 +61656,17 @@ case 805: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st805; - case 32: goto st805; - case 40: goto tr2417; - case 41: goto tr2418; - case 1034: goto tr2419; - case 1083: goto st817; + case 9: goto st814; + case 32: goto st814; + case 40: goto tr2428; + case 41: goto tr2429; + case 1034: goto tr2430; + case 1083: goto st826; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2422; - goto tr2421; -tr2422: + goto tr2433; + goto tr2432; +tr2433: { s->number64 = 0; } @@ -61578,8 +61684,8 @@ tr2422: p--; {goto st261;} } } - goto st806; -tr2426: + goto st815; +tr2437: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -61594,11 +61700,11 @@ tr2426: p--; {goto st261;} } } - goto st806; -st806: + goto st815; +st815: if ( ++p == pe ) - goto _test_eof806; -case 806: + goto _test_eof815; +case 815: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61612,17 +61718,17 @@ case 806: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2423; - case 32: goto tr2423; - case 40: goto tr2424; - case 41: goto tr2425; - case 1034: goto tr2427; - case 1083: goto tr2428; + case 9: goto tr2434; + case 32: goto tr2434; + case 40: goto tr2435; + case 41: goto tr2436; + case 1034: goto tr2438; + case 1083: goto tr2439; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2426; - goto tr2421; -tr2430: + goto tr2437; + goto tr2432; +tr2441: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -61630,8 +61736,8 @@ tr2430: } s->multiline = true; } - goto st807; -tr2431: + goto st816; +tr2442: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -61639,13 +61745,13 @@ tr2431: } s->multiline = false; } - goto st807; -tr2433: + goto st816; +tr2444: { s->line_counter++; } - goto st807; -tr2423: + goto st816; +tr2434: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61655,8 +61761,8 @@ tr2423: p--; {goto st261;} } } - goto st807; -tr2424: + goto st816; +tr2435: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61673,8 +61779,8 @@ tr2424: } s->multiline = true; } - goto st807; -tr2425: + goto st816; +tr2436: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61691,8 +61797,8 @@ tr2425: } s->multiline = false; } - goto st807; -tr2427: + goto st816; +tr2438: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -61705,11 +61811,11 @@ tr2427: { s->line_counter++; } - goto st807; -st807: + goto st816; +st816: if ( ++p == pe ) - goto _test_eof807; -case 807: + goto _test_eof816; +case 816: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -61723,19 +61829,19 @@ case 807: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st807; - case 32: goto st807; - case 40: goto tr2430; - case 41: goto tr2431; - case 46: goto st808; - case 1034: goto tr2433; - case 1083: goto st816; - } - goto tr2406; -st808: + case 9: goto st816; + case 32: goto st816; + case 40: goto tr2441; + case 41: goto tr2442; + case 46: goto st817; + case 1034: goto tr2444; + case 1083: goto st825; + } + goto tr2417; +st817: if ( ++p == pe ) - goto _test_eof808; -case 808: + goto _test_eof817; +case 817: _widec = (*p); if ( (*p) < 32 ) { if ( (*p) > 9 ) { @@ -61793,43 +61899,43 @@ case 808: s->number64 == 0 ) _widec += 512; } switch( _widec ) { - case 6153: goto st809; - case 6176: goto st809; - case 6184: goto tr2437; - case 6185: goto tr2438; - case 6409: goto st812; - case 6432: goto st812; - case 6440: goto tr2440; - case 6441: goto tr2441; - case 6665: goto st814; - case 6688: goto st814; - case 6696: goto tr2443; - case 6697: goto tr2444; - case 9482: goto tr2445; - case 9531: goto tr2445; - case 9738: goto tr2445; - case 9787: goto tr2445; - case 10250: goto tr2446; - case 10299: goto st811; - case 10506: goto tr2445; - case 10555: goto tr2445; - case 10762: goto tr2448; - case 10811: goto tr2449; - case 11274: goto tr2450; - case 11323: goto st813; - case 11530: goto tr2445; - case 11579: goto tr2445; - case 11786: goto tr2452; - case 11835: goto tr2453; - case 12298: goto tr2454; - case 12347: goto st815; - case 12554: goto tr2445; - case 12603: goto tr2445; - case 12810: goto tr2456; - case 12859: goto tr2457; - } - goto tr2435; -tr2437: + case 6153: goto st818; + case 6176: goto st818; + case 6184: goto tr2448; + case 6185: goto tr2449; + case 6409: goto st821; + case 6432: goto st821; + case 6440: goto tr2451; + case 6441: goto tr2452; + case 6665: goto st823; + case 6688: goto st823; + case 6696: goto tr2454; + case 6697: goto tr2455; + case 9482: goto tr2456; + case 9531: goto tr2456; + case 9738: goto tr2456; + case 9787: goto tr2456; + case 10250: goto tr2457; + case 10299: goto st820; + case 10506: goto tr2456; + case 10555: goto tr2456; + case 10762: goto tr2459; + case 10811: goto tr2460; + case 11274: goto tr2461; + case 11323: goto st822; + case 11530: goto tr2456; + case 11579: goto tr2456; + case 11786: goto tr2463; + case 11835: goto tr2464; + case 12298: goto tr2465; + case 12347: goto st824; + case 12554: goto tr2456; + case 12603: goto tr2456; + case 12810: goto tr2467; + case 12859: goto tr2468; + } + goto tr2446; +tr2448: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -61837,8 +61943,8 @@ tr2437: } s->multiline = true; } - goto st809; -tr2438: + goto st818; +tr2449: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -61846,18 +61952,18 @@ tr2438: } s->multiline = false; } - goto st809; -tr2446: + goto st818; +tr2457: { s->line_counter++; } - goto st809; -tr2562: + goto st818; +tr2573: { rdata_tail += s->dname_tmp_length; } - goto st809; -tr2563: + goto st818; +tr2574: { rdata_tail += s->dname_tmp_length; } @@ -61868,8 +61974,8 @@ tr2563: } s->multiline = true; } - goto st809; -tr2564: + goto st818; +tr2575: { rdata_tail += s->dname_tmp_length; } @@ -61880,16 +61986,16 @@ tr2564: } s->multiline = false; } - goto st809; -tr2572: + goto st818; +tr2583: { rdata_tail += s->dname_tmp_length; } { s->line_counter++; } - goto st809; -tr2481: + goto st818; +tr2492: { s->buffer[s->buffer_length] = 0; @@ -61902,8 +62008,8 @@ tr2481: memcpy(rdata_tail, &(addr4.s_addr), INET4_ADDR_LENGTH); rdata_tail += INET4_ADDR_LENGTH; } - goto st809; -tr2482: + goto st818; +tr2493: { s->buffer[s->buffer_length] = 0; @@ -61923,8 +62029,8 @@ tr2482: } s->multiline = true; } - goto st809; -tr2483: + goto st818; +tr2494: { s->buffer[s->buffer_length] = 0; @@ -61944,8 +62050,8 @@ tr2483: } s->multiline = false; } - goto st809; -tr2491: + goto st818; +tr2502: { s->buffer[s->buffer_length] = 0; @@ -61961,8 +62067,8 @@ tr2491: { s->line_counter++; } - goto st809; -tr2522: + goto st818; +tr2533: { s->buffer[s->buffer_length] = 0; @@ -61975,8 +62081,8 @@ tr2522: memcpy(rdata_tail, &(addr6.s6_addr), INET6_ADDR_LENGTH); rdata_tail += INET6_ADDR_LENGTH; } - goto st809; -tr2523: + goto st818; +tr2534: { s->buffer[s->buffer_length] = 0; @@ -61996,8 +62102,8 @@ tr2523: } s->multiline = true; } - goto st809; -tr2524: + goto st818; +tr2535: { s->buffer[s->buffer_length] = 0; @@ -62017,8 +62123,8 @@ tr2524: } s->multiline = false; } - goto st809; -tr2532: + goto st818; +tr2543: { s->buffer[s->buffer_length] = 0; @@ -62034,11 +62140,11 @@ tr2532: { s->line_counter++; } - goto st809; -st809: + goto st818; +st818: if ( ++p == pe ) - goto _test_eof809; -case 809: + goto _test_eof818; +case 818: _widec = (*p); if ( (*p) < 43 ) { if ( (*p) < 32 ) { @@ -62110,30 +62216,30 @@ case 809: s->number64 != 0 ) _widec += 256; } switch( _widec ) { - case 3081: goto st809; - case 3104: goto st809; - case 3112: goto tr2437; - case 3113: goto tr2438; - case 3115: goto tr2459; - case 4106: goto tr2446; - case 4155: goto st811; + case 3081: goto st818; + case 3104: goto st818; + case 3112: goto tr2448; + case 3113: goto tr2449; + case 3115: goto tr2470; + case 4106: goto tr2457; + case 4155: goto st820; } if ( _widec < 3137 ) { if ( 3119 <= _widec && _widec <= 3129 ) - goto tr2459; + goto tr2470; } else if ( _widec > 3162 ) { if ( 3169 <= _widec && _widec <= 3194 ) - goto tr2459; + goto tr2470; } else - goto tr2459; - goto tr2458; -tr2459: - { p--; {stack[top++] = 810; goto st322;} } - goto st810; -st810: + goto tr2470; + goto tr2469; +tr2470: + { p--; {stack[top++] = 819; goto st322;} } + goto st819; +st819: if ( ++p == pe ) - goto _test_eof810; -case 810: + goto _test_eof819; +case 819: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -62147,16 +62253,16 @@ case 810: !s->multiline ) _widec += 256; } switch( _widec ) { - case 1546: goto tr2445; - case 1595: goto tr2445; + case 1546: goto tr2456; + case 1595: goto tr2456; } - goto tr2458; -tr2445: + goto tr2469; +tr2456: { p--; {cs = stack[--top];goto _again;} } - goto st1176; -tr2490: + goto st1185; +tr2501: { s->buffer[s->buffer_length] = 0; @@ -62172,16 +62278,16 @@ tr2490: { p--; {cs = stack[--top];goto _again;} } - goto st1176; -tr2571: + goto st1185; +tr2582: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1176; -tr2531: + goto st1185; +tr2542: { s->buffer[s->buffer_length] = 0; @@ -62197,18 +62303,18 @@ tr2531: { p--; {cs = stack[--top];goto _again;} } - goto st1176; -st1176: + goto st1185; +st1185: if ( ++p == pe ) - goto _test_eof1176; -case 1176: + goto _test_eof1185; +case 1185: goto st0; -tr2573: +tr2584: { rdata_tail += s->dname_tmp_length; } - goto st811; -tr2492: + goto st820; +tr2503: { s->buffer[s->buffer_length] = 0; @@ -62221,8 +62327,8 @@ tr2492: memcpy(rdata_tail, &(addr4.s_addr), INET4_ADDR_LENGTH); rdata_tail += INET4_ADDR_LENGTH; } - goto st811; -tr2533: + goto st820; +tr2544: { s->buffer[s->buffer_length] = 0; @@ -62235,11 +62341,11 @@ tr2533: memcpy(rdata_tail, &(addr6.s6_addr), INET6_ADDR_LENGTH); rdata_tail += INET6_ADDR_LENGTH; } - goto st811; -st811: + goto st820; +st820: if ( ++p == pe ) - goto _test_eof811; -case 811: + goto _test_eof820; +case 820: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -62265,11 +62371,11 @@ case 811: s->number64 != 0 ) _widec += 512; } if ( _widec == 4106 ) - goto tr2446; + goto tr2457; if ( 3968 <= _widec && _widec <= 4223 ) - goto st811; - goto tr2458; -tr2440: + goto st820; + goto tr2469; +tr2451: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -62277,8 +62383,8 @@ tr2440: } s->multiline = true; } - goto st812; -tr2441: + goto st821; +tr2452: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -62286,18 +62392,18 @@ tr2441: } s->multiline = false; } - goto st812; -tr2450: + goto st821; +tr2461: { s->line_counter++; } - goto st812; -tr2565: + goto st821; +tr2576: { rdata_tail += s->dname_tmp_length; } - goto st812; -tr2566: + goto st821; +tr2577: { rdata_tail += s->dname_tmp_length; } @@ -62308,8 +62414,8 @@ tr2566: } s->multiline = true; } - goto st812; -tr2567: + goto st821; +tr2578: { rdata_tail += s->dname_tmp_length; } @@ -62320,16 +62426,16 @@ tr2567: } s->multiline = false; } - goto st812; -tr2576: + goto st821; +tr2587: { rdata_tail += s->dname_tmp_length; } { s->line_counter++; } - goto st812; -tr2484: + goto st821; +tr2495: { s->buffer[s->buffer_length] = 0; @@ -62342,8 +62448,8 @@ tr2484: memcpy(rdata_tail, &(addr4.s_addr), INET4_ADDR_LENGTH); rdata_tail += INET4_ADDR_LENGTH; } - goto st812; -tr2485: + goto st821; +tr2496: { s->buffer[s->buffer_length] = 0; @@ -62363,8 +62469,8 @@ tr2485: } s->multiline = true; } - goto st812; -tr2486: + goto st821; +tr2497: { s->buffer[s->buffer_length] = 0; @@ -62384,8 +62490,8 @@ tr2486: } s->multiline = false; } - goto st812; -tr2495: + goto st821; +tr2506: { s->buffer[s->buffer_length] = 0; @@ -62401,8 +62507,8 @@ tr2495: { s->line_counter++; } - goto st812; -tr2525: + goto st821; +tr2536: { s->buffer[s->buffer_length] = 0; @@ -62415,8 +62521,8 @@ tr2525: memcpy(rdata_tail, &(addr6.s6_addr), INET6_ADDR_LENGTH); rdata_tail += INET6_ADDR_LENGTH; } - goto st812; -tr2526: + goto st821; +tr2537: { s->buffer[s->buffer_length] = 0; @@ -62436,8 +62542,8 @@ tr2526: } s->multiline = true; } - goto st812; -tr2527: + goto st821; +tr2538: { s->buffer[s->buffer_length] = 0; @@ -62457,8 +62563,8 @@ tr2527: } s->multiline = false; } - goto st812; -tr2536: + goto st821; +tr2547: { s->buffer[s->buffer_length] = 0; @@ -62474,11 +62580,11 @@ tr2536: { s->line_counter++; } - goto st812; -st812: + goto st821; +st821: if ( ++p == pe ) - goto _test_eof812; -case 812: + goto _test_eof821; +case 821: _widec = (*p); if ( (*p) < 32 ) { if ( (*p) > 9 ) { @@ -62524,28 +62630,28 @@ case 812: s->number64 == 0 ) _widec += 256; } switch( _widec ) { - case 4617: goto st812; - case 4640: goto st812; - case 4648: goto tr2440; - case 4649: goto tr2441; - case 13578: goto tr2445; - case 13627: goto tr2445; - case 13834: goto tr2445; - case 13883: goto tr2445; - case 14346: goto tr2450; - case 14395: goto st813; - case 14602: goto tr2445; - case 14651: goto tr2445; - case 14858: goto tr2452; - case 14907: goto tr2453; - } - goto tr2458; -tr2577: + case 4617: goto st821; + case 4640: goto st821; + case 4648: goto tr2451; + case 4649: goto tr2452; + case 13578: goto tr2456; + case 13627: goto tr2456; + case 13834: goto tr2456; + case 13883: goto tr2456; + case 14346: goto tr2461; + case 14395: goto st822; + case 14602: goto tr2456; + case 14651: goto tr2456; + case 14858: goto tr2463; + case 14907: goto tr2464; + } + goto tr2469; +tr2588: { rdata_tail += s->dname_tmp_length; } - goto st813; -tr2496: + goto st822; +tr2507: { s->buffer[s->buffer_length] = 0; @@ -62558,8 +62664,8 @@ tr2496: memcpy(rdata_tail, &(addr4.s_addr), INET4_ADDR_LENGTH); rdata_tail += INET4_ADDR_LENGTH; } - goto st813; -tr2537: + goto st822; +tr2548: { s->buffer[s->buffer_length] = 0; @@ -62572,11 +62678,11 @@ tr2537: memcpy(rdata_tail, &(addr6.s6_addr), INET6_ADDR_LENGTH); rdata_tail += INET6_ADDR_LENGTH; } - goto st813; -st813: + goto st822; +st822: if ( ++p == pe ) - goto _test_eof813; -case 813: + goto _test_eof822; +case 822: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -62602,19 +62708,19 @@ case 813: s->number64 == 0 ) _widec += 512; } if ( _widec == 5642 ) - goto tr2450; + goto tr2461; if ( 5504 <= _widec && _widec <= 5759 ) - goto st813; - goto tr2458; -tr2452: + goto st822; + goto tr2469; +tr2463: { s->line_counter++; } { p--; {cs = stack[--top];goto _again;} } - goto st1177; -tr2497: + goto st1186; +tr2508: { s->buffer[s->buffer_length] = 0; @@ -62633,8 +62739,8 @@ tr2497: { p--; {cs = stack[--top];goto _again;} } - goto st1177; -tr2538: + goto st1186; +tr2549: { s->buffer[s->buffer_length] = 0; @@ -62653,8 +62759,8 @@ tr2538: { p--; {cs = stack[--top];goto _again;} } - goto st1177; -tr2578: + goto st1186; +tr2589: { rdata_tail += s->dname_tmp_length; } @@ -62664,11 +62770,11 @@ tr2578: { p--; {cs = stack[--top];goto _again;} } - goto st1177; -st1177: + goto st1186; +st1186: if ( ++p == pe ) - goto _test_eof1177; -case 1177: + goto _test_eof1186; +case 1186: _widec = (*p); if ( (*p) < 32 ) { if ( (*p) > 9 ) { @@ -62714,28 +62820,28 @@ case 1177: s->number64 == 0 ) _widec += 256; } switch( _widec ) { - case 4617: goto st812; - case 4640: goto st812; - case 4648: goto tr2440; - case 4649: goto tr2441; - case 13578: goto tr2445; - case 13627: goto tr2445; - case 13834: goto tr2445; - case 13883: goto tr2445; - case 14346: goto tr2450; - case 14395: goto st813; - case 14602: goto tr2445; - case 14651: goto tr2445; - case 14858: goto tr2452; - case 14907: goto tr2453; - } - goto tr2458; -tr2453: + case 4617: goto st821; + case 4640: goto st821; + case 4648: goto tr2451; + case 4649: goto tr2452; + case 13578: goto tr2456; + case 13627: goto tr2456; + case 13834: goto tr2456; + case 13883: goto tr2456; + case 14346: goto tr2461; + case 14395: goto st822; + case 14602: goto tr2456; + case 14651: goto tr2456; + case 14858: goto tr2463; + case 14907: goto tr2464; + } + goto tr2469; +tr2464: { p--; {cs = stack[--top];goto _again;} } - goto st1178; -tr2498: + goto st1187; +tr2509: { s->buffer[s->buffer_length] = 0; @@ -62751,16 +62857,16 @@ tr2498: { p--; {cs = stack[--top];goto _again;} } - goto st1178; -tr2579: + goto st1187; +tr2590: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1178; -tr2539: + goto st1187; +tr2550: { s->buffer[s->buffer_length] = 0; @@ -62776,11 +62882,11 @@ tr2539: { p--; {cs = stack[--top];goto _again;} } - goto st1178; -st1178: + goto st1187; +st1187: if ( ++p == pe ) - goto _test_eof1178; -case 1178: + goto _test_eof1187; +case 1187: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -62806,11 +62912,11 @@ case 1178: s->number64 == 0 ) _widec += 512; } if ( _widec == 5642 ) - goto tr2450; + goto tr2461; if ( 5504 <= _widec && _widec <= 5759 ) - goto st813; - goto tr2458; -tr2443: + goto st822; + goto tr2469; +tr2454: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -62818,8 +62924,8 @@ tr2443: } s->multiline = true; } - goto st814; -tr2444: + goto st823; +tr2455: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -62827,18 +62933,18 @@ tr2444: } s->multiline = false; } - goto st814; -tr2454: + goto st823; +tr2465: { s->line_counter++; } - goto st814; -tr2568: + goto st823; +tr2579: { rdata_tail += s->dname_tmp_length; } - goto st814; -tr2569: + goto st823; +tr2580: { rdata_tail += s->dname_tmp_length; } @@ -62849,8 +62955,8 @@ tr2569: } s->multiline = true; } - goto st814; -tr2570: + goto st823; +tr2581: { rdata_tail += s->dname_tmp_length; } @@ -62861,16 +62967,16 @@ tr2570: } s->multiline = false; } - goto st814; -tr2580: + goto st823; +tr2591: { rdata_tail += s->dname_tmp_length; } { s->line_counter++; } - goto st814; -tr2487: + goto st823; +tr2498: { s->buffer[s->buffer_length] = 0; @@ -62883,8 +62989,8 @@ tr2487: memcpy(rdata_tail, &(addr4.s_addr), INET4_ADDR_LENGTH); rdata_tail += INET4_ADDR_LENGTH; } - goto st814; -tr2488: + goto st823; +tr2499: { s->buffer[s->buffer_length] = 0; @@ -62904,8 +63010,8 @@ tr2488: } s->multiline = true; } - goto st814; -tr2489: + goto st823; +tr2500: { s->buffer[s->buffer_length] = 0; @@ -62925,8 +63031,8 @@ tr2489: } s->multiline = false; } - goto st814; -tr2499: + goto st823; +tr2510: { s->buffer[s->buffer_length] = 0; @@ -62942,8 +63048,8 @@ tr2499: { s->line_counter++; } - goto st814; -tr2528: + goto st823; +tr2539: { s->buffer[s->buffer_length] = 0; @@ -62956,8 +63062,8 @@ tr2528: memcpy(rdata_tail, &(addr6.s6_addr), INET6_ADDR_LENGTH); rdata_tail += INET6_ADDR_LENGTH; } - goto st814; -tr2529: + goto st823; +tr2540: { s->buffer[s->buffer_length] = 0; @@ -62977,8 +63083,8 @@ tr2529: } s->multiline = true; } - goto st814; -tr2530: + goto st823; +tr2541: { s->buffer[s->buffer_length] = 0; @@ -62998,8 +63104,8 @@ tr2530: } s->multiline = false; } - goto st814; -tr2540: + goto st823; +tr2551: { s->buffer[s->buffer_length] = 0; @@ -63015,11 +63121,11 @@ tr2540: { s->line_counter++; } - goto st814; -st814: + goto st823; +st823: if ( ++p == pe ) - goto _test_eof814; -case 814: + goto _test_eof823; +case 823: _widec = (*p); if ( (*p) < 43 ) { if ( (*p) < 32 ) { @@ -63107,60 +63213,60 @@ case 814: s->number64 != 0 ) _widec += 256; } switch( _widec ) { - case 3115: goto tr2459; - case 6153: goto st809; - case 6176: goto st809; - case 6184: goto tr2437; - case 6185: goto tr2438; - case 6409: goto st812; - case 6432: goto st812; - case 6440: goto tr2440; - case 6441: goto tr2441; - case 6665: goto st814; - case 6688: goto st814; - case 6696: goto tr2443; - case 6697: goto tr2444; - case 9482: goto tr2445; - case 9531: goto tr2445; - case 9738: goto tr2445; - case 9787: goto tr2445; - case 10250: goto tr2446; - case 10299: goto st811; - case 10506: goto tr2445; - case 10555: goto tr2445; - case 10762: goto tr2448; - case 10811: goto tr2449; - case 11274: goto tr2450; - case 11323: goto st813; - case 11530: goto tr2445; - case 11579: goto tr2445; - case 11786: goto tr2452; - case 11835: goto tr2453; - case 12298: goto tr2454; - case 12347: goto st815; - case 12554: goto tr2445; - case 12603: goto tr2445; - case 12810: goto tr2456; - case 12859: goto tr2457; + case 3115: goto tr2470; + case 6153: goto st818; + case 6176: goto st818; + case 6184: goto tr2448; + case 6185: goto tr2449; + case 6409: goto st821; + case 6432: goto st821; + case 6440: goto tr2451; + case 6441: goto tr2452; + case 6665: goto st823; + case 6688: goto st823; + case 6696: goto tr2454; + case 6697: goto tr2455; + case 9482: goto tr2456; + case 9531: goto tr2456; + case 9738: goto tr2456; + case 9787: goto tr2456; + case 10250: goto tr2457; + case 10299: goto st820; + case 10506: goto tr2456; + case 10555: goto tr2456; + case 10762: goto tr2459; + case 10811: goto tr2460; + case 11274: goto tr2461; + case 11323: goto st822; + case 11530: goto tr2456; + case 11579: goto tr2456; + case 11786: goto tr2463; + case 11835: goto tr2464; + case 12298: goto tr2465; + case 12347: goto st824; + case 12554: goto tr2456; + case 12603: goto tr2456; + case 12810: goto tr2467; + case 12859: goto tr2468; } if ( _widec < 3137 ) { if ( 3119 <= _widec && _widec <= 3129 ) - goto tr2459; + goto tr2470; } else if ( _widec > 3162 ) { if ( 3169 <= _widec && _widec <= 3194 ) - goto tr2459; + goto tr2470; } else - goto tr2459; - goto tr2458; -tr2448: + goto tr2470; + goto tr2469; +tr2459: { s->line_counter++; } { p--; {cs = stack[--top];goto _again;} } - goto st1179; -tr2493: + goto st1188; +tr2504: { s->buffer[s->buffer_length] = 0; @@ -63179,8 +63285,8 @@ tr2493: { p--; {cs = stack[--top];goto _again;} } - goto st1179; -tr2534: + goto st1188; +tr2545: { s->buffer[s->buffer_length] = 0; @@ -63199,8 +63305,8 @@ tr2534: { p--; {cs = stack[--top];goto _again;} } - goto st1179; -tr2574: + goto st1188; +tr2585: { rdata_tail += s->dname_tmp_length; } @@ -63210,11 +63316,11 @@ tr2574: { p--; {cs = stack[--top];goto _again;} } - goto st1179; -st1179: + goto st1188; +st1188: if ( ++p == pe ) - goto _test_eof1179; -case 1179: + goto _test_eof1188; +case 1188: _widec = (*p); if ( (*p) < 43 ) { if ( (*p) < 32 ) { @@ -63286,29 +63392,29 @@ case 1179: s->number64 != 0 ) _widec += 256; } switch( _widec ) { - case 3081: goto st809; - case 3104: goto st809; - case 3112: goto tr2437; - case 3113: goto tr2438; - case 3115: goto tr2459; - case 4106: goto tr2446; - case 4155: goto st811; + case 3081: goto st818; + case 3104: goto st818; + case 3112: goto tr2448; + case 3113: goto tr2449; + case 3115: goto tr2470; + case 4106: goto tr2457; + case 4155: goto st820; } if ( _widec < 3137 ) { if ( 3119 <= _widec && _widec <= 3129 ) - goto tr2459; + goto tr2470; } else if ( _widec > 3162 ) { if ( 3169 <= _widec && _widec <= 3194 ) - goto tr2459; + goto tr2470; } else - goto tr2459; - goto tr2458; -tr2449: + goto tr2470; + goto tr2469; +tr2460: { p--; {cs = stack[--top];goto _again;} } - goto st1180; -tr2494: + goto st1189; +tr2505: { s->buffer[s->buffer_length] = 0; @@ -63324,16 +63430,16 @@ tr2494: { p--; {cs = stack[--top];goto _again;} } - goto st1180; -tr2575: + goto st1189; +tr2586: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1180; -tr2535: + goto st1189; +tr2546: { s->buffer[s->buffer_length] = 0; @@ -63349,11 +63455,11 @@ tr2535: { p--; {cs = stack[--top];goto _again;} } - goto st1180; -st1180: + goto st1189; +st1189: if ( ++p == pe ) - goto _test_eof1180; -case 1180: + goto _test_eof1189; +case 1189: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -63379,16 +63485,16 @@ case 1180: s->number64 != 0 ) _widec += 512; } if ( _widec == 4106 ) - goto tr2446; + goto tr2457; if ( 3968 <= _widec && _widec <= 4223 ) - goto st811; - goto tr2458; -tr2581: + goto st820; + goto tr2469; +tr2592: { rdata_tail += s->dname_tmp_length; } - goto st815; -tr2500: + goto st824; +tr2511: { s->buffer[s->buffer_length] = 0; @@ -63401,8 +63507,8 @@ tr2500: memcpy(rdata_tail, &(addr4.s_addr), INET4_ADDR_LENGTH); rdata_tail += INET4_ADDR_LENGTH; } - goto st815; -tr2541: + goto st824; +tr2552: { s->buffer[s->buffer_length] = 0; @@ -63415,11 +63521,11 @@ tr2541: memcpy(rdata_tail, &(addr6.s6_addr), INET6_ADDR_LENGTH); rdata_tail += INET6_ADDR_LENGTH; } - goto st815; -st815: + goto st824; +st824: if ( ++p == pe ) - goto _test_eof815; -case 815: + goto _test_eof824; +case 824: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -63451,28 +63557,28 @@ case 815: s->number64 == 0 ) _widec += 1024; } switch( _widec ) { - case 7690: goto tr2446; - case 8202: goto tr2450; - case 8714: goto tr2454; + case 7690: goto tr2457; + case 8202: goto tr2461; + case 8714: goto tr2465; } if ( _widec < 8064 ) { if ( 7552 <= _widec && _widec <= 7807 ) - goto st811; + goto st820; } else if ( _widec > 8319 ) { if ( 8576 <= _widec && _widec <= 8831 ) - goto st815; + goto st824; } else - goto st813; - goto tr2458; -tr2456: + goto st822; + goto tr2469; +tr2467: { s->line_counter++; } { p--; {cs = stack[--top];goto _again;} } - goto st1181; -tr2501: + goto st1190; +tr2512: { s->buffer[s->buffer_length] = 0; @@ -63491,8 +63597,8 @@ tr2501: { p--; {cs = stack[--top];goto _again;} } - goto st1181; -tr2542: + goto st1190; +tr2553: { s->buffer[s->buffer_length] = 0; @@ -63511,8 +63617,8 @@ tr2542: { p--; {cs = stack[--top];goto _again;} } - goto st1181; -tr2582: + goto st1190; +tr2593: { rdata_tail += s->dname_tmp_length; } @@ -63522,11 +63628,11 @@ tr2582: { p--; {cs = stack[--top];goto _again;} } - goto st1181; -st1181: + goto st1190; +st1190: if ( ++p == pe ) - goto _test_eof1181; -case 1181: + goto _test_eof1190; +case 1190: _widec = (*p); if ( (*p) < 43 ) { if ( (*p) < 32 ) { @@ -63614,57 +63720,57 @@ case 1181: s->number64 != 0 ) _widec += 256; } switch( _widec ) { - case 3115: goto tr2459; - case 6153: goto st809; - case 6176: goto st809; - case 6184: goto tr2437; - case 6185: goto tr2438; - case 6409: goto st812; - case 6432: goto st812; - case 6440: goto tr2440; - case 6441: goto tr2441; - case 6665: goto st814; - case 6688: goto st814; - case 6696: goto tr2443; - case 6697: goto tr2444; - case 9482: goto tr2445; - case 9531: goto tr2445; - case 9738: goto tr2445; - case 9787: goto tr2445; - case 10250: goto tr2446; - case 10299: goto st811; - case 10506: goto tr2445; - case 10555: goto tr2445; - case 10762: goto tr2448; - case 10811: goto tr2449; - case 11274: goto tr2450; - case 11323: goto st813; - case 11530: goto tr2445; - case 11579: goto tr2445; - case 11786: goto tr2452; - case 11835: goto tr2453; - case 12298: goto tr2454; - case 12347: goto st815; - case 12554: goto tr2445; - case 12603: goto tr2445; - case 12810: goto tr2456; - case 12859: goto tr2457; + case 3115: goto tr2470; + case 6153: goto st818; + case 6176: goto st818; + case 6184: goto tr2448; + case 6185: goto tr2449; + case 6409: goto st821; + case 6432: goto st821; + case 6440: goto tr2451; + case 6441: goto tr2452; + case 6665: goto st823; + case 6688: goto st823; + case 6696: goto tr2454; + case 6697: goto tr2455; + case 9482: goto tr2456; + case 9531: goto tr2456; + case 9738: goto tr2456; + case 9787: goto tr2456; + case 10250: goto tr2457; + case 10299: goto st820; + case 10506: goto tr2456; + case 10555: goto tr2456; + case 10762: goto tr2459; + case 10811: goto tr2460; + case 11274: goto tr2461; + case 11323: goto st822; + case 11530: goto tr2456; + case 11579: goto tr2456; + case 11786: goto tr2463; + case 11835: goto tr2464; + case 12298: goto tr2465; + case 12347: goto st824; + case 12554: goto tr2456; + case 12603: goto tr2456; + case 12810: goto tr2467; + case 12859: goto tr2468; } if ( _widec < 3137 ) { if ( 3119 <= _widec && _widec <= 3129 ) - goto tr2459; + goto tr2470; } else if ( _widec > 3162 ) { if ( 3169 <= _widec && _widec <= 3194 ) - goto tr2459; + goto tr2470; } else - goto tr2459; - goto tr2458; -tr2457: + goto tr2470; + goto tr2469; +tr2468: { p--; {cs = stack[--top];goto _again;} } - goto st1182; -tr2502: + goto st1191; +tr2513: { s->buffer[s->buffer_length] = 0; @@ -63680,16 +63786,16 @@ tr2502: { p--; {cs = stack[--top];goto _again;} } - goto st1182; -tr2583: + goto st1191; +tr2594: { rdata_tail += s->dname_tmp_length; } { p--; {cs = stack[--top];goto _again;} } - goto st1182; -tr2543: + goto st1191; +tr2554: { s->buffer[s->buffer_length] = 0; @@ -63705,11 +63811,11 @@ tr2543: { p--; {cs = stack[--top];goto _again;} } - goto st1182; -st1182: + goto st1191; +st1191: if ( ++p == pe ) - goto _test_eof1182; -case 1182: + goto _test_eof1191; +case 1191: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -63741,20 +63847,20 @@ case 1182: s->number64 == 0 ) _widec += 1024; } switch( _widec ) { - case 7690: goto tr2446; - case 8202: goto tr2450; - case 8714: goto tr2454; + case 7690: goto tr2457; + case 8202: goto tr2461; + case 8714: goto tr2465; } if ( _widec < 8064 ) { if ( 7552 <= _widec && _widec <= 7807 ) - goto st811; + goto st820; } else if ( _widec > 8319 ) { if ( 8576 <= _widec && _widec <= 8831 ) - goto st815; + goto st824; } else - goto st813; - goto tr2458; -tr2428: + goto st822; + goto tr2469; +tr2439: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -63764,11 +63870,11 @@ tr2428: p--; {goto st261;} } } - goto st816; -st816: + goto st825; +st825: if ( ++p == pe ) - goto _test_eof816; -case 816: + goto _test_eof825; +case 825: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -63788,14 +63894,14 @@ case 816: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2433; + goto tr2444; if ( 896 <= _widec && _widec <= 1151 ) - goto st816; - goto tr2406; -st817: + goto st825; + goto tr2417; +st826: if ( ++p == pe ) - goto _test_eof817; -case 817: + goto _test_eof826; +case 826: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -63815,19 +63921,19 @@ case 817: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2419; + goto tr2430; if ( 896 <= _widec && _widec <= 1151 ) - goto st817; - goto tr2406; -tr2411: + goto st826; + goto tr2417; +tr2422: { *(rdata_tail++) = 1; } - goto st818; -st818: + goto st827; +st827: if ( ++p == pe ) - goto _test_eof818; -case 818: + goto _test_eof827; +case 827: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -63841,15 +63947,15 @@ case 818: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st819; - case 32: goto st819; - case 40: goto tr2461; - case 41: goto tr2462; - case 1034: goto tr2463; - case 1083: goto st824; - } - goto tr2406; -tr2461: + case 9: goto st828; + case 32: goto st828; + case 40: goto tr2472; + case 41: goto tr2473; + case 1034: goto tr2474; + case 1083: goto st833; + } + goto tr2417; +tr2472: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -63857,8 +63963,8 @@ tr2461: } s->multiline = true; } - goto st819; -tr2462: + goto st828; +tr2473: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -63866,16 +63972,16 @@ tr2462: } s->multiline = false; } - goto st819; -tr2463: + goto st828; +tr2474: { s->line_counter++; } - goto st819; -st819: + goto st828; +st828: if ( ++p == pe ) - goto _test_eof819; -case 819: + goto _test_eof828; +case 828: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -63889,17 +63995,17 @@ case 819: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st819; - case 32: goto st819; - case 40: goto tr2461; - case 41: goto tr2462; - case 1034: goto tr2463; - case 1083: goto st824; + case 9: goto st828; + case 32: goto st828; + case 40: goto tr2472; + case 41: goto tr2473; + case 1034: goto tr2474; + case 1083: goto st833; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2465; - goto tr2421; -tr2465: + goto tr2476; + goto tr2432; +tr2476: { s->number64 = 0; } @@ -63917,8 +64023,8 @@ tr2465: p--; {goto st261;} } } - goto st820; -tr2469: + goto st829; +tr2480: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -63933,11 +64039,11 @@ tr2469: p--; {goto st261;} } } - goto st820; -st820: + goto st829; +st829: if ( ++p == pe ) - goto _test_eof820; -case 820: + goto _test_eof829; +case 829: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -63951,17 +64057,17 @@ case 820: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2466; - case 32: goto tr2466; - case 40: goto tr2467; - case 41: goto tr2468; - case 1034: goto tr2470; - case 1083: goto tr2471; + case 9: goto tr2477; + case 32: goto tr2477; + case 40: goto tr2478; + case 41: goto tr2479; + case 1034: goto tr2481; + case 1083: goto tr2482; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2469; - goto tr2421; -tr2474: + goto tr2480; + goto tr2432; +tr2485: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -63969,8 +64075,8 @@ tr2474: } s->multiline = true; } - goto st821; -tr2475: + goto st830; +tr2486: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -63978,13 +64084,13 @@ tr2475: } s->multiline = false; } - goto st821; -tr2477: + goto st830; +tr2488: { s->line_counter++; } - goto st821; -tr2466: + goto st830; +tr2477: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -63994,8 +64100,8 @@ tr2466: p--; {goto st261;} } } - goto st821; -tr2467: + goto st830; +tr2478: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64012,8 +64118,8 @@ tr2467: } s->multiline = true; } - goto st821; -tr2468: + goto st830; +tr2479: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64030,8 +64136,8 @@ tr2468: } s->multiline = false; } - goto st821; -tr2470: + goto st830; +tr2481: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64044,11 +64150,11 @@ tr2470: { s->line_counter++; } - goto st821; -st821: + goto st830; +st830: if ( ++p == pe ) - goto _test_eof821; -case 821: + goto _test_eof830; +case 830: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64062,18 +64168,18 @@ case 821: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st821; - case 32: goto st821; - case 40: goto tr2474; - case 41: goto tr2475; - case 46: goto tr2476; - case 1034: goto tr2477; - case 1083: goto st823; + case 9: goto st830; + case 32: goto st830; + case 40: goto tr2485; + case 41: goto tr2486; + case 46: goto tr2487; + case 1034: goto tr2488; + case 1083: goto st832; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2476; - goto tr2472; -tr2476: + goto tr2487; + goto tr2483; +tr2487: { s->buffer_length = 0; } @@ -64086,8 +64192,8 @@ tr2476: p--; {goto st261;} } } - goto st822; -tr2480: + goto st831; +tr2491: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -64097,11 +64203,11 @@ tr2480: p--; {goto st261;} } } - goto st822; -st822: + goto st831; +st831: if ( ++p == pe ) - goto _test_eof822; -case 822: + goto _test_eof831; +case 831: _widec = (*p); if ( (*p) < 32 ) { if ( (*p) > 9 ) { @@ -64159,46 +64265,46 @@ case 822: s->number64 == 0 ) _widec += 512; } switch( _widec ) { - case 46: goto tr2480; - case 6153: goto tr2481; - case 6176: goto tr2481; - case 6184: goto tr2482; - case 6185: goto tr2483; - case 6409: goto tr2484; - case 6432: goto tr2484; - case 6440: goto tr2485; - case 6441: goto tr2486; - case 6665: goto tr2487; - case 6688: goto tr2487; - case 6696: goto tr2488; - case 6697: goto tr2489; - case 9482: goto tr2490; - case 9531: goto tr2490; - case 9738: goto tr2490; - case 9787: goto tr2490; - case 10250: goto tr2491; - case 10299: goto tr2492; - case 10506: goto tr2490; - case 10555: goto tr2490; - case 10762: goto tr2493; - case 10811: goto tr2494; - case 11274: goto tr2495; - case 11323: goto tr2496; - case 11530: goto tr2490; - case 11579: goto tr2490; - case 11786: goto tr2497; - case 11835: goto tr2498; - case 12298: goto tr2499; - case 12347: goto tr2500; - case 12554: goto tr2490; - case 12603: goto tr2490; - case 12810: goto tr2501; - case 12859: goto tr2502; + case 46: goto tr2491; + case 6153: goto tr2492; + case 6176: goto tr2492; + case 6184: goto tr2493; + case 6185: goto tr2494; + case 6409: goto tr2495; + case 6432: goto tr2495; + case 6440: goto tr2496; + case 6441: goto tr2497; + case 6665: goto tr2498; + case 6688: goto tr2498; + case 6696: goto tr2499; + case 6697: goto tr2500; + case 9482: goto tr2501; + case 9531: goto tr2501; + case 9738: goto tr2501; + case 9787: goto tr2501; + case 10250: goto tr2502; + case 10299: goto tr2503; + case 10506: goto tr2501; + case 10555: goto tr2501; + case 10762: goto tr2504; + case 10811: goto tr2505; + case 11274: goto tr2506; + case 11323: goto tr2507; + case 11530: goto tr2501; + case 11579: goto tr2501; + case 11786: goto tr2508; + case 11835: goto tr2509; + case 12298: goto tr2510; + case 12347: goto tr2511; + case 12554: goto tr2501; + case 12603: goto tr2501; + case 12810: goto tr2512; + case 12859: goto tr2513; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2480; - goto tr2479; -tr2471: + goto tr2491; + goto tr2490; +tr2482: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64208,11 +64314,11 @@ tr2471: p--; {goto st261;} } } - goto st823; -st823: + goto st832; +st832: if ( ++p == pe ) - goto _test_eof823; -case 823: + goto _test_eof832; +case 832: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -64232,14 +64338,14 @@ case 823: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2477; + goto tr2488; if ( 896 <= _widec && _widec <= 1151 ) - goto st823; - goto tr2406; -st824: + goto st832; + goto tr2417; +st833: if ( ++p == pe ) - goto _test_eof824; -case 824: + goto _test_eof833; +case 833: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -64259,19 +64365,19 @@ case 824: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2463; + goto tr2474; if ( 896 <= _widec && _widec <= 1151 ) - goto st824; - goto tr2406; -tr2412: + goto st833; + goto tr2417; +tr2423: { *(rdata_tail++) = 2; } - goto st825; -st825: + goto st834; +st834: if ( ++p == pe ) - goto _test_eof825; -case 825: + goto _test_eof834; +case 834: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64285,15 +64391,15 @@ case 825: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st826; - case 32: goto st826; - case 40: goto tr2504; - case 41: goto tr2505; - case 1034: goto tr2506; - case 1083: goto st831; - } - goto tr2406; -tr2504: + case 9: goto st835; + case 32: goto st835; + case 40: goto tr2515; + case 41: goto tr2516; + case 1034: goto tr2517; + case 1083: goto st840; + } + goto tr2417; +tr2515: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -64301,8 +64407,8 @@ tr2504: } s->multiline = true; } - goto st826; -tr2505: + goto st835; +tr2516: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -64310,16 +64416,16 @@ tr2505: } s->multiline = false; } - goto st826; -tr2506: + goto st835; +tr2517: { s->line_counter++; } - goto st826; -st826: + goto st835; +st835: if ( ++p == pe ) - goto _test_eof826; -case 826: + goto _test_eof835; +case 835: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64333,17 +64439,17 @@ case 826: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st826; - case 32: goto st826; - case 40: goto tr2504; - case 41: goto tr2505; - case 1034: goto tr2506; - case 1083: goto st831; + case 9: goto st835; + case 32: goto st835; + case 40: goto tr2515; + case 41: goto tr2516; + case 1034: goto tr2517; + case 1083: goto st840; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2508; - goto tr2421; -tr2508: + goto tr2519; + goto tr2432; +tr2519: { s->number64 = 0; } @@ -64361,8 +64467,8 @@ tr2508: p--; {goto st261;} } } - goto st827; -tr2512: + goto st836; +tr2523: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -64377,11 +64483,11 @@ tr2512: p--; {goto st261;} } } - goto st827; -st827: + goto st836; +st836: if ( ++p == pe ) - goto _test_eof827; -case 827: + goto _test_eof836; +case 836: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64395,17 +64501,17 @@ case 827: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2509; - case 32: goto tr2509; - case 40: goto tr2510; - case 41: goto tr2511; - case 1034: goto tr2513; - case 1083: goto tr2514; + case 9: goto tr2520; + case 32: goto tr2520; + case 40: goto tr2521; + case 41: goto tr2522; + case 1034: goto tr2524; + case 1083: goto tr2525; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2512; - goto tr2421; -tr2516: + goto tr2523; + goto tr2432; +tr2527: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -64413,8 +64519,8 @@ tr2516: } s->multiline = true; } - goto st828; -tr2517: + goto st837; +tr2528: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -64422,13 +64528,13 @@ tr2517: } s->multiline = false; } - goto st828; -tr2519: + goto st837; +tr2530: { s->line_counter++; } - goto st828; -tr2509: + goto st837; +tr2520: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64438,8 +64544,8 @@ tr2509: p--; {goto st261;} } } - goto st828; -tr2510: + goto st837; +tr2521: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64456,8 +64562,8 @@ tr2510: } s->multiline = true; } - goto st828; -tr2511: + goto st837; +tr2522: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64474,8 +64580,8 @@ tr2511: } s->multiline = false; } - goto st828; -tr2513: + goto st837; +tr2524: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64488,11 +64594,11 @@ tr2513: { s->line_counter++; } - goto st828; -st828: + goto st837; +st837: if ( ++p == pe ) - goto _test_eof828; -case 828: + goto _test_eof837; +case 837: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64506,24 +64612,24 @@ case 828: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st828; - case 32: goto st828; - case 40: goto tr2516; - case 41: goto tr2517; - case 46: goto tr2518; - case 1034: goto tr2519; - case 1083: goto st830; + case 9: goto st837; + case 32: goto st837; + case 40: goto tr2527; + case 41: goto tr2528; + case 46: goto tr2529; + case 1034: goto tr2530; + case 1083: goto st839; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 58 ) - goto tr2518; + goto tr2529; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2518; + goto tr2529; } else - goto tr2518; - goto tr2472; -tr2518: + goto tr2529; + goto tr2483; +tr2529: { s->buffer_length = 0; } @@ -64536,8 +64642,8 @@ tr2518: p--; {goto st261;} } } - goto st829; -tr2521: + goto st838; +tr2532: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -64547,11 +64653,11 @@ tr2521: p--; {goto st261;} } } - goto st829; -st829: + goto st838; +st838: if ( ++p == pe ) - goto _test_eof829; -case 829: + goto _test_eof838; +case 838: _widec = (*p); if ( (*p) < 32 ) { if ( (*p) > 9 ) { @@ -64609,52 +64715,52 @@ case 829: s->number64 == 0 ) _widec += 512; } switch( _widec ) { - case 46: goto tr2521; - case 6153: goto tr2522; - case 6176: goto tr2522; - case 6184: goto tr2523; - case 6185: goto tr2524; - case 6409: goto tr2525; - case 6432: goto tr2525; - case 6440: goto tr2526; - case 6441: goto tr2527; - case 6665: goto tr2528; - case 6688: goto tr2528; - case 6696: goto tr2529; - case 6697: goto tr2530; - case 9482: goto tr2531; - case 9531: goto tr2531; - case 9738: goto tr2531; - case 9787: goto tr2531; - case 10250: goto tr2532; - case 10299: goto tr2533; - case 10506: goto tr2531; - case 10555: goto tr2531; - case 10762: goto tr2534; - case 10811: goto tr2535; - case 11274: goto tr2536; - case 11323: goto tr2537; - case 11530: goto tr2531; - case 11579: goto tr2531; - case 11786: goto tr2538; - case 11835: goto tr2539; - case 12298: goto tr2540; - case 12347: goto tr2541; - case 12554: goto tr2531; - case 12603: goto tr2531; - case 12810: goto tr2542; - case 12859: goto tr2543; + case 46: goto tr2532; + case 6153: goto tr2533; + case 6176: goto tr2533; + case 6184: goto tr2534; + case 6185: goto tr2535; + case 6409: goto tr2536; + case 6432: goto tr2536; + case 6440: goto tr2537; + case 6441: goto tr2538; + case 6665: goto tr2539; + case 6688: goto tr2539; + case 6696: goto tr2540; + case 6697: goto tr2541; + case 9482: goto tr2542; + case 9531: goto tr2542; + case 9738: goto tr2542; + case 9787: goto tr2542; + case 10250: goto tr2543; + case 10299: goto tr2544; + case 10506: goto tr2542; + case 10555: goto tr2542; + case 10762: goto tr2545; + case 10811: goto tr2546; + case 11274: goto tr2547; + case 11323: goto tr2548; + case 11530: goto tr2542; + case 11579: goto tr2542; + case 11786: goto tr2549; + case 11835: goto tr2550; + case 12298: goto tr2551; + case 12347: goto tr2552; + case 12554: goto tr2542; + case 12603: goto tr2542; + case 12810: goto tr2553; + case 12859: goto tr2554; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 58 ) - goto tr2521; + goto tr2532; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr2521; + goto tr2532; } else - goto tr2521; - goto tr2479; -tr2514: + goto tr2532; + goto tr2490; +tr2525: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64664,11 +64770,11 @@ tr2514: p--; {goto st261;} } } - goto st830; -st830: + goto st839; +st839: if ( ++p == pe ) - goto _test_eof830; -case 830: + goto _test_eof839; +case 839: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -64688,14 +64794,14 @@ case 830: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2519; + goto tr2530; if ( 896 <= _widec && _widec <= 1151 ) - goto st830; - goto tr2406; -st831: + goto st839; + goto tr2417; +st840: if ( ++p == pe ) - goto _test_eof831; -case 831: + goto _test_eof840; +case 840: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -64715,19 +64821,19 @@ case 831: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2506; + goto tr2517; if ( 896 <= _widec && _widec <= 1151 ) - goto st831; - goto tr2406; -tr2413: + goto st840; + goto tr2417; +tr2424: { *(rdata_tail++) = 3; } - goto st832; -st832: + goto st841; +st841: if ( ++p == pe ) - goto _test_eof832; -case 832: + goto _test_eof841; +case 841: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64741,15 +64847,15 @@ case 832: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st833; - case 32: goto st833; - case 40: goto tr2545; - case 41: goto tr2546; - case 1034: goto tr2547; - case 1083: goto st838; - } - goto tr2406; -tr2545: + case 9: goto st842; + case 32: goto st842; + case 40: goto tr2556; + case 41: goto tr2557; + case 1034: goto tr2558; + case 1083: goto st847; + } + goto tr2417; +tr2556: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -64757,8 +64863,8 @@ tr2545: } s->multiline = true; } - goto st833; -tr2546: + goto st842; +tr2557: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -64766,16 +64872,16 @@ tr2546: } s->multiline = false; } - goto st833; -tr2547: + goto st842; +tr2558: { s->line_counter++; } - goto st833; -st833: + goto st842; +st842: if ( ++p == pe ) - goto _test_eof833; -case 833: + goto _test_eof842; +case 842: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64789,17 +64895,17 @@ case 833: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st833; - case 32: goto st833; - case 40: goto tr2545; - case 41: goto tr2546; - case 1034: goto tr2547; - case 1083: goto st838; + case 9: goto st842; + case 32: goto st842; + case 40: goto tr2556; + case 41: goto tr2557; + case 1034: goto tr2558; + case 1083: goto st847; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2549; - goto tr2421; -tr2549: + goto tr2560; + goto tr2432; +tr2560: { s->number64 = 0; } @@ -64817,8 +64923,8 @@ tr2549: p--; {goto st261;} } } - goto st834; -tr2553: + goto st843; +tr2564: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -64833,11 +64939,11 @@ tr2553: p--; {goto st261;} } } - goto st834; -st834: + goto st843; +st843: if ( ++p == pe ) - goto _test_eof834; -case 834: + goto _test_eof843; +case 843: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64851,17 +64957,17 @@ case 834: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2550; - case 32: goto tr2550; - case 40: goto tr2551; - case 41: goto tr2552; - case 1034: goto tr2554; - case 1083: goto tr2555; + case 9: goto tr2561; + case 32: goto tr2561; + case 40: goto tr2562; + case 41: goto tr2563; + case 1034: goto tr2565; + case 1083: goto tr2566; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2553; - goto tr2421; -tr2557: + goto tr2564; + goto tr2432; +tr2568: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -64869,8 +64975,8 @@ tr2557: } s->multiline = true; } - goto st835; -tr2558: + goto st844; +tr2569: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -64878,13 +64984,13 @@ tr2558: } s->multiline = false; } - goto st835; -tr2560: + goto st844; +tr2571: { s->line_counter++; } - goto st835; -tr2550: + goto st844; +tr2561: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64894,8 +65000,8 @@ tr2550: p--; {goto st261;} } } - goto st835; -tr2551: + goto st844; +tr2562: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64912,8 +65018,8 @@ tr2551: } s->multiline = true; } - goto st835; -tr2552: + goto st844; +tr2563: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64930,8 +65036,8 @@ tr2552: } s->multiline = false; } - goto st835; -tr2554: + goto st844; +tr2565: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -64944,11 +65050,11 @@ tr2554: { s->line_counter++; } - goto st835; -st835: + goto st844; +st844: if ( ++p == pe ) - goto _test_eof835; -case 835: + goto _test_eof844; +case 844: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -64962,35 +65068,35 @@ case 835: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st835; - case 32: goto st835; - case 40: goto tr2557; - case 41: goto tr2558; - case 42: goto tr2559; - case 92: goto tr2559; - case 95: goto tr2559; - case 1034: goto tr2560; - case 1083: goto st837; + case 9: goto st844; + case 32: goto st844; + case 40: goto tr2568; + case 41: goto tr2569; + case 42: goto tr2570; + case 92: goto tr2570; + case 95: goto tr2570; + case 1034: goto tr2571; + case 1083: goto st846; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr2559; + goto tr2570; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2559; + goto tr2570; } else - goto tr2559; - goto tr2406; -tr2559: + goto tr2570; + goto tr2417; +tr2570: { s->dname = rdata_tail; } - { p--; {stack[top++] = 836; goto st263;} } - goto st836; -st836: + { p--; {stack[top++] = 845; goto st263;} } + goto st845; +st845: if ( ++p == pe ) - goto _test_eof836; -case 836: + goto _test_eof845; +case 845: _widec = (*p); if ( (*p) < 32 ) { if ( (*p) > 9 ) { @@ -65048,43 +65154,43 @@ case 836: s->number64 == 0 ) _widec += 512; } switch( _widec ) { - case 6153: goto tr2562; - case 6176: goto tr2562; - case 6184: goto tr2563; - case 6185: goto tr2564; - case 6409: goto tr2565; - case 6432: goto tr2565; - case 6440: goto tr2566; - case 6441: goto tr2567; - case 6665: goto tr2568; - case 6688: goto tr2568; - case 6696: goto tr2569; - case 6697: goto tr2570; - case 9482: goto tr2571; - case 9531: goto tr2571; - case 9738: goto tr2571; - case 9787: goto tr2571; - case 10250: goto tr2572; - case 10299: goto tr2573; - case 10506: goto tr2571; - case 10555: goto tr2571; - case 10762: goto tr2574; - case 10811: goto tr2575; - case 11274: goto tr2576; - case 11323: goto tr2577; - case 11530: goto tr2571; - case 11579: goto tr2571; - case 11786: goto tr2578; - case 11835: goto tr2579; - case 12298: goto tr2580; - case 12347: goto tr2581; - case 12554: goto tr2571; - case 12603: goto tr2571; - case 12810: goto tr2582; - case 12859: goto tr2583; - } - goto tr2435; -tr2555: + case 6153: goto tr2573; + case 6176: goto tr2573; + case 6184: goto tr2574; + case 6185: goto tr2575; + case 6409: goto tr2576; + case 6432: goto tr2576; + case 6440: goto tr2577; + case 6441: goto tr2578; + case 6665: goto tr2579; + case 6688: goto tr2579; + case 6696: goto tr2580; + case 6697: goto tr2581; + case 9482: goto tr2582; + case 9531: goto tr2582; + case 9738: goto tr2582; + case 9787: goto tr2582; + case 10250: goto tr2583; + case 10299: goto tr2584; + case 10506: goto tr2582; + case 10555: goto tr2582; + case 10762: goto tr2585; + case 10811: goto tr2586; + case 11274: goto tr2587; + case 11323: goto tr2588; + case 11530: goto tr2582; + case 11579: goto tr2582; + case 11786: goto tr2589; + case 11835: goto tr2590; + case 12298: goto tr2591; + case 12347: goto tr2592; + case 12554: goto tr2582; + case 12603: goto tr2582; + case 12810: goto tr2593; + case 12859: goto tr2594; + } + goto tr2446; +tr2566: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -65094,11 +65200,11 @@ tr2555: p--; {goto st261;} } } - goto st837; -st837: + goto st846; +st846: if ( ++p == pe ) - goto _test_eof837; -case 837: + goto _test_eof846; +case 846: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -65118,14 +65224,14 @@ case 837: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2560; + goto tr2571; if ( 896 <= _widec && _widec <= 1151 ) - goto st837; - goto tr2406; -st838: + goto st846; + goto tr2417; +st847: if ( ++p == pe ) - goto _test_eof838; -case 838: + goto _test_eof847; +case 847: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -65145,11 +65251,11 @@ case 838: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2547; + goto tr2558; if ( 896 <= _widec && _widec <= 1151 ) - goto st838; - goto tr2406; -tr2405: + goto st847; + goto tr2417; +tr2416: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -65159,11 +65265,11 @@ tr2405: p--; {goto st261;} } } - goto st839; -st839: + goto st848; +st848: if ( ++p == pe ) - goto _test_eof839; -case 839: + goto _test_eof848; +case 848: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -65183,51 +65289,51 @@ case 839: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2414; + goto tr2425; if ( 896 <= _widec && _widec <= 1151 ) - goto st839; + goto st848; goto tr71; -st840: +st849: if ( ++p == pe ) - goto _test_eof840; -case 840: + goto _test_eof849; +case 849: switch( (*p) ) { - case 65: goto st841; - case 67: goto st875; - case 68: goto st892; - case 69: goto st906; - case 72: goto st913; - case 73: goto st918; - case 75: goto st926; - case 76: goto st930; - case 77: goto st938; - case 78: goto st944; - case 80: goto st960; - case 82: goto st963; - case 83: goto st970; - case 84: goto st981; - case 85: goto st991; - case 97: goto st841; - case 99: goto st875; - case 100: goto st892; - case 101: goto st906; - case 104: goto st913; - case 105: goto st918; - case 107: goto st926; - case 108: goto st930; - case 109: goto st938; - case 110: goto st944; - case 112: goto st960; - case 114: goto st963; - case 115: goto st970; - case 116: goto st981; - case 117: goto st991; - } - goto tr2584; -st841: + case 65: goto st850; + case 67: goto st884; + case 68: goto st901; + case 69: goto st915; + case 72: goto st922; + case 73: goto st927; + case 75: goto st935; + case 76: goto st939; + case 77: goto st947; + case 78: goto st953; + case 80: goto st969; + case 82: goto st972; + case 83: goto st979; + case 84: goto st990; + case 85: goto st1000; + case 97: goto st850; + case 99: goto st884; + case 100: goto st901; + case 101: goto st915; + case 104: goto st922; + case 105: goto st927; + case 107: goto st935; + case 108: goto st939; + case 109: goto st947; + case 110: goto st953; + case 112: goto st969; + case 114: goto st972; + case 115: goto st979; + case 116: goto st990; + case 117: goto st1000; + } + goto tr2595; +st850: if ( ++p == pe ) - goto _test_eof841; -case 841: + goto _test_eof850; +case 850: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -65241,21 +65347,21 @@ case 841: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2600; - case 32: goto tr2600; - case 40: goto tr2601; - case 41: goto tr2602; - case 65: goto st866; - case 70: goto st869; - case 80: goto st873; - case 97: goto st866; - case 102: goto st869; - case 112: goto st873; - case 1034: goto tr2606; - case 1083: goto tr2607; - } - goto tr2584; -tr2609: + case 9: goto tr2611; + case 32: goto tr2611; + case 40: goto tr2612; + case 41: goto tr2613; + case 65: goto st875; + case 70: goto st878; + case 80: goto st882; + case 97: goto st875; + case 102: goto st878; + case 112: goto st882; + case 1034: goto tr2617; + case 1083: goto tr2618; + } + goto tr2595; +tr2620: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -65263,8 +65369,8 @@ tr2609: } s->multiline = true; } - goto st842; -tr2610: + goto st851; +tr2621: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -65272,13 +65378,13 @@ tr2610: } s->multiline = false; } - goto st842; -tr2612: + goto st851; +tr2623: { s->line_counter++; } - goto st842; -tr3003: + goto st851; +tr3014: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -65288,8 +65394,8 @@ tr3003: p--; {goto st261;} } } - goto st842; -tr3004: + goto st851; +tr3015: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -65306,8 +65412,8 @@ tr3004: } s->multiline = true; } - goto st842; -tr3005: + goto st851; +tr3016: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -65324,8 +65430,8 @@ tr3005: } s->multiline = false; } - goto st842; -tr3007: + goto st851; +tr3018: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -65338,11 +65444,11 @@ tr3007: { s->line_counter++; } - goto st842; -tr2600: + goto st851; +tr2611: { type_num(KNOT_RRTYPE_A, &rdata_tail); } - goto st842; -tr2601: + goto st851; +tr2612: { type_num(KNOT_RRTYPE_A, &rdata_tail); } { if (s->multiline == true) { @@ -65351,8 +65457,8 @@ tr2601: } s->multiline = true; } - goto st842; -tr2602: + goto st851; +tr2613: { type_num(KNOT_RRTYPE_A, &rdata_tail); } { if (s->multiline == false) { @@ -65361,17 +65467,17 @@ tr2602: } s->multiline = false; } - goto st842; -tr2606: + goto st851; +tr2617: { type_num(KNOT_RRTYPE_A, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2695: + goto st851; +tr2706: { type_num(KNOT_RRTYPE_AAAA, &rdata_tail); } - goto st842; -tr2696: + goto st851; +tr2707: { type_num(KNOT_RRTYPE_AAAA, &rdata_tail); } { if (s->multiline == true) { @@ -65380,8 +65486,8 @@ tr2696: } s->multiline = true; } - goto st842; -tr2697: + goto st851; +tr2708: { type_num(KNOT_RRTYPE_AAAA, &rdata_tail); } { if (s->multiline == false) { @@ -65390,17 +65496,17 @@ tr2697: } s->multiline = false; } - goto st842; -tr2698: + goto st851; +tr2709: { type_num(KNOT_RRTYPE_AAAA, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2703: + goto st851; +tr2714: { type_num(KNOT_RRTYPE_AFSDB, &rdata_tail); } - goto st842; -tr2704: + goto st851; +tr2715: { type_num(KNOT_RRTYPE_AFSDB, &rdata_tail); } { if (s->multiline == true) { @@ -65409,8 +65515,8 @@ tr2704: } s->multiline = true; } - goto st842; -tr2705: + goto st851; +tr2716: { type_num(KNOT_RRTYPE_AFSDB, &rdata_tail); } { if (s->multiline == false) { @@ -65419,17 +65525,17 @@ tr2705: } s->multiline = false; } - goto st842; -tr2706: + goto st851; +tr2717: { type_num(KNOT_RRTYPE_AFSDB, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2709: + goto st851; +tr2720: { type_num(KNOT_RRTYPE_APL, &rdata_tail); } - goto st842; -tr2710: + goto st851; +tr2721: { type_num(KNOT_RRTYPE_APL, &rdata_tail); } { if (s->multiline == true) { @@ -65438,8 +65544,8 @@ tr2710: } s->multiline = true; } - goto st842; -tr2711: + goto st851; +tr2722: { type_num(KNOT_RRTYPE_APL, &rdata_tail); } { if (s->multiline == false) { @@ -65448,17 +65554,17 @@ tr2711: } s->multiline = false; } - goto st842; -tr2712: + goto st851; +tr2723: { type_num(KNOT_RRTYPE_APL, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2719: + goto st851; +tr2730: { type_num(KNOT_RRTYPE_CAA, &rdata_tail); } - goto st842; -tr2720: + goto st851; +tr2731: { type_num(KNOT_RRTYPE_CAA, &rdata_tail); } { if (s->multiline == true) { @@ -65467,8 +65573,8 @@ tr2720: } s->multiline = true; } - goto st842; -tr2721: + goto st851; +tr2732: { type_num(KNOT_RRTYPE_CAA, &rdata_tail); } { if (s->multiline == false) { @@ -65477,17 +65583,17 @@ tr2721: } s->multiline = false; } - goto st842; -tr2722: + goto st851; +tr2733: { type_num(KNOT_RRTYPE_CAA, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2730: + goto st851; +tr2741: { type_num(KNOT_RRTYPE_CDNSKEY, &rdata_tail); } - goto st842; -tr2731: + goto st851; +tr2742: { type_num(KNOT_RRTYPE_CDNSKEY, &rdata_tail); } { if (s->multiline == true) { @@ -65496,8 +65602,8 @@ tr2731: } s->multiline = true; } - goto st842; -tr2732: + goto st851; +tr2743: { type_num(KNOT_RRTYPE_CDNSKEY, &rdata_tail); } { if (s->multiline == false) { @@ -65506,17 +65612,17 @@ tr2732: } s->multiline = false; } - goto st842; -tr2733: + goto st851; +tr2744: { type_num(KNOT_RRTYPE_CDNSKEY, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2735: + goto st851; +tr2746: { type_num(KNOT_RRTYPE_CDS, &rdata_tail); } - goto st842; -tr2736: + goto st851; +tr2747: { type_num(KNOT_RRTYPE_CDS, &rdata_tail); } { if (s->multiline == true) { @@ -65525,8 +65631,8 @@ tr2736: } s->multiline = true; } - goto st842; -tr2737: + goto st851; +tr2748: { type_num(KNOT_RRTYPE_CDS, &rdata_tail); } { if (s->multiline == false) { @@ -65535,17 +65641,17 @@ tr2737: } s->multiline = false; } - goto st842; -tr2738: + goto st851; +tr2749: { type_num(KNOT_RRTYPE_CDS, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2742: + goto st851; +tr2753: { type_num(KNOT_RRTYPE_CERT, &rdata_tail); } - goto st842; -tr2743: + goto st851; +tr2754: { type_num(KNOT_RRTYPE_CERT, &rdata_tail); } { if (s->multiline == true) { @@ -65554,8 +65660,8 @@ tr2743: } s->multiline = true; } - goto st842; -tr2744: + goto st851; +tr2755: { type_num(KNOT_RRTYPE_CERT, &rdata_tail); } { if (s->multiline == false) { @@ -65564,17 +65670,17 @@ tr2744: } s->multiline = false; } - goto st842; -tr2745: + goto st851; +tr2756: { type_num(KNOT_RRTYPE_CERT, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2750: + goto st851; +tr2761: { type_num(KNOT_RRTYPE_CNAME, &rdata_tail); } - goto st842; -tr2751: + goto st851; +tr2762: { type_num(KNOT_RRTYPE_CNAME, &rdata_tail); } { if (s->multiline == true) { @@ -65583,8 +65689,8 @@ tr2751: } s->multiline = true; } - goto st842; -tr2752: + goto st851; +tr2763: { type_num(KNOT_RRTYPE_CNAME, &rdata_tail); } { if (s->multiline == false) { @@ -65593,17 +65699,17 @@ tr2752: } s->multiline = false; } - goto st842; -tr2753: + goto st851; +tr2764: { type_num(KNOT_RRTYPE_CNAME, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2761: + goto st851; +tr2772: { type_num(KNOT_RRTYPE_DHCID, &rdata_tail); } - goto st842; -tr2762: + goto st851; +tr2773: { type_num(KNOT_RRTYPE_DHCID, &rdata_tail); } { if (s->multiline == true) { @@ -65612,8 +65718,8 @@ tr2762: } s->multiline = true; } - goto st842; -tr2763: + goto st851; +tr2774: { type_num(KNOT_RRTYPE_DHCID, &rdata_tail); } { if (s->multiline == false) { @@ -65622,17 +65728,17 @@ tr2763: } s->multiline = false; } - goto st842; -tr2764: + goto st851; +tr2775: { type_num(KNOT_RRTYPE_DHCID, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2770: + goto st851; +tr2781: { type_num(KNOT_RRTYPE_DNAME, &rdata_tail); } - goto st842; -tr2771: + goto st851; +tr2782: { type_num(KNOT_RRTYPE_DNAME, &rdata_tail); } { if (s->multiline == true) { @@ -65641,8 +65747,8 @@ tr2771: } s->multiline = true; } - goto st842; -tr2772: + goto st851; +tr2783: { type_num(KNOT_RRTYPE_DNAME, &rdata_tail); } { if (s->multiline == false) { @@ -65651,17 +65757,17 @@ tr2772: } s->multiline = false; } - goto st842; -tr2773: + goto st851; +tr2784: { type_num(KNOT_RRTYPE_DNAME, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2778: + goto st851; +tr2789: { type_num(KNOT_RRTYPE_DNSKEY, &rdata_tail); } - goto st842; -tr2779: + goto st851; +tr2790: { type_num(KNOT_RRTYPE_DNSKEY, &rdata_tail); } { if (s->multiline == true) { @@ -65670,8 +65776,8 @@ tr2779: } s->multiline = true; } - goto st842; -tr2780: + goto st851; +tr2791: { type_num(KNOT_RRTYPE_DNSKEY, &rdata_tail); } { if (s->multiline == false) { @@ -65680,17 +65786,17 @@ tr2780: } s->multiline = false; } - goto st842; -tr2781: + goto st851; +tr2792: { type_num(KNOT_RRTYPE_DNSKEY, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2783: + goto st851; +tr2794: { type_num(KNOT_RRTYPE_DS, &rdata_tail); } - goto st842; -tr2784: + goto st851; +tr2795: { type_num(KNOT_RRTYPE_DS, &rdata_tail); } { if (s->multiline == true) { @@ -65699,8 +65805,8 @@ tr2784: } s->multiline = true; } - goto st842; -tr2785: + goto st851; +tr2796: { type_num(KNOT_RRTYPE_DS, &rdata_tail); } { if (s->multiline == false) { @@ -65709,17 +65815,17 @@ tr2785: } s->multiline = false; } - goto st842; -tr2786: + goto st851; +tr2797: { type_num(KNOT_RRTYPE_DS, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2793: + goto st851; +tr2804: { type_num(KNOT_RRTYPE_EUI48, &rdata_tail); } - goto st842; -tr2794: + goto st851; +tr2805: { type_num(KNOT_RRTYPE_EUI48, &rdata_tail); } { if (s->multiline == true) { @@ -65728,8 +65834,8 @@ tr2794: } s->multiline = true; } - goto st842; -tr2795: + goto st851; +tr2806: { type_num(KNOT_RRTYPE_EUI48, &rdata_tail); } { if (s->multiline == false) { @@ -65738,17 +65844,17 @@ tr2795: } s->multiline = false; } - goto st842; -tr2796: + goto st851; +tr2807: { type_num(KNOT_RRTYPE_EUI48, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2799: + goto st851; +tr2810: { type_num(KNOT_RRTYPE_EUI64, &rdata_tail); } - goto st842; -tr2800: + goto st851; +tr2811: { type_num(KNOT_RRTYPE_EUI64, &rdata_tail); } { if (s->multiline == true) { @@ -65757,8 +65863,8 @@ tr2800: } s->multiline = true; } - goto st842; -tr2801: + goto st851; +tr2812: { type_num(KNOT_RRTYPE_EUI64, &rdata_tail); } { if (s->multiline == false) { @@ -65767,17 +65873,17 @@ tr2801: } s->multiline = false; } - goto st842; -tr2802: + goto st851; +tr2813: { type_num(KNOT_RRTYPE_EUI64, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2808: + goto st851; +tr2819: { type_num(KNOT_RRTYPE_HINFO, &rdata_tail); } - goto st842; -tr2809: + goto st851; +tr2820: { type_num(KNOT_RRTYPE_HINFO, &rdata_tail); } { if (s->multiline == true) { @@ -65786,8 +65892,8 @@ tr2809: } s->multiline = true; } - goto st842; -tr2810: + goto st851; +tr2821: { type_num(KNOT_RRTYPE_HINFO, &rdata_tail); } { if (s->multiline == false) { @@ -65796,17 +65902,17 @@ tr2810: } s->multiline = false; } - goto st842; -tr2811: + goto st851; +tr2822: { type_num(KNOT_RRTYPE_HINFO, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2820: + goto st851; +tr2831: { type_num(KNOT_RRTYPE_IPSECKEY, &rdata_tail); } - goto st842; -tr2821: + goto st851; +tr2832: { type_num(KNOT_RRTYPE_IPSECKEY, &rdata_tail); } { if (s->multiline == true) { @@ -65815,8 +65921,8 @@ tr2821: } s->multiline = true; } - goto st842; -tr2822: + goto st851; +tr2833: { type_num(KNOT_RRTYPE_IPSECKEY, &rdata_tail); } { if (s->multiline == false) { @@ -65825,17 +65931,17 @@ tr2822: } s->multiline = false; } - goto st842; -tr2823: + goto st851; +tr2834: { type_num(KNOT_RRTYPE_IPSECKEY, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2828: + goto st851; +tr2839: { type_num(KNOT_RRTYPE_KEY, &rdata_tail); } - goto st842; -tr2829: + goto st851; +tr2840: { type_num(KNOT_RRTYPE_KEY, &rdata_tail); } { if (s->multiline == true) { @@ -65844,8 +65950,8 @@ tr2829: } s->multiline = true; } - goto st842; -tr2830: + goto st851; +tr2841: { type_num(KNOT_RRTYPE_KEY, &rdata_tail); } { if (s->multiline == false) { @@ -65854,17 +65960,17 @@ tr2830: } s->multiline = false; } - goto st842; -tr2831: + goto st851; +tr2842: { type_num(KNOT_RRTYPE_KEY, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2833: + goto st851; +tr2844: { type_num(KNOT_RRTYPE_KX, &rdata_tail); } - goto st842; -tr2834: + goto st851; +tr2845: { type_num(KNOT_RRTYPE_KX, &rdata_tail); } { if (s->multiline == true) { @@ -65873,8 +65979,8 @@ tr2834: } s->multiline = true; } - goto st842; -tr2835: + goto st851; +tr2846: { type_num(KNOT_RRTYPE_KX, &rdata_tail); } { if (s->multiline == false) { @@ -65883,17 +65989,17 @@ tr2835: } s->multiline = false; } - goto st842; -tr2836: + goto st851; +tr2847: { type_num(KNOT_RRTYPE_KX, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2843: + goto st851; +tr2854: { type_num(KNOT_RRTYPE_L32, &rdata_tail); } - goto st842; -tr2844: + goto st851; +tr2855: { type_num(KNOT_RRTYPE_L32, &rdata_tail); } { if (s->multiline == true) { @@ -65902,8 +66008,8 @@ tr2844: } s->multiline = true; } - goto st842; -tr2845: + goto st851; +tr2856: { type_num(KNOT_RRTYPE_L32, &rdata_tail); } { if (s->multiline == false) { @@ -65912,17 +66018,17 @@ tr2845: } s->multiline = false; } - goto st842; -tr2846: + goto st851; +tr2857: { type_num(KNOT_RRTYPE_L32, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2849: + goto st851; +tr2860: { type_num(KNOT_RRTYPE_L64, &rdata_tail); } - goto st842; -tr2850: + goto st851; +tr2861: { type_num(KNOT_RRTYPE_L64, &rdata_tail); } { if (s->multiline == true) { @@ -65931,8 +66037,8 @@ tr2850: } s->multiline = true; } - goto st842; -tr2851: + goto st851; +tr2862: { type_num(KNOT_RRTYPE_L64, &rdata_tail); } { if (s->multiline == false) { @@ -65941,17 +66047,17 @@ tr2851: } s->multiline = false; } - goto st842; -tr2852: + goto st851; +tr2863: { type_num(KNOT_RRTYPE_L64, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2855: + goto st851; +tr2866: { type_num(KNOT_RRTYPE_LOC, &rdata_tail); } - goto st842; -tr2856: + goto st851; +tr2867: { type_num(KNOT_RRTYPE_LOC, &rdata_tail); } { if (s->multiline == true) { @@ -65960,8 +66066,8 @@ tr2856: } s->multiline = true; } - goto st842; -tr2857: + goto st851; +tr2868: { type_num(KNOT_RRTYPE_LOC, &rdata_tail); } { if (s->multiline == false) { @@ -65970,17 +66076,17 @@ tr2857: } s->multiline = false; } - goto st842; -tr2858: + goto st851; +tr2869: { type_num(KNOT_RRTYPE_LOC, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2860: + goto st851; +tr2871: { type_num(KNOT_RRTYPE_LP, &rdata_tail); } - goto st842; -tr2861: + goto st851; +tr2872: { type_num(KNOT_RRTYPE_LP, &rdata_tail); } { if (s->multiline == true) { @@ -65989,8 +66095,8 @@ tr2861: } s->multiline = true; } - goto st842; -tr2862: + goto st851; +tr2873: { type_num(KNOT_RRTYPE_LP, &rdata_tail); } { if (s->multiline == false) { @@ -65999,17 +66105,17 @@ tr2862: } s->multiline = false; } - goto st842; -tr2863: + goto st851; +tr2874: { type_num(KNOT_RRTYPE_LP, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2870: + goto st851; +tr2881: { type_num(KNOT_RRTYPE_MINFO, &rdata_tail); } - goto st842; -tr2871: + goto st851; +tr2882: { type_num(KNOT_RRTYPE_MINFO, &rdata_tail); } { if (s->multiline == true) { @@ -66018,8 +66124,8 @@ tr2871: } s->multiline = true; } - goto st842; -tr2872: + goto st851; +tr2883: { type_num(KNOT_RRTYPE_MINFO, &rdata_tail); } { if (s->multiline == false) { @@ -66028,17 +66134,17 @@ tr2872: } s->multiline = false; } - goto st842; -tr2873: + goto st851; +tr2884: { type_num(KNOT_RRTYPE_MINFO, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2875: + goto st851; +tr2886: { type_num(KNOT_RRTYPE_MX, &rdata_tail); } - goto st842; -tr2876: + goto st851; +tr2887: { type_num(KNOT_RRTYPE_MX, &rdata_tail); } { if (s->multiline == true) { @@ -66047,8 +66153,8 @@ tr2876: } s->multiline = true; } - goto st842; -tr2877: + goto st851; +tr2888: { type_num(KNOT_RRTYPE_MX, &rdata_tail); } { if (s->multiline == false) { @@ -66057,17 +66163,17 @@ tr2877: } s->multiline = false; } - goto st842; -tr2878: + goto st851; +tr2889: { type_num(KNOT_RRTYPE_MX, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2886: + goto st851; +tr2897: { type_num(KNOT_RRTYPE_NAPTR, &rdata_tail); } - goto st842; -tr2887: + goto st851; +tr2898: { type_num(KNOT_RRTYPE_NAPTR, &rdata_tail); } { if (s->multiline == true) { @@ -66076,8 +66182,8 @@ tr2887: } s->multiline = true; } - goto st842; -tr2888: + goto st851; +tr2899: { type_num(KNOT_RRTYPE_NAPTR, &rdata_tail); } { if (s->multiline == false) { @@ -66086,17 +66192,17 @@ tr2888: } s->multiline = false; } - goto st842; -tr2889: + goto st851; +tr2900: { type_num(KNOT_RRTYPE_NAPTR, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2892: + goto st851; +tr2903: { type_num(KNOT_RRTYPE_NID, &rdata_tail); } - goto st842; -tr2893: + goto st851; +tr2904: { type_num(KNOT_RRTYPE_NID, &rdata_tail); } { if (s->multiline == true) { @@ -66105,8 +66211,8 @@ tr2893: } s->multiline = true; } - goto st842; -tr2894: + goto st851; +tr2905: { type_num(KNOT_RRTYPE_NID, &rdata_tail); } { if (s->multiline == false) { @@ -66115,17 +66221,17 @@ tr2894: } s->multiline = false; } - goto st842; -tr2895: + goto st851; +tr2906: { type_num(KNOT_RRTYPE_NID, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2897: + goto st851; +tr2908: { type_num(KNOT_RRTYPE_NS, &rdata_tail); } - goto st842; -tr2898: + goto st851; +tr2909: { type_num(KNOT_RRTYPE_NS, &rdata_tail); } { if (s->multiline == true) { @@ -66134,8 +66240,8 @@ tr2898: } s->multiline = true; } - goto st842; -tr2899: + goto st851; +tr2910: { type_num(KNOT_RRTYPE_NS, &rdata_tail); } { if (s->multiline == false) { @@ -66144,17 +66250,17 @@ tr2899: } s->multiline = false; } - goto st842; -tr2901: + goto st851; +tr2912: { type_num(KNOT_RRTYPE_NS, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2904: + goto st851; +tr2915: { type_num(KNOT_RRTYPE_NSEC, &rdata_tail); } - goto st842; -tr2905: + goto st851; +tr2916: { type_num(KNOT_RRTYPE_NSEC, &rdata_tail); } { if (s->multiline == true) { @@ -66163,8 +66269,8 @@ tr2905: } s->multiline = true; } - goto st842; -tr2906: + goto st851; +tr2917: { type_num(KNOT_RRTYPE_NSEC, &rdata_tail); } { if (s->multiline == false) { @@ -66173,17 +66279,17 @@ tr2906: } s->multiline = false; } - goto st842; -tr2908: + goto st851; +tr2919: { type_num(KNOT_RRTYPE_NSEC, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2910: + goto st851; +tr2921: { type_num(KNOT_RRTYPE_NSEC3, &rdata_tail); } - goto st842; -tr2911: + goto st851; +tr2922: { type_num(KNOT_RRTYPE_NSEC3, &rdata_tail); } { if (s->multiline == true) { @@ -66192,8 +66298,8 @@ tr2911: } s->multiline = true; } - goto st842; -tr2912: + goto st851; +tr2923: { type_num(KNOT_RRTYPE_NSEC3, &rdata_tail); } { if (s->multiline == false) { @@ -66202,17 +66308,17 @@ tr2912: } s->multiline = false; } - goto st842; -tr2914: + goto st851; +tr2925: { type_num(KNOT_RRTYPE_NSEC3, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2920: + goto st851; +tr2931: { type_num(KNOT_RRTYPE_NSEC3PARAM, &rdata_tail); } - goto st842; -tr2921: + goto st851; +tr2932: { type_num(KNOT_RRTYPE_NSEC3PARAM, &rdata_tail); } { if (s->multiline == true) { @@ -66221,8 +66327,8 @@ tr2921: } s->multiline = true; } - goto st842; -tr2922: + goto st851; +tr2933: { type_num(KNOT_RRTYPE_NSEC3PARAM, &rdata_tail); } { if (s->multiline == false) { @@ -66231,17 +66337,17 @@ tr2922: } s->multiline = false; } - goto st842; -tr2923: + goto st851; +tr2934: { type_num(KNOT_RRTYPE_NSEC3PARAM, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2927: + goto st851; +tr2938: { type_num(KNOT_RRTYPE_PTR, &rdata_tail); } - goto st842; -tr2928: + goto st851; +tr2939: { type_num(KNOT_RRTYPE_PTR, &rdata_tail); } { if (s->multiline == true) { @@ -66250,8 +66356,8 @@ tr2928: } s->multiline = true; } - goto st842; -tr2929: + goto st851; +tr2940: { type_num(KNOT_RRTYPE_PTR, &rdata_tail); } { if (s->multiline == false) { @@ -66260,17 +66366,17 @@ tr2929: } s->multiline = false; } - goto st842; -tr2930: + goto st851; +tr2941: { type_num(KNOT_RRTYPE_PTR, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2935: + goto st851; +tr2946: { type_num(KNOT_RRTYPE_RP, &rdata_tail); } - goto st842; -tr2936: + goto st851; +tr2947: { type_num(KNOT_RRTYPE_RP, &rdata_tail); } { if (s->multiline == true) { @@ -66279,8 +66385,8 @@ tr2936: } s->multiline = true; } - goto st842; -tr2937: + goto st851; +tr2948: { type_num(KNOT_RRTYPE_RP, &rdata_tail); } { if (s->multiline == false) { @@ -66289,17 +66395,17 @@ tr2937: } s->multiline = false; } - goto st842; -tr2938: + goto st851; +tr2949: { type_num(KNOT_RRTYPE_RP, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2943: + goto st851; +tr2954: { type_num(KNOT_RRTYPE_RRSIG, &rdata_tail); } - goto st842; -tr2944: + goto st851; +tr2955: { type_num(KNOT_RRTYPE_RRSIG, &rdata_tail); } { if (s->multiline == true) { @@ -66308,8 +66414,8 @@ tr2944: } s->multiline = true; } - goto st842; -tr2945: + goto st851; +tr2956: { type_num(KNOT_RRTYPE_RRSIG, &rdata_tail); } { if (s->multiline == false) { @@ -66318,17 +66424,17 @@ tr2945: } s->multiline = false; } - goto st842; -tr2946: + goto st851; +tr2957: { type_num(KNOT_RRTYPE_RRSIG, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2948: + goto st851; +tr2959: { type_num(KNOT_RRTYPE_RT, &rdata_tail); } - goto st842; -tr2949: + goto st851; +tr2960: { type_num(KNOT_RRTYPE_RT, &rdata_tail); } { if (s->multiline == true) { @@ -66337,8 +66443,8 @@ tr2949: } s->multiline = true; } - goto st842; -tr2950: + goto st851; +tr2961: { type_num(KNOT_RRTYPE_RT, &rdata_tail); } { if (s->multiline == false) { @@ -66347,17 +66453,17 @@ tr2950: } s->multiline = false; } - goto st842; -tr2951: + goto st851; +tr2962: { type_num(KNOT_RRTYPE_RT, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2958: + goto st851; +tr2969: { type_num(KNOT_RRTYPE_SOA, &rdata_tail); } - goto st842; -tr2959: + goto st851; +tr2970: { type_num(KNOT_RRTYPE_SOA, &rdata_tail); } { if (s->multiline == true) { @@ -66366,8 +66472,8 @@ tr2959: } s->multiline = true; } - goto st842; -tr2960: + goto st851; +tr2971: { type_num(KNOT_RRTYPE_SOA, &rdata_tail); } { if (s->multiline == false) { @@ -66376,17 +66482,17 @@ tr2960: } s->multiline = false; } - goto st842; -tr2961: + goto st851; +tr2972: { type_num(KNOT_RRTYPE_SOA, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2964: + goto st851; +tr2975: { type_num(KNOT_RRTYPE_SPF, &rdata_tail); } - goto st842; -tr2965: + goto st851; +tr2976: { type_num(KNOT_RRTYPE_SPF, &rdata_tail); } { if (s->multiline == true) { @@ -66395,8 +66501,8 @@ tr2965: } s->multiline = true; } - goto st842; -tr2966: + goto st851; +tr2977: { type_num(KNOT_RRTYPE_SPF, &rdata_tail); } { if (s->multiline == false) { @@ -66405,17 +66511,17 @@ tr2966: } s->multiline = false; } - goto st842; -tr2967: + goto st851; +tr2978: { type_num(KNOT_RRTYPE_SPF, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2970: + goto st851; +tr2981: { type_num(KNOT_RRTYPE_SRV, &rdata_tail); } - goto st842; -tr2971: + goto st851; +tr2982: { type_num(KNOT_RRTYPE_SRV, &rdata_tail); } { if (s->multiline == true) { @@ -66424,8 +66530,8 @@ tr2971: } s->multiline = true; } - goto st842; -tr2972: + goto st851; +tr2983: { type_num(KNOT_RRTYPE_SRV, &rdata_tail); } { if (s->multiline == false) { @@ -66434,17 +66540,17 @@ tr2972: } s->multiline = false; } - goto st842; -tr2973: + goto st851; +tr2984: { type_num(KNOT_RRTYPE_SRV, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2978: + goto st851; +tr2989: { type_num(KNOT_RRTYPE_SSHFP, &rdata_tail); } - goto st842; -tr2979: + goto st851; +tr2990: { type_num(KNOT_RRTYPE_SSHFP, &rdata_tail); } { if (s->multiline == true) { @@ -66453,8 +66559,8 @@ tr2979: } s->multiline = true; } - goto st842; -tr2980: + goto st851; +tr2991: { type_num(KNOT_RRTYPE_SSHFP, &rdata_tail); } { if (s->multiline == false) { @@ -66463,17 +66569,17 @@ tr2980: } s->multiline = false; } - goto st842; -tr2981: + goto st851; +tr2992: { type_num(KNOT_RRTYPE_SSHFP, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2988: + goto st851; +tr2999: { type_num(KNOT_RRTYPE_TLSA, &rdata_tail); } - goto st842; -tr2989: + goto st851; +tr3000: { type_num(KNOT_RRTYPE_TLSA, &rdata_tail); } { if (s->multiline == true) { @@ -66482,8 +66588,8 @@ tr2989: } s->multiline = true; } - goto st842; -tr2990: + goto st851; +tr3001: { type_num(KNOT_RRTYPE_TLSA, &rdata_tail); } { if (s->multiline == false) { @@ -66492,17 +66598,17 @@ tr2990: } s->multiline = false; } - goto st842; -tr2991: + goto st851; +tr3002: { type_num(KNOT_RRTYPE_TLSA, &rdata_tail); } { s->line_counter++; } - goto st842; -tr2994: + goto st851; +tr3005: { type_num(KNOT_RRTYPE_TXT, &rdata_tail); } - goto st842; -tr2995: + goto st851; +tr3006: { type_num(KNOT_RRTYPE_TXT, &rdata_tail); } { if (s->multiline == true) { @@ -66511,8 +66617,8 @@ tr2995: } s->multiline = true; } - goto st842; -tr2996: + goto st851; +tr3007: { type_num(KNOT_RRTYPE_TXT, &rdata_tail); } { if (s->multiline == false) { @@ -66521,17 +66627,17 @@ tr2996: } s->multiline = false; } - goto st842; -tr2997: + goto st851; +tr3008: { type_num(KNOT_RRTYPE_TXT, &rdata_tail); } { s->line_counter++; } - goto st842; -tr3011: + goto st851; +tr3022: { type_num(KNOT_RRTYPE_URI, &rdata_tail); } - goto st842; -tr3012: + goto st851; +tr3023: { type_num(KNOT_RRTYPE_URI, &rdata_tail); } { if (s->multiline == true) { @@ -66540,8 +66646,8 @@ tr3012: } s->multiline = true; } - goto st842; -tr3013: + goto st851; +tr3024: { type_num(KNOT_RRTYPE_URI, &rdata_tail); } { if (s->multiline == false) { @@ -66550,17 +66656,17 @@ tr3013: } s->multiline = false; } - goto st842; -tr3014: + goto st851; +tr3025: { type_num(KNOT_RRTYPE_URI, &rdata_tail); } { s->line_counter++; } - goto st842; -st842: + goto st851; +st851: if ( ++p == pe ) - goto _test_eof842; -case 842: + goto _test_eof851; +case 851: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -66574,29 +66680,29 @@ case 842: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st842; - case 32: goto st842; - case 40: goto tr2609; - case 41: goto tr2610; - case 1034: goto tr2612; - case 1083: goto st865; + case 9: goto st851; + case 32: goto st851; + case 40: goto tr2620; + case 41: goto tr2621; + case 1034: goto tr2623; + case 1083: goto st874; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr2611; + goto tr2622; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2611; + goto tr2622; } else - goto tr2611; + goto tr2622; goto tr71; -tr2611: - { p--; {stack[top++] = 843; goto st480;} } - goto st843; -st843: +tr2622: + { p--; {stack[top++] = 852; goto st480;} } + goto st852; +st852: if ( ++p == pe ) - goto _test_eof843; -case 843: + goto _test_eof852; +case 852: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -66610,15 +66716,15 @@ case 843: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st844; - case 32: goto st844; - case 40: goto tr2615; - case 41: goto tr2616; - case 1034: goto tr2617; - case 1083: goto st864; + case 9: goto st853; + case 32: goto st853; + case 40: goto tr2626; + case 41: goto tr2627; + case 1034: goto tr2628; + case 1083: goto st873; } goto tr71; -tr2615: +tr2626: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -66626,8 +66732,8 @@ tr2615: } s->multiline = true; } - goto st844; -tr2616: + goto st853; +tr2627: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -66635,16 +66741,16 @@ tr2616: } s->multiline = false; } - goto st844; -tr2617: + goto st853; +tr2628: { s->line_counter++; } - goto st844; -st844: + goto st853; +st853: if ( ++p == pe ) - goto _test_eof844; -case 844: + goto _test_eof853; +case 853: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -66658,17 +66764,17 @@ case 844: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st844; - case 32: goto st844; - case 40: goto tr2615; - case 41: goto tr2616; - case 1034: goto tr2617; - case 1083: goto st864; + case 9: goto st853; + case 32: goto st853; + case 40: goto tr2626; + case 41: goto tr2627; + case 1034: goto tr2628; + case 1083: goto st873; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2619; - goto tr1746; -tr2619: + goto tr2630; + goto tr1757; +tr2630: { s->number64 = 0; } @@ -66686,8 +66792,8 @@ tr2619: p--; {goto st261;} } } - goto st845; -tr2623: + goto st854; +tr2634: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -66702,11 +66808,11 @@ tr2623: p--; {goto st261;} } } - goto st845; -st845: + goto st854; +st854: if ( ++p == pe ) - goto _test_eof845; -case 845: + goto _test_eof854; +case 854: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -66720,17 +66826,17 @@ case 845: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2620; - case 32: goto tr2620; - case 40: goto tr2621; - case 41: goto tr2622; - case 1034: goto tr2624; - case 1083: goto tr2625; + case 9: goto tr2631; + case 32: goto tr2631; + case 40: goto tr2632; + case 41: goto tr2633; + case 1034: goto tr2635; + case 1083: goto tr2636; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2623; - goto tr1746; -tr2627: + goto tr2634; + goto tr1757; +tr2638: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -66738,8 +66844,8 @@ tr2627: } s->multiline = true; } - goto st846; -tr2628: + goto st855; +tr2639: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -66747,13 +66853,13 @@ tr2628: } s->multiline = false; } - goto st846; -tr2630: + goto st855; +tr2641: { s->line_counter++; } - goto st846; -tr2620: + goto st855; +tr2631: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -66763,8 +66869,8 @@ tr2620: p--; {goto st261;} } } - goto st846; -tr2621: + goto st855; +tr2632: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -66781,8 +66887,8 @@ tr2621: } s->multiline = true; } - goto st846; -tr2622: + goto st855; +tr2633: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -66799,8 +66905,8 @@ tr2622: } s->multiline = false; } - goto st846; -tr2624: + goto st855; +tr2635: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -66813,11 +66919,11 @@ tr2624: { s->line_counter++; } - goto st846; -st846: + goto st855; +st855: if ( ++p == pe ) - goto _test_eof846; -case 846: + goto _test_eof855; +case 855: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -66831,17 +66937,17 @@ case 846: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st846; - case 32: goto st846; - case 40: goto tr2627; - case 41: goto tr2628; - case 1034: goto tr2630; - case 1083: goto st863; + case 9: goto st855; + case 32: goto st855; + case 40: goto tr2638; + case 41: goto tr2639; + case 1034: goto tr2641; + case 1083: goto st872; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2629; - goto tr1746; -tr2629: + goto tr2640; + goto tr1757; +tr2640: { s->number64 = 0; } @@ -66859,8 +66965,8 @@ tr2629: p--; {goto st261;} } } - goto st847; -tr2635: + goto st856; +tr2646: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -66875,11 +66981,11 @@ tr2635: p--; {goto st261;} } } - goto st847; -st847: + goto st856; +st856: if ( ++p == pe ) - goto _test_eof847; -case 847: + goto _test_eof856; +case 856: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -66893,17 +66999,17 @@ case 847: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2632; - case 32: goto tr2632; - case 40: goto tr2633; - case 41: goto tr2634; - case 1034: goto tr2636; - case 1083: goto tr2637; + case 9: goto tr2643; + case 32: goto tr2643; + case 40: goto tr2644; + case 41: goto tr2645; + case 1034: goto tr2647; + case 1083: goto tr2648; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2635; - goto tr1746; -tr2640: + goto tr2646; + goto tr1757; +tr2651: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -66911,8 +67017,8 @@ tr2640: } s->multiline = true; } - goto st848; -tr2641: + goto st857; +tr2652: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -66920,13 +67026,13 @@ tr2641: } s->multiline = false; } - goto st848; -tr2643: + goto st857; +tr2654: { s->line_counter++; } - goto st848; -tr2632: + goto st857; +tr2643: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -66936,8 +67042,8 @@ tr2632: p--; {goto st261;} } } - goto st848; -tr2633: + goto st857; +tr2644: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -66954,8 +67060,8 @@ tr2633: } s->multiline = true; } - goto st848; -tr2634: + goto st857; +tr2645: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -66972,8 +67078,8 @@ tr2634: } s->multiline = false; } - goto st848; -tr2636: + goto st857; +tr2647: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -66986,11 +67092,11 @@ tr2636: { s->line_counter++; } - goto st848; -st848: + goto st857; +st857: if ( ++p == pe ) - goto _test_eof848; -case 848: + goto _test_eof857; +case 857: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67004,17 +67110,17 @@ case 848: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st848; - case 32: goto st848; - case 40: goto tr2640; - case 41: goto tr2641; - case 1034: goto tr2643; - case 1083: goto st862; + case 9: goto st857; + case 32: goto st857; + case 40: goto tr2651; + case 41: goto tr2652; + case 1034: goto tr2654; + case 1083: goto st871; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2642; - goto tr2638; -tr2642: + goto tr2653; + goto tr2649; +tr2653: { s->buffer_length = 0; } @@ -67026,8 +67132,8 @@ tr2642: p--; {goto st261;} } } - goto st849; -tr2648: + goto st858; +tr2659: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -67036,11 +67142,11 @@ tr2648: p--; {goto st261;} } } - goto st849; -st849: + goto st858; +st858: if ( ++p == pe ) - goto _test_eof849; -case 849: + goto _test_eof858; +case 858: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67054,17 +67160,17 @@ case 849: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2645; - case 32: goto tr2645; - case 40: goto tr2646; - case 41: goto tr2647; - case 1034: goto tr2649; - case 1083: goto tr2650; + case 9: goto tr2656; + case 32: goto tr2656; + case 40: goto tr2657; + case 41: goto tr2658; + case 1034: goto tr2660; + case 1083: goto tr2661; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2648; - goto tr2638; -tr2652: + goto tr2659; + goto tr2649; +tr2663: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -67072,8 +67178,8 @@ tr2652: } s->multiline = true; } - goto st850; -tr2653: + goto st859; +tr2664: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -67081,13 +67187,13 @@ tr2653: } s->multiline = false; } - goto st850; -tr2655: + goto st859; +tr2666: { s->line_counter++; } - goto st850; -tr2645: + goto st859; +tr2656: { s->buffer[s->buffer_length] = 0; @@ -67123,8 +67229,8 @@ tr2645: p--; {goto st261;} } } - goto st850; -tr2646: + goto st859; +tr2657: { s->buffer[s->buffer_length] = 0; @@ -67167,8 +67273,8 @@ tr2646: } s->multiline = true; } - goto st850; -tr2647: + goto st859; +tr2658: { s->buffer[s->buffer_length] = 0; @@ -67211,8 +67317,8 @@ tr2647: } s->multiline = false; } - goto st850; -tr2649: + goto st859; +tr2660: { s->buffer[s->buffer_length] = 0; @@ -67251,11 +67357,11 @@ tr2649: { s->line_counter++; } - goto st850; -st850: + goto st859; +st859: if ( ++p == pe ) - goto _test_eof850; -case 850: + goto _test_eof859; +case 859: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67269,17 +67375,17 @@ case 850: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st850; - case 32: goto st850; - case 40: goto tr2652; - case 41: goto tr2653; - case 1034: goto tr2655; - case 1083: goto st861; + case 9: goto st859; + case 32: goto st859; + case 40: goto tr2663; + case 41: goto tr2664; + case 1034: goto tr2666; + case 1083: goto st870; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2654; - goto tr2638; -tr2654: + goto tr2665; + goto tr2649; +tr2665: { s->buffer_length = 0; } @@ -67291,8 +67397,8 @@ tr2654: p--; {goto st261;} } } - goto st851; -tr2660: + goto st860; +tr2671: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -67301,11 +67407,11 @@ tr2660: p--; {goto st261;} } } - goto st851; -st851: + goto st860; +st860: if ( ++p == pe ) - goto _test_eof851; -case 851: + goto _test_eof860; +case 860: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67319,17 +67425,17 @@ case 851: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2657; - case 32: goto tr2657; - case 40: goto tr2658; - case 41: goto tr2659; - case 1034: goto tr2661; - case 1083: goto tr2662; + case 9: goto tr2668; + case 32: goto tr2668; + case 40: goto tr2669; + case 41: goto tr2670; + case 1034: goto tr2672; + case 1083: goto tr2673; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2660; - goto tr2638; -tr2664: + goto tr2671; + goto tr2649; +tr2675: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -67337,8 +67443,8 @@ tr2664: } s->multiline = true; } - goto st852; -tr2665: + goto st861; +tr2676: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -67346,13 +67452,13 @@ tr2665: } s->multiline = false; } - goto st852; -tr2667: + goto st861; +tr2678: { s->line_counter++; } - goto st852; -tr2657: + goto st861; +tr2668: { s->buffer[s->buffer_length] = 0; @@ -67388,8 +67494,8 @@ tr2657: p--; {goto st261;} } } - goto st852; -tr2658: + goto st861; +tr2669: { s->buffer[s->buffer_length] = 0; @@ -67432,8 +67538,8 @@ tr2658: } s->multiline = true; } - goto st852; -tr2659: + goto st861; +tr2670: { s->buffer[s->buffer_length] = 0; @@ -67476,8 +67582,8 @@ tr2659: } s->multiline = false; } - goto st852; -tr2661: + goto st861; +tr2672: { s->buffer[s->buffer_length] = 0; @@ -67516,11 +67622,11 @@ tr2661: { s->line_counter++; } - goto st852; -st852: + goto st861; +st861: if ( ++p == pe ) - goto _test_eof852; -case 852: + goto _test_eof861; +case 861: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67534,17 +67640,17 @@ case 852: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st852; - case 32: goto st852; - case 40: goto tr2664; - case 41: goto tr2665; - case 1034: goto tr2667; - case 1083: goto st860; + case 9: goto st861; + case 32: goto st861; + case 40: goto tr2675; + case 41: goto tr2676; + case 1034: goto tr2678; + case 1083: goto st869; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2666; - goto tr1746; -tr2666: + goto tr2677; + goto tr1757; +tr2677: { s->number64 = 0; } @@ -67562,8 +67668,8 @@ tr2666: p--; {goto st261;} } } - goto st853; -tr2672: + goto st862; +tr2683: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -67578,11 +67684,11 @@ tr2672: p--; {goto st261;} } } - goto st853; -st853: + goto st862; +st862: if ( ++p == pe ) - goto _test_eof853; -case 853: + goto _test_eof862; +case 862: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67596,17 +67702,17 @@ case 853: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2669; - case 32: goto tr2669; - case 40: goto tr2670; - case 41: goto tr2671; - case 1034: goto tr2673; - case 1083: goto tr2674; + case 9: goto tr2680; + case 32: goto tr2680; + case 40: goto tr2681; + case 41: goto tr2682; + case 1034: goto tr2684; + case 1083: goto tr2685; } if ( 48 <= _widec && _widec <= 57 ) - goto tr2672; - goto tr1746; -tr2676: + goto tr2683; + goto tr1757; +tr2687: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -67614,8 +67720,8 @@ tr2676: } s->multiline = true; } - goto st854; -tr2677: + goto st863; +tr2688: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -67623,13 +67729,13 @@ tr2677: } s->multiline = false; } - goto st854; -tr2679: + goto st863; +tr2690: { s->line_counter++; } - goto st854; -tr2669: + goto st863; +tr2680: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -67639,8 +67745,8 @@ tr2669: p--; {goto st261;} } } - goto st854; -tr2670: + goto st863; +tr2681: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -67657,8 +67763,8 @@ tr2670: } s->multiline = true; } - goto st854; -tr2671: + goto st863; +tr2682: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -67675,8 +67781,8 @@ tr2671: } s->multiline = false; } - goto st854; -tr2673: + goto st863; +tr2684: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -67689,11 +67795,11 @@ tr2673: { s->line_counter++; } - goto st854; -st854: + goto st863; +st863: if ( ++p == pe ) - goto _test_eof854; -case 854: + goto _test_eof863; +case 863: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67707,35 +67813,35 @@ case 854: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st854; - case 32: goto st854; - case 40: goto tr2676; - case 41: goto tr2677; - case 42: goto tr2678; - case 92: goto tr2678; - case 95: goto tr2678; - case 1034: goto tr2679; - case 1083: goto st859; + case 9: goto st863; + case 32: goto st863; + case 40: goto tr2687; + case 41: goto tr2688; + case 42: goto tr2689; + case 92: goto tr2689; + case 95: goto tr2689; + case 1034: goto tr2690; + case 1083: goto st868; } if ( _widec < 64 ) { if ( 45 <= _widec && _widec <= 57 ) - goto tr2678; + goto tr2689; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2678; + goto tr2689; } else - goto tr2678; + goto tr2689; goto tr71; -tr2678: +tr2689: { s->dname = rdata_tail; } - { p--; {stack[top++] = 855; goto st263;} } - goto st855; -st855: + { p--; {stack[top++] = 864; goto st263;} } + goto st864; +st864: if ( ++p == pe ) - goto _test_eof855; -case 855: + goto _test_eof864; +case 864: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67749,15 +67855,15 @@ case 855: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2681; - case 32: goto tr2681; - case 40: goto tr2682; - case 41: goto tr2683; - case 1034: goto tr2684; - case 1083: goto tr2685; + case 9: goto tr2692; + case 32: goto tr2692; + case 40: goto tr2693; + case 41: goto tr2694; + case 1034: goto tr2695; + case 1083: goto tr2696; } goto tr71; -tr2687: +tr2698: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -67765,8 +67871,8 @@ tr2687: } s->multiline = true; } - goto st856; -tr2688: + goto st865; +tr2699: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -67774,18 +67880,18 @@ tr2688: } s->multiline = false; } - goto st856; -tr2690: + goto st865; +tr2701: { s->line_counter++; } - goto st856; -tr2681: + goto st865; +tr2692: { rdata_tail += s->dname_tmp_length; } - goto st856; -tr2682: + goto st865; +tr2693: { rdata_tail += s->dname_tmp_length; } @@ -67796,8 +67902,8 @@ tr2682: } s->multiline = true; } - goto st856; -tr2683: + goto st865; +tr2694: { rdata_tail += s->dname_tmp_length; } @@ -67808,19 +67914,19 @@ tr2683: } s->multiline = false; } - goto st856; -tr2684: + goto st865; +tr2695: { rdata_tail += s->dname_tmp_length; } { s->line_counter++; } - goto st856; -st856: + goto st865; +st865: if ( ++p == pe ) - goto _test_eof856; -case 856: + goto _test_eof865; +case 865: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67834,30 +67940,30 @@ case 856: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st856; - case 32: goto st856; - case 40: goto tr2687; - case 41: goto tr2688; - case 43: goto tr2689; - case 1034: goto tr2690; - case 1083: goto st858; + case 9: goto st865; + case 32: goto st865; + case 40: goto tr2698; + case 41: goto tr2699; + case 43: goto tr2700; + case 1034: goto tr2701; + case 1083: goto st867; } if ( _widec < 65 ) { if ( 47 <= _widec && _widec <= 57 ) - goto tr2689; + goto tr2700; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr2689; + goto tr2700; } else - goto tr2689; + goto tr2700; goto tr71; -tr2689: - { p--; {stack[top++] = 857; goto st322;} } - goto st857; -st857: +tr2700: + { p--; {stack[top++] = 866; goto st322;} } + goto st866; +st866: if ( ++p == pe ) - goto _test_eof857; -case 857: + goto _test_eof866; +case 866: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -67871,29 +67977,29 @@ case 857: !s->multiline ) _widec += 256; } switch( _widec ) { - case 1546: goto tr2692; - case 1595: goto tr2692; + case 1546: goto tr2703; + case 1595: goto tr2703; } goto tr71; -tr2692: +tr2703: { p--; {cs = stack[--top];goto _again;} } - goto st1183; -st1183: + goto st1192; +st1192: if ( ++p == pe ) - goto _test_eof1183; -case 1183: + goto _test_eof1192; +case 1192: goto st0; -tr2685: +tr2696: { rdata_tail += s->dname_tmp_length; } - goto st858; -st858: + goto st867; +st867: if ( ++p == pe ) - goto _test_eof858; -case 858: + goto _test_eof867; +case 867: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -67913,11 +68019,11 @@ case 858: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2690; + goto tr2701; if ( 896 <= _widec && _widec <= 1151 ) - goto st858; + goto st867; goto tr71; -tr2674: +tr2685: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -67927,11 +68033,11 @@ tr2674: p--; {goto st261;} } } - goto st859; -st859: + goto st868; +st868: if ( ++p == pe ) - goto _test_eof859; -case 859: + goto _test_eof868; +case 868: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -67951,11 +68057,11 @@ case 859: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2679; + goto tr2690; if ( 896 <= _widec && _widec <= 1151 ) - goto st859; + goto st868; goto tr71; -tr2662: +tr2673: { s->buffer[s->buffer_length] = 0; @@ -67991,11 +68097,11 @@ tr2662: p--; {goto st261;} } } - goto st860; -st860: + goto st869; +st869: if ( ++p == pe ) - goto _test_eof860; -case 860: + goto _test_eof869; +case 869: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -68015,11 +68121,11 @@ case 860: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2667; + goto tr2678; if ( 896 <= _widec && _widec <= 1151 ) - goto st860; + goto st869; goto tr71; -tr2650: +tr2661: { s->buffer[s->buffer_length] = 0; @@ -68055,11 +68161,11 @@ tr2650: p--; {goto st261;} } } - goto st861; -st861: + goto st870; +st870: if ( ++p == pe ) - goto _test_eof861; -case 861: + goto _test_eof870; +case 870: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -68079,11 +68185,11 @@ case 861: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2655; + goto tr2666; if ( 896 <= _widec && _widec <= 1151 ) - goto st861; + goto st870; goto tr71; -tr2637: +tr2648: { if (s->number64 <= UINT32_MAX) { *((uint32_t *)rdata_tail) = htonl((uint32_t)(s->number64)); @@ -68093,11 +68199,11 @@ tr2637: p--; {goto st261;} } } - goto st862; -st862: + goto st871; +st871: if ( ++p == pe ) - goto _test_eof862; -case 862: + goto _test_eof871; +case 871: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -68117,11 +68223,11 @@ case 862: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2643; + goto tr2654; if ( 896 <= _widec && _widec <= 1151 ) - goto st862; + goto st871; goto tr71; -tr2625: +tr2636: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -68131,11 +68237,11 @@ tr2625: p--; {goto st261;} } } - goto st863; -st863: + goto st872; +st872: if ( ++p == pe ) - goto _test_eof863; -case 863: + goto _test_eof872; +case 872: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -68155,14 +68261,14 @@ case 863: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2630; + goto tr2641; if ( 896 <= _widec && _widec <= 1151 ) - goto st863; + goto st872; goto tr71; -st864: +st873: if ( ++p == pe ) - goto _test_eof864; -case 864: + goto _test_eof873; +case 873: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -68182,11 +68288,11 @@ case 864: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2617; + goto tr2628; if ( 896 <= _widec && _widec <= 1151 ) - goto st864; + goto st873; goto tr71; -tr3008: +tr3019: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -68196,137 +68302,137 @@ tr3008: p--; {goto st261;} } } - goto st865; -tr2607: + goto st874; +tr2618: { type_num(KNOT_RRTYPE_A, &rdata_tail); } - goto st865; -tr2699: + goto st874; +tr2710: { type_num(KNOT_RRTYPE_AAAA, &rdata_tail); } - goto st865; -tr2707: + goto st874; +tr2718: { type_num(KNOT_RRTYPE_AFSDB, &rdata_tail); } - goto st865; -tr2713: + goto st874; +tr2724: { type_num(KNOT_RRTYPE_APL, &rdata_tail); } - goto st865; -tr2723: - { type_num(KNOT_RRTYPE_CAA, &rdata_tail); } - goto st865; + goto st874; tr2734: + { type_num(KNOT_RRTYPE_CAA, &rdata_tail); } + goto st874; +tr2745: { type_num(KNOT_RRTYPE_CDNSKEY, &rdata_tail); } - goto st865; -tr2739: + goto st874; +tr2750: { type_num(KNOT_RRTYPE_CDS, &rdata_tail); } - goto st865; -tr2746: + goto st874; +tr2757: { type_num(KNOT_RRTYPE_CERT, &rdata_tail); } - goto st865; -tr2754: - { type_num(KNOT_RRTYPE_CNAME, &rdata_tail); } - goto st865; + goto st874; tr2765: + { type_num(KNOT_RRTYPE_CNAME, &rdata_tail); } + goto st874; +tr2776: { type_num(KNOT_RRTYPE_DHCID, &rdata_tail); } - goto st865; -tr2774: + goto st874; +tr2785: { type_num(KNOT_RRTYPE_DNAME, &rdata_tail); } - goto st865; -tr2782: + goto st874; +tr2793: { type_num(KNOT_RRTYPE_DNSKEY, &rdata_tail); } - goto st865; -tr2787: + goto st874; +tr2798: { type_num(KNOT_RRTYPE_DS, &rdata_tail); } - goto st865; -tr2797: + goto st874; +tr2808: { type_num(KNOT_RRTYPE_EUI48, &rdata_tail); } - goto st865; -tr2803: + goto st874; +tr2814: { type_num(KNOT_RRTYPE_EUI64, &rdata_tail); } - goto st865; -tr2812: + goto st874; +tr2823: { type_num(KNOT_RRTYPE_HINFO, &rdata_tail); } - goto st865; -tr2824: + goto st874; +tr2835: { type_num(KNOT_RRTYPE_IPSECKEY, &rdata_tail); } - goto st865; -tr2832: + goto st874; +tr2843: { type_num(KNOT_RRTYPE_KEY, &rdata_tail); } - goto st865; -tr2837: + goto st874; +tr2848: { type_num(KNOT_RRTYPE_KX, &rdata_tail); } - goto st865; -tr2847: + goto st874; +tr2858: { type_num(KNOT_RRTYPE_L32, &rdata_tail); } - goto st865; -tr2853: + goto st874; +tr2864: { type_num(KNOT_RRTYPE_L64, &rdata_tail); } - goto st865; -tr2859: + goto st874; +tr2870: { type_num(KNOT_RRTYPE_LOC, &rdata_tail); } - goto st865; -tr2864: + goto st874; +tr2875: { type_num(KNOT_RRTYPE_LP, &rdata_tail); } - goto st865; -tr2874: + goto st874; +tr2885: { type_num(KNOT_RRTYPE_MINFO, &rdata_tail); } - goto st865; -tr2879: - { type_num(KNOT_RRTYPE_MX, &rdata_tail); } - goto st865; + goto st874; tr2890: + { type_num(KNOT_RRTYPE_MX, &rdata_tail); } + goto st874; +tr2901: { type_num(KNOT_RRTYPE_NAPTR, &rdata_tail); } - goto st865; -tr2896: + goto st874; +tr2907: { type_num(KNOT_RRTYPE_NID, &rdata_tail); } - goto st865; -tr2902: + goto st874; +tr2913: { type_num(KNOT_RRTYPE_NS, &rdata_tail); } - goto st865; -tr2909: + goto st874; +tr2920: { type_num(KNOT_RRTYPE_NSEC, &rdata_tail); } - goto st865; -tr2915: + goto st874; +tr2926: { type_num(KNOT_RRTYPE_NSEC3, &rdata_tail); } - goto st865; -tr2924: + goto st874; +tr2935: { type_num(KNOT_RRTYPE_NSEC3PARAM, &rdata_tail); } - goto st865; -tr2931: + goto st874; +tr2942: { type_num(KNOT_RRTYPE_PTR, &rdata_tail); } - goto st865; -tr2939: + goto st874; +tr2950: { type_num(KNOT_RRTYPE_RP, &rdata_tail); } - goto st865; -tr2947: + goto st874; +tr2958: { type_num(KNOT_RRTYPE_RRSIG, &rdata_tail); } - goto st865; -tr2952: + goto st874; +tr2963: { type_num(KNOT_RRTYPE_RT, &rdata_tail); } - goto st865; -tr2962: + goto st874; +tr2973: { type_num(KNOT_RRTYPE_SOA, &rdata_tail); } - goto st865; -tr2968: + goto st874; +tr2979: { type_num(KNOT_RRTYPE_SPF, &rdata_tail); } - goto st865; -tr2974: + goto st874; +tr2985: { type_num(KNOT_RRTYPE_SRV, &rdata_tail); } - goto st865; -tr2982: + goto st874; +tr2993: { type_num(KNOT_RRTYPE_SSHFP, &rdata_tail); } - goto st865; -tr2992: + goto st874; +tr3003: { type_num(KNOT_RRTYPE_TLSA, &rdata_tail); } - goto st865; -tr2998: + goto st874; +tr3009: { type_num(KNOT_RRTYPE_TXT, &rdata_tail); } - goto st865; -tr3015: + goto st874; +tr3026: { type_num(KNOT_RRTYPE_URI, &rdata_tail); } - goto st865; -st865: + goto st874; +st874: if ( ++p == pe ) - goto _test_eof865; -case 865: + goto _test_eof874; +case 874: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -68346,154 +68452,19 @@ case 865: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr2612; + goto tr2623; if ( 896 <= _widec && _widec <= 1151 ) - goto st865; + goto st874; goto tr71; -st866: - if ( ++p == pe ) - goto _test_eof866; -case 866: - switch( (*p) ) { - case 65: goto st867; - case 97: goto st867; - } - goto tr2584; -st867: - if ( ++p == pe ) - goto _test_eof867; -case 867: - switch( (*p) ) { - case 65: goto st868; - case 97: goto st868; - } - goto tr2584; -st868: - if ( ++p == pe ) - goto _test_eof868; -case 868: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - switch( _widec ) { - case 9: goto tr2695; - case 32: goto tr2695; - case 40: goto tr2696; - case 41: goto tr2697; - case 1034: goto tr2698; - case 1083: goto tr2699; - } - goto tr2584; -st869: - if ( ++p == pe ) - goto _test_eof869; -case 869: - switch( (*p) ) { - case 83: goto st870; - case 115: goto st870; - } - goto tr2584; -st870: - if ( ++p == pe ) - goto _test_eof870; -case 870: - switch( (*p) ) { - case 68: goto st871; - case 100: goto st871; - } - goto tr2584; -st871: - if ( ++p == pe ) - goto _test_eof871; -case 871: - switch( (*p) ) { - case 66: goto st872; - case 98: goto st872; - } - goto tr2584; -st872: - if ( ++p == pe ) - goto _test_eof872; -case 872: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - switch( _widec ) { - case 9: goto tr2703; - case 32: goto tr2703; - case 40: goto tr2704; - case 41: goto tr2705; - case 1034: goto tr2706; - case 1083: goto tr2707; - } - goto tr2584; -st873: - if ( ++p == pe ) - goto _test_eof873; -case 873: - switch( (*p) ) { - case 76: goto st874; - case 108: goto st874; - } - goto tr2584; -st874: - if ( ++p == pe ) - goto _test_eof874; -case 874: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - switch( _widec ) { - case 9: goto tr2709; - case 32: goto tr2709; - case 40: goto tr2710; - case 41: goto tr2711; - case 1034: goto tr2712; - case 1083: goto tr2713; - } - goto tr2584; st875: if ( ++p == pe ) goto _test_eof875; case 875: switch( (*p) ) { case 65: goto st876; - case 68: goto st878; - case 69: goto st885; - case 78: goto st888; case 97: goto st876; - case 100: goto st878; - case 101: goto st885; - case 110: goto st888; } - goto tr2584; + goto tr2595; st876: if ( ++p == pe ) goto _test_eof876; @@ -68502,7 +68473,7 @@ case 876: case 65: goto st877; case 97: goto st877; } - goto tr2584; + goto tr2595; st877: if ( ++p == pe ) goto _test_eof877; @@ -68520,61 +68491,75 @@ case 877: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2719; - case 32: goto tr2719; - case 40: goto tr2720; - case 41: goto tr2721; - case 1034: goto tr2722; - case 1083: goto tr2723; - } - goto tr2584; + case 9: goto tr2706; + case 32: goto tr2706; + case 40: goto tr2707; + case 41: goto tr2708; + case 1034: goto tr2709; + case 1083: goto tr2710; + } + goto tr2595; st878: if ( ++p == pe ) goto _test_eof878; case 878: switch( (*p) ) { - case 78: goto st879; - case 83: goto st884; - case 110: goto st879; - case 115: goto st884; + case 83: goto st879; + case 115: goto st879; } - goto tr2584; + goto tr2595; st879: if ( ++p == pe ) goto _test_eof879; case 879: switch( (*p) ) { - case 83: goto st880; - case 115: goto st880; + case 68: goto st880; + case 100: goto st880; } - goto tr2584; + goto tr2595; st880: if ( ++p == pe ) goto _test_eof880; case 880: switch( (*p) ) { - case 75: goto st881; - case 107: goto st881; + case 66: goto st881; + case 98: goto st881; } - goto tr2584; + goto tr2595; st881: if ( ++p == pe ) goto _test_eof881; case 881: - switch( (*p) ) { - case 69: goto st882; - case 101: goto st882; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; } - goto tr2584; + switch( _widec ) { + case 9: goto tr2714; + case 32: goto tr2714; + case 40: goto tr2715; + case 41: goto tr2716; + case 1034: goto tr2717; + case 1083: goto tr2718; + } + goto tr2595; st882: if ( ++p == pe ) goto _test_eof882; case 882: switch( (*p) ) { - case 89: goto st883; - case 121: goto st883; + case 76: goto st883; + case 108: goto st883; } - goto tr2584; + goto tr2595; st883: if ( ++p == pe ) goto _test_eof883; @@ -68592,61 +68577,42 @@ case 883: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2730; - case 32: goto tr2730; - case 40: goto tr2731; - case 41: goto tr2732; - case 1034: goto tr2733; - case 1083: goto tr2734; - } - goto tr2584; + case 9: goto tr2720; + case 32: goto tr2720; + case 40: goto tr2721; + case 41: goto tr2722; + case 1034: goto tr2723; + case 1083: goto tr2724; + } + goto tr2595; st884: if ( ++p == pe ) goto _test_eof884; case 884: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; + switch( (*p) ) { + case 65: goto st885; + case 68: goto st887; + case 69: goto st894; + case 78: goto st897; + case 97: goto st885; + case 100: goto st887; + case 101: goto st894; + case 110: goto st897; } - switch( _widec ) { - case 9: goto tr2735; - case 32: goto tr2735; - case 40: goto tr2736; - case 41: goto tr2737; - case 1034: goto tr2738; - case 1083: goto tr2739; - } - goto tr2584; + goto tr2595; st885: if ( ++p == pe ) goto _test_eof885; case 885: switch( (*p) ) { - case 82: goto st886; - case 114: goto st886; + case 65: goto st886; + case 97: goto st886; } - goto tr2584; + goto tr2595; st886: if ( ++p == pe ) goto _test_eof886; case 886: - switch( (*p) ) { - case 84: goto st887; - case 116: goto st887; - } - goto tr2584; -st887: - if ( ++p == pe ) - goto _test_eof887; -case 887: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -68660,32 +68626,43 @@ case 887: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2742; - case 32: goto tr2742; - case 40: goto tr2743; - case 41: goto tr2744; - case 1034: goto tr2745; - case 1083: goto tr2746; - } - goto tr2584; + case 9: goto tr2730; + case 32: goto tr2730; + case 40: goto tr2731; + case 41: goto tr2732; + case 1034: goto tr2733; + case 1083: goto tr2734; + } + goto tr2595; +st887: + if ( ++p == pe ) + goto _test_eof887; +case 887: + switch( (*p) ) { + case 78: goto st888; + case 83: goto st893; + case 110: goto st888; + case 115: goto st893; + } + goto tr2595; st888: if ( ++p == pe ) goto _test_eof888; case 888: switch( (*p) ) { - case 65: goto st889; - case 97: goto st889; + case 83: goto st889; + case 115: goto st889; } - goto tr2584; + goto tr2595; st889: if ( ++p == pe ) goto _test_eof889; case 889: switch( (*p) ) { - case 77: goto st890; - case 109: goto st890; + case 75: goto st890; + case 107: goto st890; } - goto tr2584; + goto tr2595; st890: if ( ++p == pe ) goto _test_eof890; @@ -68694,11 +68671,20 @@ case 890: case 69: goto st891; case 101: goto st891; } - goto tr2584; + goto tr2595; st891: if ( ++p == pe ) goto _test_eof891; case 891: + switch( (*p) ) { + case 89: goto st892; + case 121: goto st892; + } + goto tr2595; +st892: + if ( ++p == pe ) + goto _test_eof892; +case 892: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -68712,54 +68698,57 @@ case 891: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2750; - case 32: goto tr2750; - case 40: goto tr2751; - case 41: goto tr2752; - case 1034: goto tr2753; - case 1083: goto tr2754; - } - goto tr2584; -st892: - if ( ++p == pe ) - goto _test_eof892; -case 892: - switch( (*p) ) { - case 72: goto st893; - case 78: goto st897; - case 83: goto st905; - case 104: goto st893; - case 110: goto st897; - case 115: goto st905; - } - goto tr2584; + case 9: goto tr2741; + case 32: goto tr2741; + case 40: goto tr2742; + case 41: goto tr2743; + case 1034: goto tr2744; + case 1083: goto tr2745; + } + goto tr2595; st893: if ( ++p == pe ) goto _test_eof893; case 893: - switch( (*p) ) { - case 67: goto st894; - case 99: goto st894; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; } - goto tr2584; + switch( _widec ) { + case 9: goto tr2746; + case 32: goto tr2746; + case 40: goto tr2747; + case 41: goto tr2748; + case 1034: goto tr2749; + case 1083: goto tr2750; + } + goto tr2595; st894: if ( ++p == pe ) goto _test_eof894; case 894: switch( (*p) ) { - case 73: goto st895; - case 105: goto st895; + case 82: goto st895; + case 114: goto st895; } - goto tr2584; + goto tr2595; st895: if ( ++p == pe ) goto _test_eof895; case 895: switch( (*p) ) { - case 68: goto st896; - case 100: goto st896; + case 84: goto st896; + case 116: goto st896; } - goto tr2584; + goto tr2595; st896: if ( ++p == pe ) goto _test_eof896; @@ -68777,25 +68766,23 @@ case 896: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2761; - case 32: goto tr2761; - case 40: goto tr2762; - case 41: goto tr2763; - case 1034: goto tr2764; - case 1083: goto tr2765; - } - goto tr2584; + case 9: goto tr2753; + case 32: goto tr2753; + case 40: goto tr2754; + case 41: goto tr2755; + case 1034: goto tr2756; + case 1083: goto tr2757; + } + goto tr2595; st897: if ( ++p == pe ) goto _test_eof897; case 897: switch( (*p) ) { case 65: goto st898; - case 83: goto st901; case 97: goto st898; - case 115: goto st901; } - goto tr2584; + goto tr2595; st898: if ( ++p == pe ) goto _test_eof898; @@ -68804,7 +68791,7 @@ case 898: case 77: goto st899; case 109: goto st899; } - goto tr2584; + goto tr2595; st899: if ( ++p == pe ) goto _test_eof899; @@ -68813,7 +68800,7 @@ case 899: case 69: goto st900; case 101: goto st900; } - goto tr2584; + goto tr2595; st900: if ( ++p == pe ) goto _test_eof900; @@ -68831,66 +68818,54 @@ case 900: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2770; - case 32: goto tr2770; - case 40: goto tr2771; - case 41: goto tr2772; - case 1034: goto tr2773; - case 1083: goto tr2774; - } - goto tr2584; + case 9: goto tr2761; + case 32: goto tr2761; + case 40: goto tr2762; + case 41: goto tr2763; + case 1034: goto tr2764; + case 1083: goto tr2765; + } + goto tr2595; st901: if ( ++p == pe ) goto _test_eof901; case 901: switch( (*p) ) { - case 75: goto st902; - case 107: goto st902; - } - goto tr2584; + case 72: goto st902; + case 78: goto st906; + case 83: goto st914; + case 104: goto st902; + case 110: goto st906; + case 115: goto st914; + } + goto tr2595; st902: if ( ++p == pe ) goto _test_eof902; case 902: switch( (*p) ) { - case 69: goto st903; - case 101: goto st903; + case 67: goto st903; + case 99: goto st903; } - goto tr2584; + goto tr2595; st903: if ( ++p == pe ) goto _test_eof903; case 903: switch( (*p) ) { - case 89: goto st904; - case 121: goto st904; + case 73: goto st904; + case 105: goto st904; } - goto tr2584; + goto tr2595; st904: if ( ++p == pe ) goto _test_eof904; case 904: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; + switch( (*p) ) { + case 68: goto st905; + case 100: goto st905; } - switch( _widec ) { - case 9: goto tr2778; - case 32: goto tr2778; - case 40: goto tr2779; - case 41: goto tr2780; - case 1034: goto tr2781; - case 1083: goto tr2782; - } - goto tr2584; + goto tr2595; st905: if ( ++p == pe ) goto _test_eof905; @@ -68908,52 +68883,47 @@ case 905: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2783; - case 32: goto tr2783; - case 40: goto tr2784; - case 41: goto tr2785; - case 1034: goto tr2786; - case 1083: goto tr2787; - } - goto tr2584; + case 9: goto tr2772; + case 32: goto tr2772; + case 40: goto tr2773; + case 41: goto tr2774; + case 1034: goto tr2775; + case 1083: goto tr2776; + } + goto tr2595; st906: if ( ++p == pe ) goto _test_eof906; case 906: switch( (*p) ) { - case 85: goto st907; - case 117: goto st907; + case 65: goto st907; + case 83: goto st910; + case 97: goto st907; + case 115: goto st910; } - goto tr2584; + goto tr2595; st907: if ( ++p == pe ) goto _test_eof907; case 907: switch( (*p) ) { - case 73: goto st908; - case 105: goto st908; + case 77: goto st908; + case 109: goto st908; } - goto tr2584; + goto tr2595; st908: if ( ++p == pe ) goto _test_eof908; case 908: switch( (*p) ) { - case 52: goto st909; - case 54: goto st911; + case 69: goto st909; + case 101: goto st909; } - goto tr2584; + goto tr2595; st909: if ( ++p == pe ) goto _test_eof909; case 909: - if ( (*p) == 56 ) - goto st910; - goto tr2584; -st910: - if ( ++p == pe ) - goto _test_eof910; -case 910: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -68967,25 +68937,45 @@ case 910: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2793; - case 32: goto tr2793; - case 40: goto tr2794; - case 41: goto tr2795; - case 1034: goto tr2796; - case 1083: goto tr2797; - } - goto tr2584; + case 9: goto tr2781; + case 32: goto tr2781; + case 40: goto tr2782; + case 41: goto tr2783; + case 1034: goto tr2784; + case 1083: goto tr2785; + } + goto tr2595; +st910: + if ( ++p == pe ) + goto _test_eof910; +case 910: + switch( (*p) ) { + case 75: goto st911; + case 107: goto st911; + } + goto tr2595; st911: if ( ++p == pe ) goto _test_eof911; case 911: - if ( (*p) == 52 ) - goto st912; - goto tr2584; + switch( (*p) ) { + case 69: goto st912; + case 101: goto st912; + } + goto tr2595; st912: if ( ++p == pe ) goto _test_eof912; case 912: + switch( (*p) ) { + case 89: goto st913; + case 121: goto st913; + } + goto tr2595; +st913: + if ( ++p == pe ) + goto _test_eof913; +case 913: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -68999,54 +68989,77 @@ case 912: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2799; - case 32: goto tr2799; - case 40: goto tr2800; - case 41: goto tr2801; - case 1034: goto tr2802; - case 1083: goto tr2803; - } - goto tr2584; -st913: - if ( ++p == pe ) - goto _test_eof913; -case 913: - switch( (*p) ) { - case 73: goto st914; - case 105: goto st914; - } - goto tr2584; + case 9: goto tr2789; + case 32: goto tr2789; + case 40: goto tr2790; + case 41: goto tr2791; + case 1034: goto tr2792; + case 1083: goto tr2793; + } + goto tr2595; st914: if ( ++p == pe ) goto _test_eof914; case 914: - switch( (*p) ) { - case 78: goto st915; - case 110: goto st915; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; } - goto tr2584; + switch( _widec ) { + case 9: goto tr2794; + case 32: goto tr2794; + case 40: goto tr2795; + case 41: goto tr2796; + case 1034: goto tr2797; + case 1083: goto tr2798; + } + goto tr2595; st915: if ( ++p == pe ) goto _test_eof915; case 915: switch( (*p) ) { - case 70: goto st916; - case 102: goto st916; + case 85: goto st916; + case 117: goto st916; } - goto tr2584; + goto tr2595; st916: if ( ++p == pe ) goto _test_eof916; case 916: switch( (*p) ) { - case 79: goto st917; - case 111: goto st917; + case 73: goto st917; + case 105: goto st917; } - goto tr2584; + goto tr2595; st917: if ( ++p == pe ) goto _test_eof917; case 917: + switch( (*p) ) { + case 52: goto st918; + case 54: goto st920; + } + goto tr2595; +st918: + if ( ++p == pe ) + goto _test_eof918; +case 918: + if ( (*p) == 56 ) + goto st919; + goto tr2595; +st919: + if ( ++p == pe ) + goto _test_eof919; +case 919: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69060,81 +69073,86 @@ case 917: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2808; - case 32: goto tr2808; - case 40: goto tr2809; - case 41: goto tr2810; - case 1034: goto tr2811; - case 1083: goto tr2812; - } - goto tr2584; -st918: - if ( ++p == pe ) - goto _test_eof918; -case 918: - switch( (*p) ) { - case 80: goto st919; - case 112: goto st919; - } - goto tr2584; -st919: - if ( ++p == pe ) - goto _test_eof919; -case 919: - switch( (*p) ) { - case 83: goto st920; - case 115: goto st920; - } - goto tr2584; + case 9: goto tr2804; + case 32: goto tr2804; + case 40: goto tr2805; + case 41: goto tr2806; + case 1034: goto tr2807; + case 1083: goto tr2808; + } + goto tr2595; st920: if ( ++p == pe ) goto _test_eof920; case 920: - switch( (*p) ) { - case 69: goto st921; - case 101: goto st921; - } - goto tr2584; + if ( (*p) == 52 ) + goto st921; + goto tr2595; st921: if ( ++p == pe ) goto _test_eof921; case 921: - switch( (*p) ) { - case 67: goto st922; - case 99: goto st922; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; } - goto tr2584; + switch( _widec ) { + case 9: goto tr2810; + case 32: goto tr2810; + case 40: goto tr2811; + case 41: goto tr2812; + case 1034: goto tr2813; + case 1083: goto tr2814; + } + goto tr2595; st922: if ( ++p == pe ) goto _test_eof922; case 922: switch( (*p) ) { - case 75: goto st923; - case 107: goto st923; + case 73: goto st923; + case 105: goto st923; } - goto tr2584; + goto tr2595; st923: if ( ++p == pe ) goto _test_eof923; case 923: switch( (*p) ) { - case 69: goto st924; - case 101: goto st924; + case 78: goto st924; + case 110: goto st924; } - goto tr2584; + goto tr2595; st924: if ( ++p == pe ) goto _test_eof924; case 924: switch( (*p) ) { - case 89: goto st925; - case 121: goto st925; + case 70: goto st925; + case 102: goto st925; } - goto tr2584; + goto tr2595; st925: if ( ++p == pe ) goto _test_eof925; case 925: + switch( (*p) ) { + case 79: goto st926; + case 111: goto st926; + } + goto tr2595; +st926: + if ( ++p == pe ) + goto _test_eof926; +case 926: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69148,136 +69166,77 @@ case 925: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2820; - case 32: goto tr2820; - case 40: goto tr2821; - case 41: goto tr2822; - case 1034: goto tr2823; - case 1083: goto tr2824; - } - goto tr2584; -st926: - if ( ++p == pe ) - goto _test_eof926; -case 926: - switch( (*p) ) { - case 69: goto st927; - case 88: goto st929; - case 101: goto st927; - case 120: goto st929; - } - goto tr2584; + case 9: goto tr2819; + case 32: goto tr2819; + case 40: goto tr2820; + case 41: goto tr2821; + case 1034: goto tr2822; + case 1083: goto tr2823; + } + goto tr2595; st927: if ( ++p == pe ) goto _test_eof927; case 927: switch( (*p) ) { - case 89: goto st928; - case 121: goto st928; + case 80: goto st928; + case 112: goto st928; } - goto tr2584; + goto tr2595; st928: if ( ++p == pe ) goto _test_eof928; case 928: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; + switch( (*p) ) { + case 83: goto st929; + case 115: goto st929; } - switch( _widec ) { - case 9: goto tr2828; - case 32: goto tr2828; - case 40: goto tr2829; - case 41: goto tr2830; - case 1034: goto tr2831; - case 1083: goto tr2832; - } - goto tr2584; + goto tr2595; st929: if ( ++p == pe ) goto _test_eof929; case 929: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; + switch( (*p) ) { + case 69: goto st930; + case 101: goto st930; } - switch( _widec ) { - case 9: goto tr2833; - case 32: goto tr2833; - case 40: goto tr2834; - case 41: goto tr2835; - case 1034: goto tr2836; - case 1083: goto tr2837; - } - goto tr2584; + goto tr2595; st930: if ( ++p == pe ) goto _test_eof930; case 930: switch( (*p) ) { - case 51: goto st931; - case 54: goto st933; - case 79: goto st935; - case 80: goto st937; - case 111: goto st935; - case 112: goto st937; - } - goto tr2584; + case 67: goto st931; + case 99: goto st931; + } + goto tr2595; st931: if ( ++p == pe ) goto _test_eof931; case 931: - if ( (*p) == 50 ) - goto st932; - goto tr2584; + switch( (*p) ) { + case 75: goto st932; + case 107: goto st932; + } + goto tr2595; st932: if ( ++p == pe ) goto _test_eof932; case 932: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; + switch( (*p) ) { + case 69: goto st933; + case 101: goto st933; } - switch( _widec ) { - case 9: goto tr2843; - case 32: goto tr2843; - case 40: goto tr2844; - case 41: goto tr2845; - case 1034: goto tr2846; - case 1083: goto tr2847; - } - goto tr2584; + goto tr2595; st933: if ( ++p == pe ) goto _test_eof933; case 933: - if ( (*p) == 52 ) - goto st934; - goto tr2584; + switch( (*p) ) { + case 89: goto st934; + case 121: goto st934; + } + goto tr2595; st934: if ( ++p == pe ) goto _test_eof934; @@ -69295,27 +69254,38 @@ case 934: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2849; - case 32: goto tr2849; - case 40: goto tr2850; - case 41: goto tr2851; - case 1034: goto tr2852; - case 1083: goto tr2853; - } - goto tr2584; + case 9: goto tr2831; + case 32: goto tr2831; + case 40: goto tr2832; + case 41: goto tr2833; + case 1034: goto tr2834; + case 1083: goto tr2835; + } + goto tr2595; st935: if ( ++p == pe ) goto _test_eof935; case 935: switch( (*p) ) { - case 67: goto st936; - case 99: goto st936; + case 69: goto st936; + case 88: goto st938; + case 101: goto st936; + case 120: goto st938; } - goto tr2584; + goto tr2595; st936: if ( ++p == pe ) goto _test_eof936; case 936: + switch( (*p) ) { + case 89: goto st937; + case 121: goto st937; + } + goto tr2595; +st937: + if ( ++p == pe ) + goto _test_eof937; +case 937: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69329,18 +69299,18 @@ case 936: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2855; - case 32: goto tr2855; - case 40: goto tr2856; - case 41: goto tr2857; - case 1034: goto tr2858; - case 1083: goto tr2859; - } - goto tr2584; -st937: + case 9: goto tr2839; + case 32: goto tr2839; + case 40: goto tr2840; + case 41: goto tr2841; + case 1034: goto tr2842; + case 1083: goto tr2843; + } + goto tr2595; +st938: if ( ++p == pe ) - goto _test_eof937; -case 937: + goto _test_eof938; +case 938: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69354,56 +69324,38 @@ case 937: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2860; - case 32: goto tr2860; - case 40: goto tr2861; - case 41: goto tr2862; - case 1034: goto tr2863; - case 1083: goto tr2864; - } - goto tr2584; -st938: - if ( ++p == pe ) - goto _test_eof938; -case 938: - switch( (*p) ) { - case 73: goto st939; - case 88: goto st943; - case 105: goto st939; - case 120: goto st943; - } - goto tr2584; + case 9: goto tr2844; + case 32: goto tr2844; + case 40: goto tr2845; + case 41: goto tr2846; + case 1034: goto tr2847; + case 1083: goto tr2848; + } + goto tr2595; st939: if ( ++p == pe ) goto _test_eof939; case 939: switch( (*p) ) { - case 78: goto st940; - case 110: goto st940; + case 51: goto st940; + case 54: goto st942; + case 79: goto st944; + case 80: goto st946; + case 111: goto st944; + case 112: goto st946; } - goto tr2584; + goto tr2595; st940: if ( ++p == pe ) goto _test_eof940; case 940: - switch( (*p) ) { - case 70: goto st941; - case 102: goto st941; - } - goto tr2584; + if ( (*p) == 50 ) + goto st941; + goto tr2595; st941: if ( ++p == pe ) goto _test_eof941; case 941: - switch( (*p) ) { - case 79: goto st942; - case 111: goto st942; - } - goto tr2584; -st942: - if ( ++p == pe ) - goto _test_eof942; -case 942: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69417,14 +69369,21 @@ case 942: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2870; - case 32: goto tr2870; - case 40: goto tr2871; - case 41: goto tr2872; - case 1034: goto tr2873; - case 1083: goto tr2874; - } - goto tr2584; + case 9: goto tr2854; + case 32: goto tr2854; + case 40: goto tr2855; + case 41: goto tr2856; + case 1034: goto tr2857; + case 1083: goto tr2858; + } + goto tr2595; +st942: + if ( ++p == pe ) + goto _test_eof942; +case 942: + if ( (*p) == 52 ) + goto st943; + goto tr2595; st943: if ( ++p == pe ) goto _test_eof943; @@ -69442,58 +69401,52 @@ case 943: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2875; - case 32: goto tr2875; - case 40: goto tr2876; - case 41: goto tr2877; - case 1034: goto tr2878; - case 1083: goto tr2879; - } - goto tr2584; + case 9: goto tr2860; + case 32: goto tr2860; + case 40: goto tr2861; + case 41: goto tr2862; + case 1034: goto tr2863; + case 1083: goto tr2864; + } + goto tr2595; st944: if ( ++p == pe ) goto _test_eof944; case 944: switch( (*p) ) { - case 65: goto st945; - case 73: goto st949; - case 83: goto st951; - case 97: goto st945; - case 105: goto st949; - case 115: goto st951; - } - goto tr2584; + case 67: goto st945; + case 99: goto st945; + } + goto tr2595; st945: if ( ++p == pe ) goto _test_eof945; case 945: - switch( (*p) ) { - case 80: goto st946; - case 112: goto st946; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; } - goto tr2584; + switch( _widec ) { + case 9: goto tr2866; + case 32: goto tr2866; + case 40: goto tr2867; + case 41: goto tr2868; + case 1034: goto tr2869; + case 1083: goto tr2870; + } + goto tr2595; st946: if ( ++p == pe ) goto _test_eof946; case 946: - switch( (*p) ) { - case 84: goto st947; - case 116: goto st947; - } - goto tr2584; -st947: - if ( ++p == pe ) - goto _test_eof947; -case 947: - switch( (*p) ) { - case 82: goto st948; - case 114: goto st948; - } - goto tr2584; -st948: - if ( ++p == pe ) - goto _test_eof948; -case 948: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69507,48 +69460,52 @@ case 948: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2886; - case 32: goto tr2886; - case 40: goto tr2887; - case 41: goto tr2888; - case 1034: goto tr2889; - case 1083: goto tr2890; + case 9: goto tr2871; + case 32: goto tr2871; + case 40: goto tr2872; + case 41: goto tr2873; + case 1034: goto tr2874; + case 1083: goto tr2875; + } + goto tr2595; +st947: + if ( ++p == pe ) + goto _test_eof947; +case 947: + switch( (*p) ) { + case 73: goto st948; + case 88: goto st952; + case 105: goto st948; + case 120: goto st952; + } + goto tr2595; +st948: + if ( ++p == pe ) + goto _test_eof948; +case 948: + switch( (*p) ) { + case 78: goto st949; + case 110: goto st949; } - goto tr2584; + goto tr2595; st949: if ( ++p == pe ) goto _test_eof949; case 949: switch( (*p) ) { - case 68: goto st950; - case 100: goto st950; + case 70: goto st950; + case 102: goto st950; } - goto tr2584; + goto tr2595; st950: if ( ++p == pe ) goto _test_eof950; case 950: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; + switch( (*p) ) { + case 79: goto st951; + case 111: goto st951; } - switch( _widec ) { - case 9: goto tr2892; - case 32: goto tr2892; - case 40: goto tr2893; - case 41: goto tr2894; - case 1034: goto tr2895; - case 1083: goto tr2896; - } - goto tr2584; + goto tr2595; st951: if ( ++p == pe ) goto _test_eof951; @@ -69566,29 +69523,18 @@ case 951: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2897; - case 32: goto tr2897; - case 40: goto tr2898; - case 41: goto tr2899; - case 69: goto st952; - case 101: goto st952; - case 1034: goto tr2901; - case 1083: goto tr2902; - } - goto tr2584; + case 9: goto tr2881; + case 32: goto tr2881; + case 40: goto tr2882; + case 41: goto tr2883; + case 1034: goto tr2884; + case 1083: goto tr2885; + } + goto tr2595; st952: if ( ++p == pe ) goto _test_eof952; case 952: - switch( (*p) ) { - case 67: goto st953; - case 99: goto st953; - } - goto tr2584; -st953: - if ( ++p == pe ) - goto _test_eof953; -case 953: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69602,51 +69548,45 @@ case 953: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2904; - case 32: goto tr2904; - case 40: goto tr2905; - case 41: goto tr2906; - case 51: goto st954; - case 1034: goto tr2908; - case 1083: goto tr2909; - } - goto tr2584; + case 9: goto tr2886; + case 32: goto tr2886; + case 40: goto tr2887; + case 41: goto tr2888; + case 1034: goto tr2889; + case 1083: goto tr2890; + } + goto tr2595; +st953: + if ( ++p == pe ) + goto _test_eof953; +case 953: + switch( (*p) ) { + case 65: goto st954; + case 73: goto st958; + case 83: goto st960; + case 97: goto st954; + case 105: goto st958; + case 115: goto st960; + } + goto tr2595; st954: if ( ++p == pe ) goto _test_eof954; case 954: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - switch( _widec ) { - case 9: goto tr2910; - case 32: goto tr2910; - case 40: goto tr2911; - case 41: goto tr2912; + switch( (*p) ) { case 80: goto st955; case 112: goto st955; - case 1034: goto tr2914; - case 1083: goto tr2915; } - goto tr2584; + goto tr2595; st955: if ( ++p == pe ) goto _test_eof955; case 955: switch( (*p) ) { - case 65: goto st956; - case 97: goto st956; + case 84: goto st956; + case 116: goto st956; } - goto tr2584; + goto tr2595; st956: if ( ++p == pe ) goto _test_eof956; @@ -69655,25 +69595,41 @@ case 956: case 82: goto st957; case 114: goto st957; } - goto tr2584; + goto tr2595; st957: if ( ++p == pe ) goto _test_eof957; case 957: - switch( (*p) ) { - case 65: goto st958; - case 97: goto st958; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + switch( _widec ) { + case 9: goto tr2897; + case 32: goto tr2897; + case 40: goto tr2898; + case 41: goto tr2899; + case 1034: goto tr2900; + case 1083: goto tr2901; } - goto tr2584; + goto tr2595; st958: if ( ++p == pe ) goto _test_eof958; case 958: switch( (*p) ) { - case 77: goto st959; - case 109: goto st959; + case 68: goto st959; + case 100: goto st959; } - goto tr2584; + goto tr2595; st959: if ( ++p == pe ) goto _test_eof959; @@ -69691,32 +69647,50 @@ case 959: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2920; - case 32: goto tr2920; - case 40: goto tr2921; - case 41: goto tr2922; - case 1034: goto tr2923; - case 1083: goto tr2924; - } - goto tr2584; + case 9: goto tr2903; + case 32: goto tr2903; + case 40: goto tr2904; + case 41: goto tr2905; + case 1034: goto tr2906; + case 1083: goto tr2907; + } + goto tr2595; st960: if ( ++p == pe ) goto _test_eof960; case 960: - switch( (*p) ) { - case 84: goto st961; - case 116: goto st961; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; } - goto tr2584; + switch( _widec ) { + case 9: goto tr2908; + case 32: goto tr2908; + case 40: goto tr2909; + case 41: goto tr2910; + case 69: goto st961; + case 101: goto st961; + case 1034: goto tr2912; + case 1083: goto tr2913; + } + goto tr2595; st961: if ( ++p == pe ) goto _test_eof961; case 961: switch( (*p) ) { - case 82: goto st962; - case 114: goto st962; + case 67: goto st962; + case 99: goto st962; } - goto tr2584; + goto tr2595; st962: if ( ++p == pe ) goto _test_eof962; @@ -69734,31 +69708,19 @@ case 962: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2927; - case 32: goto tr2927; - case 40: goto tr2928; - case 41: goto tr2929; - case 1034: goto tr2930; - case 1083: goto tr2931; - } - goto tr2584; + case 9: goto tr2915; + case 32: goto tr2915; + case 40: goto tr2916; + case 41: goto tr2917; + case 51: goto st963; + case 1034: goto tr2919; + case 1083: goto tr2920; + } + goto tr2595; st963: if ( ++p == pe ) goto _test_eof963; case 963: - switch( (*p) ) { - case 80: goto st964; - case 82: goto st965; - case 84: goto st969; - case 112: goto st964; - case 114: goto st965; - case 116: goto st969; - } - goto tr2584; -st964: - if ( ++p == pe ) - goto _test_eof964; -case 964: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69772,41 +69734,52 @@ case 964: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2935; - case 32: goto tr2935; - case 40: goto tr2936; - case 41: goto tr2937; - case 1034: goto tr2938; - case 1083: goto tr2939; - } - goto tr2584; + case 9: goto tr2921; + case 32: goto tr2921; + case 40: goto tr2922; + case 41: goto tr2923; + case 80: goto st964; + case 112: goto st964; + case 1034: goto tr2925; + case 1083: goto tr2926; + } + goto tr2595; +st964: + if ( ++p == pe ) + goto _test_eof964; +case 964: + switch( (*p) ) { + case 65: goto st965; + case 97: goto st965; + } + goto tr2595; st965: if ( ++p == pe ) goto _test_eof965; case 965: switch( (*p) ) { - case 83: goto st966; - case 115: goto st966; + case 82: goto st966; + case 114: goto st966; } - goto tr2584; + goto tr2595; st966: if ( ++p == pe ) goto _test_eof966; case 966: switch( (*p) ) { - case 73: goto st967; - case 105: goto st967; + case 65: goto st967; + case 97: goto st967; } - goto tr2584; + goto tr2595; st967: if ( ++p == pe ) goto _test_eof967; case 967: switch( (*p) ) { - case 71: goto st968; - case 103: goto st968; + case 77: goto st968; + case 109: goto st968; } - goto tr2584; + goto tr2595; st968: if ( ++p == pe ) goto _test_eof968; @@ -69824,67 +69797,36 @@ case 968: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2943; - case 32: goto tr2943; - case 40: goto tr2944; - case 41: goto tr2945; - case 1034: goto tr2946; - case 1083: goto tr2947; - } - goto tr2584; + case 9: goto tr2931; + case 32: goto tr2931; + case 40: goto tr2932; + case 41: goto tr2933; + case 1034: goto tr2934; + case 1083: goto tr2935; + } + goto tr2595; st969: if ( ++p == pe ) goto _test_eof969; case 969: - _widec = (*p); - if ( (*p) > 10 ) { - if ( 59 <= (*p) && (*p) <= 59 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; - } - } else if ( (*p) >= 10 ) { - _widec = (short)(640 + ((*p) - -128)); - if ( - s->multiline ) _widec += 256; + switch( (*p) ) { + case 84: goto st970; + case 116: goto st970; } - switch( _widec ) { - case 9: goto tr2948; - case 32: goto tr2948; - case 40: goto tr2949; - case 41: goto tr2950; - case 1034: goto tr2951; - case 1083: goto tr2952; - } - goto tr2584; + goto tr2595; st970: if ( ++p == pe ) goto _test_eof970; case 970: switch( (*p) ) { - case 79: goto st971; - case 80: goto st973; - case 82: goto st975; - case 83: goto st977; - case 111: goto st971; - case 112: goto st973; - case 114: goto st975; - case 115: goto st977; + case 82: goto st971; + case 114: goto st971; } - goto tr2584; + goto tr2595; st971: if ( ++p == pe ) goto _test_eof971; case 971: - switch( (*p) ) { - case 65: goto st972; - case 97: goto st972; - } - goto tr2584; -st972: - if ( ++p == pe ) - goto _test_eof972; -case 972: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69898,27 +69840,31 @@ case 972: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2958; - case 32: goto tr2958; - case 40: goto tr2959; - case 41: goto tr2960; - case 1034: goto tr2961; - case 1083: goto tr2962; - } - goto tr2584; -st973: + case 9: goto tr2938; + case 32: goto tr2938; + case 40: goto tr2939; + case 41: goto tr2940; + case 1034: goto tr2941; + case 1083: goto tr2942; + } + goto tr2595; +st972: if ( ++p == pe ) - goto _test_eof973; -case 973: + goto _test_eof972; +case 972: switch( (*p) ) { - case 70: goto st974; - case 102: goto st974; + case 80: goto st973; + case 82: goto st974; + case 84: goto st978; + case 112: goto st973; + case 114: goto st974; + case 116: goto st978; } - goto tr2584; -st974: + goto tr2595; +st973: if ( ++p == pe ) - goto _test_eof974; -case 974: + goto _test_eof973; +case 973: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69932,27 +69878,45 @@ case 974: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2964; - case 32: goto tr2964; - case 40: goto tr2965; - case 41: goto tr2966; - case 1034: goto tr2967; - case 1083: goto tr2968; - } - goto tr2584; + case 9: goto tr2946; + case 32: goto tr2946; + case 40: goto tr2947; + case 41: goto tr2948; + case 1034: goto tr2949; + case 1083: goto tr2950; + } + goto tr2595; +st974: + if ( ++p == pe ) + goto _test_eof974; +case 974: + switch( (*p) ) { + case 83: goto st975; + case 115: goto st975; + } + goto tr2595; st975: if ( ++p == pe ) goto _test_eof975; case 975: switch( (*p) ) { - case 86: goto st976; - case 118: goto st976; + case 73: goto st976; + case 105: goto st976; } - goto tr2584; + goto tr2595; st976: if ( ++p == pe ) goto _test_eof976; case 976: + switch( (*p) ) { + case 71: goto st977; + case 103: goto st977; + } + goto tr2595; +st977: + if ( ++p == pe ) + goto _test_eof977; +case 977: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -69966,45 +69930,67 @@ case 976: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2970; - case 32: goto tr2970; - case 40: goto tr2971; - case 41: goto tr2972; - case 1034: goto tr2973; - case 1083: goto tr2974; - } - goto tr2584; -st977: - if ( ++p == pe ) - goto _test_eof977; -case 977: - switch( (*p) ) { - case 72: goto st978; - case 104: goto st978; - } - goto tr2584; + case 9: goto tr2954; + case 32: goto tr2954; + case 40: goto tr2955; + case 41: goto tr2956; + case 1034: goto tr2957; + case 1083: goto tr2958; + } + goto tr2595; st978: if ( ++p == pe ) goto _test_eof978; case 978: - switch( (*p) ) { - case 70: goto st979; - case 102: goto st979; + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; } - goto tr2584; + switch( _widec ) { + case 9: goto tr2959; + case 32: goto tr2959; + case 40: goto tr2960; + case 41: goto tr2961; + case 1034: goto tr2962; + case 1083: goto tr2963; + } + goto tr2595; st979: if ( ++p == pe ) goto _test_eof979; case 979: switch( (*p) ) { - case 80: goto st980; - case 112: goto st980; - } - goto tr2584; + case 79: goto st980; + case 80: goto st982; + case 82: goto st984; + case 83: goto st986; + case 111: goto st980; + case 112: goto st982; + case 114: goto st984; + case 115: goto st986; + } + goto tr2595; st980: if ( ++p == pe ) goto _test_eof980; case 980: + switch( (*p) ) { + case 65: goto st981; + case 97: goto st981; + } + goto tr2595; +st981: + if ( ++p == pe ) + goto _test_eof981; +case 981: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70018,49 +70004,27 @@ case 980: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2978; - case 32: goto tr2978; - case 40: goto tr2979; - case 41: goto tr2980; - case 1034: goto tr2981; - case 1083: goto tr2982; - } - goto tr2584; -st981: - if ( ++p == pe ) - goto _test_eof981; -case 981: - switch( (*p) ) { - case 76: goto st982; - case 88: goto st985; - case 89: goto st987; - case 108: goto st982; - case 120: goto st985; - case 121: goto st987; - } - goto tr2584; + case 9: goto tr2969; + case 32: goto tr2969; + case 40: goto tr2970; + case 41: goto tr2971; + case 1034: goto tr2972; + case 1083: goto tr2973; + } + goto tr2595; st982: if ( ++p == pe ) goto _test_eof982; case 982: switch( (*p) ) { - case 83: goto st983; - case 115: goto st983; + case 70: goto st983; + case 102: goto st983; } - goto tr2584; + goto tr2595; st983: if ( ++p == pe ) goto _test_eof983; case 983: - switch( (*p) ) { - case 65: goto st984; - case 97: goto st984; - } - goto tr2584; -st984: - if ( ++p == pe ) - goto _test_eof984; -case 984: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70074,27 +70038,27 @@ case 984: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2988; - case 32: goto tr2988; - case 40: goto tr2989; - case 41: goto tr2990; - case 1034: goto tr2991; - case 1083: goto tr2992; - } - goto tr2584; -st985: + case 9: goto tr2975; + case 32: goto tr2975; + case 40: goto tr2976; + case 41: goto tr2977; + case 1034: goto tr2978; + case 1083: goto tr2979; + } + goto tr2595; +st984: if ( ++p == pe ) - goto _test_eof985; -case 985: + goto _test_eof984; +case 984: switch( (*p) ) { - case 84: goto st986; - case 116: goto st986; + case 86: goto st985; + case 118: goto st985; } - goto tr2584; -st986: + goto tr2595; +st985: if ( ++p == pe ) - goto _test_eof986; -case 986: + goto _test_eof985; +case 985: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70108,40 +70072,182 @@ case 986: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr2994; - case 32: goto tr2994; - case 40: goto tr2995; - case 41: goto tr2996; - case 1034: goto tr2997; - case 1083: goto tr2998; - } - goto tr2584; + case 9: goto tr2981; + case 32: goto tr2981; + case 40: goto tr2982; + case 41: goto tr2983; + case 1034: goto tr2984; + case 1083: goto tr2985; + } + goto tr2595; +st986: + if ( ++p == pe ) + goto _test_eof986; +case 986: + switch( (*p) ) { + case 72: goto st987; + case 104: goto st987; + } + goto tr2595; st987: if ( ++p == pe ) goto _test_eof987; case 987: switch( (*p) ) { - case 80: goto st988; - case 112: goto st988; + case 70: goto st988; + case 102: goto st988; } - goto tr2584; + goto tr2595; st988: if ( ++p == pe ) goto _test_eof988; case 988: switch( (*p) ) { - case 69: goto st989; - case 101: goto st989; + case 80: goto st989; + case 112: goto st989; } - goto tr2584; + goto tr2595; st989: if ( ++p == pe ) goto _test_eof989; case 989: + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + switch( _widec ) { + case 9: goto tr2989; + case 32: goto tr2989; + case 40: goto tr2990; + case 41: goto tr2991; + case 1034: goto tr2992; + case 1083: goto tr2993; + } + goto tr2595; +st990: + if ( ++p == pe ) + goto _test_eof990; +case 990: + switch( (*p) ) { + case 76: goto st991; + case 88: goto st994; + case 89: goto st996; + case 108: goto st991; + case 120: goto st994; + case 121: goto st996; + } + goto tr2595; +st991: + if ( ++p == pe ) + goto _test_eof991; +case 991: + switch( (*p) ) { + case 83: goto st992; + case 115: goto st992; + } + goto tr2595; +st992: + if ( ++p == pe ) + goto _test_eof992; +case 992: + switch( (*p) ) { + case 65: goto st993; + case 97: goto st993; + } + goto tr2595; +st993: + if ( ++p == pe ) + goto _test_eof993; +case 993: + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + switch( _widec ) { + case 9: goto tr2999; + case 32: goto tr2999; + case 40: goto tr3000; + case 41: goto tr3001; + case 1034: goto tr3002; + case 1083: goto tr3003; + } + goto tr2595; +st994: + if ( ++p == pe ) + goto _test_eof994; +case 994: + switch( (*p) ) { + case 84: goto st995; + case 116: goto st995; + } + goto tr2595; +st995: + if ( ++p == pe ) + goto _test_eof995; +case 995: + _widec = (*p); + if ( (*p) > 10 ) { + if ( 59 <= (*p) && (*p) <= 59 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + } else if ( (*p) >= 10 ) { + _widec = (short)(640 + ((*p) - -128)); + if ( + s->multiline ) _widec += 256; + } + switch( _widec ) { + case 9: goto tr3005; + case 32: goto tr3005; + case 40: goto tr3006; + case 41: goto tr3007; + case 1034: goto tr3008; + case 1083: goto tr3009; + } + goto tr2595; +st996: + if ( ++p == pe ) + goto _test_eof996; +case 996: + switch( (*p) ) { + case 80: goto st997; + case 112: goto st997; + } + goto tr2595; +st997: + if ( ++p == pe ) + goto _test_eof997; +case 997: + switch( (*p) ) { + case 69: goto st998; + case 101: goto st998; + } + goto tr2595; +st998: + if ( ++p == pe ) + goto _test_eof998; +case 998: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3002; - goto tr3001; -tr3002: + goto tr3013; + goto tr3012; +tr3013: { s->number64 = 0; } @@ -70159,8 +70265,8 @@ tr3002: p--; {goto st261;} } } - goto st990; -tr3006: + goto st999; +tr3017: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -70175,11 +70281,11 @@ tr3006: p--; {goto st261;} } } - goto st990; -st990: + goto st999; +st999: if ( ++p == pe ) - goto _test_eof990; -case 990: + goto _test_eof999; +case 999: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70193,38 +70299,38 @@ case 990: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3003; - case 32: goto tr3003; - case 40: goto tr3004; - case 41: goto tr3005; - case 1034: goto tr3007; - case 1083: goto tr3008; + case 9: goto tr3014; + case 32: goto tr3014; + case 40: goto tr3015; + case 41: goto tr3016; + case 1034: goto tr3018; + case 1083: goto tr3019; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3006; - goto tr3001; -st991: + goto tr3017; + goto tr3012; +st1000: if ( ++p == pe ) - goto _test_eof991; -case 991: + goto _test_eof1000; +case 1000: switch( (*p) ) { - case 82: goto st992; - case 114: goto st992; + case 82: goto st1001; + case 114: goto st1001; } - goto tr2584; -st992: + goto tr2595; +st1001: if ( ++p == pe ) - goto _test_eof992; -case 992: + goto _test_eof1001; +case 1001: switch( (*p) ) { - case 73: goto st993; - case 105: goto st993; + case 73: goto st1002; + case 105: goto st1002; } - goto tr2584; -st993: + goto tr2595; +st1002: if ( ++p == pe ) - goto _test_eof993; -case 993: + goto _test_eof1002; +case 1002: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70238,90 +70344,90 @@ case 993: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3011; - case 32: goto tr3011; - case 40: goto tr3012; - case 41: goto tr3013; - case 1034: goto tr3014; - case 1083: goto tr3015; - } - goto tr2584; -st994: + case 9: goto tr3022; + case 32: goto tr3022; + case 40: goto tr3023; + case 41: goto tr3024; + case 1034: goto tr3025; + case 1083: goto tr3026; + } + goto tr2595; +st1003: if ( ++p == pe ) - goto _test_eof994; -case 994: + goto _test_eof1003; +case 1003: switch( (*p) ) { - case 42: goto tr3016; - case 92: goto tr3016; - case 95: goto tr3016; + case 42: goto tr3027; + case 92: goto tr3027; + case 95: goto tr3027; } if ( (*p) < 64 ) { if ( 45 <= (*p) && (*p) <= 57 ) - goto tr3016; + goto tr3027; } else if ( (*p) > 90 ) { if ( 97 <= (*p) && (*p) <= 122 ) - goto tr3016; + goto tr3027; } else - goto tr3016; + goto tr3027; goto tr71; -tr3016: +tr3027: { s->dname = rdata_tail; } - { p--; {stack[top++] = 995; goto st263;} } - goto st995; -st995: + { p--; {stack[top++] = 1004; goto st263;} } + goto st1004; +st1004: if ( ++p == pe ) - goto _test_eof995; -case 995: + goto _test_eof1004; +case 1004: switch( (*p) ) { - case 32: goto tr3017; - case 59: goto tr3017; + case 32: goto tr3028; + case 59: goto tr3028; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3017; + goto tr3028; } else if ( (*p) >= 9 ) - goto tr3017; + goto tr3028; goto tr71; -tr3017: +tr3028: { rdata_tail += s->dname_tmp_length; } - { p--; {stack[top++] = 996; goto st329;} } - goto st996; -st996: + { p--; {stack[top++] = 1005; goto st329;} } + goto st1005; +st1005: if ( ++p == pe ) - goto _test_eof996; -case 996: + goto _test_eof1005; +case 1005: switch( (*p) ) { - case 32: goto tr3018; - case 59: goto tr3018; + case 32: goto tr3029; + case 59: goto tr3029; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3018; + goto tr3029; } else if ( (*p) >= 9 ) - goto tr3018; + goto tr3029; goto tr71; -tr3018: +tr3029: { p--; {cs = stack[--top];goto _again;} } - goto st1184; -st1184: + goto st1193; +st1193: if ( ++p == pe ) - goto _test_eof1184; -case 1184: + goto _test_eof1193; +case 1193: goto st0; -st997: +st1006: if ( ++p == pe ) - goto _test_eof997; -case 997: + goto _test_eof1006; +case 1006: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3019; - goto tr1746; -tr3019: + goto tr3030; + goto tr1757; +tr3030: { s->number64 = 0; } @@ -70339,8 +70445,8 @@ tr3019: p--; {goto st261;} } } - goto st998; -tr3023: + goto st1007; +tr3034: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -70355,11 +70461,11 @@ tr3023: p--; {goto st261;} } } - goto st998; -st998: + goto st1007; +st1007: if ( ++p == pe ) - goto _test_eof998; -case 998: + goto _test_eof1007; +case 1007: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70373,17 +70479,17 @@ case 998: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3020; - case 32: goto tr3020; - case 40: goto tr3021; - case 41: goto tr3022; - case 1034: goto tr3024; - case 1083: goto tr3025; + case 9: goto tr3031; + case 32: goto tr3031; + case 40: goto tr3032; + case 41: goto tr3033; + case 1034: goto tr3035; + case 1083: goto tr3036; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3023; - goto tr1746; -tr3027: + goto tr3034; + goto tr1757; +tr3038: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -70391,8 +70497,8 @@ tr3027: } s->multiline = true; } - goto st999; -tr3028: + goto st1008; +tr3039: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -70400,13 +70506,13 @@ tr3028: } s->multiline = false; } - goto st999; -tr3030: + goto st1008; +tr3041: { s->line_counter++; } - goto st999; -tr3020: + goto st1008; +tr3031: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -70416,8 +70522,8 @@ tr3020: p--; {goto st261;} } } - goto st999; -tr3021: + goto st1008; +tr3032: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -70434,8 +70540,8 @@ tr3021: } s->multiline = true; } - goto st999; -tr3022: + goto st1008; +tr3033: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -70452,8 +70558,8 @@ tr3022: } s->multiline = false; } - goto st999; -tr3024: + goto st1008; +tr3035: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -70466,11 +70572,11 @@ tr3024: { s->line_counter++; } - goto st999; -st999: + goto st1008; +st1008: if ( ++p == pe ) - goto _test_eof999; -case 999: + goto _test_eof1008; +case 1008: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70484,17 +70590,17 @@ case 999: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st999; - case 32: goto st999; - case 40: goto tr3027; - case 41: goto tr3028; - case 1034: goto tr3030; - case 1083: goto st1007; + case 9: goto st1008; + case 32: goto st1008; + case 40: goto tr3038; + case 41: goto tr3039; + case 1034: goto tr3041; + case 1083: goto st1016; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3029; - goto tr1746; -tr3029: + goto tr3040; + goto tr1757; +tr3040: { s->number64 = 0; } @@ -70512,8 +70618,8 @@ tr3029: p--; {goto st261;} } } - goto st1000; -tr3035: + goto st1009; +tr3046: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -70528,11 +70634,11 @@ tr3035: p--; {goto st261;} } } - goto st1000; -st1000: + goto st1009; +st1009: if ( ++p == pe ) - goto _test_eof1000; -case 1000: + goto _test_eof1009; +case 1009: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70546,17 +70652,17 @@ case 1000: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3032; - case 32: goto tr3032; - case 40: goto tr3033; - case 41: goto tr3034; - case 1034: goto tr3036; - case 1083: goto tr3037; + case 9: goto tr3043; + case 32: goto tr3043; + case 40: goto tr3044; + case 41: goto tr3045; + case 1034: goto tr3047; + case 1083: goto tr3048; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3035; - goto tr1746; -tr3039: + goto tr3046; + goto tr1757; +tr3050: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -70564,8 +70670,8 @@ tr3039: } s->multiline = true; } - goto st1001; -tr3040: + goto st1010; +tr3051: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -70573,13 +70679,13 @@ tr3040: } s->multiline = false; } - goto st1001; -tr3042: + goto st1010; +tr3053: { s->line_counter++; } - goto st1001; -tr3032: + goto st1010; +tr3043: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -70589,8 +70695,8 @@ tr3032: p--; {goto st261;} } } - goto st1001; -tr3033: + goto st1010; +tr3044: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -70607,8 +70713,8 @@ tr3033: } s->multiline = true; } - goto st1001; -tr3034: + goto st1010; +tr3045: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -70625,8 +70731,8 @@ tr3034: } s->multiline = false; } - goto st1001; -tr3036: + goto st1010; +tr3047: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -70639,11 +70745,11 @@ tr3036: { s->line_counter++; } - goto st1001; -st1001: + goto st1010; +st1010: if ( ++p == pe ) - goto _test_eof1001; -case 1001: + goto _test_eof1010; +case 1010: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70657,29 +70763,29 @@ case 1001: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1001; - case 32: goto st1001; - case 40: goto tr3039; - case 41: goto tr3040; - case 1034: goto tr3042; - case 1083: goto st1006; + case 9: goto st1010; + case 32: goto st1010; + case 40: goto tr3050; + case 41: goto tr3051; + case 1034: goto tr3053; + case 1083: goto st1015; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3041; + goto tr3052; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr3041; + goto tr3052; } else - goto tr3041; + goto tr3052; goto tr71; -tr3041: - { p--; {stack[top++] = 1002; goto st480;} } - goto st1002; -st1002: +tr3052: + { p--; {stack[top++] = 1011; goto st480;} } + goto st1011; +st1011: if ( ++p == pe ) - goto _test_eof1002; -case 1002: + goto _test_eof1011; +case 1011: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70693,15 +70799,15 @@ case 1002: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1003; - case 32: goto st1003; - case 40: goto tr3045; - case 41: goto tr3046; - case 1034: goto tr3047; - case 1083: goto st1005; + case 9: goto st1012; + case 32: goto st1012; + case 40: goto tr3056; + case 41: goto tr3057; + case 1034: goto tr3058; + case 1083: goto st1014; } goto tr71; -tr3045: +tr3056: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -70709,8 +70815,8 @@ tr3045: } s->multiline = true; } - goto st1003; -tr3046: + goto st1012; +tr3057: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -70718,16 +70824,16 @@ tr3046: } s->multiline = false; } - goto st1003; -tr3047: + goto st1012; +tr3058: { s->line_counter++; } - goto st1003; -st1003: + goto st1012; +st1012: if ( ++p == pe ) - goto _test_eof1003; -case 1003: + goto _test_eof1012; +case 1012: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70741,30 +70847,30 @@ case 1003: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1003; - case 32: goto st1003; - case 40: goto tr3045; - case 41: goto tr3046; - case 43: goto tr3049; - case 1034: goto tr3047; - case 1083: goto st1005; + case 9: goto st1012; + case 32: goto st1012; + case 40: goto tr3056; + case 41: goto tr3057; + case 43: goto tr3060; + case 1034: goto tr3058; + case 1083: goto st1014; } if ( _widec < 65 ) { if ( 47 <= _widec && _widec <= 57 ) - goto tr3049; + goto tr3060; } else if ( _widec > 90 ) { if ( 97 <= _widec && _widec <= 122 ) - goto tr3049; + goto tr3060; } else - goto tr3049; + goto tr3060; goto tr71; -tr3049: - { p--; {stack[top++] = 1004; goto st322;} } - goto st1004; -st1004: +tr3060: + { p--; {stack[top++] = 1013; goto st322;} } + goto st1013; +st1013: if ( ++p == pe ) - goto _test_eof1004; -case 1004: + goto _test_eof1013; +case 1013: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70778,24 +70884,24 @@ case 1004: !s->multiline ) _widec += 256; } switch( _widec ) { - case 1546: goto tr3050; - case 1595: goto tr3050; + case 1546: goto tr3061; + case 1595: goto tr3061; } goto tr71; -tr3050: +tr3061: { p--; {cs = stack[--top];goto _again;} } - goto st1185; -st1185: + goto st1194; +st1194: if ( ++p == pe ) - goto _test_eof1185; -case 1185: + goto _test_eof1194; +case 1194: goto st0; -st1005: +st1014: if ( ++p == pe ) - goto _test_eof1005; -case 1005: + goto _test_eof1014; +case 1014: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -70815,11 +70921,11 @@ case 1005: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3047; + goto tr3058; if ( 896 <= _widec && _widec <= 1151 ) - goto st1005; + goto st1014; goto tr71; -tr3037: +tr3048: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -70829,11 +70935,11 @@ tr3037: p--; {goto st261;} } } - goto st1006; -st1006: + goto st1015; +st1015: if ( ++p == pe ) - goto _test_eof1006; -case 1006: + goto _test_eof1015; +case 1015: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -70853,11 +70959,11 @@ case 1006: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3042; + goto tr3053; if ( 896 <= _widec && _widec <= 1151 ) - goto st1006; + goto st1015; goto tr71; -tr3025: +tr3036: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -70867,11 +70973,11 @@ tr3025: p--; {goto st261;} } } - goto st1007; -st1007: + goto st1016; +st1016: if ( ++p == pe ) - goto _test_eof1007; -case 1007: + goto _test_eof1016; +case 1016: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -70891,32 +70997,32 @@ case 1007: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3030; + goto tr3041; if ( 896 <= _widec && _widec <= 1151 ) - goto st1007; + goto st1016; goto tr71; -st1008: +st1017: if ( ++p == pe ) - goto _test_eof1008; -case 1008: + goto _test_eof1017; +case 1017: if ( (*p) == 43 ) - goto tr3051; + goto tr3062; if ( (*p) < 65 ) { if ( 47 <= (*p) && (*p) <= 57 ) - goto tr3051; + goto tr3062; } else if ( (*p) > 90 ) { if ( 97 <= (*p) && (*p) <= 122 ) - goto tr3051; + goto tr3062; } else - goto tr3051; + goto tr3062; goto tr71; -tr3051: - { p--; {stack[top++] = 1009; goto st322;} } - goto st1009; -st1009: +tr3062: + { p--; {stack[top++] = 1018; goto st322;} } + goto st1018; +st1018: if ( ++p == pe ) - goto _test_eof1009; -case 1009: + goto _test_eof1018; +case 1018: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -70930,28 +71036,28 @@ case 1009: !s->multiline ) _widec += 256; } switch( _widec ) { - case 1546: goto tr3052; - case 1595: goto tr3052; + case 1546: goto tr3063; + case 1595: goto tr3063; } goto tr71; -tr3052: +tr3063: { p--; {cs = stack[--top];goto _again;} } - goto st1186; -st1186: + goto st1195; +st1195: if ( ++p == pe ) - goto _test_eof1186; -case 1186: + goto _test_eof1195; +case 1195: goto st0; -st1010: +st1019: if ( ++p == pe ) - goto _test_eof1010; -case 1010: + goto _test_eof1019; +case 1019: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3053; - goto tr1746; -tr3053: + goto tr3064; + goto tr1757; +tr3064: { s->number64 = 0; } @@ -70969,8 +71075,8 @@ tr3053: p--; {goto st261;} } } - goto st1011; -tr3057: + goto st1020; +tr3068: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -70985,11 +71091,11 @@ tr3057: p--; {goto st261;} } } - goto st1011; -st1011: + goto st1020; +st1020: if ( ++p == pe ) - goto _test_eof1011; -case 1011: + goto _test_eof1020; +case 1020: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71003,17 +71109,17 @@ case 1011: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3054; - case 32: goto tr3054; - case 40: goto tr3055; - case 41: goto tr3056; - case 1034: goto tr3058; - case 1083: goto tr3059; + case 9: goto tr3065; + case 32: goto tr3065; + case 40: goto tr3066; + case 41: goto tr3067; + case 1034: goto tr3069; + case 1083: goto tr3070; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3057; - goto tr1746; -tr3061: + goto tr3068; + goto tr1757; +tr3072: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -71021,8 +71127,8 @@ tr3061: } s->multiline = true; } - goto st1012; -tr3062: + goto st1021; +tr3073: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -71030,13 +71136,13 @@ tr3062: } s->multiline = false; } - goto st1012; -tr3064: + goto st1021; +tr3075: { s->line_counter++; } - goto st1012; -tr3054: + goto st1021; +tr3065: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71046,8 +71152,8 @@ tr3054: p--; {goto st261;} } } - goto st1012; -tr3055: + goto st1021; +tr3066: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71064,8 +71170,8 @@ tr3055: } s->multiline = true; } - goto st1012; -tr3056: + goto st1021; +tr3067: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71082,8 +71188,8 @@ tr3056: } s->multiline = false; } - goto st1012; -tr3058: + goto st1021; +tr3069: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71096,11 +71202,11 @@ tr3058: { s->line_counter++; } - goto st1012; -st1012: + goto st1021; +st1021: if ( ++p == pe ) - goto _test_eof1012; -case 1012: + goto _test_eof1021; +case 1021: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71114,17 +71220,17 @@ case 1012: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1012; - case 32: goto st1012; - case 40: goto tr3061; - case 41: goto tr3062; - case 1034: goto tr3064; - case 1083: goto st1038; + case 9: goto st1021; + case 32: goto st1021; + case 40: goto tr3072; + case 41: goto tr3073; + case 1034: goto tr3075; + case 1083: goto st1047; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3063; - goto tr1746; -tr3063: + goto tr3074; + goto tr1757; +tr3074: { s->number64 = 0; } @@ -71142,8 +71248,8 @@ tr3063: p--; {goto st261;} } } - goto st1013; -tr3069: + goto st1022; +tr3080: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -71158,11 +71264,11 @@ tr3069: p--; {goto st261;} } } - goto st1013; -st1013: + goto st1022; +st1022: if ( ++p == pe ) - goto _test_eof1013; -case 1013: + goto _test_eof1022; +case 1022: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71176,17 +71282,17 @@ case 1013: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3066; - case 32: goto tr3066; - case 40: goto tr3067; - case 41: goto tr3068; - case 1034: goto tr3070; - case 1083: goto tr3071; + case 9: goto tr3077; + case 32: goto tr3077; + case 40: goto tr3078; + case 41: goto tr3079; + case 1034: goto tr3081; + case 1083: goto tr3082; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3069; - goto tr1746; -tr3073: + goto tr3080; + goto tr1757; +tr3084: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -71194,8 +71300,8 @@ tr3073: } s->multiline = true; } - goto st1014; -tr3074: + goto st1023; +tr3085: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -71203,13 +71309,13 @@ tr3074: } s->multiline = false; } - goto st1014; -tr3076: + goto st1023; +tr3087: { s->line_counter++; } - goto st1014; -tr3066: + goto st1023; +tr3077: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71219,8 +71325,8 @@ tr3066: p--; {goto st261;} } } - goto st1014; -tr3067: + goto st1023; +tr3078: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71237,8 +71343,8 @@ tr3067: } s->multiline = true; } - goto st1014; -tr3068: + goto st1023; +tr3079: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71255,8 +71361,8 @@ tr3068: } s->multiline = false; } - goto st1014; -tr3070: + goto st1023; +tr3081: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -71269,11 +71375,11 @@ tr3070: { s->line_counter++; } - goto st1014; -st1014: + goto st1023; +st1023: if ( ++p == pe ) - goto _test_eof1014; -case 1014: + goto _test_eof1023; +case 1023: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71287,17 +71393,17 @@ case 1014: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1014; - case 32: goto st1014; - case 40: goto tr3073; - case 41: goto tr3074; - case 1034: goto tr3076; - case 1083: goto st1037; + case 9: goto st1023; + case 32: goto st1023; + case 40: goto tr3084; + case 41: goto tr3085; + case 1034: goto tr3087; + case 1083: goto st1046; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3075; - goto tr1746; -tr3075: + goto tr3086; + goto tr1757; +tr3086: { s->number64 = 0; } @@ -71315,8 +71421,8 @@ tr3075: p--; {goto st261;} } } - goto st1015; -tr3081: + goto st1024; +tr3092: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -71331,11 +71437,11 @@ tr3081: p--; {goto st261;} } } - goto st1015; -st1015: + goto st1024; +st1024: if ( ++p == pe ) - goto _test_eof1015; -case 1015: + goto _test_eof1024; +case 1024: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71349,17 +71455,17 @@ case 1015: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3078; - case 32: goto tr3078; - case 40: goto tr3079; - case 41: goto tr3080; - case 1034: goto tr3082; - case 1083: goto tr3083; + case 9: goto tr3089; + case 32: goto tr3089; + case 40: goto tr3090; + case 41: goto tr3091; + case 1034: goto tr3093; + case 1083: goto tr3094; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3081; - goto tr1746; -tr3085: + goto tr3092; + goto tr1757; +tr3096: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -71367,8 +71473,8 @@ tr3085: } s->multiline = true; } - goto st1016; -tr3086: + goto st1025; +tr3097: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -71376,13 +71482,13 @@ tr3086: } s->multiline = false; } - goto st1016; -tr3089: + goto st1025; +tr3100: { s->line_counter++; } - goto st1016; -tr3078: + goto st1025; +tr3089: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -71392,8 +71498,8 @@ tr3078: p--; {goto st261;} } } - goto st1016; -tr3079: + goto st1025; +tr3090: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -71410,8 +71516,8 @@ tr3079: } s->multiline = true; } - goto st1016; -tr3080: + goto st1025; +tr3091: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -71428,8 +71534,8 @@ tr3080: } s->multiline = false; } - goto st1016; -tr3082: + goto st1025; +tr3093: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -71442,11 +71548,11 @@ tr3082: { s->line_counter++; } - goto st1016; -st1016: + goto st1025; +st1025: if ( ++p == pe ) - goto _test_eof1016; -case 1016: + goto _test_eof1025; +case 1025: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71460,24 +71566,24 @@ case 1016: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1016; - case 32: goto st1016; - case 40: goto tr3085; - case 41: goto tr3086; - case 45: goto tr3087; - case 1034: goto tr3089; - case 1083: goto st1036; + case 9: goto st1025; + case 32: goto st1025; + case 40: goto tr3096; + case 41: goto tr3097; + case 45: goto tr3098; + case 1034: goto tr3100; + case 1083: goto st1045; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3088; + goto tr3099; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr3088; + goto tr3099; } else - goto tr3088; - goto tr2349; -tr3087: + goto tr3099; + goto tr2360; +tr3098: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -71486,11 +71592,11 @@ tr3087: p--; {goto st261;} } } - goto st1017; -st1017: + goto st1026; +st1026: if ( ++p == pe ) - goto _test_eof1017; -case 1017: + goto _test_eof1026; +case 1026: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71504,15 +71610,15 @@ case 1017: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3091; - case 32: goto tr3091; - case 40: goto tr3092; - case 41: goto tr3093; - case 1034: goto tr3094; - case 1083: goto tr3095; - } - goto tr2349; -tr3098: + case 9: goto tr3102; + case 32: goto tr3102; + case 40: goto tr3103; + case 41: goto tr3104; + case 1034: goto tr3105; + case 1083: goto tr3106; + } + goto tr2360; +tr3109: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -71520,8 +71626,8 @@ tr3098: } s->multiline = true; } - goto st1018; -tr3099: + goto st1027; +tr3110: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -71529,13 +71635,13 @@ tr3099: } s->multiline = false; } - goto st1018; -tr3101: + goto st1027; +tr3112: { s->line_counter++; } - goto st1018; -tr3091: + goto st1027; +tr3102: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -71546,8 +71652,8 @@ tr3091: p--; {goto st261;} } } - goto st1018; -tr3092: + goto st1027; +tr3103: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -71565,8 +71671,8 @@ tr3092: } s->multiline = true; } - goto st1018; -tr3093: + goto st1027; +tr3104: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -71584,8 +71690,8 @@ tr3093: } s->multiline = false; } - goto st1018; -tr3094: + goto st1027; +tr3105: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -71599,11 +71705,11 @@ tr3094: { s->line_counter++; } - goto st1018; -st1018: + goto st1027; +st1027: if ( ++p == pe ) - goto _test_eof1018; -case 1018: + goto _test_eof1027; +case 1027: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -71617,23 +71723,23 @@ case 1018: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1018; - case 32: goto st1018; - case 40: goto tr3098; - case 41: goto tr3099; - case 1034: goto tr3101; - case 1083: goto st1033; + case 9: goto st1027; + case 32: goto st1027; + case 40: goto tr3109; + case 41: goto tr3110; + case 1034: goto tr3112; + case 1083: goto st1042; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3100; + goto tr3111; } else if ( _widec > 86 ) { if ( 97 <= _widec && _widec <= 118 ) - goto tr3100; + goto tr3111; } else - goto tr3100; - goto tr3096; -tr3100: + goto tr3111; + goto tr3107; +tr3111: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -71650,8 +71756,8 @@ tr3100: p--; {goto st261;} } } - goto st1019; -tr3115: + goto st1028; +tr3126: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_base32hex_to_num[(uint8_t)(*p)]; @@ -71660,21 +71766,21 @@ tr3115: p--; {goto st261;} } } - goto st1019; -st1019: + goto st1028; +st1028: if ( ++p == pe ) - goto _test_eof1019; -case 1019: + goto _test_eof1028; +case 1028: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3103; + goto tr3114; } else if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3103; + goto tr3114; } else - goto tr3103; - goto tr3096; -tr3103: + goto tr3114; + goto tr3107; +tr3114: { *(rdata_tail++) += second_left_base32hex_to_num[(uint8_t)(*p)]; @@ -71685,41 +71791,41 @@ tr3103: p--; {goto st261;} } } - goto st1020; -st1020: + goto st1029; +st1029: if ( ++p == pe ) - goto _test_eof1020; -case 1020: + goto _test_eof1029; +case 1029: if ( (*p) == 61 ) - goto st1031; + goto st1040; if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3104; + goto tr3115; } else if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3104; + goto tr3115; } else - goto tr3104; - goto tr3096; -tr3104: + goto tr3115; + goto tr3107; +tr3115: { *rdata_tail += third_base32hex_to_num[(uint8_t)(*p)]; } - goto st1021; -st1021: + goto st1030; +st1030: if ( ++p == pe ) - goto _test_eof1021; -case 1021: + goto _test_eof1030; +case 1030: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3106; + goto tr3117; } else if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3106; + goto tr3117; } else - goto tr3106; - goto tr3096; -tr3106: + goto tr3117; + goto tr3107; +tr3117: { *(rdata_tail++) += fourth_left_base32hex_to_num[(uint8_t)(*p)]; @@ -71730,23 +71836,23 @@ tr3106: p--; {goto st261;} } } - goto st1022; -st1022: + goto st1031; +st1031: if ( ++p == pe ) - goto _test_eof1022; -case 1022: + goto _test_eof1031; +case 1031: if ( (*p) == 61 ) - goto st1030; + goto st1039; if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3107; + goto tr3118; } else if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3107; + goto tr3118; } else - goto tr3107; - goto tr3096; -tr3107: + goto tr3118; + goto tr3107; +tr3118: { *(rdata_tail++) += fifth_left_base32hex_to_num[(uint8_t)(*p)]; @@ -71757,41 +71863,41 @@ tr3107: p--; {goto st261;} } } - goto st1023; -st1023: + goto st1032; +st1032: if ( ++p == pe ) - goto _test_eof1023; -case 1023: + goto _test_eof1032; +case 1032: if ( (*p) == 61 ) - goto st1028; + goto st1037; if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3109; + goto tr3120; } else if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3109; + goto tr3120; } else - goto tr3109; - goto tr3096; -tr3109: + goto tr3120; + goto tr3107; +tr3120: { *rdata_tail += sixth_base32hex_to_num[(uint8_t)(*p)]; } - goto st1024; -st1024: + goto st1033; +st1033: if ( ++p == pe ) - goto _test_eof1024; -case 1024: + goto _test_eof1033; +case 1033: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3111; + goto tr3122; } else if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3111; + goto tr3122; } else - goto tr3111; - goto tr3096; -tr3111: + goto tr3122; + goto tr3107; +tr3122: { *(rdata_tail++) += seventh_left_base32hex_to_num[(uint8_t)(*p)]; @@ -71802,51 +71908,51 @@ tr3111: p--; {goto st261;} } } - goto st1025; -st1025: + goto st1034; +st1034: if ( ++p == pe ) - goto _test_eof1025; -case 1025: + goto _test_eof1034; +case 1034: if ( (*p) == 61 ) - goto st1026; + goto st1035; if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3112; + goto tr3123; } else if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3112; + goto tr3123; } else - goto tr3112; - goto tr3096; -tr3112: + goto tr3123; + goto tr3107; +tr3123: { *(rdata_tail++) += eighth_base32hex_to_num[(uint8_t)(*p)]; } - goto st1026; -st1026: + goto st1035; +st1035: if ( ++p == pe ) - goto _test_eof1026; -case 1026: + goto _test_eof1035; +case 1035: switch( (*p) ) { - case 32: goto tr3114; - case 59: goto tr3114; + case 32: goto tr3125; + case 59: goto tr3125; } if ( (*p) < 48 ) { if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3114; + goto tr3125; } else if ( (*p) >= 9 ) - goto tr3114; + goto tr3125; } else if ( (*p) > 57 ) { if ( (*p) > 86 ) { if ( 97 <= (*p) && (*p) <= 118 ) - goto tr3115; + goto tr3126; } else if ( (*p) >= 65 ) - goto tr3115; + goto tr3126; } else - goto tr3115; - goto tr3096; -tr3114: + goto tr3126; + goto tr3107; +tr3125: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -71857,68 +71963,68 @@ tr3114: p--; {goto st261;} } } - { p--; {stack[top++] = 1027; goto st329;} } - goto st1027; -st1027: + { p--; {stack[top++] = 1036; goto st329;} } + goto st1036; +st1036: if ( ++p == pe ) - goto _test_eof1027; -case 1027: + goto _test_eof1036; +case 1036: switch( (*p) ) { - case 32: goto tr3116; - case 59: goto tr3116; + case 32: goto tr3127; + case 59: goto tr3127; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3116; + goto tr3127; } else if ( (*p) >= 9 ) - goto tr3116; + goto tr3127; goto tr71; -tr3116: +tr3127: { p--; {cs = stack[--top];goto _again;} } - goto st1187; -st1187: + goto st1196; +st1196: if ( ++p == pe ) - goto _test_eof1187; -case 1187: + goto _test_eof1196; +case 1196: goto st0; -st1028: +st1037: if ( ++p == pe ) - goto _test_eof1028; -case 1028: + goto _test_eof1037; +case 1037: if ( (*p) == 61 ) - goto st1029; - goto tr3096; -st1029: + goto st1038; + goto tr3107; +st1038: if ( ++p == pe ) - goto _test_eof1029; -case 1029: + goto _test_eof1038; +case 1038: if ( (*p) == 61 ) - goto st1026; - goto tr3096; -st1030: + goto st1035; + goto tr3107; +st1039: if ( ++p == pe ) - goto _test_eof1030; -case 1030: + goto _test_eof1039; +case 1039: if ( (*p) == 61 ) - goto st1028; - goto tr3096; -st1031: + goto st1037; + goto tr3107; +st1040: if ( ++p == pe ) - goto _test_eof1031; -case 1031: + goto _test_eof1040; +case 1040: if ( (*p) == 61 ) - goto st1032; - goto tr3096; -st1032: + goto st1041; + goto tr3107; +st1041: if ( ++p == pe ) - goto _test_eof1032; -case 1032: + goto _test_eof1041; +case 1041: if ( (*p) == 61 ) - goto st1030; - goto tr3096; -tr3095: + goto st1039; + goto tr3107; +tr3106: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -71929,11 +72035,11 @@ tr3095: p--; {goto st261;} } } - goto st1033; -st1033: + goto st1042; +st1042: if ( ++p == pe ) - goto _test_eof1033; -case 1033: + goto _test_eof1042; +case 1042: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -71953,11 +72059,11 @@ case 1033: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3101; + goto tr3112; if ( 896 <= _widec && _widec <= 1151 ) - goto st1033; + goto st1042; goto tr71; -tr3120: +tr3131: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -71966,8 +72072,8 @@ tr3120: p--; {goto st261;} } } - goto st1034; -tr3088: + goto st1043; +tr3099: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -71984,30 +72090,30 @@ tr3088: p--; {goto st261;} } } - goto st1034; -st1034: + goto st1043; +st1043: if ( ++p == pe ) - goto _test_eof1034; -case 1034: + goto _test_eof1043; +case 1043: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3119; + goto tr3130; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3119; + goto tr3130; } else - goto tr3119; - goto tr2349; -tr3119: + goto tr3130; + goto tr2360; +tr3130: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1035; -st1035: + goto st1044; +st1044: if ( ++p == pe ) - goto _test_eof1035; -case 1035: + goto _test_eof1044; +case 1044: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72021,23 +72127,23 @@ case 1035: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3091; - case 32: goto tr3091; - case 40: goto tr3092; - case 41: goto tr3093; - case 1034: goto tr3094; - case 1083: goto tr3095; + case 9: goto tr3102; + case 32: goto tr3102; + case 40: goto tr3103; + case 41: goto tr3104; + case 1034: goto tr3105; + case 1083: goto tr3106; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3120; + goto tr3131; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr3120; + goto tr3131; } else - goto tr3120; - goto tr2349; -tr3083: + goto tr3131; + goto tr2360; +tr3094: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -72047,11 +72153,11 @@ tr3083: p--; {goto st261;} } } - goto st1036; -st1036: + goto st1045; +st1045: if ( ++p == pe ) - goto _test_eof1036; -case 1036: + goto _test_eof1045; +case 1045: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -72071,11 +72177,11 @@ case 1036: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3089; + goto tr3100; if ( 896 <= _widec && _widec <= 1151 ) - goto st1036; + goto st1045; goto tr71; -tr3071: +tr3082: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72085,11 +72191,11 @@ tr3071: p--; {goto st261;} } } - goto st1037; -st1037: + goto st1046; +st1046: if ( ++p == pe ) - goto _test_eof1037; -case 1037: + goto _test_eof1046; +case 1046: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -72109,11 +72215,11 @@ case 1037: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3076; + goto tr3087; if ( 896 <= _widec && _widec <= 1151 ) - goto st1037; + goto st1046; goto tr71; -tr3059: +tr3070: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72123,11 +72229,11 @@ tr3059: p--; {goto st261;} } } - goto st1038; -st1038: + goto st1047; +st1047: if ( ++p == pe ) - goto _test_eof1038; -case 1038: + goto _test_eof1047; +case 1047: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -72147,18 +72253,18 @@ case 1038: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3064; + goto tr3075; if ( 896 <= _widec && _widec <= 1151 ) - goto st1038; + goto st1047; goto tr71; -st1039: +st1048: if ( ++p == pe ) - goto _test_eof1039; -case 1039: + goto _test_eof1048; +case 1048: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3121; - goto tr1746; -tr3121: + goto tr3132; + goto tr1757; +tr3132: { s->number64 = 0; } @@ -72176,8 +72282,8 @@ tr3121: p--; {goto st261;} } } - goto st1040; -tr3125: + goto st1049; +tr3136: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -72192,11 +72298,11 @@ tr3125: p--; {goto st261;} } } - goto st1040; -st1040: + goto st1049; +st1049: if ( ++p == pe ) - goto _test_eof1040; -case 1040: + goto _test_eof1049; +case 1049: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72210,17 +72316,17 @@ case 1040: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3122; - case 32: goto tr3122; - case 40: goto tr3123; - case 41: goto tr3124; - case 1034: goto tr3126; - case 1083: goto tr3127; + case 9: goto tr3133; + case 32: goto tr3133; + case 40: goto tr3134; + case 41: goto tr3135; + case 1034: goto tr3137; + case 1083: goto tr3138; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3125; - goto tr1746; -tr3129: + goto tr3136; + goto tr1757; +tr3140: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -72228,8 +72334,8 @@ tr3129: } s->multiline = true; } - goto st1041; -tr3130: + goto st1050; +tr3141: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -72237,13 +72343,13 @@ tr3130: } s->multiline = false; } - goto st1041; -tr3132: + goto st1050; +tr3143: { s->line_counter++; } - goto st1041; -tr3122: + goto st1050; +tr3133: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72253,8 +72359,8 @@ tr3122: p--; {goto st261;} } } - goto st1041; -tr3123: + goto st1050; +tr3134: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72271,8 +72377,8 @@ tr3123: } s->multiline = true; } - goto st1041; -tr3124: + goto st1050; +tr3135: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72289,8 +72395,8 @@ tr3124: } s->multiline = false; } - goto st1041; -tr3126: + goto st1050; +tr3137: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72303,11 +72409,11 @@ tr3126: { s->line_counter++; } - goto st1041; -st1041: + goto st1050; +st1050: if ( ++p == pe ) - goto _test_eof1041; -case 1041: + goto _test_eof1050; +case 1050: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72321,17 +72427,17 @@ case 1041: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1041; - case 32: goto st1041; - case 40: goto tr3129; - case 41: goto tr3130; - case 1034: goto tr3132; - case 1083: goto st1051; + case 9: goto st1050; + case 32: goto st1050; + case 40: goto tr3140; + case 41: goto tr3141; + case 1034: goto tr3143; + case 1083: goto st1060; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3131; - goto tr1746; -tr3131: + goto tr3142; + goto tr1757; +tr3142: { s->number64 = 0; } @@ -72349,8 +72455,8 @@ tr3131: p--; {goto st261;} } } - goto st1042; -tr3137: + goto st1051; +tr3148: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -72365,11 +72471,11 @@ tr3137: p--; {goto st261;} } } - goto st1042; -st1042: + goto st1051; +st1051: if ( ++p == pe ) - goto _test_eof1042; -case 1042: + goto _test_eof1051; +case 1051: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72383,17 +72489,17 @@ case 1042: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3134; - case 32: goto tr3134; - case 40: goto tr3135; - case 41: goto tr3136; - case 1034: goto tr3138; - case 1083: goto tr3139; + case 9: goto tr3145; + case 32: goto tr3145; + case 40: goto tr3146; + case 41: goto tr3147; + case 1034: goto tr3149; + case 1083: goto tr3150; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3137; - goto tr1746; -tr3141: + goto tr3148; + goto tr1757; +tr3152: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -72401,8 +72507,8 @@ tr3141: } s->multiline = true; } - goto st1043; -tr3142: + goto st1052; +tr3153: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -72410,13 +72516,13 @@ tr3142: } s->multiline = false; } - goto st1043; -tr3144: + goto st1052; +tr3155: { s->line_counter++; } - goto st1043; -tr3134: + goto st1052; +tr3145: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72426,8 +72532,8 @@ tr3134: p--; {goto st261;} } } - goto st1043; -tr3135: + goto st1052; +tr3146: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72444,8 +72550,8 @@ tr3135: } s->multiline = true; } - goto st1043; -tr3136: + goto st1052; +tr3147: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72462,8 +72568,8 @@ tr3136: } s->multiline = false; } - goto st1043; -tr3138: + goto st1052; +tr3149: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72476,11 +72582,11 @@ tr3138: { s->line_counter++; } - goto st1043; -st1043: + goto st1052; +st1052: if ( ++p == pe ) - goto _test_eof1043; -case 1043: + goto _test_eof1052; +case 1052: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72494,17 +72600,17 @@ case 1043: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1043; - case 32: goto st1043; - case 40: goto tr3141; - case 41: goto tr3142; - case 1034: goto tr3144; - case 1083: goto st1050; + case 9: goto st1052; + case 32: goto st1052; + case 40: goto tr3152; + case 41: goto tr3153; + case 1034: goto tr3155; + case 1083: goto st1059; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3143; - goto tr1746; -tr3143: + goto tr3154; + goto tr1757; +tr3154: { s->number64 = 0; } @@ -72522,8 +72628,8 @@ tr3143: p--; {goto st261;} } } - goto st1044; -tr3149: + goto st1053; +tr3160: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -72538,11 +72644,11 @@ tr3149: p--; {goto st261;} } } - goto st1044; -st1044: + goto st1053; +st1053: if ( ++p == pe ) - goto _test_eof1044; -case 1044: + goto _test_eof1053; +case 1053: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72556,17 +72662,17 @@ case 1044: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3146; - case 32: goto tr3146; - case 40: goto tr3147; - case 41: goto tr3148; - case 1034: goto tr3150; - case 1083: goto tr3151; + case 9: goto tr3157; + case 32: goto tr3157; + case 40: goto tr3158; + case 41: goto tr3159; + case 1034: goto tr3161; + case 1083: goto tr3162; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3149; - goto tr1746; -tr3153: + goto tr3160; + goto tr1757; +tr3164: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -72574,8 +72680,8 @@ tr3153: } s->multiline = true; } - goto st1045; -tr3154: + goto st1054; +tr3165: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -72583,13 +72689,13 @@ tr3154: } s->multiline = false; } - goto st1045; -tr3157: + goto st1054; +tr3168: { s->line_counter++; } - goto st1045; -tr3146: + goto st1054; +tr3157: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -72599,8 +72705,8 @@ tr3146: p--; {goto st261;} } } - goto st1045; -tr3147: + goto st1054; +tr3158: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -72617,8 +72723,8 @@ tr3147: } s->multiline = true; } - goto st1045; -tr3148: + goto st1054; +tr3159: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -72635,8 +72741,8 @@ tr3148: } s->multiline = false; } - goto st1045; -tr3150: + goto st1054; +tr3161: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -72649,11 +72755,11 @@ tr3150: { s->line_counter++; } - goto st1045; -st1045: + goto st1054; +st1054: if ( ++p == pe ) - goto _test_eof1045; -case 1045: + goto _test_eof1054; +case 1054: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72667,24 +72773,24 @@ case 1045: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1045; - case 32: goto st1045; - case 40: goto tr3153; - case 41: goto tr3154; - case 45: goto tr3155; - case 1034: goto tr3157; - case 1083: goto st1049; + case 9: goto st1054; + case 32: goto st1054; + case 40: goto tr3164; + case 41: goto tr3165; + case 45: goto tr3166; + case 1034: goto tr3168; + case 1083: goto st1058; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3156; + goto tr3167; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr3156; + goto tr3167; } else - goto tr3156; - goto tr2349; -tr3155: + goto tr3167; + goto tr2360; +tr3166: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -72693,22 +72799,22 @@ tr3155: p--; {goto st261;} } } - goto st1046; -st1046: + goto st1055; +st1055: if ( ++p == pe ) - goto _test_eof1046; -case 1046: + goto _test_eof1055; +case 1055: switch( (*p) ) { - case 32: goto tr3159; - case 59: goto tr3159; + case 32: goto tr3170; + case 59: goto tr3170; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3159; + goto tr3170; } else if ( (*p) >= 9 ) - goto tr3159; - goto tr2349; -tr3159: + goto tr3170; + goto tr2360; +tr3170: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -72722,13 +72828,13 @@ tr3159: { p--; {cs = stack[--top];goto _again;} } - goto st1188; -st1188: + goto st1197; +st1197: if ( ++p == pe ) - goto _test_eof1188; -case 1188: + goto _test_eof1197; +case 1197: goto st0; -tr3161: +tr3172: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -72737,8 +72843,8 @@ tr3161: p--; {goto st261;} } } - goto st1047; -tr3156: + goto st1056; +tr3167: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -72755,50 +72861,50 @@ tr3156: p--; {goto st261;} } } - goto st1047; -st1047: + goto st1056; +st1056: if ( ++p == pe ) - goto _test_eof1047; -case 1047: + goto _test_eof1056; +case 1056: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3160; + goto tr3171; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3160; + goto tr3171; } else - goto tr3160; - goto tr2349; -tr3160: + goto tr3171; + goto tr2360; +tr3171: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1048; -st1048: + goto st1057; +st1057: if ( ++p == pe ) - goto _test_eof1048; -case 1048: + goto _test_eof1057; +case 1057: switch( (*p) ) { - case 32: goto tr3159; - case 59: goto tr3159; + case 32: goto tr3170; + case 59: goto tr3170; } if ( (*p) < 48 ) { if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3159; + goto tr3170; } else if ( (*p) >= 9 ) - goto tr3159; + goto tr3170; } else if ( (*p) > 57 ) { if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3161; + goto tr3172; } else if ( (*p) >= 65 ) - goto tr3161; + goto tr3172; } else - goto tr3161; - goto tr2349; -tr3151: + goto tr3172; + goto tr2360; +tr3162: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -72808,11 +72914,11 @@ tr3151: p--; {goto st261;} } } - goto st1049; -st1049: + goto st1058; +st1058: if ( ++p == pe ) - goto _test_eof1049; -case 1049: + goto _test_eof1058; +case 1058: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -72832,11 +72938,11 @@ case 1049: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3157; + goto tr3168; if ( 896 <= _widec && _widec <= 1151 ) - goto st1049; + goto st1058; goto tr71; -tr3139: +tr3150: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72846,11 +72952,11 @@ tr3139: p--; {goto st261;} } } - goto st1050; -st1050: + goto st1059; +st1059: if ( ++p == pe ) - goto _test_eof1050; -case 1050: + goto _test_eof1059; +case 1059: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -72870,11 +72976,11 @@ case 1050: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3144; + goto tr3155; if ( 896 <= _widec && _widec <= 1151 ) - goto st1050; + goto st1059; goto tr71; -tr3127: +tr3138: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -72884,11 +72990,11 @@ tr3127: p--; {goto st261;} } } - goto st1051; -st1051: + goto st1060; +st1060: if ( ++p == pe ) - goto _test_eof1051; -case 1051: + goto _test_eof1060; +case 1060: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -72908,18 +73014,18 @@ case 1051: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3132; + goto tr3143; if ( 896 <= _widec && _widec <= 1151 ) - goto st1051; + goto st1060; goto tr71; -st1052: +st1061: if ( ++p == pe ) - goto _test_eof1052; -case 1052: + goto _test_eof1061; +case 1061: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3162; - goto tr1746; -tr3162: + goto tr3173; + goto tr1757; +tr3173: { s->number64 = 0; } @@ -72937,8 +73043,8 @@ tr3162: p--; {goto st261;} } } - goto st1053; -tr3166: + goto st1062; +tr3177: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -72953,11 +73059,11 @@ tr3166: p--; {goto st261;} } } - goto st1053; -st1053: + goto st1062; +st1062: if ( ++p == pe ) - goto _test_eof1053; -case 1053: + goto _test_eof1062; +case 1062: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -72971,17 +73077,17 @@ case 1053: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3163; - case 32: goto tr3163; - case 40: goto tr3164; - case 41: goto tr3165; - case 1034: goto tr3167; - case 1083: goto tr3168; + case 9: goto tr3174; + case 32: goto tr3174; + case 40: goto tr3175; + case 41: goto tr3176; + case 1034: goto tr3178; + case 1083: goto tr3179; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3166; - goto tr1746; -tr3170: + goto tr3177; + goto tr1757; +tr3181: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -72989,8 +73095,8 @@ tr3170: } s->multiline = true; } - goto st1054; -tr3171: + goto st1063; +tr3182: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -72998,13 +73104,13 @@ tr3171: } s->multiline = false; } - goto st1054; -tr3173: + goto st1063; +tr3184: { s->line_counter++; } - goto st1054; -tr3163: + goto st1063; +tr3174: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73014,8 +73120,8 @@ tr3163: p--; {goto st261;} } } - goto st1054; -tr3164: + goto st1063; +tr3175: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73032,8 +73138,8 @@ tr3164: } s->multiline = true; } - goto st1054; -tr3165: + goto st1063; +tr3176: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73050,8 +73156,8 @@ tr3165: } s->multiline = false; } - goto st1054; -tr3167: + goto st1063; +tr3178: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73064,11 +73170,11 @@ tr3167: { s->line_counter++; } - goto st1054; -st1054: + goto st1063; +st1063: if ( ++p == pe ) - goto _test_eof1054; -case 1054: + goto _test_eof1063; +case 1063: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73082,17 +73188,17 @@ case 1054: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1054; - case 32: goto st1054; - case 40: goto tr3170; - case 41: goto tr3171; - case 1034: goto tr3173; - case 1083: goto st1064; + case 9: goto st1063; + case 32: goto st1063; + case 40: goto tr3181; + case 41: goto tr3182; + case 1034: goto tr3184; + case 1083: goto st1073; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3172; - goto tr1746; -tr3172: + goto tr3183; + goto tr1757; +tr3183: { s->number64 = 0; } @@ -73110,8 +73216,8 @@ tr3172: p--; {goto st261;} } } - goto st1055; -tr3178: + goto st1064; +tr3189: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -73126,11 +73232,11 @@ tr3178: p--; {goto st261;} } } - goto st1055; -st1055: + goto st1064; +st1064: if ( ++p == pe ) - goto _test_eof1055; -case 1055: + goto _test_eof1064; +case 1064: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73144,17 +73250,17 @@ case 1055: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3175; - case 32: goto tr3175; - case 40: goto tr3176; - case 41: goto tr3177; - case 1034: goto tr3179; - case 1083: goto tr3180; + case 9: goto tr3186; + case 32: goto tr3186; + case 40: goto tr3187; + case 41: goto tr3188; + case 1034: goto tr3190; + case 1083: goto tr3191; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3178; - goto tr1746; -tr3182: + goto tr3189; + goto tr1757; +tr3193: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -73162,8 +73268,8 @@ tr3182: } s->multiline = true; } - goto st1056; -tr3183: + goto st1065; +tr3194: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -73171,13 +73277,13 @@ tr3183: } s->multiline = false; } - goto st1056; -tr3185: + goto st1065; +tr3196: { s->line_counter++; } - goto st1056; -tr3175: + goto st1065; +tr3186: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73187,8 +73293,8 @@ tr3175: p--; {goto st261;} } } - goto st1056; -tr3176: + goto st1065; +tr3187: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73205,8 +73311,8 @@ tr3176: } s->multiline = true; } - goto st1056; -tr3177: + goto st1065; +tr3188: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73223,8 +73329,8 @@ tr3177: } s->multiline = false; } - goto st1056; -tr3179: + goto st1065; +tr3190: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73237,11 +73343,11 @@ tr3179: { s->line_counter++; } - goto st1056; -st1056: + goto st1065; +st1065: if ( ++p == pe ) - goto _test_eof1056; -case 1056: + goto _test_eof1065; +case 1065: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73255,17 +73361,17 @@ case 1056: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1056; - case 32: goto st1056; - case 40: goto tr3182; - case 41: goto tr3183; - case 1034: goto tr3185; - case 1083: goto st1063; + case 9: goto st1065; + case 32: goto st1065; + case 40: goto tr3193; + case 41: goto tr3194; + case 1034: goto tr3196; + case 1083: goto st1072; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3184; - goto tr1746; -tr3184: + goto tr3195; + goto tr1757; +tr3195: { s->number64 = 0; } @@ -73283,8 +73389,8 @@ tr3184: p--; {goto st261;} } } - goto st1057; -tr3190: + goto st1066; +tr3201: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -73299,11 +73405,11 @@ tr3190: p--; {goto st261;} } } - goto st1057; -st1057: + goto st1066; +st1066: if ( ++p == pe ) - goto _test_eof1057; -case 1057: + goto _test_eof1066; +case 1066: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73317,17 +73423,17 @@ case 1057: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3187; - case 32: goto tr3187; - case 40: goto tr3188; - case 41: goto tr3189; - case 1034: goto tr3191; - case 1083: goto tr3192; + case 9: goto tr3198; + case 32: goto tr3198; + case 40: goto tr3199; + case 41: goto tr3200; + case 1034: goto tr3202; + case 1083: goto tr3203; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3190; - goto tr1746; -tr3194: + goto tr3201; + goto tr1757; +tr3205: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -73335,8 +73441,8 @@ tr3194: } s->multiline = true; } - goto st1058; -tr3195: + goto st1067; +tr3206: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -73344,13 +73450,13 @@ tr3195: } s->multiline = false; } - goto st1058; -tr3197: + goto st1067; +tr3208: { s->line_counter++; } - goto st1058; -tr3187: + goto st1067; +tr3198: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73360,8 +73466,8 @@ tr3187: p--; {goto st261;} } } - goto st1058; -tr3188: + goto st1067; +tr3199: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73378,8 +73484,8 @@ tr3188: } s->multiline = true; } - goto st1058; -tr3189: + goto st1067; +tr3200: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73396,8 +73502,8 @@ tr3189: } s->multiline = false; } - goto st1058; -tr3191: + goto st1067; +tr3202: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73410,11 +73516,11 @@ tr3191: { s->line_counter++; } - goto st1058; -st1058: + goto st1067; +st1067: if ( ++p == pe ) - goto _test_eof1058; -case 1058: + goto _test_eof1067; +case 1067: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73428,23 +73534,23 @@ case 1058: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1058; - case 32: goto st1058; - case 40: goto tr3194; - case 41: goto tr3195; - case 1034: goto tr3197; - case 1083: goto st1062; + case 9: goto st1067; + case 32: goto st1067; + case 40: goto tr3205; + case 41: goto tr3206; + case 1034: goto tr3208; + case 1083: goto st1071; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3196; + goto tr3207; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr3196; + goto tr3207; } else - goto tr3196; - goto tr2349; -tr3196: + goto tr3207; + goto tr2360; +tr3207: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -73453,21 +73559,21 @@ tr3196: p--; {goto st261;} } } - goto st1059; -st1059: + goto st1068; +st1068: if ( ++p == pe ) - goto _test_eof1059; -case 1059: + goto _test_eof1068; +case 1068: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3199; + goto tr3210; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3199; + goto tr3210; } else - goto tr3199; - goto tr2349; -tr3201: + goto tr3210; + goto tr2360; +tr3212: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -73475,8 +73581,8 @@ tr3201: } s->multiline = true; } - goto st1060; -tr3202: + goto st1069; +tr3213: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -73484,22 +73590,22 @@ tr3202: } s->multiline = false; } - goto st1060; -tr3203: + goto st1069; +tr3214: { s->line_counter++; } - goto st1060; -tr3199: + goto st1069; +tr3210: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1060; -st1060: + goto st1069; +st1069: if ( ++p == pe ) - goto _test_eof1060; -case 1060: + goto _test_eof1069; +case 1069: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73517,30 +73623,30 @@ case 1060: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st1060; - case 32: goto st1060; - case 40: goto tr3201; - case 41: goto tr3202; - case 2058: goto tr3203; - case 2107: goto st1061; - case 2314: goto tr3205; - case 2363: goto tr3205; - case 2570: goto tr3206; - case 2619: goto tr3207; + case 9: goto st1069; + case 32: goto st1069; + case 40: goto tr3212; + case 41: goto tr3213; + case 2058: goto tr3214; + case 2107: goto st1070; + case 2314: goto tr3216; + case 2363: goto tr3216; + case 2570: goto tr3217; + case 2619: goto tr3218; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3196; + goto tr3207; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr3196; + goto tr3207; } else - goto tr3196; - goto tr2349; -st1061: + goto tr3207; + goto tr2360; +st1070: if ( ++p == pe ) - goto _test_eof1061; -case 1061: + goto _test_eof1070; +case 1070: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -73560,32 +73666,32 @@ case 1061: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3203; + goto tr3214; if ( 896 <= _widec && _widec <= 1151 ) - goto st1061; - goto tr2349; -tr3205: + goto st1070; + goto tr2360; +tr3216: { p--; {cs = stack[--top];goto _again;} } - goto st1189; -st1189: + goto st1198; +st1198: if ( ++p == pe ) - goto _test_eof1189; -case 1189: + goto _test_eof1198; +case 1198: goto st0; -tr3206: +tr3217: { s->line_counter++; } { p--; {cs = stack[--top];goto _again;} } - goto st1190; -st1190: + goto st1199; +st1199: if ( ++p == pe ) - goto _test_eof1190; -case 1190: + goto _test_eof1199; +case 1199: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73603,35 +73709,35 @@ case 1190: !s->multiline ) _widec += 512; } switch( _widec ) { - case 9: goto st1060; - case 32: goto st1060; - case 40: goto tr3201; - case 41: goto tr3202; - case 2058: goto tr3203; - case 2107: goto st1061; - case 2314: goto tr3205; - case 2363: goto tr3205; - case 2570: goto tr3206; - case 2619: goto tr3207; + case 9: goto st1069; + case 32: goto st1069; + case 40: goto tr3212; + case 41: goto tr3213; + case 2058: goto tr3214; + case 2107: goto st1070; + case 2314: goto tr3216; + case 2363: goto tr3216; + case 2570: goto tr3217; + case 2619: goto tr3218; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3196; + goto tr3207; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr3196; + goto tr3207; } else - goto tr3196; - goto tr2349; -tr3207: + goto tr3207; + goto tr2360; +tr3218: { p--; {cs = stack[--top];goto _again;} } - goto st1191; -st1191: + goto st1200; +st1200: if ( ++p == pe ) - goto _test_eof1191; -case 1191: + goto _test_eof1200; +case 1200: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -73651,11 +73757,11 @@ case 1191: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3203; + goto tr3214; if ( 896 <= _widec && _widec <= 1151 ) - goto st1061; - goto tr2349; -tr3192: + goto st1070; + goto tr2360; +tr3203: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73665,11 +73771,11 @@ tr3192: p--; {goto st261;} } } - goto st1062; -st1062: + goto st1071; +st1071: if ( ++p == pe ) - goto _test_eof1062; -case 1062: + goto _test_eof1071; +case 1071: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -73689,11 +73795,11 @@ case 1062: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3197; + goto tr3208; if ( 896 <= _widec && _widec <= 1151 ) - goto st1062; + goto st1071; goto tr71; -tr3180: +tr3191: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73703,11 +73809,11 @@ tr3180: p--; {goto st261;} } } - goto st1063; -st1063: + goto st1072; +st1072: if ( ++p == pe ) - goto _test_eof1063; -case 1063: + goto _test_eof1072; +case 1072: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -73727,11 +73833,11 @@ case 1063: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3185; + goto tr3196; if ( 896 <= _widec && _widec <= 1151 ) - goto st1063; + goto st1072; goto tr71; -tr3168: +tr3179: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -73741,11 +73847,11 @@ tr3168: p--; {goto st261;} } } - goto st1064; -st1064: + goto st1073; +st1073: if ( ++p == pe ) - goto _test_eof1064; -case 1064: + goto _test_eof1073; +case 1073: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -73765,18 +73871,18 @@ case 1064: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3173; + goto tr3184; if ( 896 <= _widec && _widec <= 1151 ) - goto st1064; + goto st1073; goto tr71; -st1065: +st1074: if ( ++p == pe ) - goto _test_eof1065; -case 1065: + goto _test_eof1074; +case 1074: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3208; - goto tr1746; -tr3208: + goto tr3219; + goto tr1757; +tr3219: { s->number64 = 0; } @@ -73794,8 +73900,8 @@ tr3208: p--; {goto st261;} } } - goto st1066; -tr3212: + goto st1075; +tr3223: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -73810,11 +73916,11 @@ tr3212: p--; {goto st261;} } } - goto st1066; -st1066: + goto st1075; +st1075: if ( ++p == pe ) - goto _test_eof1066; -case 1066: + goto _test_eof1075; +case 1075: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73828,17 +73934,17 @@ case 1066: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3209; - case 32: goto tr3209; - case 40: goto tr3210; - case 41: goto tr3211; - case 1034: goto tr3213; - case 1083: goto tr3214; + case 9: goto tr3220; + case 32: goto tr3220; + case 40: goto tr3221; + case 41: goto tr3222; + case 1034: goto tr3224; + case 1083: goto tr3225; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3212; - goto tr1746; -tr3216: + goto tr3223; + goto tr1757; +tr3227: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -73846,8 +73952,8 @@ tr3216: } s->multiline = true; } - goto st1067; -tr3217: + goto st1076; +tr3228: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -73855,13 +73961,13 @@ tr3217: } s->multiline = false; } - goto st1067; -tr3219: + goto st1076; +tr3230: { s->line_counter++; } - goto st1067; -tr3209: + goto st1076; +tr3220: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -73871,8 +73977,8 @@ tr3209: p--; {goto st261;} } } - goto st1067; -tr3210: + goto st1076; +tr3221: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -73889,8 +73995,8 @@ tr3210: } s->multiline = true; } - goto st1067; -tr3211: + goto st1076; +tr3222: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -73907,8 +74013,8 @@ tr3211: } s->multiline = false; } - goto st1067; -tr3213: + goto st1076; +tr3224: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -73921,11 +74027,11 @@ tr3213: { s->line_counter++; } - goto st1067; -st1067: + goto st1076; +st1076: if ( ++p == pe ) - goto _test_eof1067; -case 1067: + goto _test_eof1076; +case 1076: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -73939,18 +74045,18 @@ case 1067: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1067; - case 32: goto st1067; - case 40: goto tr3216; - case 41: goto tr3217; - case 46: goto tr3218; - case 1034: goto tr3219; - case 1083: goto st1069; + case 9: goto st1076; + case 32: goto st1076; + case 40: goto tr3227; + case 41: goto tr3228; + case 46: goto tr3229; + case 1034: goto tr3230; + case 1083: goto st1078; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3218; - goto tr1723; -tr3218: + goto tr3229; + goto tr1734; +tr3229: { s->buffer_length = 0; } @@ -73963,8 +74069,8 @@ tr3218: p--; {goto st261;} } } - goto st1068; -tr3222: + goto st1077; +tr3233: { if (s->buffer_length < MAX_RDATA_LENGTH) { s->buffer[s->buffer_length++] = (*p); @@ -73974,26 +74080,26 @@ tr3222: p--; {goto st261;} } } - goto st1068; -st1068: + goto st1077; +st1077: if ( ++p == pe ) - goto _test_eof1068; -case 1068: + goto _test_eof1077; +case 1077: switch( (*p) ) { - case 32: goto tr3221; - case 46: goto tr3222; - case 59: goto tr3221; + case 32: goto tr3232; + case 46: goto tr3233; + case 59: goto tr3232; } if ( (*p) < 40 ) { if ( 9 <= (*p) && (*p) <= 10 ) - goto tr3221; + goto tr3232; } else if ( (*p) > 41 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3222; + goto tr3233; } else - goto tr3221; - goto tr1723; -tr3221: + goto tr3232; + goto tr1734; +tr3232: { s->buffer[s->buffer_length] = 0; @@ -74009,13 +74115,13 @@ tr3221: { p--; {cs = stack[--top];goto _again;} } - goto st1192; -st1192: + goto st1201; +st1201: if ( ++p == pe ) - goto _test_eof1192; -case 1192: + goto _test_eof1201; +case 1201: goto st0; -tr3214: +tr3225: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74025,11 +74131,11 @@ tr3214: p--; {goto st261;} } } - goto st1069; -st1069: + goto st1078; +st1078: if ( ++p == pe ) - goto _test_eof1069; -case 1069: + goto _test_eof1078; +case 1078: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -74049,18 +74155,18 @@ case 1069: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3219; + goto tr3230; if ( 896 <= _widec && _widec <= 1151 ) - goto st1069; + goto st1078; goto tr71; -st1070: +st1079: if ( ++p == pe ) - goto _test_eof1070; -case 1070: + goto _test_eof1079; +case 1079: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3223; - goto tr1746; -tr3223: + goto tr3234; + goto tr1757; +tr3234: { s->number64 = 0; } @@ -74078,8 +74184,8 @@ tr3223: p--; {goto st261;} } } - goto st1071; -tr3227: + goto st1080; +tr3238: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -74094,11 +74200,11 @@ tr3227: p--; {goto st261;} } } - goto st1071; -st1071: + goto st1080; +st1080: if ( ++p == pe ) - goto _test_eof1071; -case 1071: + goto _test_eof1080; +case 1080: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -74112,17 +74218,17 @@ case 1071: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3224; - case 32: goto tr3224; - case 40: goto tr3225; - case 41: goto tr3226; - case 1034: goto tr3228; - case 1083: goto tr3229; + case 9: goto tr3235; + case 32: goto tr3235; + case 40: goto tr3236; + case 41: goto tr3237; + case 1034: goto tr3239; + case 1083: goto tr3240; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3227; - goto tr1746; -tr3231: + goto tr3238; + goto tr1757; +tr3242: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -74130,8 +74236,8 @@ tr3231: } s->multiline = true; } - goto st1072; -tr3232: + goto st1081; +tr3243: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -74139,13 +74245,13 @@ tr3232: } s->multiline = false; } - goto st1072; -tr3234: + goto st1081; +tr3245: { s->line_counter++; } - goto st1072; -tr3224: + goto st1081; +tr3235: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74155,8 +74261,8 @@ tr3224: p--; {goto st261;} } } - goto st1072; -tr3225: + goto st1081; +tr3236: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74173,8 +74279,8 @@ tr3225: } s->multiline = true; } - goto st1072; -tr3226: + goto st1081; +tr3237: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74191,8 +74297,8 @@ tr3226: } s->multiline = false; } - goto st1072; -tr3228: + goto st1081; +tr3239: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74205,11 +74311,11 @@ tr3228: { s->line_counter++; } - goto st1072; -st1072: + goto st1081; +st1081: if ( ++p == pe ) - goto _test_eof1072; -case 1072: + goto _test_eof1081; +case 1081: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -74223,23 +74329,23 @@ case 1072: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1072; - case 32: goto st1072; - case 40: goto tr3231; - case 41: goto tr3232; - case 1034: goto tr3234; - case 1083: goto st1082; + case 9: goto st1081; + case 32: goto st1081; + case 40: goto tr3242; + case 41: goto tr3243; + case 1034: goto tr3245; + case 1083: goto st1091; } if ( _widec < 65 ) { if ( 48 <= _widec && _widec <= 57 ) - goto tr3233; + goto tr3244; } else if ( _widec > 70 ) { if ( 97 <= _widec && _widec <= 102 ) - goto tr3233; + goto tr3244; } else - goto tr3233; - goto tr2349; -tr3233: + goto tr3244; + goto tr2360; +tr3244: { s->item_length = 0; } @@ -74251,40 +74357,40 @@ tr3233: p--; {goto st261;} } } - goto st1073; -st1073: + goto st1082; +st1082: if ( ++p == pe ) - goto _test_eof1073; -case 1073: + goto _test_eof1082; +case 1082: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3236; + goto tr3247; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3236; + goto tr3247; } else - goto tr3236; - goto tr2349; -tr3236: + goto tr3247; + goto tr2360; +tr3247: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1074; -st1074: + goto st1083; +st1083: if ( ++p == pe ) - goto _test_eof1074; -case 1074: + goto _test_eof1083; +case 1083: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3237; + goto tr3248; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3237; + goto tr3248; } else - goto tr3237; - goto tr2349; -tr3237: + goto tr3248; + goto tr2360; +tr3248: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -74293,52 +74399,52 @@ tr3237: p--; {goto st261;} } } - goto st1075; -st1075: + goto st1084; +st1084: if ( ++p == pe ) - goto _test_eof1075; -case 1075: + goto _test_eof1084; +case 1084: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3238; + goto tr3249; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3238; + goto tr3249; } else - goto tr3238; - goto tr2349; -tr3238: + goto tr3249; + goto tr2360; +tr3249: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1076; -st1076: + goto st1085; +st1085: if ( ++p == pe ) - goto _test_eof1076; -case 1076: + goto _test_eof1085; +case 1085: if ( (*p) == 58 ) - goto tr3240; - goto tr3239; -tr3240: + goto tr3251; + goto tr3250; +tr3251: { s->item_length++; } - goto st1077; -st1077: + goto st1086; +st1086: if ( ++p == pe ) - goto _test_eof1077; -case 1077: + goto _test_eof1086; +case 1086: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3241; + goto tr3252; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3241; + goto tr3252; } else - goto tr3241; - goto tr2349; -tr3241: + goto tr3252; + goto tr2360; +tr3252: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -74347,40 +74453,40 @@ tr3241: p--; {goto st261;} } } - goto st1078; -st1078: + goto st1087; +st1087: if ( ++p == pe ) - goto _test_eof1078; -case 1078: + goto _test_eof1087; +case 1087: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3242; + goto tr3253; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3242; + goto tr3253; } else - goto tr3242; - goto tr2349; -tr3242: + goto tr3253; + goto tr2360; +tr3253: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1079; -st1079: + goto st1088; +st1088: if ( ++p == pe ) - goto _test_eof1079; -case 1079: + goto _test_eof1088; +case 1088: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3243; + goto tr3254; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3243; + goto tr3254; } else - goto tr3243; - goto tr2349; -tr3243: + goto tr3254; + goto tr2360; +tr3254: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -74389,42 +74495,42 @@ tr3243: p--; {goto st261;} } } - goto st1080; -st1080: + goto st1089; +st1089: if ( ++p == pe ) - goto _test_eof1080; -case 1080: + goto _test_eof1089; +case 1089: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3244; + goto tr3255; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3244; + goto tr3255; } else - goto tr3244; - goto tr2349; -tr3244: + goto tr3255; + goto tr2360; +tr3255: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1081; -st1081: + goto st1090; +st1090: if ( ++p == pe ) - goto _test_eof1081; -case 1081: + goto _test_eof1090; +case 1090: switch( (*p) ) { - case 32: goto tr3246; - case 58: goto tr3240; - case 59: goto tr3246; + case 32: goto tr3257; + case 58: goto tr3251; + case 59: goto tr3257; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3246; + goto tr3257; } else if ( (*p) >= 9 ) - goto tr3246; - goto tr3245; -tr3246: + goto tr3257; + goto tr3256; +tr3257: { s->item_length++; } @@ -74437,13 +74543,13 @@ tr3246: { p--; {cs = stack[--top];goto _again;} } - goto st1193; -st1193: + goto st1202; +st1202: if ( ++p == pe ) - goto _test_eof1193; -case 1193: + goto _test_eof1202; +case 1202: goto st0; -tr3229: +tr3240: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74453,11 +74559,11 @@ tr3229: p--; {goto st261;} } } - goto st1082; -st1082: + goto st1091; +st1091: if ( ++p == pe ) - goto _test_eof1082; -case 1082: + goto _test_eof1091; +case 1091: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -74477,24 +74583,24 @@ case 1082: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3234; + goto tr3245; if ( 896 <= _widec && _widec <= 1151 ) - goto st1082; + goto st1091; goto tr71; -st1083: +st1092: if ( ++p == pe ) - goto _test_eof1083; -case 1083: + goto _test_eof1092; +case 1092: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3247; + goto tr3258; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3247; + goto tr3258; } else - goto tr3247; - goto tr2349; -tr3247: + goto tr3258; + goto tr2360; +tr3258: { s->item_length = 0; } @@ -74506,52 +74612,52 @@ tr3247: p--; {goto st261;} } } - goto st1084; -st1084: + goto st1093; +st1093: if ( ++p == pe ) - goto _test_eof1084; -case 1084: + goto _test_eof1093; +case 1093: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3248; + goto tr3259; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3248; + goto tr3259; } else - goto tr3248; - goto tr2349; -tr3248: + goto tr3259; + goto tr2360; +tr3259: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1085; -st1085: + goto st1094; +st1094: if ( ++p == pe ) - goto _test_eof1085; -case 1085: + goto _test_eof1094; +case 1094: if ( (*p) == 45 ) - goto tr3250; - goto tr3249; -tr3250: + goto tr3261; + goto tr3260; +tr3261: { s->item_length++; } - goto st1086; -st1086: + goto st1095; +st1095: if ( ++p == pe ) - goto _test_eof1086; -case 1086: + goto _test_eof1095; +case 1095: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3251; + goto tr3262; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3251; + goto tr3262; } else - goto tr3251; - goto tr2349; -tr3251: + goto tr3262; + goto tr2360; +tr3262: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -74560,42 +74666,42 @@ tr3251: p--; {goto st261;} } } - goto st1087; -st1087: + goto st1096; +st1096: if ( ++p == pe ) - goto _test_eof1087; -case 1087: + goto _test_eof1096; +case 1096: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3252; + goto tr3263; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3252; + goto tr3263; } else - goto tr3252; - goto tr2349; -tr3252: + goto tr3263; + goto tr2360; +tr3263: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1088; -st1088: + goto st1097; +st1097: if ( ++p == pe ) - goto _test_eof1088; -case 1088: + goto _test_eof1097; +case 1097: switch( (*p) ) { - case 32: goto tr3253; - case 45: goto tr3250; - case 59: goto tr3253; + case 32: goto tr3264; + case 45: goto tr3261; + case 59: goto tr3264; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3253; + goto tr3264; } else if ( (*p) >= 9 ) - goto tr3253; - goto tr3249; -tr3253: + goto tr3264; + goto tr3260; +tr3264: { s->item_length++; } @@ -74608,26 +74714,26 @@ tr3253: { p--; {cs = stack[--top];goto _again;} } - goto st1194; -st1194: + goto st1203; +st1203: if ( ++p == pe ) - goto _test_eof1194; -case 1194: + goto _test_eof1203; +case 1203: goto st0; -st1089: +st1098: if ( ++p == pe ) - goto _test_eof1089; -case 1089: + goto _test_eof1098; +case 1098: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3254; + goto tr3265; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3254; + goto tr3265; } else - goto tr3254; - goto tr2349; -tr3254: + goto tr3265; + goto tr2360; +tr3265: { s->item_length = 0; } @@ -74639,52 +74745,52 @@ tr3254: p--; {goto st261;} } } - goto st1090; -st1090: + goto st1099; +st1099: if ( ++p == pe ) - goto _test_eof1090; -case 1090: + goto _test_eof1099; +case 1099: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3255; + goto tr3266; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3255; + goto tr3266; } else - goto tr3255; - goto tr2349; -tr3255: + goto tr3266; + goto tr2360; +tr3266: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1091; -st1091: + goto st1100; +st1100: if ( ++p == pe ) - goto _test_eof1091; -case 1091: + goto _test_eof1100; +case 1100: if ( (*p) == 45 ) - goto tr3256; - goto tr3249; -tr3256: + goto tr3267; + goto tr3260; +tr3267: { s->item_length++; } - goto st1092; -st1092: + goto st1101; +st1101: if ( ++p == pe ) - goto _test_eof1092; -case 1092: + goto _test_eof1101; +case 1101: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3257; + goto tr3268; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3257; + goto tr3268; } else - goto tr3257; - goto tr2349; -tr3257: + goto tr3268; + goto tr2360; +tr3268: { if (rdata_tail <= rdata_stop) { *rdata_tail = first_hex_to_num[(uint8_t)(*p)]; @@ -74693,42 +74799,42 @@ tr3257: p--; {goto st261;} } } - goto st1093; -st1093: + goto st1102; +st1102: if ( ++p == pe ) - goto _test_eof1093; -case 1093: + goto _test_eof1102; +case 1102: if ( (*p) < 65 ) { if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3258; + goto tr3269; } else if ( (*p) > 70 ) { if ( 97 <= (*p) && (*p) <= 102 ) - goto tr3258; + goto tr3269; } else - goto tr3258; - goto tr2349; -tr3258: + goto tr3269; + goto tr2360; +tr3269: { *rdata_tail += second_hex_to_num[(uint8_t)(*p)]; rdata_tail++; } - goto st1094; -st1094: + goto st1103; +st1103: if ( ++p == pe ) - goto _test_eof1094; -case 1094: + goto _test_eof1103; +case 1103: switch( (*p) ) { - case 32: goto tr3259; - case 45: goto tr3256; - case 59: goto tr3259; + case 32: goto tr3270; + case 45: goto tr3267; + case 59: goto tr3270; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3259; + goto tr3270; } else if ( (*p) >= 9 ) - goto tr3259; - goto tr3249; -tr3259: + goto tr3270; + goto tr3260; +tr3270: { s->item_length++; } @@ -74741,20 +74847,20 @@ tr3259: { p--; {cs = stack[--top];goto _again;} } - goto st1195; -st1195: + goto st1204; +st1204: if ( ++p == pe ) - goto _test_eof1195; -case 1195: + goto _test_eof1204; +case 1204: goto st0; -st1095: +st1104: if ( ++p == pe ) - goto _test_eof1095; -case 1095: + goto _test_eof1104; +case 1104: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3260; - goto tr1746; -tr3260: + goto tr3271; + goto tr1757; +tr3271: { s->number64 = 0; } @@ -74772,8 +74878,8 @@ tr3260: p--; {goto st261;} } } - goto st1096; -tr3264: + goto st1105; +tr3275: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -74788,11 +74894,11 @@ tr3264: p--; {goto st261;} } } - goto st1096; -st1096: + goto st1105; +st1105: if ( ++p == pe ) - goto _test_eof1096; -case 1096: + goto _test_eof1105; +case 1105: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -74806,17 +74912,17 @@ case 1096: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3261; - case 32: goto tr3261; - case 40: goto tr3262; - case 41: goto tr3263; - case 1034: goto tr3265; - case 1083: goto tr3266; + case 9: goto tr3272; + case 32: goto tr3272; + case 40: goto tr3273; + case 41: goto tr3274; + case 1034: goto tr3276; + case 1083: goto tr3277; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3264; - goto tr1746; -tr3268: + goto tr3275; + goto tr1757; +tr3279: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -74824,8 +74930,8 @@ tr3268: } s->multiline = true; } - goto st1097; -tr3269: + goto st1106; +tr3280: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -74833,13 +74939,13 @@ tr3269: } s->multiline = false; } - goto st1097; -tr3271: + goto st1106; +tr3282: { s->line_counter++; } - goto st1097; -tr3261: + goto st1106; +tr3272: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74849,8 +74955,8 @@ tr3261: p--; {goto st261;} } } - goto st1097; -tr3262: + goto st1106; +tr3273: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74867,8 +74973,8 @@ tr3262: } s->multiline = true; } - goto st1097; -tr3263: + goto st1106; +tr3274: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74885,8 +74991,8 @@ tr3263: } s->multiline = false; } - goto st1097; -tr3265: + goto st1106; +tr3276: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -74899,11 +75005,11 @@ tr3265: { s->line_counter++; } - goto st1097; -st1097: + goto st1106; +st1106: if ( ++p == pe ) - goto _test_eof1097; -case 1097: + goto _test_eof1106; +case 1106: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -74917,17 +75023,17 @@ case 1097: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1097; - case 32: goto st1097; - case 40: goto tr3268; - case 41: goto tr3269; - case 1034: goto tr3271; - case 1083: goto st1102; + case 9: goto st1106; + case 32: goto st1106; + case 40: goto tr3279; + case 41: goto tr3280; + case 1034: goto tr3282; + case 1083: goto st1111; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3270; - goto tr1746; -tr3270: + goto tr3281; + goto tr1757; +tr3281: { s->number64 = 0; } @@ -74945,8 +75051,8 @@ tr3270: p--; {goto st261;} } } - goto st1098; -tr3276: + goto st1107; +tr3287: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -74961,11 +75067,11 @@ tr3276: p--; {goto st261;} } } - goto st1098; -st1098: + goto st1107; +st1107: if ( ++p == pe ) - goto _test_eof1098; -case 1098: + goto _test_eof1107; +case 1107: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -74979,17 +75085,17 @@ case 1098: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3273; - case 32: goto tr3273; - case 40: goto tr3274; - case 41: goto tr3275; - case 1034: goto tr3277; - case 1083: goto tr3278; + case 9: goto tr3284; + case 32: goto tr3284; + case 40: goto tr3285; + case 41: goto tr3286; + case 1034: goto tr3288; + case 1083: goto tr3289; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3276; - goto tr1746; -tr3281: + goto tr3287; + goto tr1757; +tr3292: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -74997,8 +75103,8 @@ tr3281: } s->multiline = true; } - goto st1099; -tr3282: + goto st1108; +tr3293: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -75006,13 +75112,13 @@ tr3282: } s->multiline = false; } - goto st1099; -tr3283: + goto st1108; +tr3294: { s->line_counter++; } - goto st1099; -tr3273: + goto st1108; +tr3284: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -75022,8 +75128,8 @@ tr3273: p--; {goto st261;} } } - goto st1099; -tr3274: + goto st1108; +tr3285: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -75040,8 +75146,8 @@ tr3274: } s->multiline = true; } - goto st1099; -tr3275: + goto st1108; +tr3286: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -75058,8 +75164,8 @@ tr3275: } s->multiline = false; } - goto st1099; -tr3277: + goto st1108; +tr3288: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -75072,11 +75178,11 @@ tr3277: { s->line_counter++; } - goto st1099; -st1099: + goto st1108; +st1108: if ( ++p == pe ) - goto _test_eof1099; -case 1099: + goto _test_eof1108; +case 1108: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -75090,50 +75196,50 @@ case 1099: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1099; - case 32: goto st1099; - case 40: goto tr3281; - case 41: goto tr3282; - case 1034: goto tr3283; - case 1083: goto st1101; + case 9: goto st1108; + case 32: goto st1108; + case 40: goto tr3292; + case 41: goto tr3293; + case 1034: goto tr3294; + case 1083: goto st1110; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr3279; + goto tr3290; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr3279; + goto tr3290; } else - goto tr3279; + goto tr3290; goto tr71; -tr3279: - { p--; {stack[top++] = 1100; goto st272;} } - goto st1100; -st1100: +tr3290: + { p--; {stack[top++] = 1109; goto st272;} } + goto st1109; +st1109: if ( ++p == pe ) - goto _test_eof1100; -case 1100: + goto _test_eof1109; +case 1109: switch( (*p) ) { - case 32: goto tr3285; - case 59: goto tr3285; + case 32: goto tr3296; + case 59: goto tr3296; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3285; + goto tr3296; } else if ( (*p) >= 9 ) - goto tr3285; + goto tr3296; goto tr71; -tr3285: +tr3296: { p--; {cs = stack[--top];goto _again;} } - goto st1196; -st1196: + goto st1205; +st1205: if ( ++p == pe ) - goto _test_eof1196; -case 1196: + goto _test_eof1205; +case 1205: goto st0; -tr3278: +tr3289: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -75143,11 +75249,11 @@ tr3278: p--; {goto st261;} } } - goto st1101; -st1101: + goto st1110; +st1110: if ( ++p == pe ) - goto _test_eof1101; -case 1101: + goto _test_eof1110; +case 1110: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -75167,11 +75273,11 @@ case 1101: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3283; + goto tr3294; if ( 896 <= _widec && _widec <= 1151 ) - goto st1101; + goto st1110; goto tr71; -tr3266: +tr3277: { if (s->number64 <= UINT16_MAX) { *((uint16_t *)rdata_tail) = htons((uint16_t)(s->number64)); @@ -75181,11 +75287,11 @@ tr3266: p--; {goto st261;} } } - goto st1102; -st1102: + goto st1111; +st1111: if ( ++p == pe ) - goto _test_eof1102; -case 1102: + goto _test_eof1111; +case 1111: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -75205,18 +75311,18 @@ case 1102: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3271; + goto tr3282; if ( 896 <= _widec && _widec <= 1151 ) - goto st1102; + goto st1111; goto tr71; -st1103: +st1112: if ( ++p == pe ) - goto _test_eof1103; -case 1103: + goto _test_eof1112; +case 1112: if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3286; - goto tr1746; -tr3286: + goto tr3297; + goto tr1757; +tr3297: { s->number64 = 0; } @@ -75234,8 +75340,8 @@ tr3286: p--; {goto st261;} } } - goto st1104; -tr3290: + goto st1113; +tr3301: { // Overflow check: 10*(s->number64) + fc - '0' <= UINT64_MAX if ((s->number64 < (UINT64_MAX / 10)) || // Dominant fast check. @@ -75250,11 +75356,11 @@ tr3290: p--; {goto st261;} } } - goto st1104; -st1104: + goto st1113; +st1113: if ( ++p == pe ) - goto _test_eof1104; -case 1104: + goto _test_eof1113; +case 1113: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -75268,17 +75374,17 @@ case 1104: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3287; - case 32: goto tr3287; - case 40: goto tr3288; - case 41: goto tr3289; - case 1034: goto tr3291; - case 1083: goto tr3292; + case 9: goto tr3298; + case 32: goto tr3298; + case 40: goto tr3299; + case 41: goto tr3300; + case 1034: goto tr3302; + case 1083: goto tr3303; } if ( 48 <= _widec && _widec <= 57 ) - goto tr3290; - goto tr1746; -tr3295: + goto tr3301; + goto tr1757; +tr3306: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -75286,8 +75392,8 @@ tr3295: } s->multiline = true; } - goto st1105; -tr3296: + goto st1114; +tr3307: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -75295,13 +75401,13 @@ tr3296: } s->multiline = false; } - goto st1105; -tr3297: + goto st1114; +tr3308: { s->line_counter++; } - goto st1105; -tr3287: + goto st1114; +tr3298: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -75311,8 +75417,8 @@ tr3287: p--; {goto st261;} } } - goto st1105; -tr3288: + goto st1114; +tr3299: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -75329,8 +75435,8 @@ tr3288: } s->multiline = true; } - goto st1105; -tr3289: + goto st1114; +tr3300: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -75347,8 +75453,8 @@ tr3289: } s->multiline = false; } - goto st1105; -tr3291: + goto st1114; +tr3302: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -75361,11 +75467,11 @@ tr3291: { s->line_counter++; } - goto st1105; -st1105: + goto st1114; +st1114: if ( ++p == pe ) - goto _test_eof1105; -case 1105: + goto _test_eof1114; +case 1114: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -75379,23 +75485,23 @@ case 1105: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1105; - case 32: goto st1105; - case 40: goto tr3295; - case 41: goto tr3296; - case 1034: goto tr3297; - case 1083: goto st1110; + case 9: goto st1114; + case 32: goto st1114; + case 40: goto tr3306; + case 41: goto tr3307; + case 1034: goto tr3308; + case 1083: goto st1119; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr3293; + goto tr3304; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr3293; + goto tr3304; } else - goto tr3293; + goto tr3304; goto tr71; -tr3293: +tr3304: { if (rdata_tail <= rdata_stop) { s->item_length_location = rdata_tail++; @@ -75404,12 +75510,12 @@ tr3293: p--; {goto st261;} } } - { p--; {stack[top++] = 1106; goto st272;} } - goto st1106; -st1106: + { p--; {stack[top++] = 1115; goto st272;} } + goto st1115; +st1115: if ( ++p == pe ) - goto _test_eof1106; -case 1106: + goto _test_eof1115; +case 1115: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -75423,15 +75529,15 @@ case 1106: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto tr3299; - case 32: goto tr3299; - case 40: goto tr3300; - case 41: goto tr3301; - case 1034: goto tr3302; - case 1083: goto tr3303; + case 9: goto tr3310; + case 32: goto tr3310; + case 40: goto tr3311; + case 41: goto tr3312; + case 1034: goto tr3313; + case 1083: goto tr3314; } goto tr71; -tr3306: +tr3317: { if (s->multiline == true) { ERR(ZS_LEFT_PARENTHESIS); @@ -75439,8 +75545,8 @@ tr3306: } s->multiline = true; } - goto st1107; -tr3307: + goto st1116; +tr3318: { if (s->multiline == false) { ERR(ZS_RIGHT_PARENTHESIS); @@ -75448,13 +75554,13 @@ tr3307: } s->multiline = false; } - goto st1107; -tr3308: + goto st1116; +tr3319: { s->line_counter++; } - goto st1107; -tr3299: + goto st1116; +tr3310: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -75465,8 +75571,8 @@ tr3299: p--; {goto st261;} } } - goto st1107; -tr3300: + goto st1116; +tr3311: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -75484,8 +75590,8 @@ tr3300: } s->multiline = true; } - goto st1107; -tr3301: + goto st1116; +tr3312: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -75503,8 +75609,8 @@ tr3301: } s->multiline = false; } - goto st1107; -tr3302: + goto st1116; +tr3313: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -75518,11 +75624,11 @@ tr3302: { s->line_counter++; } - goto st1107; -st1107: + goto st1116; +st1116: if ( ++p == pe ) - goto _test_eof1107; -case 1107: + goto _test_eof1116; +case 1116: _widec = (*p); if ( (*p) > 10 ) { if ( 59 <= (*p) && (*p) <= 59 ) { @@ -75536,50 +75642,50 @@ case 1107: s->multiline ) _widec += 256; } switch( _widec ) { - case 9: goto st1107; - case 32: goto st1107; - case 40: goto tr3306; - case 41: goto tr3307; - case 1034: goto tr3308; - case 1083: goto st1109; + case 9: goto st1116; + case 32: goto st1116; + case 40: goto tr3317; + case 41: goto tr3318; + case 1034: goto tr3319; + case 1083: goto st1118; } if ( _widec < 11 ) { if ( _widec <= 8 ) - goto tr3304; + goto tr3315; } else if ( _widec > 58 ) { if ( 60 <= _widec ) - goto tr3304; + goto tr3315; } else - goto tr3304; + goto tr3315; goto tr71; -tr3304: - { p--; {stack[top++] = 1108; goto st272;} } - goto st1108; -st1108: +tr3315: + { p--; {stack[top++] = 1117; goto st272;} } + goto st1117; +st1117: if ( ++p == pe ) - goto _test_eof1108; -case 1108: + goto _test_eof1117; +case 1117: switch( (*p) ) { - case 32: goto tr3310; - case 59: goto tr3310; + case 32: goto tr3321; + case 59: goto tr3321; } if ( (*p) > 10 ) { if ( 40 <= (*p) && (*p) <= 41 ) - goto tr3310; + goto tr3321; } else if ( (*p) >= 9 ) - goto tr3310; + goto tr3321; goto tr71; -tr3310: +tr3321: { p--; {cs = stack[--top];goto _again;} } - goto st1197; -st1197: + goto st1206; +st1206: if ( ++p == pe ) - goto _test_eof1197; -case 1197: + goto _test_eof1206; +case 1206: goto st0; -tr3303: +tr3314: { s->item_length = rdata_tail - s->item_length_location - 1; @@ -75590,11 +75696,11 @@ tr3303: p--; {goto st261;} } } - goto st1109; -st1109: + goto st1118; +st1118: if ( ++p == pe ) - goto _test_eof1109; -case 1109: + goto _test_eof1118; +case 1118: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -75614,11 +75720,11 @@ case 1109: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3308; + goto tr3319; if ( 896 <= _widec && _widec <= 1151 ) - goto st1109; + goto st1118; goto tr71; -tr3292: +tr3303: { if (s->number64 <= UINT8_MAX) { *rdata_tail = (uint8_t)(s->number64); @@ -75628,11 +75734,11 @@ tr3292: p--; {goto st261;} } } - goto st1110; -st1110: + goto st1119; +st1119: if ( ++p == pe ) - goto _test_eof1110; -case 1110: + goto _test_eof1119; +case 1119: _widec = (*p); if ( (*p) < 10 ) { if ( (*p) <= 9 ) { @@ -75652,12 +75758,12 @@ case 1110: s->multiline ) _widec += 256; } if ( _widec == 1034 ) - goto tr3297; + goto tr3308; if ( 896 <= _widec && _widec <= 1151 ) - goto st1110; + goto st1119; goto tr71; } - _test_eof1111: cs = 1111; goto _test_eof; + _test_eof1120: cs = 1120; goto _test_eof; _test_eof1: cs = 1; goto _test_eof; _test_eof2: cs = 2; goto _test_eof; _test_eof3: cs = 3; goto _test_eof; @@ -75670,7 +75776,7 @@ case 1110: _test_eof10: cs = 10; goto _test_eof; _test_eof11: cs = 11; goto _test_eof; _test_eof12: cs = 12; goto _test_eof; - _test_eof1112: cs = 1112; goto _test_eof; + _test_eof1121: cs = 1121; goto _test_eof; _test_eof13: cs = 13; goto _test_eof; _test_eof14: cs = 14; goto _test_eof; _test_eof15: cs = 15; goto _test_eof; @@ -75798,7 +75904,7 @@ case 1110: _test_eof137: cs = 137; goto _test_eof; _test_eof138: cs = 138; goto _test_eof; _test_eof139: cs = 139; goto _test_eof; - _test_eof1113: cs = 1113; goto _test_eof; + _test_eof1122: cs = 1122; goto _test_eof; _test_eof140: cs = 140; goto _test_eof; _test_eof141: cs = 141; goto _test_eof; _test_eof142: cs = 142; goto _test_eof; @@ -75809,7 +75915,7 @@ case 1110: _test_eof147: cs = 147; goto _test_eof; _test_eof148: cs = 148; goto _test_eof; _test_eof149: cs = 149; goto _test_eof; - _test_eof1114: cs = 1114; goto _test_eof; + _test_eof1123: cs = 1123; goto _test_eof; _test_eof150: cs = 150; goto _test_eof; _test_eof151: cs = 151; goto _test_eof; _test_eof152: cs = 152; goto _test_eof; @@ -75818,11 +75924,11 @@ case 1110: _test_eof155: cs = 155; goto _test_eof; _test_eof156: cs = 156; goto _test_eof; _test_eof157: cs = 157; goto _test_eof; - _test_eof1115: cs = 1115; goto _test_eof; + _test_eof1124: cs = 1124; goto _test_eof; _test_eof158: cs = 158; goto _test_eof; _test_eof159: cs = 159; goto _test_eof; _test_eof160: cs = 160; goto _test_eof; - _test_eof1116: cs = 1116; goto _test_eof; + _test_eof1125: cs = 1125; goto _test_eof; _test_eof161: cs = 161; goto _test_eof; _test_eof162: cs = 162; goto _test_eof; _test_eof163: cs = 163; goto _test_eof; @@ -75834,12 +75940,12 @@ case 1110: _test_eof169: cs = 169; goto _test_eof; _test_eof170: cs = 170; goto _test_eof; _test_eof171: cs = 171; goto _test_eof; - _test_eof1117: cs = 1117; goto _test_eof; + _test_eof1126: cs = 1126; goto _test_eof; _test_eof172: cs = 172; goto _test_eof; _test_eof173: cs = 173; goto _test_eof; _test_eof174: cs = 174; goto _test_eof; _test_eof175: cs = 175; goto _test_eof; - _test_eof1118: cs = 1118; goto _test_eof; + _test_eof1127: cs = 1127; goto _test_eof; _test_eof176: cs = 176; goto _test_eof; _test_eof177: cs = 177; goto _test_eof; _test_eof178: cs = 178; goto _test_eof; @@ -75856,7 +75962,7 @@ case 1110: _test_eof189: cs = 189; goto _test_eof; _test_eof190: cs = 190; goto _test_eof; _test_eof191: cs = 191; goto _test_eof; - _test_eof1119: cs = 1119; goto _test_eof; + _test_eof1128: cs = 1128; goto _test_eof; _test_eof192: cs = 192; goto _test_eof; _test_eof193: cs = 193; goto _test_eof; _test_eof194: cs = 194; goto _test_eof; @@ -75873,7 +75979,7 @@ case 1110: _test_eof205: cs = 205; goto _test_eof; _test_eof206: cs = 206; goto _test_eof; _test_eof207: cs = 207; goto _test_eof; - _test_eof1120: cs = 1120; goto _test_eof; + _test_eof1129: cs = 1129; goto _test_eof; _test_eof208: cs = 208; goto _test_eof; _test_eof209: cs = 209; goto _test_eof; _test_eof210: cs = 210; goto _test_eof; @@ -75929,10 +76035,10 @@ case 1110: _test_eof260: cs = 260; goto _test_eof; _test_eof261: cs = 261; goto _test_eof; _test_eof262: cs = 262; goto _test_eof; - _test_eof1121: cs = 1121; goto _test_eof; + _test_eof1130: cs = 1130; goto _test_eof; _test_eof263: cs = 263; goto _test_eof; _test_eof264: cs = 264; goto _test_eof; - _test_eof1122: cs = 1122; goto _test_eof; + _test_eof1131: cs = 1131; goto _test_eof; _test_eof265: cs = 265; goto _test_eof; _test_eof266: cs = 266; goto _test_eof; _test_eof267: cs = 267; goto _test_eof; @@ -75942,8 +76048,8 @@ case 1110: _test_eof271: cs = 271; goto _test_eof; _test_eof272: cs = 272; goto _test_eof; _test_eof273: cs = 273; goto _test_eof; - _test_eof1123: cs = 1123; goto _test_eof; - _test_eof1124: cs = 1124; goto _test_eof; + _test_eof1132: cs = 1132; goto _test_eof; + _test_eof1133: cs = 1133; goto _test_eof; _test_eof274: cs = 274; goto _test_eof; _test_eof275: cs = 275; goto _test_eof; _test_eof276: cs = 276; goto _test_eof; @@ -75958,7 +76064,7 @@ case 1110: _test_eof285: cs = 285; goto _test_eof; _test_eof286: cs = 286; goto _test_eof; _test_eof287: cs = 287; goto _test_eof; - _test_eof1125: cs = 1125; goto _test_eof; + _test_eof1134: cs = 1134; goto _test_eof; _test_eof288: cs = 288; goto _test_eof; _test_eof289: cs = 289; goto _test_eof; _test_eof290: cs = 290; goto _test_eof; @@ -75969,7 +76075,7 @@ case 1110: _test_eof295: cs = 295; goto _test_eof; _test_eof296: cs = 296; goto _test_eof; _test_eof297: cs = 297; goto _test_eof; - _test_eof1126: cs = 1126; goto _test_eof; + _test_eof1135: cs = 1135; goto _test_eof; _test_eof298: cs = 298; goto _test_eof; _test_eof299: cs = 299; goto _test_eof; _test_eof300: cs = 300; goto _test_eof; @@ -75984,7 +76090,7 @@ case 1110: _test_eof309: cs = 309; goto _test_eof; _test_eof310: cs = 310; goto _test_eof; _test_eof311: cs = 311; goto _test_eof; - _test_eof1127: cs = 1127; goto _test_eof; + _test_eof1136: cs = 1136; goto _test_eof; _test_eof312: cs = 312; goto _test_eof; _test_eof313: cs = 313; goto _test_eof; _test_eof314: cs = 314; goto _test_eof; @@ -75992,7 +76098,7 @@ case 1110: _test_eof316: cs = 316; goto _test_eof; _test_eof317: cs = 317; goto _test_eof; _test_eof318: cs = 318; goto _test_eof; - _test_eof1128: cs = 1128; goto _test_eof; + _test_eof1137: cs = 1137; goto _test_eof; _test_eof319: cs = 319; goto _test_eof; _test_eof320: cs = 320; goto _test_eof; _test_eof321: cs = 321; goto _test_eof; @@ -76002,9 +76108,9 @@ case 1110: _test_eof325: cs = 325; goto _test_eof; _test_eof326: cs = 326; goto _test_eof; _test_eof327: cs = 327; goto _test_eof; - _test_eof1129: cs = 1129; goto _test_eof; - _test_eof1130: cs = 1130; goto _test_eof; - _test_eof1131: cs = 1131; goto _test_eof; + _test_eof1138: cs = 1138; goto _test_eof; + _test_eof1139: cs = 1139; goto _test_eof; + _test_eof1140: cs = 1140; goto _test_eof; _test_eof328: cs = 328; goto _test_eof; _test_eof329: cs = 329; goto _test_eof; _test_eof330: cs = 330; goto _test_eof; @@ -76013,12 +76119,12 @@ case 1110: _test_eof333: cs = 333; goto _test_eof; _test_eof334: cs = 334; goto _test_eof; _test_eof335: cs = 335; goto _test_eof; - _test_eof1132: cs = 1132; goto _test_eof; - _test_eof1133: cs = 1133; goto _test_eof; + _test_eof1141: cs = 1141; goto _test_eof; + _test_eof1142: cs = 1142; goto _test_eof; _test_eof336: cs = 336; goto _test_eof; _test_eof337: cs = 337; goto _test_eof; _test_eof338: cs = 338; goto _test_eof; - _test_eof1134: cs = 1134; goto _test_eof; + _test_eof1143: cs = 1143; goto _test_eof; _test_eof339: cs = 339; goto _test_eof; _test_eof340: cs = 340; goto _test_eof; _test_eof341: cs = 341; goto _test_eof; @@ -76148,29 +76254,29 @@ case 1110: _test_eof465: cs = 465; goto _test_eof; _test_eof466: cs = 466; goto _test_eof; _test_eof467: cs = 467; goto _test_eof; - _test_eof1135: cs = 1135; goto _test_eof; - _test_eof1136: cs = 1136; goto _test_eof; - _test_eof1137: cs = 1137; goto _test_eof; + _test_eof1144: cs = 1144; goto _test_eof; + _test_eof1145: cs = 1145; goto _test_eof; + _test_eof1146: cs = 1146; goto _test_eof; _test_eof468: cs = 468; goto _test_eof; _test_eof469: cs = 469; goto _test_eof; _test_eof470: cs = 470; goto _test_eof; _test_eof471: cs = 471; goto _test_eof; _test_eof472: cs = 472; goto _test_eof; - _test_eof1138: cs = 1138; goto _test_eof; + _test_eof1147: cs = 1147; goto _test_eof; _test_eof473: cs = 473; goto _test_eof; _test_eof474: cs = 474; goto _test_eof; _test_eof475: cs = 475; goto _test_eof; _test_eof476: cs = 476; goto _test_eof; - _test_eof1139: cs = 1139; goto _test_eof; - _test_eof1140: cs = 1140; goto _test_eof; - _test_eof1141: cs = 1141; goto _test_eof; + _test_eof1148: cs = 1148; goto _test_eof; + _test_eof1149: cs = 1149; goto _test_eof; + _test_eof1150: cs = 1150; goto _test_eof; _test_eof477: cs = 477; goto _test_eof; _test_eof478: cs = 478; goto _test_eof; - _test_eof1142: cs = 1142; goto _test_eof; + _test_eof1151: cs = 1151; goto _test_eof; _test_eof479: cs = 479; goto _test_eof; _test_eof480: cs = 480; goto _test_eof; _test_eof481: cs = 481; goto _test_eof; - _test_eof1143: cs = 1143; goto _test_eof; + _test_eof1152: cs = 1152; goto _test_eof; _test_eof482: cs = 482; goto _test_eof; _test_eof483: cs = 483; goto _test_eof; _test_eof484: cs = 484; goto _test_eof; @@ -76266,7 +76372,6 @@ case 1110: _test_eof574: cs = 574; goto _test_eof; _test_eof575: cs = 575; goto _test_eof; _test_eof576: cs = 576; goto _test_eof; - _test_eof1144: cs = 1144; goto _test_eof; _test_eof577: cs = 577; goto _test_eof; _test_eof578: cs = 578; goto _test_eof; _test_eof579: cs = 579; goto _test_eof; @@ -76276,6 +76381,7 @@ case 1110: _test_eof583: cs = 583; goto _test_eof; _test_eof584: cs = 584; goto _test_eof; _test_eof585: cs = 585; goto _test_eof; + _test_eof1153: cs = 1153; goto _test_eof; _test_eof586: cs = 586; goto _test_eof; _test_eof587: cs = 587; goto _test_eof; _test_eof588: cs = 588; goto _test_eof; @@ -76308,10 +76414,8 @@ case 1110: _test_eof615: cs = 615; goto _test_eof; _test_eof616: cs = 616; goto _test_eof; _test_eof617: cs = 617; goto _test_eof; - _test_eof1145: cs = 1145; goto _test_eof; _test_eof618: cs = 618; goto _test_eof; _test_eof619: cs = 619; goto _test_eof; - _test_eof1146: cs = 1146; goto _test_eof; _test_eof620: cs = 620; goto _test_eof; _test_eof621: cs = 621; goto _test_eof; _test_eof622: cs = 622; goto _test_eof; @@ -76319,14 +76423,15 @@ case 1110: _test_eof624: cs = 624; goto _test_eof; _test_eof625: cs = 625; goto _test_eof; _test_eof626: cs = 626; goto _test_eof; + _test_eof1154: cs = 1154; goto _test_eof; _test_eof627: cs = 627; goto _test_eof; _test_eof628: cs = 628; goto _test_eof; + _test_eof1155: cs = 1155; goto _test_eof; _test_eof629: cs = 629; goto _test_eof; _test_eof630: cs = 630; goto _test_eof; _test_eof631: cs = 631; goto _test_eof; _test_eof632: cs = 632; goto _test_eof; _test_eof633: cs = 633; goto _test_eof; - _test_eof1147: cs = 1147; goto _test_eof; _test_eof634: cs = 634; goto _test_eof; _test_eof635: cs = 635; goto _test_eof; _test_eof636: cs = 636; goto _test_eof; @@ -76336,6 +76441,7 @@ case 1110: _test_eof640: cs = 640; goto _test_eof; _test_eof641: cs = 641; goto _test_eof; _test_eof642: cs = 642; goto _test_eof; + _test_eof1156: cs = 1156; goto _test_eof; _test_eof643: cs = 643; goto _test_eof; _test_eof644: cs = 644; goto _test_eof; _test_eof645: cs = 645; goto _test_eof; @@ -76349,39 +76455,39 @@ case 1110: _test_eof653: cs = 653; goto _test_eof; _test_eof654: cs = 654; goto _test_eof; _test_eof655: cs = 655; goto _test_eof; - _test_eof1148: cs = 1148; goto _test_eof; _test_eof656: cs = 656; goto _test_eof; _test_eof657: cs = 657; goto _test_eof; _test_eof658: cs = 658; goto _test_eof; _test_eof659: cs = 659; goto _test_eof; _test_eof660: cs = 660; goto _test_eof; - _test_eof1149: cs = 1149; goto _test_eof; _test_eof661: cs = 661; goto _test_eof; _test_eof662: cs = 662; goto _test_eof; _test_eof663: cs = 663; goto _test_eof; _test_eof664: cs = 664; goto _test_eof; + _test_eof1157: cs = 1157; goto _test_eof; _test_eof665: cs = 665; goto _test_eof; - _test_eof1150: cs = 1150; goto _test_eof; _test_eof666: cs = 666; goto _test_eof; _test_eof667: cs = 667; goto _test_eof; _test_eof668: cs = 668; goto _test_eof; _test_eof669: cs = 669; goto _test_eof; + _test_eof1158: cs = 1158; goto _test_eof; _test_eof670: cs = 670; goto _test_eof; - _test_eof1151: cs = 1151; goto _test_eof; - _test_eof1152: cs = 1152; goto _test_eof; - _test_eof1153: cs = 1153; goto _test_eof; _test_eof671: cs = 671; goto _test_eof; _test_eof672: cs = 672; goto _test_eof; - _test_eof1154: cs = 1154; goto _test_eof; _test_eof673: cs = 673; goto _test_eof; _test_eof674: cs = 674; goto _test_eof; + _test_eof1159: cs = 1159; goto _test_eof; _test_eof675: cs = 675; goto _test_eof; _test_eof676: cs = 676; goto _test_eof; _test_eof677: cs = 677; goto _test_eof; _test_eof678: cs = 678; goto _test_eof; _test_eof679: cs = 679; goto _test_eof; + _test_eof1160: cs = 1160; goto _test_eof; + _test_eof1161: cs = 1161; goto _test_eof; + _test_eof1162: cs = 1162; goto _test_eof; _test_eof680: cs = 680; goto _test_eof; _test_eof681: cs = 681; goto _test_eof; + _test_eof1163: cs = 1163; goto _test_eof; _test_eof682: cs = 682; goto _test_eof; _test_eof683: cs = 683; goto _test_eof; _test_eof684: cs = 684; goto _test_eof; @@ -76400,35 +76506,35 @@ case 1110: _test_eof697: cs = 697; goto _test_eof; _test_eof698: cs = 698; goto _test_eof; _test_eof699: cs = 699; goto _test_eof; - _test_eof1155: cs = 1155; goto _test_eof; - _test_eof1156: cs = 1156; goto _test_eof; - _test_eof1157: cs = 1157; goto _test_eof; _test_eof700: cs = 700; goto _test_eof; _test_eof701: cs = 701; goto _test_eof; _test_eof702: cs = 702; goto _test_eof; - _test_eof1158: cs = 1158; goto _test_eof; - _test_eof1159: cs = 1159; goto _test_eof; _test_eof703: cs = 703; goto _test_eof; _test_eof704: cs = 704; goto _test_eof; _test_eof705: cs = 705; goto _test_eof; _test_eof706: cs = 706; goto _test_eof; - _test_eof1160: cs = 1160; goto _test_eof; - _test_eof1161: cs = 1161; goto _test_eof; _test_eof707: cs = 707; goto _test_eof; _test_eof708: cs = 708; goto _test_eof; + _test_eof1164: cs = 1164; goto _test_eof; + _test_eof1165: cs = 1165; goto _test_eof; + _test_eof1166: cs = 1166; goto _test_eof; _test_eof709: cs = 709; goto _test_eof; _test_eof710: cs = 710; goto _test_eof; - _test_eof1162: cs = 1162; goto _test_eof; - _test_eof1163: cs = 1163; goto _test_eof; _test_eof711: cs = 711; goto _test_eof; + _test_eof1167: cs = 1167; goto _test_eof; + _test_eof1168: cs = 1168; goto _test_eof; _test_eof712: cs = 712; goto _test_eof; _test_eof713: cs = 713; goto _test_eof; _test_eof714: cs = 714; goto _test_eof; _test_eof715: cs = 715; goto _test_eof; + _test_eof1169: cs = 1169; goto _test_eof; + _test_eof1170: cs = 1170; goto _test_eof; _test_eof716: cs = 716; goto _test_eof; _test_eof717: cs = 717; goto _test_eof; _test_eof718: cs = 718; goto _test_eof; _test_eof719: cs = 719; goto _test_eof; + _test_eof1171: cs = 1171; goto _test_eof; + _test_eof1172: cs = 1172; goto _test_eof; _test_eof720: cs = 720; goto _test_eof; _test_eof721: cs = 721; goto _test_eof; _test_eof722: cs = 722; goto _test_eof; @@ -76445,7 +76551,6 @@ case 1110: _test_eof733: cs = 733; goto _test_eof; _test_eof734: cs = 734; goto _test_eof; _test_eof735: cs = 735; goto _test_eof; - _test_eof1164: cs = 1164; goto _test_eof; _test_eof736: cs = 736; goto _test_eof; _test_eof737: cs = 737; goto _test_eof; _test_eof738: cs = 738; goto _test_eof; @@ -76455,13 +76560,13 @@ case 1110: _test_eof742: cs = 742; goto _test_eof; _test_eof743: cs = 743; goto _test_eof; _test_eof744: cs = 744; goto _test_eof; + _test_eof1173: cs = 1173; goto _test_eof; _test_eof745: cs = 745; goto _test_eof; _test_eof746: cs = 746; goto _test_eof; _test_eof747: cs = 747; goto _test_eof; _test_eof748: cs = 748; goto _test_eof; _test_eof749: cs = 749; goto _test_eof; _test_eof750: cs = 750; goto _test_eof; - _test_eof1165: cs = 1165; goto _test_eof; _test_eof751: cs = 751; goto _test_eof; _test_eof752: cs = 752; goto _test_eof; _test_eof753: cs = 753; goto _test_eof; @@ -76471,11 +76576,11 @@ case 1110: _test_eof757: cs = 757; goto _test_eof; _test_eof758: cs = 758; goto _test_eof; _test_eof759: cs = 759; goto _test_eof; + _test_eof1174: cs = 1174; goto _test_eof; _test_eof760: cs = 760; goto _test_eof; _test_eof761: cs = 761; goto _test_eof; _test_eof762: cs = 762; goto _test_eof; _test_eof763: cs = 763; goto _test_eof; - _test_eof1166: cs = 1166; goto _test_eof; _test_eof764: cs = 764; goto _test_eof; _test_eof765: cs = 765; goto _test_eof; _test_eof766: cs = 766; goto _test_eof; @@ -76485,27 +76590,25 @@ case 1110: _test_eof770: cs = 770; goto _test_eof; _test_eof771: cs = 771; goto _test_eof; _test_eof772: cs = 772; goto _test_eof; + _test_eof1175: cs = 1175; goto _test_eof; _test_eof773: cs = 773; goto _test_eof; _test_eof774: cs = 774; goto _test_eof; - _test_eof1167: cs = 1167; goto _test_eof; - _test_eof1168: cs = 1168; goto _test_eof; _test_eof775: cs = 775; goto _test_eof; _test_eof776: cs = 776; goto _test_eof; _test_eof777: cs = 777; goto _test_eof; - _test_eof1169: cs = 1169; goto _test_eof; _test_eof778: cs = 778; goto _test_eof; _test_eof779: cs = 779; goto _test_eof; _test_eof780: cs = 780; goto _test_eof; _test_eof781: cs = 781; goto _test_eof; _test_eof782: cs = 782; goto _test_eof; _test_eof783: cs = 783; goto _test_eof; + _test_eof1176: cs = 1176; goto _test_eof; + _test_eof1177: cs = 1177; goto _test_eof; _test_eof784: cs = 784; goto _test_eof; _test_eof785: cs = 785; goto _test_eof; _test_eof786: cs = 786; goto _test_eof; + _test_eof1178: cs = 1178; goto _test_eof; _test_eof787: cs = 787; goto _test_eof; - _test_eof1170: cs = 1170; goto _test_eof; - _test_eof1171: cs = 1171; goto _test_eof; - _test_eof1172: cs = 1172; goto _test_eof; _test_eof788: cs = 788; goto _test_eof; _test_eof789: cs = 789; goto _test_eof; _test_eof790: cs = 790; goto _test_eof; @@ -76515,11 +76618,11 @@ case 1110: _test_eof794: cs = 794; goto _test_eof; _test_eof795: cs = 795; goto _test_eof; _test_eof796: cs = 796; goto _test_eof; + _test_eof1179: cs = 1179; goto _test_eof; + _test_eof1180: cs = 1180; goto _test_eof; + _test_eof1181: cs = 1181; goto _test_eof; _test_eof797: cs = 797; goto _test_eof; _test_eof798: cs = 798; goto _test_eof; - _test_eof1173: cs = 1173; goto _test_eof; - _test_eof1174: cs = 1174; goto _test_eof; - _test_eof1175: cs = 1175; goto _test_eof; _test_eof799: cs = 799; goto _test_eof; _test_eof800: cs = 800; goto _test_eof; _test_eof801: cs = 801; goto _test_eof; @@ -76529,30 +76632,33 @@ case 1110: _test_eof805: cs = 805; goto _test_eof; _test_eof806: cs = 806; goto _test_eof; _test_eof807: cs = 807; goto _test_eof; + _test_eof1182: cs = 1182; goto _test_eof; + _test_eof1183: cs = 1183; goto _test_eof; + _test_eof1184: cs = 1184; goto _test_eof; _test_eof808: cs = 808; goto _test_eof; _test_eof809: cs = 809; goto _test_eof; _test_eof810: cs = 810; goto _test_eof; - _test_eof1176: cs = 1176; goto _test_eof; _test_eof811: cs = 811; goto _test_eof; _test_eof812: cs = 812; goto _test_eof; _test_eof813: cs = 813; goto _test_eof; - _test_eof1177: cs = 1177; goto _test_eof; - _test_eof1178: cs = 1178; goto _test_eof; _test_eof814: cs = 814; goto _test_eof; - _test_eof1179: cs = 1179; goto _test_eof; - _test_eof1180: cs = 1180; goto _test_eof; _test_eof815: cs = 815; goto _test_eof; - _test_eof1181: cs = 1181; goto _test_eof; - _test_eof1182: cs = 1182; goto _test_eof; _test_eof816: cs = 816; goto _test_eof; _test_eof817: cs = 817; goto _test_eof; _test_eof818: cs = 818; goto _test_eof; _test_eof819: cs = 819; goto _test_eof; + _test_eof1185: cs = 1185; goto _test_eof; _test_eof820: cs = 820; goto _test_eof; _test_eof821: cs = 821; goto _test_eof; _test_eof822: cs = 822; goto _test_eof; + _test_eof1186: cs = 1186; goto _test_eof; + _test_eof1187: cs = 1187; goto _test_eof; _test_eof823: cs = 823; goto _test_eof; + _test_eof1188: cs = 1188; goto _test_eof; + _test_eof1189: cs = 1189; goto _test_eof; _test_eof824: cs = 824; goto _test_eof; + _test_eof1190: cs = 1190; goto _test_eof; + _test_eof1191: cs = 1191; goto _test_eof; _test_eof825: cs = 825; goto _test_eof; _test_eof826: cs = 826; goto _test_eof; _test_eof827: cs = 827; goto _test_eof; @@ -76586,7 +76692,6 @@ case 1110: _test_eof855: cs = 855; goto _test_eof; _test_eof856: cs = 856; goto _test_eof; _test_eof857: cs = 857; goto _test_eof; - _test_eof1183: cs = 1183; goto _test_eof; _test_eof858: cs = 858; goto _test_eof; _test_eof859: cs = 859; goto _test_eof; _test_eof860: cs = 860; goto _test_eof; @@ -76596,6 +76701,7 @@ case 1110: _test_eof864: cs = 864; goto _test_eof; _test_eof865: cs = 865; goto _test_eof; _test_eof866: cs = 866; goto _test_eof; + _test_eof1192: cs = 1192; goto _test_eof; _test_eof867: cs = 867; goto _test_eof; _test_eof868: cs = 868; goto _test_eof; _test_eof869: cs = 869; goto _test_eof; @@ -76726,7 +76832,6 @@ case 1110: _test_eof994: cs = 994; goto _test_eof; _test_eof995: cs = 995; goto _test_eof; _test_eof996: cs = 996; goto _test_eof; - _test_eof1184: cs = 1184; goto _test_eof; _test_eof997: cs = 997; goto _test_eof; _test_eof998: cs = 998; goto _test_eof; _test_eof999: cs = 999; goto _test_eof; @@ -76735,22 +76840,23 @@ case 1110: _test_eof1002: cs = 1002; goto _test_eof; _test_eof1003: cs = 1003; goto _test_eof; _test_eof1004: cs = 1004; goto _test_eof; - _test_eof1185: cs = 1185; goto _test_eof; _test_eof1005: cs = 1005; goto _test_eof; + _test_eof1193: cs = 1193; goto _test_eof; _test_eof1006: cs = 1006; goto _test_eof; _test_eof1007: cs = 1007; goto _test_eof; _test_eof1008: cs = 1008; goto _test_eof; _test_eof1009: cs = 1009; goto _test_eof; - _test_eof1186: cs = 1186; goto _test_eof; _test_eof1010: cs = 1010; goto _test_eof; _test_eof1011: cs = 1011; goto _test_eof; _test_eof1012: cs = 1012; goto _test_eof; _test_eof1013: cs = 1013; goto _test_eof; + _test_eof1194: cs = 1194; goto _test_eof; _test_eof1014: cs = 1014; goto _test_eof; _test_eof1015: cs = 1015; goto _test_eof; _test_eof1016: cs = 1016; goto _test_eof; _test_eof1017: cs = 1017; goto _test_eof; _test_eof1018: cs = 1018; goto _test_eof; + _test_eof1195: cs = 1195; goto _test_eof; _test_eof1019: cs = 1019; goto _test_eof; _test_eof1020: cs = 1020; goto _test_eof; _test_eof1021: cs = 1021; goto _test_eof; @@ -76760,7 +76866,6 @@ case 1110: _test_eof1025: cs = 1025; goto _test_eof; _test_eof1026: cs = 1026; goto _test_eof; _test_eof1027: cs = 1027; goto _test_eof; - _test_eof1187: cs = 1187; goto _test_eof; _test_eof1028: cs = 1028; goto _test_eof; _test_eof1029: cs = 1029; goto _test_eof; _test_eof1030: cs = 1030; goto _test_eof; @@ -76770,6 +76875,7 @@ case 1110: _test_eof1034: cs = 1034; goto _test_eof; _test_eof1035: cs = 1035; goto _test_eof; _test_eof1036: cs = 1036; goto _test_eof; + _test_eof1196: cs = 1196; goto _test_eof; _test_eof1037: cs = 1037; goto _test_eof; _test_eof1038: cs = 1038; goto _test_eof; _test_eof1039: cs = 1039; goto _test_eof; @@ -76780,7 +76886,6 @@ case 1110: _test_eof1044: cs = 1044; goto _test_eof; _test_eof1045: cs = 1045; goto _test_eof; _test_eof1046: cs = 1046; goto _test_eof; - _test_eof1188: cs = 1188; goto _test_eof; _test_eof1047: cs = 1047; goto _test_eof; _test_eof1048: cs = 1048; goto _test_eof; _test_eof1049: cs = 1049; goto _test_eof; @@ -76790,15 +76895,13 @@ case 1110: _test_eof1053: cs = 1053; goto _test_eof; _test_eof1054: cs = 1054; goto _test_eof; _test_eof1055: cs = 1055; goto _test_eof; + _test_eof1197: cs = 1197; goto _test_eof; _test_eof1056: cs = 1056; goto _test_eof; _test_eof1057: cs = 1057; goto _test_eof; _test_eof1058: cs = 1058; goto _test_eof; _test_eof1059: cs = 1059; goto _test_eof; _test_eof1060: cs = 1060; goto _test_eof; _test_eof1061: cs = 1061; goto _test_eof; - _test_eof1189: cs = 1189; goto _test_eof; - _test_eof1190: cs = 1190; goto _test_eof; - _test_eof1191: cs = 1191; goto _test_eof; _test_eof1062: cs = 1062; goto _test_eof; _test_eof1063: cs = 1063; goto _test_eof; _test_eof1064: cs = 1064; goto _test_eof; @@ -76806,9 +76909,11 @@ case 1110: _test_eof1066: cs = 1066; goto _test_eof; _test_eof1067: cs = 1067; goto _test_eof; _test_eof1068: cs = 1068; goto _test_eof; - _test_eof1192: cs = 1192; goto _test_eof; _test_eof1069: cs = 1069; goto _test_eof; _test_eof1070: cs = 1070; goto _test_eof; + _test_eof1198: cs = 1198; goto _test_eof; + _test_eof1199: cs = 1199; goto _test_eof; + _test_eof1200: cs = 1200; goto _test_eof; _test_eof1071: cs = 1071; goto _test_eof; _test_eof1072: cs = 1072; goto _test_eof; _test_eof1073: cs = 1073; goto _test_eof; @@ -76816,11 +76921,11 @@ case 1110: _test_eof1075: cs = 1075; goto _test_eof; _test_eof1076: cs = 1076; goto _test_eof; _test_eof1077: cs = 1077; goto _test_eof; + _test_eof1201: cs = 1201; goto _test_eof; _test_eof1078: cs = 1078; goto _test_eof; _test_eof1079: cs = 1079; goto _test_eof; _test_eof1080: cs = 1080; goto _test_eof; _test_eof1081: cs = 1081; goto _test_eof; - _test_eof1193: cs = 1193; goto _test_eof; _test_eof1082: cs = 1082; goto _test_eof; _test_eof1083: cs = 1083; goto _test_eof; _test_eof1084: cs = 1084; goto _test_eof; @@ -76828,32 +76933,42 @@ case 1110: _test_eof1086: cs = 1086; goto _test_eof; _test_eof1087: cs = 1087; goto _test_eof; _test_eof1088: cs = 1088; goto _test_eof; - _test_eof1194: cs = 1194; goto _test_eof; _test_eof1089: cs = 1089; goto _test_eof; _test_eof1090: cs = 1090; goto _test_eof; + _test_eof1202: cs = 1202; goto _test_eof; _test_eof1091: cs = 1091; goto _test_eof; _test_eof1092: cs = 1092; goto _test_eof; _test_eof1093: cs = 1093; goto _test_eof; _test_eof1094: cs = 1094; goto _test_eof; - _test_eof1195: cs = 1195; goto _test_eof; _test_eof1095: cs = 1095; goto _test_eof; _test_eof1096: cs = 1096; goto _test_eof; _test_eof1097: cs = 1097; goto _test_eof; + _test_eof1203: cs = 1203; goto _test_eof; _test_eof1098: cs = 1098; goto _test_eof; _test_eof1099: cs = 1099; goto _test_eof; _test_eof1100: cs = 1100; goto _test_eof; - _test_eof1196: cs = 1196; goto _test_eof; _test_eof1101: cs = 1101; goto _test_eof; _test_eof1102: cs = 1102; goto _test_eof; _test_eof1103: cs = 1103; goto _test_eof; + _test_eof1204: cs = 1204; goto _test_eof; _test_eof1104: cs = 1104; goto _test_eof; _test_eof1105: cs = 1105; goto _test_eof; _test_eof1106: cs = 1106; goto _test_eof; _test_eof1107: cs = 1107; goto _test_eof; _test_eof1108: cs = 1108; goto _test_eof; - _test_eof1197: cs = 1197; goto _test_eof; _test_eof1109: cs = 1109; goto _test_eof; + _test_eof1205: cs = 1205; goto _test_eof; _test_eof1110: cs = 1110; goto _test_eof; + _test_eof1111: cs = 1111; goto _test_eof; + _test_eof1112: cs = 1112; goto _test_eof; + _test_eof1113: cs = 1113; goto _test_eof; + _test_eof1114: cs = 1114; goto _test_eof; + _test_eof1115: cs = 1115; goto _test_eof; + _test_eof1116: cs = 1116; goto _test_eof; + _test_eof1117: cs = 1117; goto _test_eof; + _test_eof1206: cs = 1206; goto _test_eof; + _test_eof1118: cs = 1118; goto _test_eof; + _test_eof1119: cs = 1119; goto _test_eof; _test_eof: {} if ( p == eof ) @@ -76927,11 +77042,11 @@ case 1110: p--; {goto st261;} } break; - case 1115: + case 1124: { NOERR; if (escape) { - cs = 1111; {p++; cs = 0; goto _out;} + cs = 1120; {p++; cs = 0; goto _out;} } } break; @@ -77212,11 +77327,6 @@ case 1110: case 572: case 573: case 574: - { - WARN(ZS_BAD_ALGORITHM); - p--; {goto st261;} - } - break; case 575: case 576: case 577: @@ -77226,6 +77336,11 @@ case 1110: case 581: case 582: case 583: + { + WARN(ZS_BAD_ALGORITHM); + p--; {goto st261;} + } + break; case 584: case 585: case 586: @@ -77258,6 +77373,15 @@ case 1110: case 613: case 614: case 615: + case 616: + case 617: + case 618: + case 619: + case 620: + case 621: + case 622: + case 623: + case 624: { WARN(ZS_BAD_CERT_TYPE); p--; {goto st261;} @@ -77267,51 +77391,44 @@ case 1110: case 9: case 10: case 241: - case 618: - case 619: - case 620: - case 621: - case 622: - case 623: - case 637: - case 641: - case 645: - case 649: + case 627: + case 628: + case 629: + case 630: + case 631: + case 632: + case 646: case 650: - case 651: - case 652: - case 653: case 654: - case 655: - case 656: - case 657: case 658: case 659: case 660: case 661: + case 662: + case 663: case 664: case 665: case 666: - case 734: - case 735: - case 736: - case 737: - case 738: + case 667: + case 668: + case 669: + case 670: + case 673: + case 674: + case 675: case 743: case 744: case 745: case 746: case 747: - case 748: - case 749: - case 750: - case 751: case 752: case 753: case 754: case 755: case 756: case 757: + case 758: + case 759: case 760: case 761: case 762: @@ -77319,64 +77436,71 @@ case 1110: case 764: case 765: case 766: + case 769: + case 770: + case 771: + case 772: + case 773: case 774: - case 780: - case 781: - case 788: + case 775: + case 783: case 789: case 790: + case 797: + case 798: case 799: - case 800: - case 839: - case 842: - case 843: - case 854: - case 855: - case 856: - case 857: - case 858: - case 859: - case 860: - case 861: - case 862: + case 808: + case 809: + case 848: + case 851: + case 852: case 863: case 864: case 865: - case 994: - case 995: - case 996: - case 1001: - case 1002: + case 866: + case 867: + case 868: + case 869: + case 870: + case 871: + case 872: + case 873: + case 874: case 1003: case 1004: case 1005: - case 1006: - case 1007: - case 1008: - case 1009: - case 1027: - case 1033: + case 1010: + case 1011: + case 1012: + case 1013: + case 1014: + case 1015: + case 1016: + case 1017: + case 1018: case 1036: - case 1037: - case 1038: - case 1049: - case 1050: - case 1051: - case 1062: - case 1063: - case 1064: - case 1069: - case 1082: - case 1099: - case 1100: - case 1101: - case 1102: - case 1105: - case 1106: - case 1107: + case 1042: + case 1045: + case 1046: + case 1047: + case 1058: + case 1059: + case 1060: + case 1071: + case 1072: + case 1073: + case 1078: + case 1091: case 1108: case 1109: case 1110: + case 1111: + case 1114: + case 1115: + case 1116: + case 1117: + case 1118: + case 1119: { WARN(ZS_BAD_RDATA); p--; {goto st261;} @@ -77605,74 +77729,74 @@ case 1110: p--; {goto st261;} } break; - case 624: - case 625: - case 626: - case 628: - case 630: - case 632: - case 662: - case 663: - case 728: - case 729: - case 730: - case 731: - case 732: - case 733: + case 633: + case 634: + case 635: + case 637: + case 639: + case 641: + case 671: + case 672: + case 737: + case 738: case 739: case 740: case 741: case 742: - case 758: - case 759: - case 778: - case 779: - case 782: - case 783: + case 748: + case 749: + case 750: + case 751: + case 767: + case 768: + case 787: + case 788: case 791: case 792: - case 793: - case 794: + case 800: case 801: case 802: - case 844: - case 845: - case 846: - case 847: - case 852: + case 803: + case 810: + case 811: case 853: - case 997: - case 998: - case 999: - case 1000: - case 1010: - case 1011: - case 1012: - case 1013: - case 1014: - case 1015: - case 1039: - case 1040: - case 1041: - case 1042: - case 1043: - case 1044: + case 854: + case 855: + case 856: + case 861: + case 862: + case 1006: + case 1007: + case 1008: + case 1009: + case 1019: + case 1020: + case 1021: + case 1022: + case 1023: + case 1024: + case 1048: + case 1049: + case 1050: + case 1051: case 1052: case 1053: - case 1054: - case 1055: - case 1056: - case 1057: + case 1061: + case 1062: + case 1063: + case 1064: case 1065: case 1066: - case 1070: - case 1071: - case 1095: - case 1096: - case 1097: - case 1098: - case 1103: + case 1074: + case 1075: + case 1079: + case 1080: case 1104: + case 1105: + case 1106: + case 1107: + case 1112: + case 1113: { WARN(ZS_BAD_NUMBER); p--; {goto st261;} @@ -77695,10 +77819,10 @@ case 1110: p--; {goto st261;} } break; - case 848: - case 849: - case 850: - case 851: + case 857: + case 858: + case 859: + case 860: { WARN(ZS_BAD_TIMESTAMP_CHAR); p--; {goto st261;} @@ -77720,10 +77844,10 @@ case 1110: p--; {goto st261;} } break; - case 667: - case 668: - case 669: - case 670: + case 676: + case 677: + case 678: + case 679: { s->long_string = false; } @@ -77754,12 +77878,12 @@ case 1110: p--; {goto st261;} } break; - case 616: - case 617: - case 671: - case 672: - case 1067: - case 1068: + case 625: + case 626: + case 680: + case 681: + case 1076: + case 1077: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} @@ -77769,12 +77893,12 @@ case 1110: p--; {goto st261;} } break; - case 767: - case 768: - case 769: - case 772: - case 773: - case 775: + case 776: + case 777: + case 778: + case 781: + case 782: + case 784: { WARN(ZS_BAD_APL); p--; {goto st261;} @@ -77784,42 +77908,42 @@ case 1110: p--; {goto st261;} } break; - case 784: - case 785: - case 786: - case 787: + case 793: + case 794: case 795: case 796: - case 797: - case 798: - case 1016: - case 1017: - case 1034: - case 1035: - case 1045: - case 1046: - case 1047: - case 1048: - case 1058: - case 1059: - case 1060: - case 1061: - case 1072: - case 1073: - case 1074: - case 1075: - case 1077: - case 1078: - case 1079: - case 1080: + case 804: + case 805: + case 806: + case 807: + case 1025: + case 1026: + case 1043: + case 1044: + case 1054: + case 1055: + case 1056: + case 1057: + case 1067: + case 1068: + case 1069: + case 1070: + case 1081: + case 1082: case 1083: case 1084: case 1086: case 1087: + case 1088: case 1089: - case 1090: case 1092: case 1093: + case 1095: + case 1096: + case 1098: + case 1099: + case 1101: + case 1102: { WARN(ZS_BAD_HEX_CHAR); p--; {goto st261;} @@ -77829,20 +77953,20 @@ case 1110: p--; {goto st261;} } break; - case 1018: - case 1019: - case 1020: - case 1021: - case 1022: - case 1023: - case 1024: - case 1025: - case 1026: + case 1027: case 1028: case 1029: case 1030: case 1031: case 1032: + case 1033: + case 1034: + case 1035: + case 1037: + case 1038: + case 1039: + case 1040: + case 1041: { WARN(ZS_BAD_BASE32HEX_CHAR); p--; {goto st261;} @@ -77852,21 +77976,21 @@ case 1110: p--; {goto st261;} } break; - case 803: - case 804: - case 807: + case 812: + case 813: case 816: - case 817: - case 818: - case 823: - case 824: case 825: - case 830: - case 831: + case 826: + case 827: case 832: - case 835: - case 837: - case 838: + case 833: + case 834: + case 839: + case 840: + case 841: + case 844: + case 846: + case 847: { WARN(ZS_BAD_GATEWAY); p--; {goto st261;} @@ -77876,13 +78000,13 @@ case 1110: p--; {goto st261;} } break; - case 809: - case 810: - case 811: - case 812: - case 813: - case 814: - case 815: + case 818: + case 819: + case 820: + case 821: + case 822: + case 823: + case 824: { WARN(ZS_BAD_GATEWAY_KEY); p--; {goto st261;} @@ -77892,17 +78016,8 @@ case 1110: p--; {goto st261;} } break; - case 840: - case 841: - case 866: - case 867: - case 868: - case 869: - case 870: - case 871: - case 872: - case 873: - case 874: + case 849: + case 850: case 875: case 876: case 877: @@ -78017,9 +78132,18 @@ case 1110: case 986: case 987: case 988: + case 989: + case 990: case 991: case 992: case 993: + case 994: + case 995: + case 996: + case 997: + case 1000: + case 1001: + case 1002: { WARN(ZS_UNSUPPORTED_TYPE); p--; {goto st261;} @@ -78029,15 +78153,6 @@ case 1110: p--; {goto st261;} } break; - case 673: - case 674: - case 675: - case 676: - case 677: - case 678: - case 679: - case 680: - case 681: case 682: case 683: case 684: @@ -78084,6 +78199,15 @@ case 1110: case 725: case 726: case 727: + case 728: + case 729: + case 730: + case 731: + case 732: + case 733: + case 734: + case 735: + case 736: { WARN(ZS_BAD_LOC_DATA); p--; {goto st261;} @@ -78210,14 +78334,14 @@ case 1110: p--; {goto st261;} } break; - case 805: - case 806: - case 819: - case 820: - case 826: - case 827: - case 833: - case 834: + case 814: + case 815: + case 828: + case 829: + case 835: + case 836: + case 842: + case 843: { WARN(ZS_BAD_NUMBER); p--; {goto st261;} @@ -78231,8 +78355,8 @@ case 1110: p--; {goto st261;} } break; - case 989: - case 990: + case 998: + case 999: { WARN(ZS_BAD_NUMBER); p--; {goto st261;} @@ -78292,22 +78416,22 @@ case 1110: p--; {goto st261;} } break; - case 627: - case 629: - case 631: - case 633: - case 634: - case 635: case 636: case 638: - case 639: case 640: case 642: case 643: case 644: - case 646: + case 645: case 647: case 648: + case 649: + case 651: + case 652: + case 653: + case 655: + case 656: + case 657: { WARN(ZS_BAD_TIME_UNIT); p--; {goto st261;} @@ -78363,10 +78487,10 @@ case 1110: p--; {goto st261;} } break; - case 770: - case 771: - case 776: - case 777: + case 779: + case 780: + case 785: + case 786: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} @@ -78380,8 +78504,8 @@ case 1110: p--; {goto st261;} } break; - case 821: - case 828: + case 830: + case 837: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} @@ -78416,7 +78540,7 @@ case 1110: p--; {goto st261;} } break; - case 1076: + case 1085: { WARN(ZS_BAD_HEX_CHAR); p--; {goto st261;} @@ -78430,8 +78554,8 @@ case 1110: p--; {goto st261;} } break; - case 808: - case 836: + case 817: + case 845: { WARN(ZS_BAD_GATEWAY); p--; {goto st261;} @@ -78445,10 +78569,10 @@ case 1110: p--; {goto st261;} } break; - case 1085: - case 1088: - case 1091: case 1094: + case 1097: + case 1100: + case 1103: { WARN(ZS_BAD_CHAR_DASH); p--; {goto st261;} @@ -78462,7 +78586,7 @@ case 1110: p--; {goto st261;} } break; - case 1081: + case 1090: { WARN(ZS_BAD_CHAR_COLON); p--; {goto st261;} @@ -78611,8 +78735,8 @@ case 1110: p--; {goto st261;} } break; - case 822: - case 829: + case 831: + case 838: { WARN(ZS_BAD_ADDRESS_CHAR); p--; {goto st261;} diff --git a/src/zscanner/scanner.c.t0 b/src/zscanner/scanner.c.t0 index 94ef354a05759286538a9acc99bcd928bb382aeb..9e8385459f0e08121f94ee8983cd3265cebfb9c3 100644 --- a/src/zscanner/scanner.c.t0 +++ b/src/zscanner/scanner.c.t0 @@ -98,35 +98,35 @@ static const short _zone_scanner_actions[] = { 110, 1, 111, 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 118, 1, 119, 1, 121, 1, 122, 1, - 123, 1, 124, 1, 149, 1, 150, 1, - 151, 1, 152, 1, 153, 1, 154, 1, - 155, 1, 156, 1, 157, 1, 158, 1, - 159, 1, 160, 1, 161, 1, 162, 1, - 163, 1, 164, 1, 165, 1, 166, 1, - 167, 1, 168, 1, 169, 1, 170, 1, - 171, 1, 172, 1, 173, 1, 174, 1, - 175, 1, 176, 1, 177, 1, 178, 1, - 179, 1, 180, 1, 181, 1, 182, 1, - 183, 1, 184, 1, 185, 1, 186, 1, - 187, 1, 188, 1, 189, 1, 190, 1, - 191, 1, 192, 1, 193, 1, 194, 1, - 195, 1, 196, 1, 197, 1, 198, 1, - 199, 1, 200, 1, 201, 1, 202, 1, - 203, 1, 204, 1, 205, 1, 206, 1, - 207, 1, 208, 1, 209, 1, 210, 1, - 211, 1, 212, 1, 213, 1, 214, 1, - 215, 1, 216, 1, 217, 1, 218, 1, - 219, 1, 220, 1, 221, 1, 222, 1, - 223, 1, 224, 1, 225, 1, 226, 1, - 227, 1, 228, 1, 229, 1, 230, 1, - 231, 1, 232, 1, 233, 1, 234, 1, - 236, 1, 238, 1, 239, 1, 240, 1, - 241, 1, 248, 1, 249, 1, 254, 1, - 256, 1, 261, 1, 264, 1, 265, 1, - 266, 1, 267, 1, 269, 1, 270, 1, - 271, 1, 273, 2, 0, 43, 2, 1, - 0, 2, 1, 26, 2, 1, 270, 2, - 1, 316, 2, 2, 26, 2, 3, 26, + 123, 1, 124, 1, 151, 1, 152, 1, + 153, 1, 154, 1, 155, 1, 156, 1, + 157, 1, 158, 1, 159, 1, 160, 1, + 161, 1, 162, 1, 163, 1, 164, 1, + 165, 1, 166, 1, 167, 1, 168, 1, + 169, 1, 170, 1, 171, 1, 172, 1, + 173, 1, 174, 1, 175, 1, 176, 1, + 177, 1, 178, 1, 179, 1, 180, 1, + 181, 1, 182, 1, 183, 1, 184, 1, + 185, 1, 186, 1, 187, 1, 188, 1, + 189, 1, 190, 1, 191, 1, 192, 1, + 193, 1, 194, 1, 195, 1, 196, 1, + 197, 1, 198, 1, 199, 1, 200, 1, + 201, 1, 202, 1, 203, 1, 204, 1, + 205, 1, 206, 1, 207, 1, 208, 1, + 209, 1, 210, 1, 211, 1, 212, 1, + 213, 1, 214, 1, 215, 1, 216, 1, + 217, 1, 218, 1, 219, 1, 220, 1, + 221, 1, 222, 1, 223, 1, 224, 1, + 225, 1, 226, 1, 227, 1, 228, 1, + 229, 1, 230, 1, 231, 1, 232, 1, + 233, 1, 234, 1, 235, 1, 236, 1, + 238, 1, 240, 1, 241, 1, 242, 1, + 243, 1, 250, 1, 251, 1, 256, 1, + 258, 1, 263, 1, 266, 1, 267, 1, + 268, 1, 269, 1, 271, 1, 272, 1, + 273, 1, 275, 2, 0, 43, 2, 1, + 0, 2, 1, 26, 2, 1, 272, 2, + 1, 318, 2, 2, 26, 2, 3, 26, 2, 4, 66, 2, 4, 70, 2, 5, 6, 2, 9, 10, 2, 12, 13, 2, 14, 10, 2, 14, 11, 2, 15, 20, @@ -135,41 +135,41 @@ static const short _zone_scanner_actions[] = { 16, 76, 2, 18, 0, 2, 19, 9, 2, 22, 62, 2, 22, 101, 2, 22, 112, 2, 23, 0, 2, 23, 1, 2, - 23, 2, 2, 23, 3, 2, 23, 237, + 23, 2, 2, 23, 3, 2, 23, 239, 2, 24, 21, 2, 25, 1, 2, 25, 2, 2, 25, 3, 2, 25, 86, 2, 26, 1, 2, 26, 2, 2, 26, 3, - 2, 27, 4, 2, 27, 269, 2, 27, - 273, 2, 28, 21, 2, 29, 0, 2, + 2, 27, 4, 2, 27, 271, 2, 27, + 275, 2, 28, 21, 2, 29, 0, 2, 29, 1, 2, 29, 2, 2, 29, 3, - 2, 29, 237, 2, 30, 35, 2, 31, - 30, 2, 32, 66, 2, 32, 254, 2, - 32, 269, 2, 32, 273, 2, 36, 242, - 2, 36, 243, 2, 36, 244, 2, 36, - 245, 2, 36, 246, 2, 36, 247, 2, + 2, 29, 239, 2, 30, 35, 2, 31, + 30, 2, 32, 66, 2, 32, 256, 2, + 32, 271, 2, 32, 275, 2, 36, 244, + 2, 36, 245, 2, 36, 246, 2, 36, + 247, 2, 36, 248, 2, 36, 249, 2, 39, 0, 2, 39, 1, 2, 39, 2, 2, 39, 3, 2, 40, 0, 2, 40, 1, 2, 40, 2, 2, 40, 3, 2, 41, 0, 2, 41, 1, 2, 41, 2, - 2, 41, 3, 2, 42, 268, 2, 43, + 2, 41, 3, 2, 42, 270, 2, 43, 1, 2, 43, 2, 2, 43, 3, 2, 50, 2, 2, 50, 3, 2, 50, 41, 2, 50, 86, 2, 51, 52, 2, 53, 1, 2, 53, 2, 2, 53, 3, 2, - 54, 269, 2, 55, 0, 2, 56, 57, + 54, 271, 2, 55, 0, 2, 56, 57, 2, 58, 59, 2, 60, 0, 2, 60, - 55, 2, 64, 0, 2, 64, 269, 2, + 55, 2, 64, 0, 2, 64, 271, 2, 68, 19, 2, 72, 62, 2, 73, 2, 2, 73, 3, 2, 74, 4, 2, 75, 19, 2, 77, 4, 2, 81, 1, 2, 81, 26, 2, 83, 84, 2, 85, 1, 2, 85, 2, 2, 85, 3, 2, 86, 1, 2, 86, 2, 2, 86, 3, 2, - 87, 88, 2, 89, 269, 2, 90, 91, + 87, 88, 2, 89, 271, 2, 90, 91, 2, 92, 93, 2, 94, 95, 2, 94, 96, 2, 94, 97, 2, 98, 99, 2, - 100, 269, 2, 103, 269, 2, 104, 0, - 2, 120, 269, 2, 122, 0, 2, 123, + 100, 271, 2, 103, 271, 2, 104, 0, + 2, 120, 271, 2, 122, 0, 2, 123, 0, 2, 124, 0, 2, 125, 0, 2, 126, 0, 2, 127, 0, 2, 128, 0, 2, 129, 0, 2, 130, 0, 2, 131, @@ -178,310 +178,307 @@ static const short _zone_scanner_actions[] = { 2, 137, 0, 2, 138, 0, 2, 139, 0, 2, 140, 0, 2, 141, 0, 2, 142, 0, 2, 143, 0, 2, 144, 0, - 2, 145, 0, 2, 146, 269, 2, 147, - 269, 2, 148, 269, 2, 149, 1, 2, - 149, 2, 2, 149, 3, 2, 150, 1, - 2, 150, 2, 2, 150, 3, 2, 151, - 1, 2, 151, 2, 2, 151, 3, 2, - 152, 1, 2, 152, 2, 2, 152, 3, - 2, 153, 1, 2, 153, 2, 2, 153, - 3, 2, 154, 1, 2, 154, 2, 2, - 154, 3, 2, 155, 1, 2, 155, 2, - 2, 155, 3, 2, 156, 1, 2, 156, - 2, 2, 156, 3, 2, 157, 1, 2, - 157, 2, 2, 157, 3, 2, 158, 1, - 2, 158, 2, 2, 158, 3, 2, 159, - 1, 2, 159, 2, 2, 159, 3, 2, - 160, 1, 2, 160, 2, 2, 160, 3, - 2, 161, 1, 2, 161, 2, 2, 161, - 3, 2, 162, 1, 2, 162, 2, 2, - 162, 3, 2, 163, 1, 2, 163, 2, - 2, 163, 3, 2, 164, 1, 2, 164, - 2, 2, 164, 3, 2, 165, 1, 2, - 165, 2, 2, 165, 3, 2, 166, 1, - 2, 166, 2, 2, 166, 3, 2, 167, - 1, 2, 167, 2, 2, 167, 3, 2, - 168, 1, 2, 168, 2, 2, 168, 3, - 2, 169, 1, 2, 169, 2, 2, 169, - 3, 2, 170, 1, 2, 170, 2, 2, - 170, 3, 2, 171, 1, 2, 171, 2, - 2, 171, 3, 2, 172, 1, 2, 172, - 2, 2, 172, 3, 2, 173, 1, 2, - 173, 2, 2, 173, 3, 2, 174, 1, - 2, 174, 2, 2, 174, 3, 2, 175, - 1, 2, 175, 2, 2, 175, 3, 2, - 176, 1, 2, 176, 2, 2, 176, 3, - 2, 177, 1, 2, 177, 2, 2, 177, - 3, 2, 178, 1, 2, 178, 2, 2, - 178, 3, 2, 179, 1, 2, 179, 2, - 2, 179, 3, 2, 180, 1, 2, 180, - 2, 2, 180, 3, 2, 181, 1, 2, - 181, 2, 2, 181, 3, 2, 182, 1, - 2, 182, 2, 2, 182, 3, 2, 183, - 1, 2, 183, 2, 2, 183, 3, 2, - 184, 1, 2, 184, 2, 2, 184, 3, - 2, 185, 1, 2, 185, 2, 2, 185, - 3, 2, 186, 1, 2, 186, 2, 2, - 186, 3, 2, 187, 1, 2, 187, 2, - 2, 187, 3, 2, 188, 1, 2, 188, - 2, 2, 188, 3, 2, 189, 1, 2, - 189, 2, 2, 189, 3, 2, 190, 1, - 2, 190, 2, 2, 190, 3, 2, 191, - 1, 2, 191, 2, 2, 191, 3, 2, - 192, 1, 2, 192, 2, 2, 192, 3, - 2, 193, 1, 2, 193, 2, 2, 193, - 3, 2, 194, 1, 2, 194, 2, 2, - 194, 3, 2, 195, 1, 2, 195, 2, - 2, 195, 3, 2, 196, 1, 2, 196, - 2, 2, 196, 3, 2, 197, 1, 2, - 197, 2, 2, 197, 3, 2, 198, 1, - 2, 198, 2, 2, 198, 3, 2, 199, - 1, 2, 199, 2, 2, 199, 3, 2, - 200, 1, 2, 200, 2, 2, 200, 3, - 2, 201, 1, 2, 201, 2, 2, 201, - 3, 2, 202, 1, 2, 202, 2, 2, - 202, 3, 2, 203, 1, 2, 203, 2, - 2, 203, 3, 2, 204, 1, 2, 204, - 2, 2, 204, 3, 2, 205, 1, 2, - 205, 2, 2, 205, 3, 2, 206, 1, - 2, 206, 2, 2, 206, 3, 2, 207, - 1, 2, 207, 2, 2, 207, 3, 2, - 208, 1, 2, 208, 2, 2, 208, 3, - 2, 209, 1, 2, 209, 2, 2, 209, - 3, 2, 210, 1, 2, 210, 2, 2, - 210, 3, 2, 211, 1, 2, 211, 2, - 2, 211, 3, 2, 212, 1, 2, 212, - 2, 2, 212, 3, 2, 213, 1, 2, - 213, 2, 2, 213, 3, 2, 214, 1, - 2, 214, 2, 2, 214, 3, 2, 215, - 1, 2, 215, 2, 2, 215, 3, 2, - 216, 1, 2, 216, 2, 2, 216, 3, - 2, 217, 1, 2, 217, 2, 2, 217, - 3, 2, 218, 1, 2, 218, 2, 2, - 218, 3, 2, 219, 1, 2, 219, 2, - 2, 219, 3, 2, 220, 1, 2, 220, - 2, 2, 220, 3, 2, 221, 1, 2, - 221, 2, 2, 221, 3, 2, 222, 1, - 2, 222, 2, 2, 222, 3, 2, 223, - 1, 2, 223, 2, 2, 223, 3, 2, - 224, 1, 2, 224, 2, 2, 224, 3, - 2, 225, 1, 2, 225, 2, 2, 225, - 3, 2, 226, 1, 2, 226, 2, 2, - 226, 3, 2, 227, 1, 2, 227, 2, - 2, 227, 3, 2, 228, 1, 2, 228, - 2, 2, 228, 3, 2, 229, 1, 2, - 229, 2, 2, 229, 3, 2, 230, 1, - 2, 230, 2, 2, 230, 3, 2, 231, - 1, 2, 231, 2, 2, 231, 3, 2, - 232, 1, 2, 232, 2, 2, 232, 3, - 2, 233, 1, 2, 233, 2, 2, 233, - 3, 2, 234, 1, 2, 234, 2, 2, - 234, 3, 2, 235, 0, 2, 238, 1, - 2, 238, 2, 2, 238, 3, 2, 239, - 1, 2, 239, 2, 2, 239, 3, 2, - 240, 1, 2, 240, 2, 2, 240, 3, - 2, 241, 1, 2, 241, 2, 2, 241, - 3, 2, 248, 1, 2, 248, 2, 2, - 248, 3, 2, 249, 1, 2, 249, 2, - 2, 249, 3, 2, 252, 0, 2, 253, - 269, 2, 255, 101, 2, 260, 101, 2, - 269, 4, 2, 270, 1, 2, 270, 26, - 2, 272, 270, 2, 273, 4, 2, 273, - 269, 2, 274, 268, 2, 275, 268, 2, - 276, 268, 2, 277, 268, 2, 278, 268, - 2, 279, 268, 2, 280, 268, 2, 281, - 268, 2, 282, 268, 2, 283, 268, 2, - 284, 268, 2, 285, 268, 2, 286, 268, - 2, 287, 268, 2, 288, 268, 2, 289, - 268, 2, 290, 268, 2, 291, 268, 2, - 292, 268, 2, 293, 268, 2, 294, 268, - 2, 295, 268, 2, 296, 268, 2, 297, - 268, 2, 298, 268, 2, 299, 268, 2, - 300, 268, 2, 301, 268, 2, 302, 268, - 2, 303, 268, 2, 304, 268, 2, 305, - 268, 2, 306, 268, 2, 307, 268, 2, - 308, 268, 2, 309, 268, 2, 310, 268, - 2, 311, 268, 2, 312, 268, 2, 313, - 268, 2, 314, 268, 2, 315, 268, 2, - 316, 1, 3, 0, 43, 1, 3, 0, - 43, 2, 3, 0, 43, 3, 3, 1, - 64, 0, 3, 1, 78, 0, 3, 1, - 104, 0, 3, 1, 235, 0, 3, 1, - 252, 0, 3, 1, 270, 26, 3, 1, - 270, 316, 3, 1, 316, 26, 3, 7, - 1, 8, 3, 11, 17, 0, 3, 16, - 76, 2, 3, 16, 76, 3, 3, 19, - 9, 10, 3, 23, 64, 0, 3, 25, - 1, 86, 3, 25, 1, 316, 3, 25, - 2, 86, 3, 25, 3, 86, 3, 25, - 272, 270, 3, 25, 274, 268, 3, 27, - 82, 4, 3, 27, 269, 4, 3, 27, - 273, 4, 3, 27, 273, 269, 3, 29, - 1, 0, 3, 31, 30, 270, 3, 32, - 146, 269, 3, 32, 148, 269, 3, 32, - 273, 4, 3, 32, 273, 269, 3, 34, - 36, 242, 3, 34, 36, 243, 3, 34, - 36, 244, 3, 34, 36, 245, 3, 34, - 36, 246, 3, 34, 36, 247, 3, 36, - 242, 1, 3, 36, 242, 2, 3, 36, - 242, 3, 3, 36, 243, 1, 3, 36, - 243, 2, 3, 36, 243, 3, 3, 36, - 244, 1, 3, 36, 244, 2, 3, 36, - 244, 3, 3, 36, 245, 1, 3, 36, - 245, 2, 3, 36, 245, 3, 3, 36, - 246, 1, 3, 36, 246, 2, 3, 36, - 246, 3, 3, 36, 247, 1, 3, 36, - 247, 2, 3, 36, 247, 3, 3, 42, - 268, 1, 3, 42, 268, 2, 3, 42, - 268, 3, 3, 42, 268, 270, 3, 44, - 32, 66, 3, 44, 32, 269, 3, 44, - 32, 273, 3, 49, 31, 30, 3, 50, - 41, 0, 3, 50, 41, 1, 3, 50, - 41, 2, 3, 50, 41, 3, 3, 50, - 86, 1, 3, 50, 86, 2, 3, 50, - 86, 3, 3, 60, 55, 0, 3, 61, - 56, 57, 3, 63, 22, 62, 3, 65, - 0, 1, 3, 68, 19, 9, 3, 69, - 0, 1, 3, 75, 19, 9, 3, 78, - 0, 1, 3, 81, 24, 21, 3, 81, - 26, 1, 3, 81, 26, 2, 3, 81, - 26, 3, 3, 83, 24, 21, 3, 83, - 84, 270, 3, 86, 1, 316, 3, 89, - 100, 269, 3, 89, 146, 269, 3, 90, - 91, 0, 3, 90, 91, 1, 3, 90, - 91, 2, 3, 90, 91, 3, 3, 92, - 93, 0, 3, 92, 93, 1, 3, 92, - 93, 2, 3, 92, 93, 3, 3, 98, - 99, 0, 3, 98, 99, 1, 3, 98, - 99, 2, 3, 98, 99, 3, 3, 103, - 105, 254, 3, 103, 263, 269, 3, 146, - 147, 269, 3, 191, 235, 0, 3, 192, - 235, 0, 3, 193, 235, 0, 3, 194, - 235, 0, 3, 195, 235, 0, 3, 196, - 235, 0, 3, 197, 235, 0, 3, 198, - 235, 0, 3, 199, 235, 0, 3, 200, - 235, 0, 3, 201, 235, 0, 3, 202, - 235, 0, 3, 203, 235, 0, 3, 204, - 235, 0, 3, 205, 235, 0, 3, 206, - 235, 0, 3, 207, 235, 0, 3, 208, - 235, 0, 3, 209, 235, 0, 3, 210, - 235, 0, 3, 211, 235, 0, 3, 212, - 235, 0, 3, 213, 235, 0, 3, 214, - 235, 0, 3, 215, 235, 0, 3, 216, - 235, 0, 3, 217, 235, 0, 3, 218, - 235, 0, 3, 219, 235, 0, 3, 220, - 235, 0, 3, 221, 235, 0, 3, 222, - 235, 0, 3, 223, 235, 0, 3, 224, - 235, 0, 3, 225, 235, 0, 3, 226, - 235, 0, 3, 227, 235, 0, 3, 228, - 235, 0, 3, 229, 235, 0, 3, 230, - 235, 0, 3, 231, 235, 0, 3, 232, - 235, 0, 3, 233, 235, 0, 3, 234, - 235, 0, 3, 251, 31, 30, 3, 256, - 257, 0, 3, 256, 258, 0, 3, 259, - 103, 269, 3, 261, 262, 0, 3, 263, - 103, 269, 3, 269, 4, 82, 3, 270, - 24, 21, 3, 270, 316, 1, 3, 273, - 269, 4, 3, 274, 268, 1, 3, 274, - 268, 2, 3, 274, 268, 3, 3, 274, - 268, 270, 3, 275, 268, 1, 3, 275, - 268, 2, 3, 275, 268, 3, 3, 275, - 268, 270, 3, 276, 268, 1, 3, 276, - 268, 2, 3, 276, 268, 3, 3, 276, - 268, 270, 3, 277, 268, 1, 3, 277, - 268, 2, 3, 277, 268, 3, 3, 277, - 268, 270, 3, 278, 268, 1, 3, 278, - 268, 2, 3, 278, 268, 3, 3, 278, - 268, 270, 3, 279, 268, 1, 3, 279, - 268, 2, 3, 279, 268, 3, 3, 279, - 268, 270, 3, 280, 268, 1, 3, 280, - 268, 2, 3, 280, 268, 3, 3, 280, - 268, 270, 3, 281, 268, 1, 3, 281, - 268, 2, 3, 281, 268, 3, 3, 281, - 268, 270, 3, 282, 268, 1, 3, 282, - 268, 2, 3, 282, 268, 3, 3, 282, - 268, 270, 3, 283, 268, 1, 3, 283, - 268, 2, 3, 283, 268, 3, 3, 283, - 268, 270, 3, 284, 268, 1, 3, 284, - 268, 2, 3, 284, 268, 3, 3, 284, - 268, 270, 3, 285, 268, 1, 3, 285, - 268, 2, 3, 285, 268, 3, 3, 285, - 268, 270, 3, 286, 268, 1, 3, 286, - 268, 2, 3, 286, 268, 3, 3, 286, - 268, 270, 3, 287, 268, 1, 3, 287, - 268, 2, 3, 287, 268, 3, 3, 287, - 268, 270, 3, 288, 268, 1, 3, 288, - 268, 2, 3, 288, 268, 3, 3, 288, - 268, 270, 3, 289, 268, 1, 3, 289, - 268, 2, 3, 289, 268, 3, 3, 289, - 268, 270, 3, 290, 268, 1, 3, 290, - 268, 2, 3, 290, 268, 3, 3, 290, - 268, 270, 3, 291, 268, 1, 3, 291, - 268, 2, 3, 291, 268, 3, 3, 291, - 268, 270, 3, 292, 268, 1, 3, 292, - 268, 2, 3, 292, 268, 3, 3, 292, - 268, 270, 3, 293, 268, 1, 3, 293, - 268, 2, 3, 293, 268, 3, 3, 293, - 268, 270, 3, 294, 268, 1, 3, 294, - 268, 2, 3, 294, 268, 3, 3, 294, - 268, 270, 3, 295, 268, 1, 3, 295, - 268, 2, 3, 295, 268, 3, 3, 295, - 268, 270, 3, 296, 268, 1, 3, 296, - 268, 2, 3, 296, 268, 3, 3, 296, - 268, 270, 3, 297, 268, 1, 3, 297, - 268, 2, 3, 297, 268, 3, 3, 297, - 268, 270, 3, 298, 268, 1, 3, 298, - 268, 2, 3, 298, 268, 3, 3, 298, - 268, 270, 3, 299, 268, 1, 3, 299, - 268, 2, 3, 299, 268, 3, 3, 299, - 268, 270, 3, 300, 268, 1, 3, 300, - 268, 2, 3, 300, 268, 3, 3, 300, - 268, 270, 3, 301, 268, 1, 3, 301, - 268, 2, 3, 301, 268, 3, 3, 301, - 268, 270, 3, 302, 268, 1, 3, 302, - 268, 2, 3, 302, 268, 3, 3, 302, - 268, 270, 3, 303, 268, 1, 3, 303, - 268, 2, 3, 303, 268, 3, 3, 303, - 268, 270, 3, 304, 268, 1, 3, 304, - 268, 2, 3, 304, 268, 3, 3, 304, - 268, 270, 3, 305, 268, 1, 3, 305, - 268, 2, 3, 305, 268, 3, 3, 305, - 268, 270, 3, 306, 268, 1, 3, 306, - 268, 2, 3, 306, 268, 3, 3, 306, - 268, 270, 3, 307, 268, 1, 3, 307, - 268, 2, 3, 307, 268, 3, 3, 307, - 268, 270, 3, 308, 268, 1, 3, 308, - 268, 2, 3, 308, 268, 3, 3, 308, - 268, 270, 3, 309, 268, 1, 3, 309, - 268, 2, 3, 309, 268, 3, 3, 309, - 268, 270, 3, 310, 268, 1, 3, 310, - 268, 2, 3, 310, 268, 3, 3, 310, - 268, 270, 3, 311, 268, 1, 3, 311, - 268, 2, 3, 311, 268, 3, 3, 311, - 268, 270, 3, 312, 268, 1, 3, 312, - 268, 2, 3, 312, 268, 3, 3, 312, - 268, 270, 3, 313, 268, 1, 3, 313, - 268, 2, 3, 313, 268, 3, 3, 313, - 268, 270, 3, 314, 268, 1, 3, 314, - 268, 2, 3, 314, 268, 3, 3, 314, - 268, 270, 3, 315, 268, 1, 3, 315, - 268, 2, 3, 315, 268, 3, 3, 315, - 268, 270, 3, 316, 1, 26, 4, 5, - 7, 1, 8, 4, 14, 11, 17, 0, - 4, 16, 69, 0, 1, 4, 23, 1, - 64, 0, 4, 25, 1, 86, 316, 4, - 25, 1, 272, 270, 4, 25, 1, 274, - 268, 4, 25, 2, 272, 270, 4, 25, - 2, 274, 268, 4, 25, 3, 272, 270, - 4, 25, 3, 274, 268, 4, 25, 274, - 268, 270, 4, 27, 32, 273, 4, 4, - 27, 44, 32, 273, 4, 27, 273, 269, - 4, 4, 31, 30, 24, 21, 4, 32, - 273, 269, 4, 4, 34, 31, 30, 35, - 4, 34, 36, 242, 1, 4, 34, 36, - 242, 2, 4, 34, 36, 242, 3, 4, - 34, 36, 243, 1, 4, 34, 36, 243, - 2, 4, 34, 36, 243, 3, 4, 34, + 2, 145, 0, 2, 146, 0, 2, 147, + 0, 2, 148, 271, 2, 149, 271, 2, + 150, 271, 2, 151, 1, 2, 151, 2, + 2, 151, 3, 2, 152, 1, 2, 152, + 2, 2, 152, 3, 2, 153, 1, 2, + 153, 2, 2, 153, 3, 2, 154, 1, + 2, 154, 2, 2, 154, 3, 2, 155, + 1, 2, 155, 2, 2, 155, 3, 2, + 156, 1, 2, 156, 2, 2, 156, 3, + 2, 157, 1, 2, 157, 2, 2, 157, + 3, 2, 158, 1, 2, 158, 2, 2, + 158, 3, 2, 159, 1, 2, 159, 2, + 2, 159, 3, 2, 160, 1, 2, 160, + 2, 2, 160, 3, 2, 161, 1, 2, + 161, 2, 2, 161, 3, 2, 162, 1, + 2, 162, 2, 2, 162, 3, 2, 163, + 1, 2, 163, 2, 2, 163, 3, 2, + 164, 1, 2, 164, 2, 2, 164, 3, + 2, 165, 1, 2, 165, 2, 2, 165, + 3, 2, 166, 1, 2, 166, 2, 2, + 166, 3, 2, 167, 1, 2, 167, 2, + 2, 167, 3, 2, 168, 1, 2, 168, + 2, 2, 168, 3, 2, 169, 1, 2, + 169, 2, 2, 169, 3, 2, 170, 1, + 2, 170, 2, 2, 170, 3, 2, 171, + 1, 2, 171, 2, 2, 171, 3, 2, + 172, 1, 2, 172, 2, 2, 172, 3, + 2, 173, 1, 2, 173, 2, 2, 173, + 3, 2, 174, 1, 2, 174, 2, 2, + 174, 3, 2, 175, 1, 2, 175, 2, + 2, 175, 3, 2, 176, 1, 2, 176, + 2, 2, 176, 3, 2, 177, 1, 2, + 177, 2, 2, 177, 3, 2, 178, 1, + 2, 178, 2, 2, 178, 3, 2, 179, + 1, 2, 179, 2, 2, 179, 3, 2, + 180, 1, 2, 180, 2, 2, 180, 3, + 2, 181, 1, 2, 181, 2, 2, 181, + 3, 2, 182, 1, 2, 182, 2, 2, + 182, 3, 2, 183, 1, 2, 183, 2, + 2, 183, 3, 2, 184, 1, 2, 184, + 2, 2, 184, 3, 2, 185, 1, 2, + 185, 2, 2, 185, 3, 2, 186, 1, + 2, 186, 2, 2, 186, 3, 2, 187, + 1, 2, 187, 2, 2, 187, 3, 2, + 188, 1, 2, 188, 2, 2, 188, 3, + 2, 189, 1, 2, 189, 2, 2, 189, + 3, 2, 190, 1, 2, 190, 2, 2, + 190, 3, 2, 191, 1, 2, 191, 2, + 2, 191, 3, 2, 192, 1, 2, 192, + 2, 2, 192, 3, 2, 193, 1, 2, + 193, 2, 2, 193, 3, 2, 194, 1, + 2, 194, 2, 2, 194, 3, 2, 195, + 1, 2, 195, 2, 2, 195, 3, 2, + 196, 1, 2, 196, 2, 2, 196, 3, + 2, 197, 1, 2, 197, 2, 2, 197, + 3, 2, 198, 1, 2, 198, 2, 2, + 198, 3, 2, 199, 1, 2, 199, 2, + 2, 199, 3, 2, 200, 1, 2, 200, + 2, 2, 200, 3, 2, 201, 1, 2, + 201, 2, 2, 201, 3, 2, 202, 1, + 2, 202, 2, 2, 202, 3, 2, 203, + 1, 2, 203, 2, 2, 203, 3, 2, + 204, 1, 2, 204, 2, 2, 204, 3, + 2, 205, 1, 2, 205, 2, 2, 205, + 3, 2, 206, 1, 2, 206, 2, 2, + 206, 3, 2, 207, 1, 2, 207, 2, + 2, 207, 3, 2, 208, 1, 2, 208, + 2, 2, 208, 3, 2, 209, 1, 2, + 209, 2, 2, 209, 3, 2, 210, 1, + 2, 210, 2, 2, 210, 3, 2, 211, + 1, 2, 211, 2, 2, 211, 3, 2, + 212, 1, 2, 212, 2, 2, 212, 3, + 2, 213, 1, 2, 213, 2, 2, 213, + 3, 2, 214, 1, 2, 214, 2, 2, + 214, 3, 2, 215, 1, 2, 215, 2, + 2, 215, 3, 2, 216, 1, 2, 216, + 2, 2, 216, 3, 2, 217, 1, 2, + 217, 2, 2, 217, 3, 2, 218, 1, + 2, 218, 2, 2, 218, 3, 2, 219, + 1, 2, 219, 2, 2, 219, 3, 2, + 220, 1, 2, 220, 2, 2, 220, 3, + 2, 221, 1, 2, 221, 2, 2, 221, + 3, 2, 222, 1, 2, 222, 2, 2, + 222, 3, 2, 223, 1, 2, 223, 2, + 2, 223, 3, 2, 224, 1, 2, 224, + 2, 2, 224, 3, 2, 225, 1, 2, + 225, 2, 2, 225, 3, 2, 226, 1, + 2, 226, 2, 2, 226, 3, 2, 227, + 1, 2, 227, 2, 2, 227, 3, 2, + 228, 1, 2, 228, 2, 2, 228, 3, + 2, 229, 1, 2, 229, 2, 2, 229, + 3, 2, 230, 1, 2, 230, 2, 2, + 230, 3, 2, 231, 1, 2, 231, 2, + 2, 231, 3, 2, 232, 1, 2, 232, + 2, 2, 232, 3, 2, 233, 1, 2, + 233, 2, 2, 233, 3, 2, 234, 1, + 2, 234, 2, 2, 234, 3, 2, 235, + 1, 2, 235, 2, 2, 235, 3, 2, + 236, 1, 2, 236, 2, 2, 236, 3, + 2, 237, 0, 2, 240, 1, 2, 240, + 2, 2, 240, 3, 2, 241, 1, 2, + 241, 2, 2, 241, 3, 2, 242, 1, + 2, 242, 2, 2, 242, 3, 2, 243, + 1, 2, 243, 2, 2, 243, 3, 2, + 250, 1, 2, 250, 2, 2, 250, 3, + 2, 251, 1, 2, 251, 2, 2, 251, + 3, 2, 254, 0, 2, 255, 271, 2, + 257, 101, 2, 262, 101, 2, 271, 4, + 2, 272, 1, 2, 272, 26, 2, 274, + 272, 2, 275, 4, 2, 275, 271, 2, + 276, 270, 2, 277, 270, 2, 278, 270, + 2, 279, 270, 2, 280, 270, 2, 281, + 270, 2, 282, 270, 2, 283, 270, 2, + 284, 270, 2, 285, 270, 2, 286, 270, + 2, 287, 270, 2, 288, 270, 2, 289, + 270, 2, 290, 270, 2, 291, 270, 2, + 292, 270, 2, 293, 270, 2, 294, 270, + 2, 295, 270, 2, 296, 270, 2, 297, + 270, 2, 298, 270, 2, 299, 270, 2, + 300, 270, 2, 301, 270, 2, 302, 270, + 2, 303, 270, 2, 304, 270, 2, 305, + 270, 2, 306, 270, 2, 307, 270, 2, + 308, 270, 2, 309, 270, 2, 310, 270, + 2, 311, 270, 2, 312, 270, 2, 313, + 270, 2, 314, 270, 2, 315, 270, 2, + 316, 270, 2, 317, 270, 2, 318, 1, + 3, 0, 43, 1, 3, 0, 43, 2, + 3, 0, 43, 3, 3, 1, 64, 0, + 3, 1, 78, 0, 3, 1, 104, 0, + 3, 1, 237, 0, 3, 1, 254, 0, + 3, 1, 272, 26, 3, 1, 272, 318, + 3, 1, 318, 26, 3, 7, 1, 8, + 3, 11, 17, 0, 3, 16, 76, 2, + 3, 16, 76, 3, 3, 19, 9, 10, + 3, 23, 64, 0, 3, 25, 1, 86, + 3, 25, 1, 318, 3, 25, 2, 86, + 3, 25, 3, 86, 3, 25, 274, 272, + 3, 25, 276, 270, 3, 27, 82, 4, + 3, 27, 271, 4, 3, 27, 275, 4, + 3, 27, 275, 271, 3, 29, 1, 0, + 3, 31, 30, 272, 3, 32, 148, 271, + 3, 32, 150, 271, 3, 32, 275, 4, + 3, 32, 275, 271, 3, 34, 36, 244, + 3, 34, 36, 245, 3, 34, 36, 246, + 3, 34, 36, 247, 3, 34, 36, 248, + 3, 34, 36, 249, 3, 36, 244, 1, + 3, 36, 244, 2, 3, 36, 244, 3, + 3, 36, 245, 1, 3, 36, 245, 2, + 3, 36, 245, 3, 3, 36, 246, 1, + 3, 36, 246, 2, 3, 36, 246, 3, + 3, 36, 247, 1, 3, 36, 247, 2, + 3, 36, 247, 3, 3, 36, 248, 1, + 3, 36, 248, 2, 3, 36, 248, 3, + 3, 36, 249, 1, 3, 36, 249, 2, + 3, 36, 249, 3, 3, 42, 270, 1, + 3, 42, 270, 2, 3, 42, 270, 3, + 3, 42, 270, 272, 3, 44, 32, 66, + 3, 44, 32, 271, 3, 44, 32, 275, + 3, 49, 31, 30, 3, 50, 41, 0, + 3, 50, 41, 1, 3, 50, 41, 2, + 3, 50, 41, 3, 3, 50, 86, 1, + 3, 50, 86, 2, 3, 50, 86, 3, + 3, 60, 55, 0, 3, 61, 56, 57, + 3, 63, 22, 62, 3, 65, 0, 1, + 3, 68, 19, 9, 3, 69, 0, 1, + 3, 75, 19, 9, 3, 78, 0, 1, + 3, 81, 24, 21, 3, 81, 26, 1, + 3, 81, 26, 2, 3, 81, 26, 3, + 3, 83, 24, 21, 3, 83, 84, 272, + 3, 86, 1, 318, 3, 89, 100, 271, + 3, 89, 148, 271, 3, 90, 91, 0, + 3, 90, 91, 1, 3, 90, 91, 2, + 3, 90, 91, 3, 3, 92, 93, 0, + 3, 92, 93, 1, 3, 92, 93, 2, + 3, 92, 93, 3, 3, 98, 99, 0, + 3, 98, 99, 1, 3, 98, 99, 2, + 3, 98, 99, 3, 3, 103, 105, 256, + 3, 103, 265, 271, 3, 148, 149, 271, + 3, 193, 237, 0, 3, 194, 237, 0, + 3, 195, 237, 0, 3, 196, 237, 0, + 3, 197, 237, 0, 3, 198, 237, 0, + 3, 199, 237, 0, 3, 200, 237, 0, + 3, 201, 237, 0, 3, 202, 237, 0, + 3, 203, 237, 0, 3, 204, 237, 0, + 3, 205, 237, 0, 3, 206, 237, 0, + 3, 207, 237, 0, 3, 208, 237, 0, + 3, 209, 237, 0, 3, 210, 237, 0, + 3, 211, 237, 0, 3, 212, 237, 0, + 3, 213, 237, 0, 3, 214, 237, 0, + 3, 215, 237, 0, 3, 216, 237, 0, + 3, 217, 237, 0, 3, 218, 237, 0, + 3, 219, 237, 0, 3, 220, 237, 0, + 3, 221, 237, 0, 3, 222, 237, 0, + 3, 223, 237, 0, 3, 224, 237, 0, + 3, 225, 237, 0, 3, 226, 237, 0, + 3, 227, 237, 0, 3, 228, 237, 0, + 3, 229, 237, 0, 3, 230, 237, 0, + 3, 231, 237, 0, 3, 232, 237, 0, + 3, 233, 237, 0, 3, 234, 237, 0, + 3, 235, 237, 0, 3, 236, 237, 0, + 3, 253, 31, 30, 3, 258, 259, 0, + 3, 258, 260, 0, 3, 261, 103, 271, + 3, 263, 264, 0, 3, 265, 103, 271, + 3, 271, 4, 82, 3, 272, 24, 21, + 3, 272, 318, 1, 3, 275, 271, 4, + 3, 276, 270, 1, 3, 276, 270, 2, + 3, 276, 270, 3, 3, 276, 270, 272, + 3, 277, 270, 1, 3, 277, 270, 2, + 3, 277, 270, 3, 3, 277, 270, 272, + 3, 278, 270, 1, 3, 278, 270, 2, + 3, 278, 270, 3, 3, 278, 270, 272, + 3, 279, 270, 1, 3, 279, 270, 2, + 3, 279, 270, 3, 3, 279, 270, 272, + 3, 280, 270, 1, 3, 280, 270, 2, + 3, 280, 270, 3, 3, 280, 270, 272, + 3, 281, 270, 1, 3, 281, 270, 2, + 3, 281, 270, 3, 3, 281, 270, 272, + 3, 282, 270, 1, 3, 282, 270, 2, + 3, 282, 270, 3, 3, 282, 270, 272, + 3, 283, 270, 1, 3, 283, 270, 2, + 3, 283, 270, 3, 3, 283, 270, 272, + 3, 284, 270, 1, 3, 284, 270, 2, + 3, 284, 270, 3, 3, 284, 270, 272, + 3, 285, 270, 1, 3, 285, 270, 2, + 3, 285, 270, 3, 3, 285, 270, 272, + 3, 286, 270, 1, 3, 286, 270, 2, + 3, 286, 270, 3, 3, 286, 270, 272, + 3, 287, 270, 1, 3, 287, 270, 2, + 3, 287, 270, 3, 3, 287, 270, 272, + 3, 288, 270, 1, 3, 288, 270, 2, + 3, 288, 270, 3, 3, 288, 270, 272, + 3, 289, 270, 1, 3, 289, 270, 2, + 3, 289, 270, 3, 3, 289, 270, 272, + 3, 290, 270, 1, 3, 290, 270, 2, + 3, 290, 270, 3, 3, 290, 270, 272, + 3, 291, 270, 1, 3, 291, 270, 2, + 3, 291, 270, 3, 3, 291, 270, 272, + 3, 292, 270, 1, 3, 292, 270, 2, + 3, 292, 270, 3, 3, 292, 270, 272, + 3, 293, 270, 1, 3, 293, 270, 2, + 3, 293, 270, 3, 3, 293, 270, 272, + 3, 294, 270, 1, 3, 294, 270, 2, + 3, 294, 270, 3, 3, 294, 270, 272, + 3, 295, 270, 1, 3, 295, 270, 2, + 3, 295, 270, 3, 3, 295, 270, 272, + 3, 296, 270, 1, 3, 296, 270, 2, + 3, 296, 270, 3, 3, 296, 270, 272, + 3, 297, 270, 1, 3, 297, 270, 2, + 3, 297, 270, 3, 3, 297, 270, 272, + 3, 298, 270, 1, 3, 298, 270, 2, + 3, 298, 270, 3, 3, 298, 270, 272, + 3, 299, 270, 1, 3, 299, 270, 2, + 3, 299, 270, 3, 3, 299, 270, 272, + 3, 300, 270, 1, 3, 300, 270, 2, + 3, 300, 270, 3, 3, 300, 270, 272, + 3, 301, 270, 1, 3, 301, 270, 2, + 3, 301, 270, 3, 3, 301, 270, 272, + 3, 302, 270, 1, 3, 302, 270, 2, + 3, 302, 270, 3, 3, 302, 270, 272, + 3, 303, 270, 1, 3, 303, 270, 2, + 3, 303, 270, 3, 3, 303, 270, 272, + 3, 304, 270, 1, 3, 304, 270, 2, + 3, 304, 270, 3, 3, 304, 270, 272, + 3, 305, 270, 1, 3, 305, 270, 2, + 3, 305, 270, 3, 3, 305, 270, 272, + 3, 306, 270, 1, 3, 306, 270, 2, + 3, 306, 270, 3, 3, 306, 270, 272, + 3, 307, 270, 1, 3, 307, 270, 2, + 3, 307, 270, 3, 3, 307, 270, 272, + 3, 308, 270, 1, 3, 308, 270, 2, + 3, 308, 270, 3, 3, 308, 270, 272, + 3, 309, 270, 1, 3, 309, 270, 2, + 3, 309, 270, 3, 3, 309, 270, 272, + 3, 310, 270, 1, 3, 310, 270, 2, + 3, 310, 270, 3, 3, 310, 270, 272, + 3, 311, 270, 1, 3, 311, 270, 2, + 3, 311, 270, 3, 3, 311, 270, 272, + 3, 312, 270, 1, 3, 312, 270, 2, + 3, 312, 270, 3, 3, 312, 270, 272, + 3, 313, 270, 1, 3, 313, 270, 2, + 3, 313, 270, 3, 3, 313, 270, 272, + 3, 314, 270, 1, 3, 314, 270, 2, + 3, 314, 270, 3, 3, 314, 270, 272, + 3, 315, 270, 1, 3, 315, 270, 2, + 3, 315, 270, 3, 3, 315, 270, 272, + 3, 316, 270, 1, 3, 316, 270, 2, + 3, 316, 270, 3, 3, 316, 270, 272, + 3, 317, 270, 1, 3, 317, 270, 2, + 3, 317, 270, 3, 3, 317, 270, 272, + 3, 318, 1, 26, 4, 5, 7, 1, + 8, 4, 14, 11, 17, 0, 4, 16, + 69, 0, 1, 4, 23, 1, 64, 0, + 4, 25, 1, 86, 318, 4, 25, 1, + 274, 272, 4, 25, 1, 276, 270, 4, + 25, 2, 274, 272, 4, 25, 2, 276, + 270, 4, 25, 3, 274, 272, 4, 25, + 3, 276, 270, 4, 25, 276, 270, 272, + 4, 27, 32, 275, 4, 4, 27, 44, + 32, 275, 4, 27, 275, 271, 4, 4, + 31, 30, 24, 21, 4, 32, 275, 271, + 4, 4, 34, 31, 30, 35, 4, 34, 36, 244, 1, 4, 34, 36, 244, 2, 4, 34, 36, 244, 3, 4, 34, 36, 245, 1, 4, 34, 36, 245, 2, 4, @@ -489,91 +486,95 @@ static const short _zone_scanner_actions[] = { 1, 4, 34, 36, 246, 2, 4, 34, 36, 246, 3, 4, 34, 36, 247, 1, 4, 34, 36, 247, 2, 4, 34, 36, - 247, 3, 4, 36, 244, 252, 0, 4, - 36, 245, 252, 0, 4, 36, 246, 252, - 0, 4, 36, 247, 252, 0, 4, 37, - 33, 31, 30, 4, 38, 33, 31, 30, - 4, 42, 268, 1, 270, 4, 44, 32, - 4, 66, 4, 50, 49, 31, 30, 4, - 50, 65, 0, 1, 4, 68, 19, 9, - 10, 4, 73, 78, 0, 1, 4, 75, - 19, 9, 10, 4, 83, 84, 24, 21, - 4, 89, 146, 147, 269, 4, 90, 91, - 1, 0, 4, 92, 93, 1, 0, 4, - 98, 99, 1, 0, 4, 191, 1, 235, - 0, 4, 192, 1, 235, 0, 4, 193, - 1, 235, 0, 4, 194, 1, 235, 0, - 4, 195, 1, 235, 0, 4, 196, 1, - 235, 0, 4, 197, 1, 235, 0, 4, - 198, 1, 235, 0, 4, 199, 1, 235, - 0, 4, 200, 1, 235, 0, 4, 201, - 1, 235, 0, 4, 202, 1, 235, 0, - 4, 203, 1, 235, 0, 4, 204, 1, - 235, 0, 4, 205, 1, 235, 0, 4, - 206, 1, 235, 0, 4, 207, 1, 235, - 0, 4, 208, 1, 235, 0, 4, 209, - 1, 235, 0, 4, 210, 1, 235, 0, - 4, 211, 1, 235, 0, 4, 212, 1, - 235, 0, 4, 213, 1, 235, 0, 4, - 214, 1, 235, 0, 4, 215, 1, 235, - 0, 4, 216, 1, 235, 0, 4, 217, - 1, 235, 0, 4, 218, 1, 235, 0, - 4, 219, 1, 235, 0, 4, 220, 1, - 235, 0, 4, 221, 1, 235, 0, 4, - 222, 1, 235, 0, 4, 223, 1, 235, - 0, 4, 224, 1, 235, 0, 4, 225, - 1, 235, 0, 4, 226, 1, 235, 0, - 4, 227, 1, 235, 0, 4, 228, 1, - 235, 0, 4, 229, 1, 235, 0, 4, - 230, 1, 235, 0, 4, 231, 1, 235, - 0, 4, 232, 1, 235, 0, 4, 233, - 1, 235, 0, 4, 234, 1, 235, 0, - 4, 274, 268, 1, 270, 4, 274, 268, - 1, 316, 4, 275, 268, 1, 270, 4, - 276, 268, 1, 270, 4, 277, 268, 1, - 270, 4, 278, 268, 1, 270, 4, 279, - 268, 1, 270, 4, 280, 268, 1, 270, - 4, 281, 268, 1, 270, 4, 282, 268, - 1, 270, 4, 283, 268, 1, 270, 4, - 284, 268, 1, 270, 4, 285, 268, 1, - 270, 4, 286, 268, 1, 270, 4, 287, - 268, 1, 270, 4, 288, 268, 1, 270, - 4, 289, 268, 1, 270, 4, 290, 268, - 1, 270, 4, 291, 268, 1, 270, 4, - 292, 268, 1, 270, 4, 293, 268, 1, - 270, 4, 294, 268, 1, 270, 4, 295, - 268, 1, 270, 4, 296, 268, 1, 270, - 4, 297, 268, 1, 270, 4, 298, 268, - 1, 270, 4, 299, 268, 1, 270, 4, - 300, 268, 1, 270, 4, 301, 268, 1, - 270, 4, 302, 268, 1, 270, 4, 303, - 268, 1, 270, 4, 304, 268, 1, 270, - 4, 305, 268, 1, 270, 4, 306, 268, - 1, 270, 4, 307, 268, 1, 270, 4, - 308, 268, 1, 270, 4, 309, 268, 1, - 270, 4, 310, 268, 1, 270, 4, 311, - 268, 1, 270, 4, 312, 268, 1, 270, - 4, 313, 268, 1, 270, 4, 314, 268, - 1, 270, 4, 315, 268, 1, 270, 5, - 16, 76, 78, 0, 1, 5, 25, 1, - 274, 268, 270, 5, 25, 1, 274, 268, - 316, 5, 27, 32, 273, 269, 4, 5, - 31, 30, 270, 24, 21, 5, 34, 36, - 244, 252, 0, 5, 34, 36, 245, 252, - 0, 5, 34, 36, 246, 252, 0, 5, - 34, 36, 247, 252, 0, 5, 36, 244, - 1, 252, 0, 5, 36, 245, 1, 252, - 0, 5, 36, 246, 1, 252, 0, 5, - 36, 247, 1, 252, 0, 5, 44, 32, - 273, 269, 4, 5, 83, 84, 270, 24, - 21, 5, 250, 37, 33, 31, 30, 5, - 274, 268, 1, 270, 316, 5, 274, 268, - 270, 316, 1, 6, 25, 1, 274, 268, - 270, 316, 6, 27, 44, 32, 273, 269, - 4, 6, 34, 36, 244, 1, 252, 0, - 6, 34, 36, 245, 1, 252, 0, 6, - 34, 36, 246, 1, 252, 0, 6, 34, - 36, 247, 1, 252, 0 + 247, 3, 4, 34, 36, 248, 1, 4, + 34, 36, 248, 2, 4, 34, 36, 248, + 3, 4, 34, 36, 249, 1, 4, 34, + 36, 249, 2, 4, 34, 36, 249, 3, + 4, 36, 246, 254, 0, 4, 36, 247, + 254, 0, 4, 36, 248, 254, 0, 4, + 36, 249, 254, 0, 4, 37, 33, 31, + 30, 4, 38, 33, 31, 30, 4, 42, + 270, 1, 272, 4, 44, 32, 4, 66, + 4, 50, 49, 31, 30, 4, 50, 65, + 0, 1, 4, 68, 19, 9, 10, 4, + 73, 78, 0, 1, 4, 75, 19, 9, + 10, 4, 83, 84, 24, 21, 4, 89, + 148, 149, 271, 4, 90, 91, 1, 0, + 4, 92, 93, 1, 0, 4, 98, 99, + 1, 0, 4, 193, 1, 237, 0, 4, + 194, 1, 237, 0, 4, 195, 1, 237, + 0, 4, 196, 1, 237, 0, 4, 197, + 1, 237, 0, 4, 198, 1, 237, 0, + 4, 199, 1, 237, 0, 4, 200, 1, + 237, 0, 4, 201, 1, 237, 0, 4, + 202, 1, 237, 0, 4, 203, 1, 237, + 0, 4, 204, 1, 237, 0, 4, 205, + 1, 237, 0, 4, 206, 1, 237, 0, + 4, 207, 1, 237, 0, 4, 208, 1, + 237, 0, 4, 209, 1, 237, 0, 4, + 210, 1, 237, 0, 4, 211, 1, 237, + 0, 4, 212, 1, 237, 0, 4, 213, + 1, 237, 0, 4, 214, 1, 237, 0, + 4, 215, 1, 237, 0, 4, 216, 1, + 237, 0, 4, 217, 1, 237, 0, 4, + 218, 1, 237, 0, 4, 219, 1, 237, + 0, 4, 220, 1, 237, 0, 4, 221, + 1, 237, 0, 4, 222, 1, 237, 0, + 4, 223, 1, 237, 0, 4, 224, 1, + 237, 0, 4, 225, 1, 237, 0, 4, + 226, 1, 237, 0, 4, 227, 1, 237, + 0, 4, 228, 1, 237, 0, 4, 229, + 1, 237, 0, 4, 230, 1, 237, 0, + 4, 231, 1, 237, 0, 4, 232, 1, + 237, 0, 4, 233, 1, 237, 0, 4, + 234, 1, 237, 0, 4, 235, 1, 237, + 0, 4, 236, 1, 237, 0, 4, 276, + 270, 1, 272, 4, 276, 270, 1, 318, + 4, 277, 270, 1, 272, 4, 278, 270, + 1, 272, 4, 279, 270, 1, 272, 4, + 280, 270, 1, 272, 4, 281, 270, 1, + 272, 4, 282, 270, 1, 272, 4, 283, + 270, 1, 272, 4, 284, 270, 1, 272, + 4, 285, 270, 1, 272, 4, 286, 270, + 1, 272, 4, 287, 270, 1, 272, 4, + 288, 270, 1, 272, 4, 289, 270, 1, + 272, 4, 290, 270, 1, 272, 4, 291, + 270, 1, 272, 4, 292, 270, 1, 272, + 4, 293, 270, 1, 272, 4, 294, 270, + 1, 272, 4, 295, 270, 1, 272, 4, + 296, 270, 1, 272, 4, 297, 270, 1, + 272, 4, 298, 270, 1, 272, 4, 299, + 270, 1, 272, 4, 300, 270, 1, 272, + 4, 301, 270, 1, 272, 4, 302, 270, + 1, 272, 4, 303, 270, 1, 272, 4, + 304, 270, 1, 272, 4, 305, 270, 1, + 272, 4, 306, 270, 1, 272, 4, 307, + 270, 1, 272, 4, 308, 270, 1, 272, + 4, 309, 270, 1, 272, 4, 310, 270, + 1, 272, 4, 311, 270, 1, 272, 4, + 312, 270, 1, 272, 4, 313, 270, 1, + 272, 4, 314, 270, 1, 272, 4, 315, + 270, 1, 272, 4, 316, 270, 1, 272, + 4, 317, 270, 1, 272, 5, 16, 76, + 78, 0, 1, 5, 25, 1, 276, 270, + 272, 5, 25, 1, 276, 270, 318, 5, + 27, 32, 275, 271, 4, 5, 31, 30, + 272, 24, 21, 5, 34, 36, 246, 254, + 0, 5, 34, 36, 247, 254, 0, 5, + 34, 36, 248, 254, 0, 5, 34, 36, + 249, 254, 0, 5, 36, 246, 1, 254, + 0, 5, 36, 247, 1, 254, 0, 5, + 36, 248, 1, 254, 0, 5, 36, 249, + 1, 254, 0, 5, 44, 32, 275, 271, + 4, 5, 83, 84, 272, 24, 21, 5, + 252, 37, 33, 31, 30, 5, 276, 270, + 1, 272, 318, 5, 276, 270, 272, 318, + 1, 6, 25, 1, 276, 270, 272, 318, + 6, 27, 44, 32, 275, 271, 4, 6, + 34, 36, 246, 1, 254, 0, 6, 34, + 36, 247, 1, 254, 0, 6, 34, 36, + 248, 1, 254, 0, 6, 34, 36, 249, + 1, 254, 0 }; static const short _zone_scanner_cond_offsets[] = { @@ -654,79 +655,80 @@ static const short _zone_scanner_cond_offsets[] = { 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 531, 533, - 535, 537, 539, 541, 543, 545, 547, 549, - 551, 553, 553, 553, 553, 553, 556, 558, - 558, 560, 563, 565, 565, 567, 570, 572, - 572, 574, 577, 580, 583, 583, 585, 587, - 587, 590, 590, 592, 594, 594, 597, 597, - 599, 601, 601, 604, 604, 606, 608, 611, - 611, 611, 611, 613, 615, 617, 619, 621, - 623, 625, 627, 629, 631, 633, 635, 637, - 639, 641, 643, 643, 645, 647, 649, 651, - 653, 655, 657, 659, 662, 664, 666, 669, - 671, 673, 675, 678, 680, 682, 684, 687, - 689, 691, 693, 696, 698, 701, 703, 705, - 708, 711, 714, 716, 719, 721, 723, 726, - 729, 729, 731, 733, 735, 737, 739, 741, - 741, 744, 747, 750, 750, 752, 754, 756, - 758, 760, 762, 764, 766, 768, 770, 770, - 773, 776, 779, 782, 785, 785, 787, 789, - 791, 793, 795, 797, 799, 802, 805, 808, - 810, 810, 810, 810, 810, 810, 812, 815, - 815, 815, 815, 815, 817, 819, 821, 823, - 825, 827, 827, 829, 832, 835, 838, 841, - 841, 843, 845, 847, 849, 849, 851, 854, - 857, 860, 860, 862, 864, 866, 868, 870, - 872, 878, 889, 891, 894, 900, 903, 914, - 917, 920, 923, 925, 927, 929, 931, 937, - 940, 943, 945, 947, 949, 951, 957, 960, - 963, 965, 967, 969, 971, 977, 980, 983, - 986, 986, 988, 990, 992, 994, 996, 998, - 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, - 1016, 1018, 1020, 1023, 1026, 1029, 1032, 1035, - 1038, 1041, 1044, 1044, 1044, 1046, 1046, 1046, - 1046, 1048, 1048, 1050, 1050, 1050, 1052, 1052, - 1052, 1052, 1052, 1052, 1054, 1056, 1056, 1056, - 1058, 1058, 1058, 1058, 1060, 1060, 1060, 1060, - 1060, 1062, 1062, 1062, 1062, 1064, 1064, 1064, - 1064, 1066, 1068, 1068, 1068, 1068, 1068, 1070, - 1070, 1072, 1072, 1072, 1072, 1072, 1074, 1074, - 1074, 1074, 1074, 1074, 1074, 1074, 1076, 1076, - 1076, 1078, 1080, 1080, 1080, 1082, 1082, 1084, - 1084, 1086, 1088, 1088, 1088, 1088, 1088, 1090, - 1092, 1092, 1092, 1092, 1092, 1094, 1094, 1096, - 1098, 1098, 1100, 1102, 1102, 1102, 1102, 1102, - 1104, 1104, 1104, 1106, 1106, 1108, 1108, 1108, - 1108, 1110, 1112, 1112, 1112, 1114, 1114, 1116, - 1116, 1118, 1118, 1118, 1118, 1120, 1120, 1120, - 1120, 1122, 1122, 1124, 1124, 1124, 1124, 1126, - 1126, 1126, 1128, 1128, 1128, 1128, 1128, 1130, - 1132, 1134, 1136, 1138, 1140, 1142, 1145, 1148, - 1151, 1151, 1153, 1153, 1155, 1157, 1159, 1161, - 1163, 1165, 1167, 1169, 1169, 1169, 1169, 1169, + 529, 529, 529, 529, 529, 529, 529, 529, + 529, 529, 529, 529, 529, 529, 529, 531, + 533, 535, 537, 539, 541, 543, 545, 547, + 549, 551, 553, 553, 553, 553, 553, 556, + 558, 558, 560, 563, 565, 565, 567, 570, + 572, 572, 574, 577, 580, 583, 583, 585, + 587, 587, 590, 590, 592, 594, 594, 597, + 597, 599, 601, 601, 604, 604, 606, 608, + 611, 611, 611, 611, 613, 615, 617, 619, + 621, 623, 625, 627, 629, 631, 633, 635, + 637, 639, 641, 643, 643, 645, 647, 649, + 651, 653, 655, 657, 659, 662, 664, 666, + 669, 671, 673, 675, 678, 680, 682, 684, + 687, 689, 691, 693, 696, 698, 701, 703, + 705, 708, 711, 714, 716, 719, 721, 723, + 726, 729, 729, 731, 733, 735, 737, 739, + 741, 741, 744, 747, 750, 750, 752, 754, + 756, 758, 760, 762, 764, 766, 768, 770, + 770, 773, 776, 779, 782, 785, 785, 787, + 789, 791, 793, 795, 797, 799, 802, 805, + 808, 810, 810, 810, 810, 810, 810, 812, + 815, 815, 815, 815, 815, 817, 819, 821, + 823, 825, 827, 827, 829, 832, 835, 838, + 841, 841, 843, 845, 847, 849, 849, 851, + 854, 857, 860, 860, 862, 864, 866, 868, + 870, 872, 878, 889, 891, 894, 900, 903, + 914, 917, 920, 923, 925, 927, 929, 931, + 937, 940, 943, 945, 947, 949, 951, 957, + 960, 963, 965, 967, 969, 971, 977, 980, + 983, 986, 986, 988, 990, 992, 994, 996, + 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, + 1014, 1016, 1018, 1020, 1023, 1026, 1029, 1032, + 1035, 1038, 1041, 1044, 1044, 1044, 1046, 1046, + 1046, 1046, 1048, 1048, 1050, 1050, 1050, 1052, + 1052, 1052, 1052, 1052, 1052, 1054, 1056, 1056, + 1056, 1058, 1058, 1058, 1058, 1060, 1060, 1060, + 1060, 1060, 1062, 1062, 1062, 1062, 1064, 1064, + 1064, 1064, 1066, 1068, 1068, 1068, 1068, 1068, + 1070, 1070, 1072, 1072, 1072, 1072, 1072, 1074, + 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1076, + 1076, 1076, 1078, 1080, 1080, 1080, 1082, 1082, + 1084, 1084, 1086, 1088, 1088, 1088, 1088, 1088, + 1090, 1092, 1092, 1092, 1092, 1092, 1094, 1094, + 1096, 1098, 1098, 1100, 1102, 1102, 1102, 1102, + 1102, 1104, 1104, 1104, 1106, 1106, 1108, 1108, + 1108, 1108, 1110, 1112, 1112, 1112, 1114, 1114, + 1116, 1116, 1118, 1118, 1118, 1118, 1120, 1120, + 1120, 1120, 1122, 1122, 1124, 1124, 1124, 1124, + 1126, 1126, 1126, 1128, 1128, 1128, 1128, 1128, + 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1145, + 1148, 1151, 1151, 1153, 1153, 1155, 1157, 1159, + 1161, 1163, 1165, 1167, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, - 1169, 1169, 1172, 1172, 1174, 1177, 1180, 1183, - 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1195, - 1195, 1195, 1198, 1201, 1204, 1204, 1206, 1208, - 1210, 1212, 1214, 1216, 1216, 1218, 1221, 1224, - 1227, 1230, 1230, 1232, 1234, 1234, 1237, 1237, - 1239, 1241, 1241, 1241, 1241, 1241, 1241, 1241, - 1241, 1241, 1241, 1244, 1244, 1244, 1244, 1244, + 1169, 1169, 1169, 1172, 1172, 1174, 1177, 1180, + 1183, 1183, 1185, 1187, 1189, 1191, 1193, 1195, + 1195, 1195, 1195, 1198, 1201, 1204, 1204, 1206, + 1208, 1210, 1212, 1214, 1216, 1216, 1218, 1221, + 1224, 1227, 1230, 1230, 1232, 1234, 1234, 1237, + 1237, 1239, 1241, 1241, 1241, 1241, 1241, 1241, + 1241, 1241, 1241, 1241, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, - 1244, 1246, 1248, 1250, 1252, 1252, 1255, 1258, - 1258, 1260, 1262, 1264, 1266, 1266, 1269, 1272, - 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, - 1290, 1292, 1292, 1292, 1292, 1292, 1292, 1292, - 1292, 1294, 1294, 1296, 1299, 1299, 1301, 1304, - 1304, 1306, 1309, 1311, 1311, 1313, 1316, 1319, + 1244, 1244, 1246, 1248, 1250, 1252, 1252, 1255, + 1258, 1258, 1260, 1262, 1264, 1266, 1266, 1269, + 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, + 1288, 1290, 1292, 1292, 1292, 1292, 1292, 1292, + 1292, 1292, 1294, 1294, 1296, 1299, 1299, 1301, + 1304, 1304, 1306, 1309, 1311, 1311, 1313, 1316, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, - 1319, 1321, 1324, 1324, 1324, 1326, 1329, 1331, - 1334, 1336, 1339, 1341, 1344, 1344, 1344, 1344, - 1344, 1346, 1349, 1349, 1351, 1354, 1354, 1356, - 1359, 1359, 1365, 1368, 1379, 1382, 1393, 1396, - 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1398, - 1401, 1401, 1401, 1401, 1401, 1401 + 1319, 1319, 1321, 1324, 1324, 1324, 1326, 1329, + 1331, 1334, 1336, 1339, 1341, 1344, 1344, 1344, + 1344, 1344, 1346, 1349, 1349, 1351, 1354, 1354, + 1356, 1359, 1359, 1365, 1368, 1379, 1382, 1393, + 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, + 1398, 1401, 1401, 1401, 1401, 1401, 1401 }; static const char _zone_scanner_cond_lengths[] = { @@ -807,79 +809,80 @@ static const char _zone_scanner_cond_lengths[] = { 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, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 3, 2, 0, - 2, 3, 2, 0, 2, 3, 2, 0, - 2, 3, 3, 3, 0, 2, 2, 0, - 3, 0, 2, 2, 0, 3, 0, 2, - 2, 0, 3, 0, 2, 2, 3, 0, - 0, 0, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 3, 2, - 2, 2, 3, 2, 2, 2, 3, 2, - 2, 2, 3, 2, 3, 2, 2, 3, - 3, 3, 2, 3, 2, 2, 3, 3, - 0, 2, 2, 2, 2, 2, 2, 0, - 3, 3, 3, 0, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 3, - 3, 3, 3, 3, 0, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 2, - 0, 0, 0, 0, 0, 2, 3, 0, + 2, 2, 0, 0, 0, 0, 3, 2, + 0, 2, 3, 2, 0, 2, 3, 2, + 0, 2, 3, 3, 3, 0, 2, 2, + 0, 3, 0, 2, 2, 0, 3, 0, + 2, 2, 0, 3, 0, 2, 2, 3, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 0, 2, 3, 3, 3, 3, 0, - 2, 2, 2, 2, 0, 2, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 3, + 2, 2, 2, 3, 2, 2, 2, 3, + 2, 2, 2, 3, 2, 3, 2, 2, + 3, 3, 3, 2, 3, 2, 2, 3, 3, 0, 2, 2, 2, 2, 2, 2, - 6, 11, 2, 3, 6, 3, 11, 3, + 0, 3, 3, 3, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, + 3, 3, 3, 3, 3, 0, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 3, + 2, 0, 0, 0, 0, 0, 2, 3, + 0, 0, 0, 0, 2, 2, 2, 2, + 2, 2, 0, 2, 3, 3, 3, 3, + 0, 2, 2, 2, 2, 0, 2, 3, + 3, 3, 0, 2, 2, 2, 2, 2, + 2, 6, 11, 2, 3, 6, 3, 11, + 3, 3, 3, 2, 2, 2, 2, 6, 3, 3, 2, 2, 2, 2, 6, 3, 3, 2, 2, 2, 2, 6, 3, 3, - 2, 2, 2, 2, 6, 3, 3, 3, - 0, 2, 2, 2, 2, 2, 2, 2, + 3, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 0, 0, 2, 0, 0, 0, - 2, 0, 2, 0, 0, 2, 0, 0, - 0, 0, 0, 2, 2, 0, 0, 2, - 0, 0, 0, 2, 0, 0, 0, 0, + 2, 2, 2, 3, 3, 3, 3, 3, + 3, 3, 3, 0, 0, 2, 0, 0, + 0, 2, 0, 2, 0, 0, 2, 0, + 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, - 2, 2, 0, 0, 0, 0, 2, 0, - 2, 0, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, - 2, 2, 0, 0, 2, 0, 2, 0, - 2, 2, 0, 0, 0, 0, 2, 2, - 0, 0, 0, 0, 2, 0, 2, 2, + 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, - 0, 0, 2, 0, 2, 0, 0, 0, - 2, 2, 0, 0, 2, 0, 2, 0, - 2, 0, 0, 0, 2, 0, 0, 0, - 2, 0, 2, 0, 0, 0, 2, 0, - 0, 2, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 3, - 0, 2, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 2, 0, + 0, 2, 2, 0, 0, 2, 0, 2, + 0, 2, 2, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 0, 2, 0, 2, + 2, 0, 2, 2, 0, 0, 0, 0, + 2, 0, 0, 2, 0, 2, 0, 0, + 0, 2, 2, 0, 0, 2, 0, 2, + 0, 2, 0, 0, 0, 2, 0, 0, + 0, 2, 0, 2, 0, 0, 0, 2, + 0, 0, 2, 0, 0, 0, 0, 2, + 2, 2, 2, 2, 2, 2, 3, 3, + 3, 0, 2, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 2, 3, 3, 3, 0, - 2, 2, 2, 2, 2, 2, 0, 0, - 0, 3, 3, 3, 0, 2, 2, 2, - 2, 2, 2, 0, 2, 3, 3, 3, - 3, 0, 2, 2, 0, 3, 0, 2, - 2, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 2, 3, 3, 3, + 0, 2, 2, 2, 2, 2, 2, 0, + 0, 0, 3, 3, 3, 0, 2, 2, + 2, 2, 2, 2, 0, 2, 3, 3, + 3, 3, 0, 2, 2, 0, 3, 0, + 2, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 0, 3, 3, 0, - 2, 2, 2, 2, 0, 3, 3, 2, + 0, 2, 2, 2, 2, 0, 3, 3, + 0, 2, 2, 2, 2, 0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 2, 3, 0, 2, 3, 0, - 2, 3, 2, 0, 2, 3, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 2, 3, 0, 0, 2, 3, 2, 3, - 2, 3, 2, 3, 0, 0, 0, 0, - 2, 3, 0, 2, 3, 0, 2, 3, - 0, 6, 3, 11, 3, 11, 3, 0, - 0, 0, 0, 0, 0, 0, 2, 3, - 0, 0, 0, 0, 0, 0 + 2, 2, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 2, 3, 0, 2, 3, + 0, 2, 3, 2, 0, 2, 3, 3, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 3, 0, 0, 2, 3, 2, + 3, 2, 3, 2, 3, 0, 0, 0, + 0, 2, 3, 0, 2, 3, 0, 2, + 3, 0, 6, 3, 11, 3, 11, 3, + 0, 0, 0, 0, 0, 0, 0, 2, + 3, 0, 0, 0, 0, 0, 0 }; static const short _zone_scanner_cond_keys[] = { @@ -1478,94 +1481,95 @@ static const short _zone_scanner_key_offsets[] = { 3682, 3692, 3704, 3710, 3726, 3729, 3732, 3740, 3743, 3755, 3763, 3767, 3773, 3775, 3782, 3784, 3786, 3788, 3790, 3791, 3792, 3794, 3796, 3798, - 3799, 3805, 3807, 3811, 3812, 3814, 3816, 3818, - 3820, 3826, 3828, 3830, 3832, 3834, 3835, 3836, - 3838, 3840, 3842, 3843, 3844, 3845, 3851, 3852, - 3853, 3855, 3857, 3859, 3860, 3861, 3862, 3868, - 3870, 3872, 3874, 3876, 3878, 3880, 3882, 3888, - 3890, 3892, 3894, 3896, 3898, 3900, 3904, 3906, - 3908, 3914, 3916, 3918, 3924, 3926, 3928, 3932, - 3934, 3935, 3941, 3943, 3945, 3948, 3955, 3957, - 3959, 3961, 3963, 3964, 3965, 3967, 3969, 3971, - 3972, 3978, 3979, 3980, 3986, 3987, 3988, 3994, - 4008, 4016, 4018, 4020, 4022, 4024, 4026, 4032, - 4038, 4040, 4042, 4044, 4046, 4048, 4054, 4058, - 4060, 4066, 4068, 4070, 4076, 4078, 4080, 4082, - 4088, 4090, 4092, 4098, 4102, 4104, 4110, 4112, - 4114, 4120, 4122, 4124, 4126, 4132, 4134, 4136, - 4142, 4145, 4154, 4163, 4169, 4178, 4184, 4199, - 4205, 4213, 4221, 4229, 4247, 4255, 4273, 4281, - 4299, 4307, 4325, 4333, 4345, 4353, 4356, 4364, - 4376, 4384, 4387, 4395, 4407, 4415, 4418, 4426, - 4438, 4446, 4449, 4452, 4455, 4461, 4467, 4479, - 4485, 4488, 4497, 4503, 4518, 4524, 4527, 4529, - 4537, 4552, 4558, 4561, 4567, 4577, 4593, 4596, - 4603, 4616, 4618, 4626, 4636, 4644, 4654, 4663, - 4671, 4677, 4685, 4693, 4703, 4711, 4721, 4730, - 4738, 4744, 4753, 4755, 4769, 4781, 4795, 4807, - 4821, 4833, 4847, 4857, 4860, 4873, 4886, 4889, - 4902, 4915, 4925, 4928, 4941, 4954, 4964, 4967, - 4980, 4993, 5003, 5006, 5012, 5015, 5023, 5031, - 5034, 5037, 5040, 5046, 5049, 5057, 5065, 5068, - 5071, 5073, 5081, 5089, 5097, 5105, 5113, 5128, - 5134, 5137, 5140, 5143, 5145, 5153, 5161, 5169, - 5181, 5187, 5199, 5205, 5217, 5223, 5238, 5244, - 5247, 5250, 5253, 5256, 5259, 5265, 5271, 5279, - 5287, 5299, 5305, 5318, 5320, 5323, 5326, 5329, - 5342, 5344, 5345, 5348, 5351, 5353, 5365, 5368, - 5369, 5376, 5383, 5385, 5393, 5405, 5411, 5419, - 5427, 5439, 5445, 5461, 5464, 5467, 5470, 5473, - 5475, 5483, 5491, 5499, 5511, 5517, 5533, 5536, - 5539, 5542, 5544, 5552, 5562, 5568, 5576, 5584, - 5591, 5625, 5638, 5640, 5643, 5657, 5660, 5701, - 5710, 5713, 5716, 5722, 5730, 5738, 5747, 5784, - 5787, 5790, 5796, 5804, 5812, 5825, 5866, 5869, - 5872, 5878, 5886, 5894, 5909, 5943, 5946, 5949, - 5952, 5982, 5994, 6006, 6012, 6020, 6028, 6036, - 6044, 6052, 6060, 6068, 6076, 6084, 6092, 6107, - 6113, 6126, 6128, 6131, 6134, 6137, 6140, 6143, - 6146, 6149, 6152, 6154, 6156, 6162, 6164, 6166, - 6168, 6174, 6176, 6182, 6190, 6192, 6198, 6202, - 6204, 6206, 6208, 6210, 6216, 6222, 6224, 6226, - 6232, 6234, 6236, 6238, 6244, 6250, 6252, 6254, - 6256, 6262, 6266, 6268, 6270, 6276, 6278, 6280, - 6282, 6288, 6294, 6296, 6298, 6300, 6301, 6307, - 6308, 6314, 6316, 6318, 6320, 6322, 6328, 6330, - 6332, 6334, 6336, 6338, 6340, 6342, 6348, 6352, - 6354, 6360, 6366, 6372, 6373, 6379, 6380, 6386, - 6388, 6394, 6400, 6404, 6406, 6408, 6410, 6416, - 6422, 6428, 6430, 6432, 6434, 6440, 6442, 6448, - 6456, 6458, 6465, 6473, 6475, 6477, 6479, 6481, - 6487, 6489, 6491, 6497, 6503, 6509, 6511, 6513, - 6515, 6521, 6527, 6535, 6537, 6543, 6545, 6551, - 6553, 6559, 6561, 6563, 6565, 6571, 6577, 6579, - 6581, 6587, 6589, 6595, 6597, 6599, 6601, 6609, - 6611, 6613, 6619, 6628, 6634, 6640, 6642, 6650, - 6658, 6666, 6678, 6684, 6697, 6699, 6702, 6705, - 6708, 6715, 6717, 6719, 6727, 6735, 6743, 6751, - 6759, 6772, 6778, 6790, 6796, 6803, 6809, 6816, - 6823, 6829, 6836, 6848, 6854, 6855, 6856, 6857, - 6858, 6859, 6862, 6868, 6880, 6883, 6886, 6889, - 6891, 6899, 6907, 6915, 6923, 6931, 6944, 6950, - 6956, 6968, 6971, 6974, 6977, 6979, 6987, 6995, - 7003, 7011, 7019, 7031, 7037, 7053, 7056, 7059, - 7062, 7065, 7067, 7075, 7084, 7093, 7096, 7098, - 7106, 7118, 7124, 7130, 7136, 7137, 7143, 7149, - 7155, 7161, 7168, 7171, 7177, 7183, 7184, 7190, - 7196, 7203, 7209, 7215, 7216, 7222, 7228, 7235, - 7237, 7245, 7253, 7261, 7273, 7279, 7282, 7285, - 7287, 7295, 7307, 7313, 7325, 7331, 7334, 7337, - 7355, 7388, 7436, 7486, 7504, 7554, 7572, 7605, - 7670, 7735, 7735, 7735, 7735, 7747, 7747, 7747, - 7747, 7763, 7763, 7780, 7783, 7783, 7823, 7826, - 7826, 7842, 7845, 7857, 7857, 7873, 7876, 7879, - 7879, 7879, 7879, 7879, 7879, 7879, 7879, 7879, - 7879, 7895, 7898, 7898, 7898, 7908, 7911, 7923, - 7926, 7938, 7941, 7953, 7956, 7956, 7956, 7956, - 7956, 7969, 7972, 7972, 7988, 7991, 7991, 8007, - 8010, 8010, 8024, 8027, 8040, 8043, 8084, 8093, - 8093, 8093, 8093, 8093, 8093, 8093, 8093, 8109, - 8112, 8112, 8112, 8112, 8112, 8112 + 3799, 3805, 3809, 3813, 3814, 3816, 3818, 3820, + 3822, 3828, 3830, 3832, 3834, 3836, 3837, 3838, + 3840, 3842, 3844, 3845, 3846, 3847, 3853, 3854, + 3855, 3857, 3859, 3861, 3862, 3863, 3864, 3870, + 3872, 3873, 3874, 3875, 3876, 3882, 3883, 3884, + 3890, 3892, 3894, 3896, 3898, 3900, 3902, 3904, + 3910, 3912, 3914, 3916, 3918, 3920, 3922, 3926, + 3928, 3930, 3936, 3938, 3940, 3946, 3948, 3950, + 3954, 3956, 3957, 3963, 3965, 3967, 3970, 3977, + 3979, 3981, 3983, 3985, 3986, 3987, 3989, 3991, + 3993, 3994, 4000, 4001, 4002, 4008, 4009, 4010, + 4016, 4030, 4038, 4040, 4042, 4044, 4046, 4048, + 4054, 4060, 4062, 4064, 4066, 4068, 4070, 4076, + 4080, 4082, 4088, 4090, 4092, 4098, 4100, 4102, + 4104, 4110, 4112, 4114, 4120, 4124, 4126, 4132, + 4134, 4136, 4142, 4144, 4146, 4148, 4154, 4156, + 4158, 4164, 4167, 4176, 4185, 4191, 4200, 4206, + 4221, 4227, 4235, 4243, 4251, 4269, 4277, 4295, + 4303, 4321, 4329, 4347, 4355, 4367, 4375, 4378, + 4386, 4398, 4406, 4409, 4417, 4429, 4437, 4440, + 4448, 4460, 4468, 4471, 4474, 4477, 4483, 4489, + 4501, 4507, 4510, 4519, 4525, 4540, 4546, 4549, + 4551, 4559, 4574, 4580, 4583, 4589, 4599, 4615, + 4618, 4625, 4638, 4640, 4648, 4658, 4666, 4676, + 4685, 4693, 4699, 4707, 4715, 4725, 4733, 4743, + 4752, 4760, 4766, 4775, 4777, 4791, 4803, 4817, + 4829, 4843, 4855, 4869, 4879, 4882, 4895, 4908, + 4911, 4924, 4937, 4947, 4950, 4963, 4976, 4986, + 4989, 5002, 5015, 5025, 5028, 5034, 5037, 5045, + 5053, 5056, 5059, 5062, 5068, 5071, 5079, 5087, + 5090, 5093, 5095, 5103, 5111, 5119, 5127, 5135, + 5150, 5156, 5159, 5162, 5165, 5167, 5175, 5183, + 5191, 5203, 5209, 5221, 5227, 5239, 5245, 5260, + 5266, 5269, 5272, 5275, 5278, 5281, 5287, 5293, + 5301, 5309, 5321, 5327, 5340, 5342, 5345, 5348, + 5351, 5364, 5366, 5367, 5370, 5373, 5375, 5387, + 5390, 5391, 5398, 5405, 5407, 5415, 5427, 5433, + 5441, 5449, 5461, 5467, 5483, 5486, 5489, 5492, + 5495, 5497, 5505, 5513, 5521, 5533, 5539, 5555, + 5558, 5561, 5564, 5566, 5574, 5584, 5590, 5598, + 5606, 5613, 5647, 5660, 5662, 5665, 5679, 5682, + 5723, 5732, 5735, 5738, 5744, 5752, 5760, 5769, + 5806, 5809, 5812, 5818, 5826, 5834, 5847, 5888, + 5891, 5894, 5900, 5908, 5916, 5931, 5965, 5968, + 5971, 5974, 6004, 6016, 6028, 6034, 6042, 6050, + 6058, 6066, 6074, 6082, 6090, 6098, 6106, 6114, + 6129, 6135, 6148, 6150, 6153, 6156, 6159, 6162, + 6165, 6168, 6171, 6174, 6176, 6178, 6184, 6186, + 6188, 6190, 6196, 6198, 6204, 6212, 6214, 6220, + 6224, 6226, 6228, 6230, 6232, 6238, 6244, 6246, + 6248, 6254, 6256, 6258, 6260, 6266, 6272, 6274, + 6276, 6278, 6284, 6288, 6290, 6292, 6298, 6300, + 6302, 6304, 6310, 6316, 6318, 6320, 6322, 6323, + 6329, 6330, 6336, 6338, 6340, 6342, 6344, 6350, + 6352, 6354, 6356, 6358, 6360, 6362, 6364, 6370, + 6374, 6376, 6382, 6388, 6394, 6395, 6401, 6402, + 6408, 6410, 6416, 6422, 6426, 6428, 6430, 6432, + 6438, 6444, 6450, 6452, 6454, 6456, 6462, 6464, + 6470, 6478, 6480, 6487, 6495, 6497, 6499, 6501, + 6503, 6509, 6511, 6513, 6519, 6525, 6531, 6533, + 6535, 6537, 6543, 6549, 6557, 6559, 6565, 6567, + 6573, 6575, 6581, 6583, 6585, 6587, 6593, 6599, + 6601, 6603, 6609, 6611, 6617, 6619, 6621, 6623, + 6631, 6633, 6635, 6641, 6650, 6656, 6662, 6664, + 6672, 6680, 6688, 6700, 6706, 6719, 6721, 6724, + 6727, 6730, 6737, 6739, 6741, 6749, 6757, 6765, + 6773, 6781, 6794, 6800, 6812, 6818, 6825, 6831, + 6838, 6845, 6851, 6858, 6870, 6876, 6877, 6878, + 6879, 6880, 6881, 6884, 6890, 6902, 6905, 6908, + 6911, 6913, 6921, 6929, 6937, 6945, 6953, 6966, + 6972, 6978, 6990, 6993, 6996, 6999, 7001, 7009, + 7017, 7025, 7033, 7041, 7053, 7059, 7075, 7078, + 7081, 7084, 7087, 7089, 7097, 7106, 7115, 7118, + 7120, 7128, 7140, 7146, 7152, 7158, 7159, 7165, + 7171, 7177, 7183, 7190, 7193, 7199, 7205, 7206, + 7212, 7218, 7225, 7231, 7237, 7238, 7244, 7250, + 7257, 7259, 7267, 7275, 7283, 7295, 7301, 7304, + 7307, 7309, 7317, 7329, 7335, 7347, 7353, 7356, + 7359, 7377, 7410, 7458, 7508, 7526, 7576, 7594, + 7627, 7692, 7757, 7757, 7757, 7757, 7769, 7769, + 7769, 7769, 7785, 7785, 7802, 7805, 7805, 7845, + 7848, 7848, 7864, 7867, 7879, 7879, 7895, 7898, + 7901, 7901, 7901, 7901, 7901, 7901, 7901, 7901, + 7901, 7901, 7917, 7920, 7920, 7920, 7930, 7933, + 7945, 7948, 7960, 7963, 7975, 7978, 7978, 7978, + 7978, 7978, 7991, 7994, 7994, 8010, 8013, 8013, + 8029, 8032, 8032, 8046, 8049, 8062, 8065, 8106, + 8115, 8115, 8115, 8115, 8115, 8115, 8115, 8115, + 8131, 8134, 8134, 8134, 8134, 8134, 8134 }; static const short _zone_scanner_trans_keys[] = { @@ -2044,59 +2048,65 @@ static const short _zone_scanner_trans_keys[] = { 45, 59, 9, 10, 40, 41, 78, 110, 83, 115, 69, 101, 67, 99, 51, 45, 83, 115, 72, 104, 65, 97, 49, 32, - 59, 9, 10, 40, 41, 67, 99, 67, - 68, 99, 100, 45, 71, 103, 79, 111, - 83, 115, 84, 116, 32, 59, 9, 10, - 40, 41, 83, 115, 65, 97, 80, 112, - 50, 51, 53, 54, 83, 115, 72, 104, - 65, 97, 50, 53, 54, 32, 59, 9, - 10, 40, 41, 56, 52, 83, 115, 72, - 104, 65, 97, 51, 56, 52, 32, 59, - 9, 10, 40, 41, 78, 110, 68, 100, - 73, 105, 82, 114, 69, 101, 67, 99, - 84, 116, 32, 59, 9, 10, 40, 41, - 82, 114, 73, 105, 86, 118, 65, 97, - 84, 116, 69, 101, 68, 79, 100, 111, - 78, 110, 83, 115, 32, 59, 9, 10, - 40, 41, 73, 105, 68, 100, 32, 59, + 59, 9, 10, 40, 41, 67, 68, 99, + 100, 67, 68, 99, 100, 45, 71, 103, + 79, 111, 83, 115, 84, 116, 32, 59, 9, 10, 40, 41, 83, 115, 65, 97, - 77, 83, 109, 115, 68, 100, 53, 32, - 59, 9, 10, 40, 41, 72, 104, 65, - 97, 49, 50, 53, 32, 45, 59, 9, - 10, 40, 41, 78, 110, 83, 115, 69, - 101, 67, 99, 51, 45, 83, 115, 72, - 104, 65, 97, 49, 32, 59, 9, 10, - 40, 41, 53, 54, 32, 59, 9, 10, - 40, 41, 49, 50, 32, 59, 9, 10, - 40, 41, 65, 73, 79, 80, 83, 85, - 97, 105, 111, 112, 115, 117, 48, 57, - 32, 59, 9, 10, 40, 41, 48, 57, - 67, 99, 80, 112, 75, 107, 73, 105, - 88, 120, 32, 59, 9, 10, 40, 41, - 65, 80, 83, 97, 112, 115, 67, 99, - 80, 112, 75, 107, 73, 105, 88, 120, - 32, 59, 9, 10, 40, 41, 71, 75, - 103, 107, 80, 112, 32, 59, 9, 10, - 40, 41, 73, 105, 88, 120, 32, 59, - 9, 10, 40, 41, 80, 112, 75, 107, - 73, 105, 32, 59, 9, 10, 40, 41, + 80, 112, 50, 51, 53, 54, 83, 115, + 72, 104, 65, 97, 50, 53, 54, 32, + 59, 9, 10, 40, 41, 56, 52, 83, + 115, 72, 104, 65, 97, 51, 56, 52, + 32, 59, 9, 10, 40, 41, 50, 52, + 53, 53, 49, 57, 32, 59, 9, 10, + 40, 41, 52, 56, 32, 59, 9, 10, + 40, 41, 78, 110, 68, 100, 73, 105, + 82, 114, 69, 101, 67, 99, 84, 116, + 32, 59, 9, 10, 40, 41, 82, 114, + 73, 105, 86, 118, 65, 97, 84, 116, + 69, 101, 68, 79, 100, 111, 78, 110, + 83, 115, 32, 59, 9, 10, 40, 41, 73, 105, 68, 100, 32, 59, 9, 10, - 40, 41, 71, 75, 103, 107, 80, 112, + 40, 41, 83, 115, 65, 97, 77, 83, + 109, 115, 68, 100, 53, 32, 59, 9, + 10, 40, 41, 72, 104, 65, 97, 49, + 50, 53, 32, 45, 59, 9, 10, 40, + 41, 78, 110, 83, 115, 69, 101, 67, + 99, 51, 45, 83, 115, 72, 104, 65, + 97, 49, 32, 59, 9, 10, 40, 41, + 53, 54, 32, 59, 9, 10, 40, 41, + 49, 50, 32, 59, 9, 10, 40, 41, + 65, 73, 79, 80, 83, 85, 97, 105, + 111, 112, 115, 117, 48, 57, 32, 59, + 9, 10, 40, 41, 48, 57, 67, 99, + 80, 112, 75, 107, 73, 105, 88, 120, + 32, 59, 9, 10, 40, 41, 65, 80, + 83, 97, 112, 115, 67, 99, 80, 112, + 75, 107, 73, 105, 88, 120, 32, 59, + 9, 10, 40, 41, 71, 75, 103, 107, + 80, 112, 32, 59, 9, 10, 40, 41, + 73, 105, 88, 120, 32, 59, 9, 10, + 40, 41, 80, 112, 75, 107, 73, 105, 32, 59, 9, 10, 40, 41, 73, 105, - 88, 120, 32, 59, 9, 10, 40, 41, - 80, 112, 75, 107, 73, 105, 32, 59, - 9, 10, 40, 41, 82, 114, 73, 105, - 32, 59, 9, 10, 40, 41, 46, 48, - 57, 32, 46, 59, 9, 10, 40, 41, - 48, 57, 42, 92, 95, 45, 57, 64, - 90, 97, 122, 32, 59, 9, 10, 40, - 41, 42, 92, 95, 45, 57, 64, 90, - 97, 122, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 42, 92, 95, 1034, - 1083, 45, 57, 64, 90, 97, 122, 9, - 32, 40, 41, 1034, 1083, 9, 32, 40, - 41, 1034, 1083, 48, 57, 9, 32, 40, - 41, 1034, 1083, 48, 57, 9, 32, 40, + 68, 100, 32, 59, 9, 10, 40, 41, + 71, 75, 103, 107, 80, 112, 32, 59, + 9, 10, 40, 41, 73, 105, 88, 120, + 32, 59, 9, 10, 40, 41, 80, 112, + 75, 107, 73, 105, 32, 59, 9, 10, + 40, 41, 82, 114, 73, 105, 32, 59, + 9, 10, 40, 41, 46, 48, 57, 32, + 46, 59, 9, 10, 40, 41, 48, 57, + 42, 92, 95, 45, 57, 64, 90, 97, + 122, 32, 59, 9, 10, 40, 41, 42, + 92, 95, 45, 57, 64, 90, 97, 122, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 42, 92, 95, 1034, 1083, 45, + 57, 64, 90, 97, 122, 9, 32, 40, + 41, 1034, 1083, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 68, + 72, 77, 83, 87, 100, 104, 109, 115, + 119, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 68, 72, 77, 83, 87, 100, 104, 109, 115, 119, 1034, 1083, 48, 57, 9, @@ -2104,66 +2114,66 @@ static const short _zone_scanner_trans_keys[] = { 32, 40, 41, 68, 72, 77, 83, 87, 100, 104, 109, 115, 119, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 68, 72, 77, - 83, 87, 100, 104, 109, 115, 119, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 32, 59, 68, 72, 77, - 83, 87, 100, 104, 109, 115, 119, 9, - 10, 40, 41, 48, 57, 32, 59, 9, - 10, 40, 41, 48, 57, 68, 72, 77, - 83, 87, 100, 104, 109, 115, 119, 48, - 57, 32, 59, 9, 10, 40, 41, 48, - 57, 1034, 896, 1151, 9, 32, 40, 41, - 1034, 1083, 48, 57, 68, 72, 77, 83, - 87, 100, 104, 109, 115, 119, 48, 57, - 9, 32, 40, 41, 1034, 1083, 48, 57, - 1034, 896, 1151, 9, 32, 40, 41, 1034, - 1083, 48, 57, 68, 72, 77, 83, 87, - 100, 104, 109, 115, 119, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 1034, + 57, 32, 59, 68, 72, 77, 83, 87, + 100, 104, 109, 115, 119, 9, 10, 40, + 41, 48, 57, 32, 59, 9, 10, 40, + 41, 48, 57, 68, 72, 77, 83, 87, + 100, 104, 109, 115, 119, 48, 57, 32, + 59, 9, 10, 40, 41, 48, 57, 1034, 896, 1151, 9, 32, 40, 41, 1034, 1083, 48, 57, 68, 72, 77, 83, 87, 100, 104, 109, 115, 119, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 1034, 896, - 1151, 1034, 896, 1151, 1034, 896, 1151, 32, - 59, 9, 10, 40, 41, 9, 32, 40, - 41, 1034, 1083, 9, 32, 40, 41, 1034, - 1083, -128, 8, 11, 58, 60, 127, 32, - 59, 9, 10, 40, 41, 1034, 896, 1151, - 42, 92, 95, 45, 57, 64, 90, 97, - 122, 9, 32, 40, 41, 1034, 1083, 9, + 1151, 9, 32, 40, 41, 1034, 1083, 48, + 57, 68, 72, 77, 83, 87, 100, 104, + 109, 115, 119, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 1034, 896, 1151, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 68, 72, 77, 83, 87, 100, 104, 109, + 115, 119, 48, 57, 9, 32, 40, 41, + 1034, 1083, 48, 57, 1034, 896, 1151, 1034, + 896, 1151, 1034, 896, 1151, 32, 59, 9, + 10, 40, 41, 9, 32, 40, 41, 1034, + 1083, 9, 32, 40, 41, 1034, 1083, -128, + 8, 11, 58, 60, 127, 32, 59, 9, + 10, 40, 41, 1034, 896, 1151, 42, 92, + 95, 45, 57, 64, 90, 97, 122, 9, + 32, 40, 41, 1034, 1083, 9, 32, 40, + 41, 42, 92, 95, 1034, 1083, 45, 57, + 64, 90, 97, 122, 32, 59, 9, 10, + 40, 41, 1034, 896, 1151, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 42, 92, 95, 1034, 1083, 45, 57, 64, 90, 97, 122, 32, 59, - 9, 10, 40, 41, 1034, 896, 1151, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 42, 92, 95, - 1034, 1083, 45, 57, 64, 90, 97, 122, - 32, 59, 9, 10, 40, 41, 1034, 896, - 1151, 32, 59, 9, 10, 40, 41, 9, + 9, 10, 40, 41, 1034, 896, 1151, 32, + 59, 9, 10, 40, 41, 9, 32, 40, + 41, 2058, 2107, 2314, 2363, 2570, 2619, 9, 32, 40, 41, 2058, 2107, 2314, 2363, 2570, - 2619, 9, 32, 40, 41, 2058, 2107, 2314, - 2363, 2570, 2619, -128, 8, 11, 58, 60, - 127, 1034, 896, 1151, 46, 48, 58, 65, - 70, 97, 102, 32, 46, 59, 9, 10, - 40, 41, 48, 58, 65, 70, 97, 102, + 2619, -128, 8, 11, 58, 60, 127, 1034, + 896, 1151, 46, 48, 58, 65, 70, 97, + 102, 32, 46, 59, 9, 10, 40, 41, + 48, 58, 65, 70, 97, 102, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 9, 32, 40, 41, 78, 83, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 78, 83, 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 78, 83, 1034, 1083, 48, 57, 9, 32, - 40, 41, 46, 1034, 1083, 48, 57, 9, - 32, 40, 41, 78, 83, 1034, 1083, 9, - 32, 40, 41, 1034, 1083, 9, 32, 40, - 41, 1034, 1083, 48, 57, 9, 32, 40, + 46, 1034, 1083, 48, 57, 9, 32, 40, + 41, 78, 83, 1034, 1083, 9, 32, 40, + 41, 1034, 1083, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 69, + 87, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 69, 87, 1034, 1083, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, - 32, 40, 41, 69, 87, 1034, 1083, 48, - 57, 9, 32, 40, 41, 46, 1034, 1083, - 48, 57, 9, 32, 40, 41, 69, 87, - 1034, 1083, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 45, 1034, 1083, 48, - 57, 48, 57, 9, 32, 40, 41, 46, + 32, 40, 41, 46, 1034, 1083, 48, 57, + 9, 32, 40, 41, 69, 87, 1034, 1083, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 45, 1034, 1083, 48, 57, 48, + 57, 9, 32, 40, 41, 46, 109, 2058, + 2107, 2314, 2363, 2570, 2619, 48, 57, 9, + 32, 40, 41, 2058, 2107, 2314, 2363, 2570, + 2619, 48, 57, 9, 32, 40, 41, 46, 109, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, 9, 32, 40, 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, 9, 32, 40, @@ -2172,418 +2182,414 @@ static const short _zone_scanner_trans_keys[] = { 2107, 2314, 2363, 2570, 2619, 48, 57, 9, 32, 40, 41, 46, 109, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, 9, 32, 40, - 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, - 57, 9, 32, 40, 41, 46, 109, 2058, + 41, 2058, 2107, 2314, 2363, 2570, 2619, 1034, + 896, 1151, 9, 32, 40, 41, 109, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, 9, - 32, 40, 41, 2058, 2107, 2314, 2363, 2570, - 2619, 1034, 896, 1151, 9, 32, 40, 41, - 109, 2058, 2107, 2314, 2363, 2570, 2619, 48, - 57, 9, 32, 40, 41, 109, 2058, 2107, - 2314, 2363, 2570, 2619, 48, 57, 1034, 896, - 1151, 9, 32, 40, 41, 109, 2058, 2107, - 2314, 2363, 2570, 2619, 48, 57, 9, 32, - 40, 41, 109, 2058, 2107, 2314, 2363, 2570, - 2619, 48, 57, 9, 32, 40, 41, 2058, - 2107, 2314, 2363, 2570, 2619, 1034, 896, 1151, - 9, 32, 40, 41, 109, 2058, 2107, 2314, - 2363, 2570, 2619, 48, 57, 9, 32, 40, - 41, 109, 2058, 2107, 2314, 2363, 2570, 2619, - 48, 57, 9, 32, 40, 41, 2058, 2107, - 2314, 2363, 2570, 2619, 1034, 896, 1151, 9, + 32, 40, 41, 109, 2058, 2107, 2314, 2363, + 2570, 2619, 48, 57, 1034, 896, 1151, 9, 32, 40, 41, 109, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, 9, 32, 40, 41, 109, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, 9, 32, 40, 41, 2058, 2107, 2314, 2363, 2570, 2619, 1034, 896, 1151, 9, 32, + 40, 41, 109, 2058, 2107, 2314, 2363, 2570, + 2619, 48, 57, 9, 32, 40, 41, 109, + 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, + 9, 32, 40, 41, 2058, 2107, 2314, 2363, + 2570, 2619, 1034, 896, 1151, 9, 32, 40, + 41, 109, 2058, 2107, 2314, 2363, 2570, 2619, + 48, 57, 9, 32, 40, 41, 109, 2058, + 2107, 2314, 2363, 2570, 2619, 48, 57, 9, + 32, 40, 41, 2058, 2107, 2314, 2363, 2570, + 2619, 1034, 896, 1151, 9, 32, 40, 41, + 1034, 1083, 1034, 896, 1151, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 1034, 896, 1151, + 1034, 896, 1151, 1034, 896, 1151, 9, 32, 40, 41, 1034, 1083, 1034, 896, 1151, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 1034, - 896, 1151, 1034, 896, 1151, 1034, 896, 1151, - 9, 32, 40, 41, 1034, 1083, 1034, 896, - 1151, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 1034, 896, 1151, 1034, 896, 1151, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 42, 92, 95, - 1034, 1083, 45, 57, 64, 90, 97, 122, - 32, 59, 9, 10, 40, 41, 1034, 896, - 1151, 1034, 896, 1151, 1034, 896, 1151, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 9, 32, 40, 41, 1034, 1083, -128, + 896, 1151, 1034, 896, 1151, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 42, 92, 95, 1034, 1083, + 45, 57, 64, 90, 97, 122, 32, 59, + 9, 10, 40, 41, 1034, 896, 1151, 1034, + 896, 1151, 1034, 896, 1151, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 1034, 1083, -128, 8, 11, + 58, 60, 127, 9, 32, 40, 41, 1034, + 1083, 9, 32, 40, 41, 1034, 1083, -128, 8, 11, 58, 60, 127, 9, 32, 40, 41, 1034, 1083, 9, 32, 40, 41, 1034, 1083, -128, 8, 11, 58, 60, 127, 9, 32, 40, 41, 1034, 1083, 9, 32, 40, - 41, 1034, 1083, -128, 8, 11, 58, 60, - 127, 9, 32, 40, 41, 1034, 1083, 9, - 32, 40, 41, 42, 92, 95, 1034, 1083, - 45, 57, 64, 90, 97, 122, 32, 59, - 9, 10, 40, 41, 1034, 896, 1151, 1034, - 896, 1151, 1034, 896, 1151, 1034, 896, 1151, - 1034, 896, 1151, 48, 57, 65, 90, 97, + 41, 42, 92, 95, 1034, 1083, 45, 57, + 64, 90, 97, 122, 32, 59, 9, 10, + 40, 41, 1034, 896, 1151, 1034, 896, 1151, + 1034, 896, 1151, 1034, 896, 1151, 1034, 896, + 1151, 48, 57, 65, 90, 97, 122, 9, + 32, 40, 41, 1034, 1083, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 65, 90, 97, 122, 9, 32, 40, 41, 1034, 1083, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, + 32, 40, 41, 43, 1034, 1083, 47, 57, + 65, 90, 97, 122, 1546, 1595, 1034, 896, + 1151, 1034, 896, 1151, 1034, 896, 1151, 9, + 32, 33, 40, 41, 49, 50, 2058, 2107, + 2314, 2363, 2570, 2619, 49, 50, 58, 46, + 48, 57, 47, 46, 57, 48, 57, 9, + 32, 40, 41, 2058, 2107, 2314, 2363, 2570, + 2619, 48, 57, 1034, 896, 1151, 58, 46, + 48, 58, 65, 70, 97, 102, 47, 46, + 58, 65, 70, 97, 102, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 65, 90, 97, 122, 9, 32, 40, 41, 1034, - 1083, 9, 32, 40, 41, 43, 1034, 1083, - 47, 57, 65, 90, 97, 122, 1546, 1595, - 1034, 896, 1151, 1034, 896, 1151, 1034, 896, - 1151, 9, 32, 33, 40, 41, 49, 50, - 2058, 2107, 2314, 2363, 2570, 2619, 49, 50, - 58, 46, 48, 57, 47, 46, 57, 48, - 57, 9, 32, 40, 41, 2058, 2107, 2314, - 2363, 2570, 2619, 48, 57, 1034, 896, 1151, - 58, 46, 48, 58, 65, 70, 97, 102, - 47, 46, 58, 65, 70, 97, 102, 48, + 1083, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 65, 90, 97, 122, 9, 32, 40, - 41, 1034, 1083, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 65, 70, 97, 102, 48, - 57, 65, 70, 97, 102, 9, 32, 40, - 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, - 57, 65, 70, 97, 102, 1034, 896, 1151, - 1034, 896, 1151, 1034, 896, 1151, 1034, 896, - 1151, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 65, 70, 97, 102, 48, - 57, 65, 70, 97, 102, 9, 32, 40, - 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, - 57, 65, 70, 97, 102, 1034, 896, 1151, - 1034, 896, 1151, 1034, 896, 1151, 48, 57, - 9, 32, 40, 41, 1034, 1083, 48, 57, - 9, 32, 40, 41, 48, 49, 50, 51, - 1034, 1083, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 1034, 1083, 48, 57, - 9, 32, 40, 41, 1034, 1083, 48, 57, - 9, 32, 40, 41, 46, 1034, 1083, 6153, - 6176, 6184, 6185, 6409, 6432, 6440, 6441, 6665, - 6688, 6696, 6697, 9482, 9531, 9738, 9787, 10250, - 10299, 10506, 10555, 10762, 10811, 11274, 11323, 11530, - 11579, 11786, 11835, 12298, 12347, 12554, 12603, 12810, - 12859, 3081, 3104, 3112, 3113, 3115, 4106, 4155, - 3119, 3129, 3137, 3162, 3169, 3194, 1546, 1595, - 4106, 3968, 4223, 4617, 4640, 4648, 4649, 13578, - 13627, 13834, 13883, 14346, 14395, 14602, 14651, 14858, - 14907, 5642, 5504, 5759, 3115, 6153, 6176, 6184, + 57, 65, 70, 97, 102, 48, 57, 65, + 70, 97, 102, 9, 32, 40, 41, 2058, + 2107, 2314, 2363, 2570, 2619, 48, 57, 65, + 70, 97, 102, 1034, 896, 1151, 1034, 896, + 1151, 1034, 896, 1151, 1034, 896, 1151, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 65, 70, 97, 102, 48, 57, 65, + 70, 97, 102, 9, 32, 40, 41, 2058, + 2107, 2314, 2363, 2570, 2619, 48, 57, 65, + 70, 97, 102, 1034, 896, 1151, 1034, 896, + 1151, 1034, 896, 1151, 48, 57, 9, 32, + 40, 41, 1034, 1083, 48, 57, 9, 32, + 40, 41, 48, 49, 50, 51, 1034, 1083, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 1034, 1083, 48, 57, 9, 32, + 40, 41, 1034, 1083, 48, 57, 9, 32, + 40, 41, 46, 1034, 1083, 6153, 6176, 6184, 6185, 6409, 6432, 6440, 6441, 6665, 6688, 6696, 6697, 9482, 9531, 9738, 9787, 10250, 10299, 10506, 10555, 10762, 10811, 11274, 11323, 11530, 11579, 11786, - 11835, 12298, 12347, 12554, 12603, 12810, 12859, 3119, - 3129, 3137, 3162, 3169, 3194, 7690, 8202, 8714, - 7552, 7807, 8064, 8319, 8576, 8831, 1034, 896, + 11835, 12298, 12347, 12554, 12603, 12810, 12859, 3081, + 3104, 3112, 3113, 3115, 4106, 4155, 3119, 3129, + 3137, 3162, 3169, 3194, 1546, 1595, 4106, 3968, + 4223, 4617, 4640, 4648, 4649, 13578, 13627, 13834, + 13883, 14346, 14395, 14602, 14651, 14858, 14907, 5642, + 5504, 5759, 3115, 6153, 6176, 6184, 6185, 6409, + 6432, 6440, 6441, 6665, 6688, 6696, 6697, 9482, + 9531, 9738, 9787, 10250, 10299, 10506, 10555, 10762, + 10811, 11274, 11323, 11530, 11579, 11786, 11835, 12298, + 12347, 12554, 12603, 12810, 12859, 3119, 3129, 3137, + 3162, 3169, 3194, 7690, 8202, 8714, 7552, 7807, + 8064, 8319, 8576, 8831, 1034, 896, 1151, 1034, + 896, 1151, 9, 32, 40, 41, 1034, 1083, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 9, 32, 40, 41, 46, 1034, 1083, 48, + 57, 46, 6153, 6176, 6184, 6185, 6409, 6432, + 6440, 6441, 6665, 6688, 6696, 6697, 9482, 9531, + 9738, 9787, 10250, 10299, 10506, 10555, 10762, 10811, + 11274, 11323, 11530, 11579, 11786, 11835, 12298, 12347, + 12554, 12603, 12810, 12859, 48, 57, 1034, 896, 1151, 1034, 896, 1151, 9, 32, 40, 41, 1034, 1083, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 46, 1034, - 1083, 48, 57, 46, 6153, 6176, 6184, 6185, - 6409, 6432, 6440, 6441, 6665, 6688, 6696, 6697, - 9482, 9531, 9738, 9787, 10250, 10299, 10506, 10555, - 10762, 10811, 11274, 11323, 11530, 11579, 11786, 11835, - 12298, 12347, 12554, 12603, 12810, 12859, 48, 57, + 1083, 48, 58, 65, 70, 97, 102, 46, + 6153, 6176, 6184, 6185, 6409, 6432, 6440, 6441, + 6665, 6688, 6696, 6697, 9482, 9531, 9738, 9787, + 10250, 10299, 10506, 10555, 10762, 10811, 11274, 11323, + 11530, 11579, 11786, 11835, 12298, 12347, 12554, 12603, + 12810, 12859, 48, 58, 65, 70, 97, 102, 1034, 896, 1151, 1034, 896, 1151, 9, 32, 40, 41, 1034, 1083, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, - 46, 1034, 1083, 48, 58, 65, 70, 97, - 102, 46, 6153, 6176, 6184, 6185, 6409, 6432, - 6440, 6441, 6665, 6688, 6696, 6697, 9482, 9531, - 9738, 9787, 10250, 10299, 10506, 10555, 10762, 10811, - 11274, 11323, 11530, 11579, 11786, 11835, 12298, 12347, - 12554, 12603, 12810, 12859, 48, 58, 65, 70, - 97, 102, 1034, 896, 1151, 1034, 896, 1151, - 9, 32, 40, 41, 1034, 1083, 9, 32, - 40, 41, 1034, 1083, 48, 57, 9, 32, - 40, 41, 1034, 1083, 48, 57, 9, 32, - 40, 41, 42, 92, 95, 1034, 1083, 45, - 57, 64, 90, 97, 122, 6153, 6176, 6184, - 6185, 6409, 6432, 6440, 6441, 6665, 6688, 6696, - 6697, 9482, 9531, 9738, 9787, 10250, 10299, 10506, - 10555, 10762, 10811, 11274, 11323, 11530, 11579, 11786, - 11835, 12298, 12347, 12554, 12603, 12810, 12859, 1034, - 896, 1151, 1034, 896, 1151, 1034, 896, 1151, - 65, 67, 68, 69, 72, 73, 75, 76, - 77, 78, 80, 82, 83, 84, 85, 97, - 99, 100, 101, 104, 105, 107, 108, 109, - 110, 112, 114, 115, 116, 117, 9, 32, - 40, 41, 65, 70, 80, 97, 102, 112, - 1034, 1083, 9, 32, 40, 41, 1034, 1083, - 48, 57, 65, 90, 97, 122, 9, 32, - 40, 41, 1034, 1083, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, - 1034, 1083, 48, 57, 9, 32, 40, 41, 42, 92, 95, 1034, 1083, 45, 57, 64, - 90, 97, 122, 9, 32, 40, 41, 1034, - 1083, 9, 32, 40, 41, 43, 1034, 1083, - 47, 57, 65, 90, 97, 122, 1546, 1595, - 1034, 896, 1151, 1034, 896, 1151, 1034, 896, - 1151, 1034, 896, 1151, 1034, 896, 1151, 1034, - 896, 1151, 1034, 896, 1151, 1034, 896, 1151, - 65, 97, 65, 97, 9, 32, 40, 41, - 1034, 1083, 83, 115, 68, 100, 66, 98, - 9, 32, 40, 41, 1034, 1083, 76, 108, - 9, 32, 40, 41, 1034, 1083, 65, 68, - 69, 78, 97, 100, 101, 110, 65, 97, - 9, 32, 40, 41, 1034, 1083, 78, 83, - 110, 115, 83, 115, 75, 107, 69, 101, - 89, 121, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 1034, 1083, 82, 114, - 84, 116, 9, 32, 40, 41, 1034, 1083, - 65, 97, 77, 109, 69, 101, 9, 32, - 40, 41, 1034, 1083, 72, 78, 83, 104, - 110, 115, 67, 99, 73, 105, 68, 100, - 9, 32, 40, 41, 1034, 1083, 65, 83, - 97, 115, 77, 109, 69, 101, 9, 32, - 40, 41, 1034, 1083, 75, 107, 69, 101, - 89, 121, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 1034, 1083, 85, 117, - 73, 105, 52, 54, 56, 9, 32, 40, - 41, 1034, 1083, 52, 9, 32, 40, 41, - 1034, 1083, 73, 105, 78, 110, 70, 102, - 79, 111, 9, 32, 40, 41, 1034, 1083, - 80, 112, 83, 115, 69, 101, 67, 99, - 75, 107, 69, 101, 89, 121, 9, 32, - 40, 41, 1034, 1083, 69, 88, 101, 120, - 89, 121, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 1034, 1083, 51, 54, - 79, 80, 111, 112, 50, 9, 32, 40, - 41, 1034, 1083, 52, 9, 32, 40, 41, - 1034, 1083, 67, 99, 9, 32, 40, 41, + 90, 97, 122, 6153, 6176, 6184, 6185, 6409, + 6432, 6440, 6441, 6665, 6688, 6696, 6697, 9482, + 9531, 9738, 9787, 10250, 10299, 10506, 10555, 10762, + 10811, 11274, 11323, 11530, 11579, 11786, 11835, 12298, + 12347, 12554, 12603, 12810, 12859, 1034, 896, 1151, + 1034, 896, 1151, 1034, 896, 1151, 65, 67, + 68, 69, 72, 73, 75, 76, 77, 78, + 80, 82, 83, 84, 85, 97, 99, 100, + 101, 104, 105, 107, 108, 109, 110, 112, + 114, 115, 116, 117, 9, 32, 40, 41, + 65, 70, 80, 97, 102, 112, 1034, 1083, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 65, 90, 97, 122, 9, 32, 40, 41, 1034, 1083, 9, 32, 40, 41, 1034, 1083, - 73, 88, 105, 120, 78, 110, 70, 102, - 79, 111, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 1034, 1083, 65, 73, - 83, 97, 105, 115, 80, 112, 84, 116, - 82, 114, 9, 32, 40, 41, 1034, 1083, - 68, 100, 9, 32, 40, 41, 1034, 1083, - 9, 32, 40, 41, 69, 101, 1034, 1083, - 67, 99, 9, 32, 40, 41, 51, 1034, - 1083, 9, 32, 40, 41, 80, 112, 1034, - 1083, 65, 97, 82, 114, 65, 97, 77, - 109, 9, 32, 40, 41, 1034, 1083, 84, - 116, 82, 114, 9, 32, 40, 41, 1034, - 1083, 80, 82, 84, 112, 114, 116, 9, - 32, 40, 41, 1034, 1083, 83, 115, 73, - 105, 71, 103, 9, 32, 40, 41, 1034, - 1083, 9, 32, 40, 41, 1034, 1083, 79, - 80, 82, 83, 111, 112, 114, 115, 65, - 97, 9, 32, 40, 41, 1034, 1083, 70, - 102, 9, 32, 40, 41, 1034, 1083, 86, - 118, 9, 32, 40, 41, 1034, 1083, 72, - 104, 70, 102, 80, 112, 9, 32, 40, - 41, 1034, 1083, 76, 88, 89, 108, 120, - 121, 83, 115, 65, 97, 9, 32, 40, - 41, 1034, 1083, 84, 116, 9, 32, 40, - 41, 1034, 1083, 80, 112, 69, 101, 48, - 57, 9, 32, 40, 41, 1034, 1083, 48, - 57, 82, 114, 73, 105, 9, 32, 40, - 41, 1034, 1083, 42, 92, 95, 45, 57, - 64, 90, 97, 122, 32, 59, 9, 10, - 40, 41, 32, 59, 9, 10, 40, 41, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, - 48, 57, 65, 90, 97, 122, 9, 32, - 40, 41, 1034, 1083, 9, 32, 40, 41, - 43, 1034, 1083, 47, 57, 65, 90, 97, - 122, 1546, 1595, 1034, 896, 1151, 1034, 896, - 1151, 1034, 896, 1151, 43, 47, 57, 65, - 90, 97, 122, 1546, 1595, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, - 32, 40, 41, 45, 1034, 1083, 48, 57, - 65, 70, 97, 102, 9, 32, 40, 41, - 1034, 1083, 9, 32, 40, 41, 1034, 1083, - 48, 57, 65, 86, 97, 118, 48, 57, - 65, 86, 97, 118, 61, 48, 57, 65, - 86, 97, 118, 48, 57, 65, 86, 97, - 118, 61, 48, 57, 65, 86, 97, 118, - 61, 48, 57, 65, 86, 97, 118, 48, - 57, 65, 86, 97, 118, 61, 48, 57, - 65, 86, 97, 118, 32, 59, 9, 10, - 40, 41, 48, 57, 65, 86, 97, 118, - 32, 59, 9, 10, 40, 41, 61, 61, - 61, 61, 61, 1034, 896, 1151, 48, 57, - 65, 70, 97, 102, 9, 32, 40, 41, - 1034, 1083, 48, 57, 65, 70, 97, 102, - 1034, 896, 1151, 1034, 896, 1151, 1034, 896, - 1151, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 45, - 1034, 1083, 48, 57, 65, 70, 97, 102, - 32, 59, 9, 10, 40, 41, 48, 57, - 65, 70, 97, 102, 32, 59, 9, 10, - 40, 41, 48, 57, 65, 70, 97, 102, - 1034, 896, 1151, 1034, 896, 1151, 1034, 896, - 1151, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 65, 70, 97, 102, 48, - 57, 65, 70, 97, 102, 9, 32, 40, - 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, - 57, 65, 70, 97, 102, 1034, 896, 1151, - 1034, 896, 1151, 1034, 896, 1151, 1034, 896, - 1151, 48, 57, 9, 32, 40, 41, 1034, - 1083, 48, 57, 9, 32, 40, 41, 46, - 1034, 1083, 48, 57, 32, 46, 59, 9, - 10, 40, 41, 48, 57, 1034, 896, 1151, 48, 57, 9, 32, 40, 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, - 48, 57, 65, 70, 97, 102, 48, 57, - 65, 70, 97, 102, 48, 57, 65, 70, - 97, 102, 48, 57, 65, 70, 97, 102, - 58, 48, 57, 65, 70, 97, 102, 48, - 57, 65, 70, 97, 102, 48, 57, 65, - 70, 97, 102, 48, 57, 65, 70, 97, - 102, 32, 58, 59, 9, 10, 40, 41, - 1034, 896, 1151, 48, 57, 65, 70, 97, - 102, 48, 57, 65, 70, 97, 102, 45, - 48, 57, 65, 70, 97, 102, 48, 57, - 65, 70, 97, 102, 32, 45, 59, 9, - 10, 40, 41, 48, 57, 65, 70, 97, - 102, 48, 57, 65, 70, 97, 102, 45, - 48, 57, 65, 70, 97, 102, 48, 57, - 65, 70, 97, 102, 32, 45, 59, 9, - 10, 40, 41, 48, 57, 9, 32, 40, - 41, 1034, 1083, 48, 57, 9, 32, 40, - 41, 1034, 1083, 48, 57, 9, 32, 40, - 41, 1034, 1083, 48, 57, 9, 32, 40, + 48, 57, 9, 32, 40, 41, 1034, 1083, + 48, 57, 9, 32, 40, 41, 1034, 1083, + 48, 57, 9, 32, 40, 41, 1034, 1083, + 48, 57, 9, 32, 40, 41, 42, 92, + 95, 1034, 1083, 45, 57, 64, 90, 97, + 122, 9, 32, 40, 41, 1034, 1083, 9, + 32, 40, 41, 43, 1034, 1083, 47, 57, + 65, 90, 97, 122, 1546, 1595, 1034, 896, + 1151, 1034, 896, 1151, 1034, 896, 1151, 1034, + 896, 1151, 1034, 896, 1151, 1034, 896, 1151, + 1034, 896, 1151, 1034, 896, 1151, 65, 97, + 65, 97, 9, 32, 40, 41, 1034, 1083, + 83, 115, 68, 100, 66, 98, 9, 32, + 40, 41, 1034, 1083, 76, 108, 9, 32, + 40, 41, 1034, 1083, 65, 68, 69, 78, + 97, 100, 101, 110, 65, 97, 9, 32, + 40, 41, 1034, 1083, 78, 83, 110, 115, + 83, 115, 75, 107, 69, 101, 89, 121, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 1034, 1083, 82, 114, 84, 116, + 9, 32, 40, 41, 1034, 1083, 65, 97, + 77, 109, 69, 101, 9, 32, 40, 41, + 1034, 1083, 72, 78, 83, 104, 110, 115, + 67, 99, 73, 105, 68, 100, 9, 32, + 40, 41, 1034, 1083, 65, 83, 97, 115, + 77, 109, 69, 101, 9, 32, 40, 41, + 1034, 1083, 75, 107, 69, 101, 89, 121, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 1034, 1083, 85, 117, 73, 105, + 52, 54, 56, 9, 32, 40, 41, 1034, + 1083, 52, 9, 32, 40, 41, 1034, 1083, + 73, 105, 78, 110, 70, 102, 79, 111, + 9, 32, 40, 41, 1034, 1083, 80, 112, + 83, 115, 69, 101, 67, 99, 75, 107, + 69, 101, 89, 121, 9, 32, 40, 41, + 1034, 1083, 69, 88, 101, 120, 89, 121, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 1034, 1083, 51, 54, 79, 80, + 111, 112, 50, 9, 32, 40, 41, 1034, + 1083, 52, 9, 32, 40, 41, 1034, 1083, + 67, 99, 9, 32, 40, 41, 1034, 1083, + 9, 32, 40, 41, 1034, 1083, 73, 88, + 105, 120, 78, 110, 70, 102, 79, 111, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 1034, 1083, 65, 73, 83, 97, + 105, 115, 80, 112, 84, 116, 82, 114, + 9, 32, 40, 41, 1034, 1083, 68, 100, + 9, 32, 40, 41, 1034, 1083, 9, 32, + 40, 41, 69, 101, 1034, 1083, 67, 99, + 9, 32, 40, 41, 51, 1034, 1083, 9, + 32, 40, 41, 80, 112, 1034, 1083, 65, + 97, 82, 114, 65, 97, 77, 109, 9, + 32, 40, 41, 1034, 1083, 84, 116, 82, + 114, 9, 32, 40, 41, 1034, 1083, 80, + 82, 84, 112, 114, 116, 9, 32, 40, + 41, 1034, 1083, 83, 115, 73, 105, 71, + 103, 9, 32, 40, 41, 1034, 1083, 9, + 32, 40, 41, 1034, 1083, 79, 80, 82, + 83, 111, 112, 114, 115, 65, 97, 9, + 32, 40, 41, 1034, 1083, 70, 102, 9, + 32, 40, 41, 1034, 1083, 86, 118, 9, + 32, 40, 41, 1034, 1083, 72, 104, 70, + 102, 80, 112, 9, 32, 40, 41, 1034, + 1083, 76, 88, 89, 108, 120, 121, 83, + 115, 65, 97, 9, 32, 40, 41, 1034, + 1083, 84, 116, 9, 32, 40, 41, 1034, + 1083, 80, 112, 69, 101, 48, 57, 9, + 32, 40, 41, 1034, 1083, 48, 57, 82, + 114, 73, 105, 9, 32, 40, 41, 1034, + 1083, 42, 92, 95, 45, 57, 64, 90, + 97, 122, 32, 59, 9, 10, 40, 41, + 32, 59, 9, 10, 40, 41, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 65, 90, 97, 122, 9, 32, 40, 41, + 1034, 1083, 9, 32, 40, 41, 43, 1034, + 1083, 47, 57, 65, 90, 97, 122, 1546, + 1595, 1034, 896, 1151, 1034, 896, 1151, 1034, + 896, 1151, 43, 47, 57, 65, 90, 97, + 122, 1546, 1595, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, + 41, 45, 1034, 1083, 48, 57, 65, 70, + 97, 102, 9, 32, 40, 41, 1034, 1083, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 65, 86, 97, 118, 48, 57, 65, 86, + 97, 118, 61, 48, 57, 65, 86, 97, + 118, 48, 57, 65, 86, 97, 118, 61, + 48, 57, 65, 86, 97, 118, 61, 48, + 57, 65, 86, 97, 118, 48, 57, 65, + 86, 97, 118, 61, 48, 57, 65, 86, + 97, 118, 32, 59, 9, 10, 40, 41, + 48, 57, 65, 86, 97, 118, 32, 59, + 9, 10, 40, 41, 61, 61, 61, 61, + 61, 1034, 896, 1151, 48, 57, 65, 70, + 97, 102, 9, 32, 40, 41, 1034, 1083, + 48, 57, 65, 70, 97, 102, 1034, 896, + 1151, 1034, 896, 1151, 1034, 896, 1151, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 45, 1034, 1083, + 48, 57, 65, 70, 97, 102, 32, 59, + 9, 10, 40, 41, 48, 57, 65, 70, + 97, 102, 32, 59, 9, 10, 40, 41, + 48, 57, 65, 70, 97, 102, 1034, 896, + 1151, 1034, 896, 1151, 1034, 896, 1151, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 65, 70, 97, 102, 48, 57, 65, + 70, 97, 102, 9, 32, 40, 41, 2058, + 2107, 2314, 2363, 2570, 2619, 48, 57, 65, + 70, 97, 102, 1034, 896, 1151, 1034, 896, + 1151, 1034, 896, 1151, 1034, 896, 1151, 48, + 57, 9, 32, 40, 41, 1034, 1083, 48, + 57, 9, 32, 40, 41, 46, 1034, 1083, + 48, 57, 32, 46, 59, 9, 10, 40, + 41, 48, 57, 1034, 896, 1151, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 9, 32, 40, 41, 1034, 1083, 48, 57, + 65, 70, 97, 102, 48, 57, 65, 70, + 97, 102, 48, 57, 65, 70, 97, 102, + 48, 57, 65, 70, 97, 102, 58, 48, + 57, 65, 70, 97, 102, 48, 57, 65, + 70, 97, 102, 48, 57, 65, 70, 97, + 102, 48, 57, 65, 70, 97, 102, 32, + 58, 59, 9, 10, 40, 41, 1034, 896, + 1151, 48, 57, 65, 70, 97, 102, 48, + 57, 65, 70, 97, 102, 45, 48, 57, + 65, 70, 97, 102, 48, 57, 65, 70, + 97, 102, 32, 45, 59, 9, 10, 40, + 41, 48, 57, 65, 70, 97, 102, 48, + 57, 65, 70, 97, 102, 45, 48, 57, + 65, 70, 97, 102, 48, 57, 65, 70, + 97, 102, 32, 45, 59, 9, 10, 40, + 41, 48, 57, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 1034, + 1083, 48, 57, 9, 32, 40, 41, 1034, + 1083, -128, 8, 11, 58, 60, 127, 32, + 59, 9, 10, 40, 41, 1034, 896, 1151, + 1034, 896, 1151, 48, 57, 9, 32, 40, + 41, 1034, 1083, 48, 57, 9, 32, 40, 41, 1034, 1083, -128, 8, 11, 58, 60, - 127, 32, 59, 9, 10, 40, 41, 1034, - 896, 1151, 1034, 896, 1151, 48, 57, 9, - 32, 40, 41, 1034, 1083, 48, 57, 9, + 127, 9, 32, 40, 41, 1034, 1083, 9, 32, 40, 41, 1034, 1083, -128, 8, 11, - 58, 60, 127, 9, 32, 40, 41, 1034, - 1083, 9, 32, 40, 41, 1034, 1083, -128, - 8, 11, 58, 60, 127, 32, 59, 9, - 10, 40, 41, 1034, 896, 1151, 1034, 896, - 1151, 9, 32, 36, 40, 41, 42, 92, - 95, 778, 827, 1034, 1083, 45, 57, 64, - 90, 97, 122, 9, 32, 36, 40, 41, - 42, 58, 92, 95, 1802, 1851, 2058, 2107, - 2314, 2363, 2570, 2619, -128, 8, 11, 44, - 45, 57, 60, 63, 64, 90, 91, 96, - 97, 122, 123, 127, 9, 32, 36, 40, - 41, 42, 65, 67, 68, 69, 72, 73, - 75, 76, 77, 78, 80, 82, 83, 84, - 85, 92, 95, 97, 99, 100, 101, 104, - 105, 107, 108, 109, 110, 112, 114, 115, - 116, 117, 778, 827, 1034, 1083, 45, 57, - 64, 90, 98, 122, 9, 32, 36, 40, - 41, 42, 65, 67, 68, 69, 72, 73, - 75, 76, 77, 78, 80, 82, 83, 84, - 85, 92, 95, 97, 99, 100, 101, 104, - 105, 107, 108, 109, 110, 112, 114, 115, - 116, 117, 778, 827, 1034, 1083, 45, 47, - 48, 57, 64, 90, 98, 122, 9, 32, - 36, 40, 41, 42, 92, 95, 778, 827, - 1034, 1083, 45, 57, 64, 90, 97, 122, - 9, 32, 36, 40, 41, 42, 65, 67, - 68, 69, 72, 73, 75, 76, 77, 78, - 80, 82, 83, 84, 85, 92, 95, 97, - 99, 100, 101, 104, 105, 107, 108, 109, - 110, 112, 114, 115, 116, 117, 778, 827, - 1034, 1083, 45, 47, 48, 57, 64, 90, + 58, 60, 127, 32, 59, 9, 10, 40, + 41, 1034, 896, 1151, 1034, 896, 1151, 9, + 32, 36, 40, 41, 42, 92, 95, 778, + 827, 1034, 1083, 45, 57, 64, 90, 97, + 122, 9, 32, 36, 40, 41, 42, 58, + 92, 95, 1802, 1851, 2058, 2107, 2314, 2363, + 2570, 2619, -128, 8, 11, 44, 45, 57, + 60, 63, 64, 90, 91, 96, 97, 122, + 123, 127, 9, 32, 36, 40, 41, 42, + 65, 67, 68, 69, 72, 73, 75, 76, + 77, 78, 80, 82, 83, 84, 85, 92, + 95, 97, 99, 100, 101, 104, 105, 107, + 108, 109, 110, 112, 114, 115, 116, 117, + 778, 827, 1034, 1083, 45, 57, 64, 90, 98, 122, 9, 32, 36, 40, 41, 42, - 92, 95, 778, 827, 1034, 1083, 45, 57, - 64, 90, 97, 122, 9, 32, 36, 40, - 41, 42, 58, 92, 95, 1802, 1851, 2058, - 2107, 2314, 2363, 2570, 2619, -128, 8, 11, - 44, 45, 57, 60, 63, 64, 90, 91, - 96, 97, 122, 123, 127, 9, 32, 36, - 40, 41, 42, 58, 65, 67, 68, 69, + 65, 67, 68, 69, 72, 73, 75, 76, + 77, 78, 80, 82, 83, 84, 85, 92, + 95, 97, 99, 100, 101, 104, 105, 107, + 108, 109, 110, 112, 114, 115, 116, 117, + 778, 827, 1034, 1083, 45, 47, 48, 57, + 64, 90, 98, 122, 9, 32, 36, 40, + 41, 42, 92, 95, 778, 827, 1034, 1083, + 45, 57, 64, 90, 97, 122, 9, 32, + 36, 40, 41, 42, 65, 67, 68, 69, 72, 73, 75, 76, 77, 78, 80, 82, 83, 84, 85, 92, 95, 97, 99, 100, 101, 104, 105, 107, 108, 109, 110, 112, - 114, 115, 116, 117, 1802, 1851, 2058, 2107, - 2314, 2363, 2570, 2619, -128, 8, 11, 44, - 45, 47, 48, 57, 60, 63, 64, 90, - 91, 96, 98, 122, 123, 127, 9, 32, - 36, 40, 41, 42, 58, 65, 67, 68, - 69, 72, 73, 75, 76, 77, 78, 80, - 82, 83, 84, 85, 92, 95, 97, 99, - 100, 101, 104, 105, 107, 108, 109, 110, - 112, 114, 115, 116, 117, 1802, 1851, 2058, - 2107, 2314, 2363, 2570, 2619, -128, 8, 11, - 44, 45, 47, 48, 57, 60, 63, 64, - 90, 91, 96, 98, 122, 123, 127, 32, - 33, 59, 92, 9, 10, 35, 39, 40, - 41, 42, 126, 9, 32, 40, 41, 42, - 46, 92, 95, 1034, 1083, 45, 57, 65, - 90, 97, 122, 9, 32, 40, 41, 43, - 2058, 2107, 2314, 2363, 2570, 2619, 47, 57, - 65, 90, 97, 122, 1034, 896, 1151, 9, - 32, 40, 41, 65, 67, 68, 69, 72, + 114, 115, 116, 117, 778, 827, 1034, 1083, + 45, 47, 48, 57, 64, 90, 98, 122, + 9, 32, 36, 40, 41, 42, 92, 95, + 778, 827, 1034, 1083, 45, 57, 64, 90, + 97, 122, 9, 32, 36, 40, 41, 42, + 58, 92, 95, 1802, 1851, 2058, 2107, 2314, + 2363, 2570, 2619, -128, 8, 11, 44, 45, + 57, 60, 63, 64, 90, 91, 96, 97, + 122, 123, 127, 9, 32, 36, 40, 41, + 42, 58, 65, 67, 68, 69, 72, 73, + 75, 76, 77, 78, 80, 82, 83, 84, + 85, 92, 95, 97, 99, 100, 101, 104, + 105, 107, 108, 109, 110, 112, 114, 115, + 116, 117, 1802, 1851, 2058, 2107, 2314, 2363, + 2570, 2619, -128, 8, 11, 44, 45, 47, + 48, 57, 60, 63, 64, 90, 91, 96, + 98, 122, 123, 127, 9, 32, 36, 40, + 41, 42, 58, 65, 67, 68, 69, 72, 73, 75, 76, 77, 78, 80, 82, 83, - 84, 85, 97, 99, 100, 101, 104, 105, - 107, 108, 109, 110, 112, 114, 115, 116, - 117, 2058, 2107, 2314, 2363, 2570, 2619, 1034, - 896, 1151, 9, 32, 40, 41, 2058, 2107, - 2314, 2363, 2570, 2619, 48, 57, 65, 70, - 97, 102, 1034, 896, 1151, 9, 32, 40, - 41, 1034, 1083, 48, 57, 65, 70, 97, - 102, 9, 32, 40, 41, 2058, 2107, 2314, - 2363, 2570, 2619, 48, 57, 65, 70, 97, - 102, 1034, 896, 1151, 1034, 896, 1151, 9, - 32, 40, 41, 2058, 2107, 2314, 2363, 2570, - 2619, -128, 8, 11, 58, 60, 127, 1034, - 896, 1151, 9, 32, 40, 41, 2058, 2107, - 2314, 2363, 2570, 2619, 1034, 896, 1151, 9, + 84, 85, 92, 95, 97, 99, 100, 101, + 104, 105, 107, 108, 109, 110, 112, 114, + 115, 116, 117, 1802, 1851, 2058, 2107, 2314, + 2363, 2570, 2619, -128, 8, 11, 44, 45, + 47, 48, 57, 60, 63, 64, 90, 91, + 96, 98, 122, 123, 127, 32, 33, 59, + 92, 9, 10, 35, 39, 40, 41, 42, + 126, 9, 32, 40, 41, 42, 46, 92, + 95, 1034, 1083, 45, 57, 65, 90, 97, + 122, 9, 32, 40, 41, 43, 2058, 2107, + 2314, 2363, 2570, 2619, 47, 57, 65, 90, + 97, 122, 1034, 896, 1151, 9, 32, 40, + 41, 65, 67, 68, 69, 72, 73, 75, + 76, 77, 78, 80, 82, 83, 84, 85, + 97, 99, 100, 101, 104, 105, 107, 108, + 109, 110, 112, 114, 115, 116, 117, 2058, + 2107, 2314, 2363, 2570, 2619, 1034, 896, 1151, + 9, 32, 40, 41, 2058, 2107, 2314, 2363, + 2570, 2619, 48, 57, 65, 70, 97, 102, + 1034, 896, 1151, 9, 32, 40, 41, 1034, + 1083, 48, 57, 65, 70, 97, 102, 9, 32, 40, 41, 2058, 2107, 2314, 2363, 2570, - 2619, 48, 57, 1034, 896, 1151, 9, 32, - 40, 41, 2058, 2107, 2314, 2363, 2570, 2619, - 48, 57, 1034, 896, 1151, 9, 32, 40, + 2619, 48, 57, 65, 70, 97, 102, 1034, + 896, 1151, 1034, 896, 1151, 9, 32, 40, + 41, 2058, 2107, 2314, 2363, 2570, 2619, -128, + 8, 11, 58, 60, 127, 1034, 896, 1151, + 9, 32, 40, 41, 2058, 2107, 2314, 2363, + 2570, 2619, 1034, 896, 1151, 9, 32, 40, 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, - 57, 1034, 896, 1151, 9, 32, 33, 40, - 41, 49, 50, 2058, 2107, 2314, 2363, 2570, - 2619, 1034, 896, 1151, 9, 32, 40, 41, + 57, 1034, 896, 1151, 9, 32, 40, 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, - 65, 70, 97, 102, 1034, 896, 1151, 9, - 32, 40, 41, 2058, 2107, 2314, 2363, 2570, - 2619, 48, 57, 65, 70, 97, 102, 1034, - 896, 1151, 4617, 4640, 4648, 4649, 13578, 13627, - 13834, 13883, 14346, 14395, 14602, 14651, 14858, 14907, - 5642, 5504, 5759, 3081, 3104, 3112, 3113, 3115, - 4106, 4155, 3119, 3129, 3137, 3162, 3169, 3194, - 4106, 3968, 4223, 3115, 6153, 6176, 6184, 6185, - 6409, 6432, 6440, 6441, 6665, 6688, 6696, 6697, - 9482, 9531, 9738, 9787, 10250, 10299, 10506, 10555, - 10762, 10811, 11274, 11323, 11530, 11579, 11786, 11835, - 12298, 12347, 12554, 12603, 12810, 12859, 3119, 3129, - 3137, 3162, 3169, 3194, 7690, 8202, 8714, 7552, - 7807, 8064, 8319, 8576, 8831, 9, 32, 40, + 1034, 896, 1151, 9, 32, 40, 41, 2058, + 2107, 2314, 2363, 2570, 2619, 48, 57, 1034, + 896, 1151, 9, 32, 33, 40, 41, 49, + 50, 2058, 2107, 2314, 2363, 2570, 2619, 1034, + 896, 1151, 9, 32, 40, 41, 2058, 2107, + 2314, 2363, 2570, 2619, 48, 57, 65, 70, + 97, 102, 1034, 896, 1151, 9, 32, 40, 41, 2058, 2107, 2314, 2363, 2570, 2619, 48, 57, 65, 70, 97, 102, 1034, 896, 1151, - 0 + 4617, 4640, 4648, 4649, 13578, 13627, 13834, 13883, + 14346, 14395, 14602, 14651, 14858, 14907, 5642, 5504, + 5759, 3081, 3104, 3112, 3113, 3115, 4106, 4155, + 3119, 3129, 3137, 3162, 3169, 3194, 4106, 3968, + 4223, 3115, 6153, 6176, 6184, 6185, 6409, 6432, + 6440, 6441, 6665, 6688, 6696, 6697, 9482, 9531, + 9738, 9787, 10250, 10299, 10506, 10555, 10762, 10811, + 11274, 11323, 11530, 11579, 11786, 11835, 12298, 12347, + 12554, 12603, 12810, 12859, 3119, 3129, 3137, 3162, + 3169, 3194, 7690, 8202, 8714, 7552, 7807, 8064, + 8319, 8576, 8831, 9, 32, 40, 41, 2058, + 2107, 2314, 2363, 2570, 2619, 48, 57, 65, + 70, 97, 102, 1034, 896, 1151, 0 }; static const char _zone_scanner_single_lengths[] = { @@ -2649,94 +2655,95 @@ static const char _zone_scanner_single_lengths[] = { 8, 6, 0, 10, 1, 1, 6, 1, 10, 2, 4, 2, 2, 3, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, - 2, 2, 4, 1, 2, 2, 2, 2, + 2, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, + 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 4, 2, 2, - 2, 2, 2, 2, 2, 2, 4, 2, - 1, 2, 2, 2, 3, 3, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 1, - 2, 1, 1, 2, 1, 1, 2, 12, - 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 4, 2, + 2, 2, 2, 2, 2, 2, 2, 4, + 2, 1, 2, 2, 2, 3, 3, 2, + 2, 2, 2, 1, 1, 2, 2, 2, + 1, 2, 1, 1, 2, 1, 1, 2, + 12, 2, 2, 2, 2, 2, 2, 2, + 6, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 4, 2, 2, 2, 2, + 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 3, 3, 2, 3, 6, 9, 6, - 6, 6, 6, 16, 6, 16, 6, 16, - 6, 12, 2, 10, 2, 1, 6, 10, - 6, 1, 6, 10, 6, 1, 6, 10, - 6, 1, 1, 1, 2, 6, 6, 2, - 1, 3, 6, 9, 2, 1, 0, 6, - 9, 2, 1, 2, 10, 10, 1, 1, - 3, 0, 6, 8, 6, 8, 7, 8, - 6, 6, 6, 8, 6, 8, 7, 8, - 6, 7, 0, 12, 10, 12, 10, 12, - 10, 12, 10, 1, 11, 11, 1, 11, - 11, 10, 1, 11, 11, 10, 1, 11, - 11, 10, 1, 6, 1, 6, 6, 1, - 1, 1, 6, 1, 6, 6, 1, 1, - 0, 6, 6, 6, 6, 6, 9, 2, + 2, 1, 3, 3, 2, 3, 6, 9, + 6, 6, 6, 6, 16, 6, 16, 6, + 16, 6, 12, 2, 10, 2, 1, 6, + 10, 6, 1, 6, 10, 6, 1, 6, + 10, 6, 1, 1, 1, 2, 6, 6, + 2, 1, 3, 6, 9, 2, 1, 0, + 6, 9, 2, 1, 2, 10, 10, 1, + 1, 3, 0, 6, 8, 6, 8, 7, + 8, 6, 6, 6, 8, 6, 8, 7, + 8, 6, 7, 0, 12, 10, 12, 10, + 12, 10, 12, 10, 1, 11, 11, 1, + 11, 11, 10, 1, 11, 11, 10, 1, + 11, 11, 10, 1, 6, 1, 6, 6, + 1, 1, 1, 6, 1, 6, 6, 1, + 1, 0, 6, 6, 6, 6, 6, 9, + 2, 1, 1, 1, 0, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 9, 2, + 1, 1, 1, 1, 1, 0, 6, 6, + 6, 6, 6, 7, 2, 1, 1, 1, + 13, 2, 1, 1, 1, 0, 10, 1, 1, 1, 1, 0, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 9, 2, 1, - 1, 1, 1, 1, 0, 6, 6, 6, - 6, 6, 7, 2, 1, 1, 1, 13, - 2, 1, 1, 1, 0, 10, 1, 1, - 1, 1, 0, 6, 6, 6, 6, 6, - 6, 0, 10, 1, 1, 1, 1, 0, - 6, 6, 6, 6, 0, 10, 1, 1, - 1, 0, 6, 10, 6, 6, 6, 7, - 34, 7, 2, 1, 14, 1, 35, 3, + 6, 6, 0, 10, 1, 1, 1, 1, + 0, 6, 6, 6, 6, 0, 10, 1, + 1, 1, 0, 6, 10, 6, 6, 6, + 7, 34, 7, 2, 1, 14, 1, 35, + 3, 1, 1, 6, 6, 6, 7, 35, 1, 1, 6, 6, 6, 7, 35, 1, - 1, 6, 6, 6, 7, 35, 1, 1, - 6, 6, 6, 9, 34, 1, 1, 1, - 30, 12, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 9, 6, - 7, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 6, 2, 2, 2, - 6, 2, 6, 8, 2, 6, 4, 2, - 2, 2, 2, 6, 6, 2, 2, 6, - 2, 2, 2, 6, 6, 2, 2, 2, - 6, 4, 2, 2, 6, 2, 2, 2, - 6, 6, 2, 2, 2, 1, 6, 1, - 6, 2, 2, 2, 2, 6, 2, 2, - 2, 2, 2, 2, 2, 6, 4, 2, - 6, 6, 6, 1, 6, 1, 6, 2, - 6, 6, 4, 2, 2, 2, 6, 6, - 6, 2, 2, 2, 6, 2, 6, 8, - 2, 7, 8, 2, 2, 2, 2, 6, - 2, 2, 6, 6, 6, 2, 2, 2, - 6, 6, 8, 2, 6, 2, 6, 2, + 1, 6, 6, 6, 9, 34, 1, 1, + 1, 30, 12, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 9, + 6, 7, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 6, 2, 2, + 2, 6, 2, 6, 8, 2, 6, 4, + 2, 2, 2, 2, 6, 6, 2, 2, 6, 2, 2, 2, 6, 6, 2, 2, - 6, 2, 6, 2, 2, 0, 6, 2, - 2, 6, 3, 2, 2, 0, 6, 6, - 6, 6, 6, 7, 2, 1, 1, 1, - 1, 2, 0, 6, 6, 6, 6, 6, - 7, 6, 6, 0, 1, 0, 1, 1, - 0, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 0, 6, 1, 1, 1, 0, - 6, 6, 6, 6, 6, 7, 2, 0, - 2, 1, 1, 1, 0, 6, 6, 6, - 6, 6, 6, 0, 10, 1, 1, 1, - 1, 0, 6, 7, 3, 1, 0, 6, - 6, 0, 0, 0, 1, 0, 0, 0, - 0, 3, 1, 0, 0, 1, 0, 0, - 3, 0, 0, 1, 0, 0, 3, 0, - 6, 6, 6, 6, 2, 1, 1, 0, - 6, 6, 6, 6, 2, 1, 1, 12, - 17, 42, 42, 12, 42, 12, 17, 47, - 47, 0, 0, 0, 4, 0, 0, 0, - 10, 0, 11, 1, 0, 40, 1, 0, - 10, 1, 6, 0, 10, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 10, 1, 0, 0, 10, 1, 10, 1, - 10, 1, 10, 1, 0, 0, 0, 0, - 13, 1, 0, 10, 1, 0, 10, 1, - 0, 14, 1, 7, 1, 35, 3, 0, - 0, 0, 0, 0, 0, 0, 10, 1, - 0, 0, 0, 0, 0, 0 + 2, 6, 4, 2, 2, 6, 2, 2, + 2, 6, 6, 2, 2, 2, 1, 6, + 1, 6, 2, 2, 2, 2, 6, 2, + 2, 2, 2, 2, 2, 2, 6, 4, + 2, 6, 6, 6, 1, 6, 1, 6, + 2, 6, 6, 4, 2, 2, 2, 6, + 6, 6, 2, 2, 2, 6, 2, 6, + 8, 2, 7, 8, 2, 2, 2, 2, + 6, 2, 2, 6, 6, 6, 2, 2, + 2, 6, 6, 8, 2, 6, 2, 6, + 2, 6, 2, 2, 2, 6, 6, 2, + 2, 6, 2, 6, 2, 2, 0, 6, + 2, 2, 6, 3, 2, 2, 0, 6, + 6, 6, 6, 6, 7, 2, 1, 1, + 1, 1, 2, 0, 6, 6, 6, 6, + 6, 7, 6, 6, 0, 1, 0, 1, + 1, 0, 1, 2, 2, 1, 1, 1, + 1, 1, 1, 0, 6, 1, 1, 1, + 0, 6, 6, 6, 6, 6, 7, 2, + 0, 2, 1, 1, 1, 0, 6, 6, + 6, 6, 6, 6, 0, 10, 1, 1, + 1, 1, 0, 6, 7, 3, 1, 0, + 6, 6, 0, 0, 0, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 1, 0, + 0, 3, 0, 0, 1, 0, 0, 3, + 0, 6, 6, 6, 6, 2, 1, 1, + 0, 6, 6, 6, 6, 2, 1, 1, + 12, 17, 42, 42, 12, 42, 12, 17, + 47, 47, 0, 0, 0, 4, 0, 0, + 0, 10, 0, 11, 1, 0, 40, 1, + 0, 10, 1, 6, 0, 10, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 1, 0, 0, 10, 1, 10, + 1, 10, 1, 10, 1, 0, 0, 0, + 0, 13, 1, 0, 10, 1, 0, 10, + 1, 0, 14, 1, 7, 1, 35, 3, + 0, 0, 0, 0, 0, 0, 0, 10, + 1, 0, 0, 0, 0, 0, 0 }; static const char _zone_scanner_range_lengths[] = { @@ -2806,49 +2813,50 @@ static const char _zone_scanner_range_lengths[] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 2, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 2, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 2, 0, 0, + 0, 2, 0, 0, 2, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 2, 0, 0, 2, 1, - 3, 0, 0, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 2, 0, 0, - 2, 0, 0, 2, 0, 0, 0, 2, - 0, 0, 2, 0, 0, 2, 0, 0, - 2, 0, 0, 0, 2, 0, 0, 2, - 1, 3, 3, 2, 3, 0, 3, 0, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 3, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 3, 2, - 1, 3, 0, 3, 2, 1, 1, 1, - 3, 2, 1, 2, 0, 3, 1, 3, - 5, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 1, 1, 1, 1, 0, + 0, 2, 0, 0, 2, 0, 0, 2, + 1, 3, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 2, 0, + 0, 2, 0, 0, 2, 0, 0, 0, + 2, 0, 0, 2, 0, 0, 2, 0, + 0, 2, 0, 0, 0, 2, 0, 0, + 2, 1, 3, 3, 2, 3, 0, 3, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, - 1, 0, 1, 1, 1, 0, 1, 1, - 1, 0, 1, 0, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 2, + 1, 1, 3, 3, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 3, + 2, 1, 3, 0, 3, 2, 1, 1, + 1, 3, 2, 1, 2, 0, 3, 1, + 3, 5, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 1, 0, 1, + 1, 1, 0, 1, 0, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 0, 3, 0, 3, 0, 3, 2, 1, - 1, 1, 1, 1, 3, 0, 1, 1, - 3, 0, 3, 0, 1, 1, 1, 0, - 0, 0, 1, 1, 1, 1, 1, 0, - 3, 3, 1, 1, 3, 0, 1, 1, - 3, 3, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 3, 3, 1, 1, - 1, 1, 1, 0, 0, 1, 1, 0, - 0, 3, 0, 1, 0, 1, 3, 3, - 1, 1, 0, 1, 1, 1, 1, 1, - 1, 0, 1, 1, 3, 3, 1, 1, - 0, 1, 1, 3, 0, 1, 1, 1, - 0, 0, 3, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 0, - 3, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, + 2, 1, 1, 1, 1, 1, 1, 1, + 3, 0, 3, 0, 3, 0, 3, 2, + 1, 1, 1, 1, 1, 3, 0, 1, + 1, 3, 0, 3, 0, 1, 1, 1, + 0, 0, 0, 1, 1, 1, 1, 1, + 0, 3, 3, 1, 1, 3, 0, 1, + 1, 3, 3, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 3, 3, 1, + 1, 1, 1, 1, 0, 0, 1, 1, + 0, 0, 3, 0, 1, 0, 1, 3, + 3, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 3, 3, 1, + 1, 0, 1, 1, 3, 0, 1, 1, + 1, 0, 0, 3, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, + 0, 3, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 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, @@ -2863,33 +2871,33 @@ static const char _zone_scanner_range_lengths[] = { 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, 1, 1, 0, - 0, 0, 3, 2, 2, 1, 1, 1, - 1, 3, 0, 3, 0, 1, 1, 1, - 3, 0, 1, 1, 1, 1, 1, 1, - 3, 0, 3, 3, 3, 3, 3, 3, - 3, 3, 5, 2, 0, 0, 0, 0, - 0, 1, 3, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 2, 3, - 5, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 3, 1, 1, 1, - 1, 1, 1, 1, 3, 1, 1, 1, - 3, 3, 3, 3, 0, 3, 3, 3, - 3, 2, 1, 3, 3, 0, 3, 3, - 2, 3, 3, 0, 3, 3, 2, 1, - 1, 1, 1, 3, 2, 1, 1, 1, - 1, 3, 0, 3, 2, 1, 1, 3, - 8, 3, 4, 3, 4, 3, 8, 9, - 9, 0, 0, 0, 4, 0, 0, 0, - 3, 0, 3, 1, 0, 0, 1, 0, - 3, 1, 3, 0, 3, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 3, 1, 0, 0, 0, 1, 1, 1, - 1, 1, 1, 1, 0, 0, 0, 0, - 0, 1, 0, 3, 1, 0, 3, 1, - 0, 0, 1, 3, 1, 3, 3, 0, - 0, 0, 0, 0, 0, 0, 3, 1, - 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 3, 2, 2, 1, 1, + 1, 1, 3, 0, 3, 0, 1, 1, + 1, 3, 0, 1, 1, 1, 1, 1, + 1, 3, 0, 3, 3, 3, 3, 3, + 3, 3, 3, 5, 2, 0, 0, 0, + 0, 0, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 2, + 3, 5, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 3, 3, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 1, + 1, 3, 3, 3, 3, 0, 3, 3, + 3, 3, 2, 1, 3, 3, 0, 3, + 3, 2, 3, 3, 0, 3, 3, 2, + 1, 1, 1, 1, 3, 2, 1, 1, + 1, 1, 3, 0, 3, 2, 1, 1, + 3, 8, 3, 4, 3, 4, 3, 8, + 9, 9, 0, 0, 0, 4, 0, 0, + 0, 3, 0, 3, 1, 0, 0, 1, + 0, 3, 1, 3, 0, 3, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 1, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 0, 3, 1, 0, 3, + 1, 0, 0, 1, 3, 1, 3, 3, + 0, 0, 0, 0, 0, 0, 0, 3, + 1, 0, 0, 0, 0, 0, 0 }; static const short _zone_scanner_index_offsets[] = { @@ -2955,94 +2963,95 @@ static const short _zone_scanner_index_offsets[] = { 3927, 3937, 3947, 3951, 3965, 3968, 3971, 3979, 3982, 3994, 4000, 4005, 4010, 4013, 4019, 4022, 4025, 4028, 4031, 4033, 4035, 4038, 4041, 4044, - 4046, 4051, 4054, 4059, 4061, 4064, 4067, 4070, - 4073, 4078, 4081, 4084, 4087, 4090, 4092, 4094, - 4097, 4100, 4103, 4105, 4107, 4109, 4114, 4116, - 4118, 4121, 4124, 4127, 4129, 4131, 4133, 4138, - 4141, 4144, 4147, 4150, 4153, 4156, 4159, 4164, - 4167, 4170, 4173, 4176, 4179, 4182, 4187, 4190, - 4193, 4198, 4201, 4204, 4209, 4212, 4215, 4220, - 4223, 4225, 4230, 4233, 4236, 4240, 4246, 4249, - 4252, 4255, 4258, 4260, 4262, 4265, 4268, 4271, - 4273, 4278, 4280, 4282, 4287, 4289, 4291, 4296, - 4310, 4316, 4319, 4322, 4325, 4328, 4331, 4336, - 4343, 4346, 4349, 4352, 4355, 4358, 4363, 4368, - 4371, 4376, 4379, 4382, 4387, 4390, 4393, 4396, - 4401, 4404, 4407, 4412, 4417, 4420, 4425, 4428, - 4431, 4436, 4439, 4442, 4445, 4450, 4453, 4456, - 4461, 4464, 4471, 4478, 4483, 4490, 4497, 4510, - 4517, 4525, 4533, 4541, 4559, 4567, 4585, 4593, - 4611, 4619, 4635, 4641, 4653, 4659, 4662, 4670, - 4682, 4690, 4693, 4701, 4713, 4721, 4724, 4732, - 4744, 4752, 4755, 4758, 4761, 4766, 4773, 4783, - 4788, 4791, 4798, 4805, 4818, 4823, 4826, 4828, - 4836, 4849, 4854, 4857, 4862, 4873, 4887, 4890, - 4895, 4904, 4906, 4914, 4924, 4932, 4942, 4951, - 4960, 4967, 4975, 4983, 4993, 5001, 5011, 5020, - 5029, 5036, 5045, 5047, 5061, 5073, 5087, 5099, - 5113, 5125, 5139, 5150, 5153, 5166, 5179, 5182, - 5195, 5208, 5219, 5222, 5235, 5248, 5259, 5262, - 5275, 5288, 5299, 5302, 5309, 5312, 5320, 5328, - 5331, 5334, 5337, 5344, 5347, 5355, 5363, 5366, - 5369, 5371, 5379, 5387, 5395, 5403, 5411, 5424, - 5429, 5432, 5435, 5438, 5440, 5448, 5456, 5464, - 5474, 5481, 5491, 5498, 5508, 5515, 5528, 5533, - 5536, 5539, 5542, 5545, 5548, 5552, 5559, 5567, - 5575, 5585, 5592, 5603, 5606, 5609, 5612, 5615, - 5629, 5632, 5634, 5637, 5640, 5642, 5654, 5657, - 5659, 5664, 5669, 5671, 5679, 5689, 5696, 5704, - 5712, 5722, 5726, 5740, 5743, 5746, 5749, 5752, - 5754, 5762, 5770, 5778, 5788, 5792, 5806, 5809, - 5812, 5815, 5817, 5825, 5836, 5843, 5851, 5859, - 5867, 5902, 5913, 5916, 5919, 5934, 5937, 5976, - 5983, 5986, 5989, 5996, 6004, 6012, 6021, 6058, - 6061, 6064, 6071, 6079, 6087, 6098, 6137, 6140, - 6143, 6150, 6158, 6166, 6179, 6214, 6217, 6220, - 6223, 6254, 6267, 6277, 6284, 6292, 6300, 6308, - 6316, 6324, 6332, 6340, 6348, 6356, 6364, 6377, - 6384, 6395, 6398, 6401, 6404, 6407, 6410, 6413, - 6416, 6419, 6422, 6425, 6428, 6435, 6438, 6441, - 6444, 6451, 6454, 6461, 6470, 6473, 6480, 6485, - 6488, 6491, 6494, 6497, 6504, 6511, 6514, 6517, - 6524, 6527, 6530, 6533, 6540, 6547, 6550, 6553, - 6556, 6563, 6568, 6571, 6574, 6581, 6584, 6587, - 6590, 6597, 6604, 6607, 6610, 6613, 6615, 6622, - 6624, 6631, 6634, 6637, 6640, 6643, 6650, 6653, - 6656, 6659, 6662, 6665, 6668, 6671, 6678, 6683, - 6686, 6693, 6700, 6707, 6709, 6716, 6718, 6725, - 6728, 6735, 6742, 6747, 6750, 6753, 6756, 6763, - 6770, 6777, 6780, 6783, 6786, 6793, 6796, 6803, - 6812, 6815, 6823, 6832, 6835, 6838, 6841, 6844, - 6851, 6854, 6857, 6864, 6871, 6878, 6881, 6884, - 6887, 6894, 6901, 6910, 6913, 6920, 6923, 6930, - 6933, 6940, 6943, 6946, 6949, 6956, 6963, 6966, - 6969, 6976, 6979, 6986, 6989, 6992, 6994, 7002, - 7005, 7008, 7015, 7022, 7027, 7032, 7034, 7042, - 7050, 7058, 7068, 7075, 7086, 7089, 7092, 7095, - 7098, 7103, 7106, 7108, 7116, 7124, 7132, 7140, - 7148, 7159, 7166, 7176, 7180, 7185, 7189, 7194, - 7199, 7203, 7208, 7216, 7221, 7223, 7225, 7227, - 7229, 7231, 7234, 7238, 7248, 7251, 7254, 7257, - 7259, 7267, 7275, 7283, 7291, 7299, 7310, 7315, - 7319, 7327, 7330, 7333, 7336, 7338, 7346, 7354, - 7362, 7370, 7378, 7388, 7392, 7406, 7409, 7412, - 7415, 7418, 7420, 7428, 7437, 7444, 7447, 7449, - 7457, 7467, 7471, 7475, 7479, 7481, 7485, 7489, - 7493, 7497, 7503, 7506, 7510, 7514, 7516, 7520, - 7524, 7530, 7534, 7538, 7540, 7544, 7548, 7554, - 7556, 7564, 7572, 7580, 7590, 7595, 7598, 7601, - 7603, 7611, 7621, 7628, 7638, 7643, 7646, 7649, - 7665, 7691, 7737, 7784, 7800, 7847, 7863, 7889, - 7946, 8003, 8004, 8005, 8006, 8015, 8016, 8017, - 8018, 8032, 8033, 8048, 8051, 8052, 8093, 8096, - 8097, 8111, 8114, 8124, 8125, 8139, 8142, 8145, - 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, - 8154, 8168, 8171, 8172, 8173, 8184, 8187, 8199, - 8202, 8214, 8217, 8229, 8232, 8233, 8234, 8235, - 8236, 8250, 8253, 8254, 8268, 8271, 8272, 8286, - 8289, 8290, 8305, 8308, 8319, 8322, 8361, 8368, - 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8389, - 8392, 8393, 8394, 8395, 8396, 8397 + 4046, 4051, 4056, 4061, 4063, 4066, 4069, 4072, + 4075, 4080, 4083, 4086, 4089, 4092, 4094, 4096, + 4099, 4102, 4105, 4107, 4109, 4111, 4116, 4118, + 4120, 4123, 4126, 4129, 4131, 4133, 4135, 4140, + 4143, 4145, 4147, 4149, 4151, 4156, 4158, 4160, + 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, + 4191, 4194, 4197, 4200, 4203, 4206, 4209, 4214, + 4217, 4220, 4225, 4228, 4231, 4236, 4239, 4242, + 4247, 4250, 4252, 4257, 4260, 4263, 4267, 4273, + 4276, 4279, 4282, 4285, 4287, 4289, 4292, 4295, + 4298, 4300, 4305, 4307, 4309, 4314, 4316, 4318, + 4323, 4337, 4343, 4346, 4349, 4352, 4355, 4358, + 4363, 4370, 4373, 4376, 4379, 4382, 4385, 4390, + 4395, 4398, 4403, 4406, 4409, 4414, 4417, 4420, + 4423, 4428, 4431, 4434, 4439, 4444, 4447, 4452, + 4455, 4458, 4463, 4466, 4469, 4472, 4477, 4480, + 4483, 4488, 4491, 4498, 4505, 4510, 4517, 4524, + 4537, 4544, 4552, 4560, 4568, 4586, 4594, 4612, + 4620, 4638, 4646, 4662, 4668, 4680, 4686, 4689, + 4697, 4709, 4717, 4720, 4728, 4740, 4748, 4751, + 4759, 4771, 4779, 4782, 4785, 4788, 4793, 4800, + 4810, 4815, 4818, 4825, 4832, 4845, 4850, 4853, + 4855, 4863, 4876, 4881, 4884, 4889, 4900, 4914, + 4917, 4922, 4931, 4933, 4941, 4951, 4959, 4969, + 4978, 4987, 4994, 5002, 5010, 5020, 5028, 5038, + 5047, 5056, 5063, 5072, 5074, 5088, 5100, 5114, + 5126, 5140, 5152, 5166, 5177, 5180, 5193, 5206, + 5209, 5222, 5235, 5246, 5249, 5262, 5275, 5286, + 5289, 5302, 5315, 5326, 5329, 5336, 5339, 5347, + 5355, 5358, 5361, 5364, 5371, 5374, 5382, 5390, + 5393, 5396, 5398, 5406, 5414, 5422, 5430, 5438, + 5451, 5456, 5459, 5462, 5465, 5467, 5475, 5483, + 5491, 5501, 5508, 5518, 5525, 5535, 5542, 5555, + 5560, 5563, 5566, 5569, 5572, 5575, 5579, 5586, + 5594, 5602, 5612, 5619, 5630, 5633, 5636, 5639, + 5642, 5656, 5659, 5661, 5664, 5667, 5669, 5681, + 5684, 5686, 5691, 5696, 5698, 5706, 5716, 5723, + 5731, 5739, 5749, 5753, 5767, 5770, 5773, 5776, + 5779, 5781, 5789, 5797, 5805, 5815, 5819, 5833, + 5836, 5839, 5842, 5844, 5852, 5863, 5870, 5878, + 5886, 5894, 5929, 5940, 5943, 5946, 5961, 5964, + 6003, 6010, 6013, 6016, 6023, 6031, 6039, 6048, + 6085, 6088, 6091, 6098, 6106, 6114, 6125, 6164, + 6167, 6170, 6177, 6185, 6193, 6206, 6241, 6244, + 6247, 6250, 6281, 6294, 6304, 6311, 6319, 6327, + 6335, 6343, 6351, 6359, 6367, 6375, 6383, 6391, + 6404, 6411, 6422, 6425, 6428, 6431, 6434, 6437, + 6440, 6443, 6446, 6449, 6452, 6455, 6462, 6465, + 6468, 6471, 6478, 6481, 6488, 6497, 6500, 6507, + 6512, 6515, 6518, 6521, 6524, 6531, 6538, 6541, + 6544, 6551, 6554, 6557, 6560, 6567, 6574, 6577, + 6580, 6583, 6590, 6595, 6598, 6601, 6608, 6611, + 6614, 6617, 6624, 6631, 6634, 6637, 6640, 6642, + 6649, 6651, 6658, 6661, 6664, 6667, 6670, 6677, + 6680, 6683, 6686, 6689, 6692, 6695, 6698, 6705, + 6710, 6713, 6720, 6727, 6734, 6736, 6743, 6745, + 6752, 6755, 6762, 6769, 6774, 6777, 6780, 6783, + 6790, 6797, 6804, 6807, 6810, 6813, 6820, 6823, + 6830, 6839, 6842, 6850, 6859, 6862, 6865, 6868, + 6871, 6878, 6881, 6884, 6891, 6898, 6905, 6908, + 6911, 6914, 6921, 6928, 6937, 6940, 6947, 6950, + 6957, 6960, 6967, 6970, 6973, 6976, 6983, 6990, + 6993, 6996, 7003, 7006, 7013, 7016, 7019, 7021, + 7029, 7032, 7035, 7042, 7049, 7054, 7059, 7061, + 7069, 7077, 7085, 7095, 7102, 7113, 7116, 7119, + 7122, 7125, 7130, 7133, 7135, 7143, 7151, 7159, + 7167, 7175, 7186, 7193, 7203, 7207, 7212, 7216, + 7221, 7226, 7230, 7235, 7243, 7248, 7250, 7252, + 7254, 7256, 7258, 7261, 7265, 7275, 7278, 7281, + 7284, 7286, 7294, 7302, 7310, 7318, 7326, 7337, + 7342, 7346, 7354, 7357, 7360, 7363, 7365, 7373, + 7381, 7389, 7397, 7405, 7415, 7419, 7433, 7436, + 7439, 7442, 7445, 7447, 7455, 7464, 7471, 7474, + 7476, 7484, 7494, 7498, 7502, 7506, 7508, 7512, + 7516, 7520, 7524, 7530, 7533, 7537, 7541, 7543, + 7547, 7551, 7557, 7561, 7565, 7567, 7571, 7575, + 7581, 7583, 7591, 7599, 7607, 7617, 7622, 7625, + 7628, 7630, 7638, 7648, 7655, 7665, 7670, 7673, + 7676, 7692, 7718, 7764, 7811, 7827, 7874, 7890, + 7916, 7973, 8030, 8031, 8032, 8033, 8042, 8043, + 8044, 8045, 8059, 8060, 8075, 8078, 8079, 8120, + 8123, 8124, 8138, 8141, 8151, 8152, 8166, 8169, + 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, + 8180, 8181, 8195, 8198, 8199, 8200, 8211, 8214, + 8226, 8229, 8241, 8244, 8256, 8259, 8260, 8261, + 8262, 8263, 8277, 8280, 8281, 8295, 8298, 8299, + 8313, 8316, 8317, 8332, 8335, 8346, 8349, 8388, + 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, + 8416, 8419, 8420, 8421, 8422, 8423, 8424 }; static const short _zone_scanner_indicies[] = { @@ -3552,556 +3561,560 @@ static const short _zone_scanner_indicies[] = { 1559, 1576, 1576, 1559, 1577, 1577, 1559, 1578, 1559, 1579, 1559, 1580, 1580, 1559, 1581, 1581, 1559, 1582, 1582, 1559, 1583, 1559, 1584, 1584, - 1584, 1584, 1559, 1585, 1585, 1559, 1586, 1587, - 1586, 1587, 1559, 1588, 1559, 1589, 1589, 1559, - 1590, 1590, 1559, 1591, 1591, 1559, 1592, 1592, - 1559, 1593, 1593, 1593, 1593, 1559, 1594, 1594, - 1559, 1595, 1595, 1559, 1596, 1596, 1559, 1597, - 1598, 1559, 1599, 1559, 1600, 1559, 1601, 1601, - 1559, 1602, 1602, 1559, 1603, 1603, 1559, 1604, - 1559, 1605, 1559, 1606, 1559, 1607, 1607, 1607, - 1607, 1559, 1608, 1559, 1609, 1559, 1610, 1610, - 1559, 1611, 1611, 1559, 1612, 1612, 1559, 1613, - 1559, 1614, 1559, 1615, 1559, 1616, 1616, 1616, - 1616, 1559, 1617, 1617, 1559, 1618, 1618, 1559, - 1619, 1619, 1559, 1620, 1620, 1559, 1621, 1621, - 1559, 1622, 1622, 1559, 1623, 1623, 1559, 1624, - 1624, 1624, 1624, 1559, 1625, 1625, 1559, 1626, - 1626, 1559, 1627, 1627, 1559, 1628, 1628, 1559, - 1629, 1629, 1559, 1630, 1630, 1559, 1631, 1632, - 1631, 1632, 1559, 1633, 1633, 1559, 1634, 1634, - 1559, 1635, 1635, 1635, 1635, 1559, 1636, 1636, - 1559, 1637, 1637, 1559, 1638, 1638, 1638, 1638, - 1559, 1639, 1639, 1559, 1640, 1640, 1559, 1641, - 1642, 1641, 1642, 1559, 1643, 1643, 1559, 1644, - 1559, 1645, 1645, 1645, 1645, 1559, 1646, 1646, - 1559, 1647, 1647, 1559, 1648, 1649, 1650, 1559, - 1651, 1652, 1651, 1651, 1651, 1559, 1653, 1653, - 1559, 1654, 1654, 1559, 1655, 1655, 1559, 1656, - 1656, 1559, 1657, 1559, 1658, 1559, 1659, 1659, - 1559, 1660, 1660, 1559, 1661, 1661, 1559, 1662, - 1559, 1663, 1663, 1663, 1663, 1559, 1664, 1559, - 1665, 1559, 1666, 1666, 1666, 1666, 1559, 1667, - 1559, 1668, 1559, 1669, 1669, 1669, 1669, 1559, - 1672, 1673, 1674, 1675, 1676, 1677, 1672, 1673, - 1674, 1675, 1676, 1677, 1671, 1670, 1678, 1678, - 1678, 1678, 1679, 1670, 1680, 1680, 1670, 1681, - 1681, 1670, 1682, 1682, 1670, 1683, 1683, 1670, - 1684, 1684, 1670, 1685, 1685, 1685, 1685, 1670, - 1686, 1687, 1688, 1686, 1687, 1688, 1670, 1689, - 1689, 1670, 1690, 1690, 1670, 1691, 1691, 1670, - 1692, 1692, 1670, 1693, 1693, 1670, 1694, 1694, - 1694, 1694, 1670, 1695, 1696, 1695, 1696, 1670, - 1697, 1697, 1670, 1698, 1698, 1698, 1698, 1670, - 1699, 1699, 1670, 1700, 1700, 1670, 1701, 1701, - 1701, 1701, 1670, 1702, 1702, 1670, 1703, 1703, - 1670, 1704, 1704, 1670, 1705, 1705, 1705, 1705, - 1670, 1706, 1706, 1670, 1707, 1707, 1670, 1708, - 1708, 1708, 1708, 1670, 1709, 1710, 1709, 1710, - 1670, 1711, 1711, 1670, 1712, 1712, 1712, 1712, - 1670, 1713, 1713, 1670, 1714, 1714, 1670, 1715, - 1715, 1715, 1715, 1670, 1716, 1716, 1670, 1717, - 1717, 1670, 1718, 1718, 1670, 1719, 1719, 1719, - 1719, 1670, 1720, 1720, 1670, 1721, 1721, 1670, - 1722, 1722, 1722, 1722, 1670, 1724, 1724, 1723, - 1725, 1726, 1725, 1725, 1725, 1726, 1723, 1727, - 1727, 1727, 1727, 1727, 1727, 71, 1728, 1728, - 1728, 1728, 71, 1729, 1729, 1729, 1729, 1729, - 1729, 71, 1730, 1730, 1731, 1732, 1733, 1734, - 71, 1735, 1735, 1736, 1737, 1738, 1738, 1738, - 1739, 1740, 1738, 1738, 1738, 71, 1741, 1741, - 1742, 1743, 1744, 1745, 71, 1747, 1747, 1748, - 1749, 1751, 1752, 1750, 1746, 1753, 1753, 1754, - 1755, 1757, 1758, 1756, 1746, 1759, 1759, 1760, - 1761, 1763, 1764, 1762, 1746, 1766, 1766, 1767, - 1768, 1770, 1771, 1772, 1773, 1774, 1770, 1771, - 1772, 1773, 1774, 1775, 1776, 1769, 1765, 1777, - 1777, 1778, 1779, 1781, 1782, 1780, 1746, 1783, - 1783, 1784, 1785, 1787, 1788, 1789, 1790, 1791, - 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1786, - 1765, 1794, 1794, 1795, 1796, 1798, 1799, 1797, - 1746, 1800, 1800, 1801, 1802, 1804, 1805, 1806, - 1807, 1808, 1804, 1805, 1806, 1807, 1808, 1809, - 1810, 1803, 1765, 1811, 1811, 1812, 1813, 1815, - 1816, 1814, 1746, 1817, 1817, 1819, 1820, 1821, - 1822, 1823, 1819, 1820, 1821, 1822, 1823, 1817, - 1817, 1818, 1765, 1817, 1817, 1817, 1817, 1824, - 1765, 1826, 1827, 1828, 1829, 1830, 1826, 1827, - 1828, 1829, 1830, 1825, 1765, 1831, 1831, 1831, - 1831, 1832, 1765, 1815, 1816, 71, 1800, 1800, - 1801, 1802, 1809, 1810, 1833, 1765, 1835, 1836, - 1837, 1838, 1839, 1835, 1836, 1837, 1838, 1839, - 1834, 1765, 1840, 1840, 1841, 1842, 1844, 1845, - 1843, 1765, 1798, 1799, 71, 1783, 1783, 1784, - 1785, 1792, 1793, 1846, 1765, 1848, 1849, 1850, - 1851, 1852, 1848, 1849, 1850, 1851, 1852, 1847, - 1765, 1853, 1853, 1854, 1855, 1857, 1858, 1856, - 1765, 1781, 1782, 71, 1766, 1766, 1767, 1768, - 1775, 1776, 1859, 1765, 1861, 1862, 1863, 1864, - 1865, 1861, 1862, 1863, 1864, 1865, 1860, 1765, - 1866, 1866, 1867, 1868, 1870, 1871, 1869, 1765, - 1763, 1764, 71, 1751, 1752, 71, 1739, 1740, - 71, 71, 71, 71, 71, 1872, 1873, 1873, - 1874, 1875, 1876, 1877, 71, 1879, 1879, 1880, - 1881, 1882, 1883, 1878, 1878, 1878, 71, 1884, - 1884, 1884, 1884, 71, 1882, 1883, 71, 1885, - 1885, 1885, 1885, 1885, 1885, 71, 1886, 1886, - 1887, 1888, 1889, 1890, 71, 1891, 1891, 1892, - 1893, 1894, 1894, 1894, 1895, 1896, 1894, 1894, - 1894, 71, 1897, 1897, 1897, 1897, 71, 1895, - 1896, 71, 1898, 1746, 1899, 1899, 1900, 1901, - 1903, 1904, 1902, 1746, 1905, 1905, 1906, 1907, - 1908, 1908, 1908, 1909, 1910, 1908, 1908, 1908, - 71, 1911, 1911, 1911, 1911, 71, 1909, 1910, - 71, 1913, 1913, 1913, 1913, 1912, 1914, 1914, - 1915, 1916, 1917, 1918, 1919, 1919, 1920, 1921, - 1913, 1923, 1923, 1924, 1925, 1926, 1927, 1928, - 1928, 1929, 1930, 1922, 1922, 1922, 1913, 1926, - 1927, 1913, 1931, 1931, 1931, 1931, 1723, 1932, - 1933, 1932, 1932, 1932, 1933, 1933, 1933, 1723, - 1935, 1934, 1936, 1936, 1937, 1938, 1940, 1941, - 1939, 1934, 1942, 1942, 1943, 1944, 1946, 1947, - 1948, 1949, 1945, 1934, 1950, 1950, 1951, 1952, - 1954, 1955, 1953, 1934, 1956, 1956, 1957, 1958, - 1946, 1947, 1960, 1961, 1959, 1934, 1962, 1962, - 1963, 1964, 1965, 1967, 1968, 1966, 1934, 1969, - 1969, 1970, 1971, 1946, 1947, 1972, 1973, 1934, - 1974, 1974, 1975, 1976, 1977, 1978, 1934, 1974, - 1974, 1975, 1976, 1977, 1978, 1979, 1934, 1980, - 1980, 1981, 1982, 1984, 1985, 1983, 1934, 1986, - 1986, 1987, 1988, 1990, 1991, 1992, 1993, 1989, - 1934, 1994, 1994, 1995, 1996, 1998, 1999, 1997, - 1934, 2000, 2000, 2001, 2002, 1990, 1991, 2004, - 2005, 2003, 1934, 2006, 2006, 2007, 2008, 2009, - 2011, 2012, 2010, 1934, 2013, 2013, 2014, 2015, - 1990, 1991, 2016, 2017, 1934, 2018, 2018, 2019, - 2020, 2021, 2022, 1934, 2018, 2018, 2019, 2020, - 2023, 2021, 2022, 2024, 1934, 2025, 1934, 2026, - 2026, 2027, 2028, 2029, 2031, 2032, 2033, 2034, - 2034, 2035, 2036, 2030, 1934, 2037, 2037, 2038, - 2039, 2041, 2042, 2043, 2043, 2044, 2045, 2040, - 1934, 2046, 2046, 2047, 2048, 2049, 2051, 2052, - 2053, 2054, 2054, 2055, 2056, 2050, 1934, 2057, - 2057, 2058, 2059, 2061, 2062, 2043, 2043, 2063, - 2064, 2060, 1934, 2065, 2065, 2066, 2067, 2068, - 2070, 2071, 2072, 2073, 2073, 2074, 2075, 2069, - 1934, 2076, 2076, 2077, 2078, 2080, 2081, 2043, - 2043, 2082, 2083, 2079, 1934, 2084, 2084, 2085, - 2086, 2087, 2084, 2089, 2090, 2091, 2091, 2092, - 2093, 2088, 1934, 2094, 2094, 2095, 2096, 2097, - 2098, 2043, 2043, 2099, 2100, 1934, 2097, 2098, - 1934, 2101, 2101, 2102, 2103, 2101, 2105, 2106, - 2107, 2107, 2108, 2109, 2104, 1934, 2084, 2084, - 2085, 2086, 2084, 2089, 2090, 2091, 2091, 2092, - 2093, 2110, 1934, 2080, 2081, 1934, 2111, 2111, - 2112, 2113, 2115, 2116, 2117, 2118, 2118, 2119, - 2120, 2114, 1934, 2065, 2065, 2066, 2067, 2070, - 2071, 2072, 2073, 2073, 2074, 2075, 2121, 1934, - 2076, 2076, 2077, 2078, 2080, 2081, 2043, 2043, - 2082, 2083, 1934, 2061, 2062, 1934, 2122, 2122, - 2123, 2124, 2126, 2127, 2128, 2129, 2129, 2130, - 2131, 2125, 1934, 2046, 2046, 2047, 2048, 2051, - 2052, 2053, 2054, 2054, 2055, 2056, 2132, 1934, - 2057, 2057, 2058, 2059, 2061, 2062, 2043, 2043, - 2063, 2064, 1934, 2041, 2042, 1934, 2133, 2133, - 2134, 2135, 2137, 2138, 2139, 2140, 2140, 2141, - 2142, 2136, 1934, 2026, 2026, 2027, 2028, 2031, - 2032, 2033, 2034, 2034, 2035, 2036, 2143, 1934, - 2037, 2037, 2038, 2039, 2041, 2042, 2043, 2043, - 2044, 2045, 1934, 2021, 2022, 1934, 2144, 2144, - 2145, 2146, 2147, 2148, 1934, 2016, 2017, 1934, - 2149, 2149, 2150, 2151, 2153, 2154, 2152, 1934, - 2006, 2006, 2007, 2008, 2011, 2012, 2155, 1934, - 2004, 2005, 1934, 1992, 1993, 1934, 1977, 1978, - 1934, 2156, 2156, 2157, 2158, 2159, 2160, 1934, - 1972, 1973, 1934, 2161, 2161, 2162, 2163, 2165, - 2166, 2164, 1934, 1962, 1962, 1963, 1964, 1967, - 1968, 2167, 1934, 1960, 1961, 1934, 1948, 1949, - 1934, 2168, 1746, 2169, 2169, 2170, 2171, 2173, - 2174, 2172, 1746, 2175, 2175, 2176, 2177, 2179, - 2180, 2178, 1746, 2181, 2181, 2182, 2183, 2185, - 2186, 2184, 1746, 2187, 2187, 2188, 2189, 2191, - 2192, 2190, 1746, 2193, 2193, 2194, 2195, 2197, - 2198, 2196, 1746, 2199, 2199, 2200, 2201, 2202, - 2202, 2202, 2203, 2204, 2202, 2202, 2202, 71, - 2205, 2205, 2205, 2205, 71, 2203, 2204, 71, - 2191, 2192, 71, 2179, 2180, 71, 2206, 1746, - 2207, 2207, 2208, 2209, 2211, 2212, 2210, 1746, - 2213, 2213, 2214, 2215, 2217, 2218, 2216, 1746, - 2219, 2219, 2220, 2221, 2223, 2224, 2222, 1746, - 2226, 2226, 2227, 2228, 2229, 2230, 2225, 2225, - 2225, 71, 2231, 2231, 2232, 2233, 2234, 2235, - 71, 2237, 2237, 2238, 2239, 2240, 2241, 2236, - 2236, 2236, 71, 2242, 2242, 2243, 2244, 2245, - 2246, 71, 2248, 2248, 2249, 2250, 2251, 2252, - 2247, 2247, 2247, 71, 2253, 2253, 2254, 2255, - 2256, 2257, 71, 2258, 2258, 2259, 2260, 2261, - 2261, 2261, 2262, 2263, 2261, 2261, 2261, 71, - 2264, 2264, 2264, 2264, 71, 2262, 2263, 71, - 2251, 2252, 71, 2240, 2241, 71, 2229, 2230, - 71, 2217, 2218, 71, 2265, 2265, 2265, 71, - 2266, 2266, 2267, 2268, 2269, 2270, 71, 2266, - 2266, 2267, 2268, 2269, 2270, 2271, 1746, 2272, - 2272, 2273, 2274, 2276, 2277, 2275, 1746, 2278, - 2278, 2279, 2280, 2282, 2283, 2281, 2281, 2281, - 71, 2284, 2284, 2285, 2286, 2287, 2288, 71, - 2284, 2284, 2285, 2286, 2289, 2287, 2288, 2289, - 2289, 2289, 71, 2290, 2290, 71, 2287, 2288, - 71, 2282, 2283, 71, 2269, 2270, 71, 2292, - 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, - 2300, 2300, 2301, 2302, 2291, 2303, 2304, 2291, - 2305, 2291, 2307, 2307, 2306, 2309, 2308, 2306, - 2310, 2291, 2311, 2311, 2312, 2313, 2315, 2316, - 2317, 2317, 2318, 2319, 2314, 2291, 2298, 2299, - 71, 2320, 2291, 2321, 2321, 2321, 2321, 2306, - 2323, 2322, 2322, 2322, 2306, 2324, 1746, 2325, - 2325, 2326, 2327, 2329, 2330, 2328, 1746, 2331, - 2331, 2332, 2333, 2335, 2336, 2334, 2334, 2334, - 71, 2337, 2337, 2338, 2339, 2340, 2341, 71, - 2337, 2337, 2338, 2339, 2340, 2341, 2342, 1746, - 2343, 2343, 2344, 2345, 2347, 2348, 2346, 1746, - 2350, 2350, 2351, 2352, 2354, 2355, 2353, 2353, - 2353, 2349, 2356, 2356, 2356, 2349, 2357, 2357, - 2358, 2359, 2360, 2361, 2362, 2362, 2363, 2364, - 2353, 2353, 2353, 2349, 2360, 2361, 2349, 2354, - 2355, 71, 2340, 2341, 71, 2335, 2336, 71, - 2365, 1746, 2366, 2366, 2367, 2368, 2370, 2371, - 2369, 1746, 2372, 2372, 2373, 2374, 2376, 2377, - 2375, 1746, 2378, 2378, 2379, 2380, 2382, 2383, - 2381, 1746, 2384, 2384, 2385, 2386, 2388, 2389, - 2387, 2387, 2387, 2349, 2390, 2390, 2390, 2349, - 2391, 2391, 2392, 2393, 2394, 2395, 2396, 2396, - 2397, 2398, 2387, 2387, 2387, 2349, 2394, 2395, - 2349, 2388, 2389, 71, 2376, 2377, 71, 2399, - 1746, 2400, 2400, 2401, 2402, 2404, 2405, 2403, - 1746, 2407, 2407, 2408, 2409, 2410, 2411, 2412, - 2413, 2414, 2415, 2406, 2416, 2416, 2417, 2418, - 2419, 2420, 2406, 2416, 2416, 2417, 2418, 2419, - 2420, 2422, 2421, 2423, 2423, 2424, 2425, 2427, - 2428, 2426, 2421, 2429, 2429, 2430, 2431, 2432, - 2433, 2434, 2406, 2436, 2436, 2437, 2438, 2439, - 2439, 2440, 2441, 2442, 2442, 2443, 2444, 2445, - 2445, 2445, 2445, 2446, 2447, 2445, 2445, 2448, - 2449, 2450, 2451, 2445, 2445, 2452, 2453, 2454, - 2455, 2445, 2445, 2456, 2457, 2435, 2436, 2436, - 2437, 2438, 2459, 2446, 2447, 2459, 2459, 2459, - 2458, 2445, 2445, 2458, 2446, 2447, 2458, 2439, - 2439, 2440, 2441, 2445, 2445, 2445, 2445, 2450, - 2451, 2445, 2445, 2452, 2453, 2458, 2450, 2451, - 2458, 2459, 2436, 2436, 2437, 2438, 2439, 2439, - 2440, 2441, 2442, 2442, 2443, 2444, 2445, 2445, - 2445, 2445, 2446, 2447, 2445, 2445, 2448, 2449, - 2450, 2451, 2445, 2445, 2452, 2453, 2454, 2455, - 2445, 2445, 2456, 2457, 2459, 2459, 2459, 2458, - 2446, 2450, 2454, 2447, 2451, 2455, 2458, 2433, - 2434, 2406, 2419, 2420, 2406, 2460, 2460, 2461, - 2462, 2463, 2464, 2406, 2460, 2460, 2461, 2462, - 2463, 2464, 2465, 2421, 2466, 2466, 2467, 2468, - 2470, 2471, 2469, 2421, 2473, 2473, 2474, 2475, - 2476, 2477, 2478, 2476, 2472, 2480, 2481, 2481, - 2482, 2483, 2484, 2484, 2485, 2486, 2487, 2487, - 2488, 2489, 2490, 2490, 2490, 2490, 2491, 2492, - 2490, 2490, 2493, 2494, 2495, 2496, 2490, 2490, - 2497, 2498, 2499, 2500, 2490, 2490, 2501, 2502, - 2480, 2479, 2477, 2478, 2406, 2463, 2464, 2406, - 2503, 2503, 2504, 2505, 2506, 2507, 2406, 2503, - 2503, 2504, 2505, 2506, 2507, 2508, 2421, 2509, - 2509, 2510, 2511, 2513, 2514, 2512, 2421, 2515, - 2515, 2516, 2517, 2518, 2519, 2520, 2518, 2518, - 2518, 2472, 2521, 2522, 2522, 2523, 2524, 2525, - 2525, 2526, 2527, 2528, 2528, 2529, 2530, 2531, - 2531, 2531, 2531, 2532, 2533, 2531, 2531, 2534, - 2535, 2536, 2537, 2531, 2531, 2538, 2539, 2540, - 2541, 2531, 2531, 2542, 2543, 2521, 2521, 2521, - 2479, 2519, 2520, 2406, 2506, 2507, 2406, 2544, - 2544, 2545, 2546, 2547, 2548, 2406, 2544, 2544, - 2545, 2546, 2547, 2548, 2549, 2421, 2550, 2550, - 2551, 2552, 2554, 2555, 2553, 2421, 2556, 2556, - 2557, 2558, 2559, 2559, 2559, 2560, 2561, 2559, - 2559, 2559, 2406, 2562, 2562, 2563, 2564, 2565, - 2565, 2566, 2567, 2568, 2568, 2569, 2570, 2571, - 2571, 2571, 2571, 2572, 2573, 2571, 2571, 2574, - 2575, 2576, 2577, 2571, 2571, 2578, 2579, 2580, - 2581, 2571, 2571, 2582, 2583, 2435, 2560, 2561, - 2406, 2547, 2548, 2406, 2414, 2415, 71, 2585, - 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, - 2594, 2595, 2596, 2597, 2598, 2599, 2585, 2586, - 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, - 2595, 2596, 2597, 2598, 2599, 2584, 2600, 2600, - 2601, 2602, 2603, 2604, 2605, 2603, 2604, 2605, - 2606, 2607, 2584, 2608, 2608, 2609, 2610, 2612, - 2613, 2611, 2611, 2611, 71, 2614, 2614, 2615, - 2616, 2617, 2618, 71, 2614, 2614, 2615, 2616, - 2617, 2618, 2619, 1746, 2620, 2620, 2621, 2622, - 2624, 2625, 2623, 1746, 2626, 2626, 2627, 2628, - 2630, 2631, 2629, 1746, 2632, 2632, 2633, 2634, - 2636, 2637, 2635, 1746, 2639, 2639, 2640, 2641, - 2643, 2644, 2642, 2638, 2645, 2645, 2646, 2647, - 2649, 2650, 2648, 2638, 2651, 2651, 2652, 2653, - 2655, 2656, 2654, 2638, 2657, 2657, 2658, 2659, - 2661, 2662, 2660, 2638, 2663, 2663, 2664, 2665, - 2667, 2668, 2666, 1746, 2669, 2669, 2670, 2671, - 2673, 2674, 2672, 1746, 2675, 2675, 2676, 2677, - 2678, 2678, 2678, 2679, 2680, 2678, 2678, 2678, - 71, 2681, 2681, 2682, 2683, 2684, 2685, 71, - 2686, 2686, 2687, 2688, 2689, 2690, 2691, 2689, - 2689, 2689, 71, 2692, 2692, 71, 2690, 2691, - 71, 2679, 2680, 71, 2667, 2668, 71, 2655, - 2656, 71, 2643, 2644, 71, 2630, 2631, 71, - 2617, 2618, 71, 2612, 2613, 71, 2693, 2693, - 2584, 2694, 2694, 2584, 2695, 2695, 2696, 2697, - 2698, 2699, 2584, 2700, 2700, 2584, 2701, 2701, - 2584, 2702, 2702, 2584, 2703, 2703, 2704, 2705, - 2706, 2707, 2584, 2708, 2708, 2584, 2709, 2709, - 2710, 2711, 2712, 2713, 2584, 2714, 2715, 2716, - 2717, 2714, 2715, 2716, 2717, 2584, 2718, 2718, - 2584, 2719, 2719, 2720, 2721, 2722, 2723, 2584, - 2724, 2725, 2724, 2725, 2584, 2726, 2726, 2584, - 2727, 2727, 2584, 2728, 2728, 2584, 2729, 2729, - 2584, 2730, 2730, 2731, 2732, 2733, 2734, 2584, - 2735, 2735, 2736, 2737, 2738, 2739, 2584, 2740, - 2740, 2584, 2741, 2741, 2584, 2742, 2742, 2743, - 2744, 2745, 2746, 2584, 2747, 2747, 2584, 2748, - 2748, 2584, 2749, 2749, 2584, 2750, 2750, 2751, - 2752, 2753, 2754, 2584, 2755, 2756, 2757, 2755, - 2756, 2757, 2584, 2758, 2758, 2584, 2759, 2759, - 2584, 2760, 2760, 2584, 2761, 2761, 2762, 2763, - 2764, 2765, 2584, 2766, 2767, 2766, 2767, 2584, - 2768, 2768, 2584, 2769, 2769, 2584, 2770, 2770, - 2771, 2772, 2773, 2774, 2584, 2775, 2775, 2584, - 2776, 2776, 2584, 2777, 2777, 2584, 2778, 2778, - 2779, 2780, 2781, 2782, 2584, 2783, 2783, 2784, - 2785, 2786, 2787, 2584, 2788, 2788, 2584, 2789, - 2789, 2584, 2790, 2791, 2584, 2792, 2584, 2793, - 2793, 2794, 2795, 2796, 2797, 2584, 2798, 2584, - 2799, 2799, 2800, 2801, 2802, 2803, 2584, 2804, - 2804, 2584, 2805, 2805, 2584, 2806, 2806, 2584, - 2807, 2807, 2584, 2808, 2808, 2809, 2810, 2811, - 2812, 2584, 2813, 2813, 2584, 2814, 2814, 2584, - 2815, 2815, 2584, 2816, 2816, 2584, 2817, 2817, - 2584, 2818, 2818, 2584, 2819, 2819, 2584, 2820, - 2820, 2821, 2822, 2823, 2824, 2584, 2825, 2826, - 2825, 2826, 2584, 2827, 2827, 2584, 2828, 2828, - 2829, 2830, 2831, 2832, 2584, 2833, 2833, 2834, - 2835, 2836, 2837, 2584, 2838, 2839, 2840, 2841, - 2840, 2841, 2584, 2842, 2584, 2843, 2843, 2844, - 2845, 2846, 2847, 2584, 2848, 2584, 2849, 2849, - 2850, 2851, 2852, 2853, 2584, 2854, 2854, 2584, - 2855, 2855, 2856, 2857, 2858, 2859, 2584, 2860, - 2860, 2861, 2862, 2863, 2864, 2584, 2865, 2866, - 2865, 2866, 2584, 2867, 2867, 2584, 2868, 2868, - 2584, 2869, 2869, 2584, 2870, 2870, 2871, 2872, - 2873, 2874, 2584, 2875, 2875, 2876, 2877, 2878, - 2879, 2584, 2880, 2881, 2882, 2880, 2881, 2882, - 2584, 2883, 2883, 2584, 2884, 2884, 2584, 2885, - 2885, 2584, 2886, 2886, 2887, 2888, 2889, 2890, - 2584, 2891, 2891, 2584, 2892, 2892, 2893, 2894, - 2895, 2896, 2584, 2897, 2897, 2898, 2899, 2900, - 2900, 2901, 2902, 2584, 2903, 2903, 2584, 2904, - 2904, 2905, 2906, 2907, 2908, 2909, 2584, 2910, - 2910, 2911, 2912, 2913, 2913, 2914, 2915, 2584, - 2916, 2916, 2584, 2917, 2917, 2584, 2918, 2918, - 2584, 2919, 2919, 2584, 2920, 2920, 2921, 2922, - 2923, 2924, 2584, 2925, 2925, 2584, 2926, 2926, - 2584, 2927, 2927, 2928, 2929, 2930, 2931, 2584, - 2932, 2933, 2934, 2932, 2933, 2934, 2584, 2935, - 2935, 2936, 2937, 2938, 2939, 2584, 2940, 2940, - 2584, 2941, 2941, 2584, 2942, 2942, 2584, 2943, - 2943, 2944, 2945, 2946, 2947, 2584, 2948, 2948, - 2949, 2950, 2951, 2952, 2584, 2953, 2954, 2955, - 2956, 2953, 2954, 2955, 2956, 2584, 2957, 2957, - 2584, 2958, 2958, 2959, 2960, 2961, 2962, 2584, - 2963, 2963, 2584, 2964, 2964, 2965, 2966, 2967, - 2968, 2584, 2969, 2969, 2584, 2970, 2970, 2971, - 2972, 2973, 2974, 2584, 2975, 2975, 2584, 2976, - 2976, 2584, 2977, 2977, 2584, 2978, 2978, 2979, - 2980, 2981, 2982, 2584, 2983, 2984, 2985, 2983, - 2984, 2985, 2584, 2986, 2986, 2584, 2987, 2987, - 2584, 2988, 2988, 2989, 2990, 2991, 2992, 2584, - 2993, 2993, 2584, 2994, 2994, 2995, 2996, 2997, - 2998, 2584, 2999, 2999, 2584, 3000, 3000, 2584, - 3002, 3001, 3003, 3003, 3004, 3005, 3007, 3008, - 3006, 3001, 3009, 3009, 2584, 3010, 3010, 2584, - 3011, 3011, 3012, 3013, 3014, 3015, 2584, 3016, - 3016, 3016, 3016, 3016, 3016, 71, 3017, 3017, - 3017, 3017, 71, 3018, 3018, 3018, 3018, 71, - 3019, 1746, 3020, 3020, 3021, 3022, 3024, 3025, - 3023, 1746, 3026, 3026, 3027, 3028, 3030, 3031, - 3029, 1746, 3032, 3032, 3033, 3034, 3036, 3037, - 3035, 1746, 3038, 3038, 3039, 3040, 3042, 3043, - 3041, 3041, 3041, 71, 3044, 3044, 3045, 3046, - 3047, 3048, 71, 3044, 3044, 3045, 3046, 3049, - 3047, 3048, 3049, 3049, 3049, 71, 3050, 3050, - 71, 3047, 3048, 71, 3042, 3043, 71, 3030, - 3031, 71, 3051, 3051, 3051, 3051, 71, 3052, - 3052, 71, 3053, 1746, 3054, 3054, 3055, 3056, - 3058, 3059, 3057, 1746, 3060, 3060, 3061, 3062, - 3064, 3065, 3063, 1746, 3066, 3066, 3067, 3068, - 3070, 3071, 3069, 1746, 3072, 3072, 3073, 3074, - 3076, 3077, 3075, 1746, 3078, 3078, 3079, 3080, - 3082, 3083, 3081, 1746, 3084, 3084, 3085, 3086, - 3087, 3089, 3090, 3088, 3088, 3088, 2349, 3091, - 3091, 3092, 3093, 3094, 3095, 2349, 3097, 3097, - 3098, 3099, 3101, 3102, 3100, 3100, 3100, 3096, - 3103, 3103, 3103, 3096, 3105, 3104, 3104, 3104, - 3096, 3106, 3106, 3106, 3096, 3108, 3107, 3107, - 3107, 3096, 3110, 3109, 3109, 3109, 3096, 3111, - 3111, 3111, 3096, 3113, 3112, 3112, 3112, 3096, - 3114, 3114, 3114, 3114, 3115, 3115, 3115, 3096, - 3116, 3116, 3116, 3116, 71, 3117, 3096, 3113, - 3096, 3110, 3096, 3118, 3096, 3108, 3096, 3101, - 3102, 71, 3119, 3119, 3119, 2349, 3091, 3091, - 3092, 3093, 3094, 3095, 3120, 3120, 3120, 2349, - 3089, 3090, 71, 3076, 3077, 71, 3064, 3065, - 71, 3121, 1746, 3122, 3122, 3123, 3124, 3126, - 3127, 3125, 1746, 3128, 3128, 3129, 3130, 3132, - 3133, 3131, 1746, 3134, 3134, 3135, 3136, 3138, - 3139, 3137, 1746, 3140, 3140, 3141, 3142, 3144, - 3145, 3143, 1746, 3146, 3146, 3147, 3148, 3150, - 3151, 3149, 1746, 3152, 3152, 3153, 3154, 3155, - 3157, 3158, 3156, 3156, 3156, 2349, 3159, 3159, - 3159, 3159, 2349, 3160, 3160, 3160, 2349, 3159, - 3159, 3159, 3159, 3161, 3161, 3161, 2349, 3157, - 3158, 71, 3144, 3145, 71, 3132, 3133, 71, - 3162, 1746, 3163, 3163, 3164, 3165, 3167, 3168, - 3166, 1746, 3169, 3169, 3170, 3171, 3173, 3174, - 3172, 1746, 3175, 3175, 3176, 3177, 3179, 3180, - 3178, 1746, 3181, 3181, 3182, 3183, 3185, 3186, - 3184, 1746, 3187, 3187, 3188, 3189, 3191, 3192, - 3190, 1746, 3193, 3193, 3194, 3195, 3197, 3198, - 3196, 3196, 3196, 2349, 3199, 3199, 3199, 2349, - 3200, 3200, 3201, 3202, 3203, 3204, 3205, 3205, - 3206, 3207, 3196, 3196, 3196, 2349, 3203, 3204, - 2349, 3197, 3198, 71, 3185, 3186, 71, 3173, - 3174, 71, 3208, 1746, 3209, 3209, 3210, 3211, - 3213, 3214, 3212, 1746, 3215, 3215, 3216, 3217, - 3218, 3219, 3220, 3218, 1723, 3221, 3222, 3221, - 3221, 3221, 3222, 1723, 3219, 3220, 71, 3223, - 1746, 3224, 3224, 3225, 3226, 3228, 3229, 3227, - 1746, 3230, 3230, 3231, 3232, 3234, 3235, 3233, - 3233, 3233, 2349, 3236, 3236, 3236, 2349, 3237, - 3237, 3237, 2349, 3238, 3238, 3238, 2349, 3240, - 3239, 3241, 3241, 3241, 2349, 3242, 3242, 3242, - 2349, 3243, 3243, 3243, 2349, 3244, 3244, 3244, - 2349, 3246, 3240, 3246, 3246, 3246, 3245, 3234, - 3235, 71, 3247, 3247, 3247, 2349, 3248, 3248, - 3248, 2349, 3250, 3249, 3251, 3251, 3251, 2349, - 3252, 3252, 3252, 2349, 3253, 3250, 3253, 3253, - 3253, 3249, 3254, 3254, 3254, 2349, 3255, 3255, - 3255, 2349, 3256, 3249, 3257, 3257, 3257, 2349, - 3258, 3258, 3258, 2349, 3259, 3256, 3259, 3259, - 3259, 3249, 3260, 1746, 3261, 3261, 3262, 3263, - 3265, 3266, 3264, 1746, 3267, 3267, 3268, 3269, - 3271, 3272, 3270, 1746, 3273, 3273, 3274, 3275, - 3277, 3278, 3276, 1746, 3280, 3280, 3281, 3282, - 3283, 3284, 3279, 3279, 3279, 71, 3285, 3285, - 3285, 3285, 71, 3283, 3284, 71, 3271, 3272, - 71, 3286, 1746, 3287, 3287, 3288, 3289, 3291, - 3292, 3290, 1746, 3294, 3294, 3295, 3296, 3297, - 3298, 3293, 3293, 3293, 71, 3299, 3299, 3300, - 3301, 3302, 3303, 71, 3305, 3305, 3306, 3307, - 3308, 3309, 3304, 3304, 3304, 71, 3310, 3310, - 3310, 3310, 71, 3308, 3309, 71, 3297, 3298, - 71, 3312, 3312, 3313, 3314, 3315, 3316, 3316, - 3316, 20, 21, 3317, 3318, 3316, 3316, 3316, - 3311, 3319, 3319, 3320, 3321, 3322, 3323, 69, - 3324, 3323, 20, 21, 3325, 3326, 118, 119, - 3327, 3328, 69, 69, 3323, 69, 3323, 69, - 3323, 69, 739, 3330, 3330, 3313, 3331, 3332, - 3316, 3333, 3334, 3335, 3336, 3337, 3338, 3339, - 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, - 3316, 3316, 3333, 3334, 3335, 3336, 3337, 3338, - 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, - 3347, 20, 21, 3348, 3349, 3316, 3316, 3316, - 3329, 3330, 3330, 3313, 3331, 3332, 3316, 3352, - 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, - 3361, 3362, 3363, 3364, 3365, 3366, 3316, 3316, - 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, - 3360, 3361, 3362, 3363, 3364, 3365, 3366, 20, - 21, 3348, 3349, 3316, 3351, 3316, 3316, 3350, - 3368, 3368, 3369, 3370, 3371, 3372, 3372, 3372, - 3373, 3374, 3375, 3376, 3372, 3372, 3372, 3367, - 3312, 3312, 3313, 3377, 3378, 3316, 3352, 3353, - 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, - 3362, 3363, 3364, 3365, 3366, 3316, 3316, 3352, - 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, - 3361, 3362, 3363, 3364, 3365, 3366, 20, 21, - 3379, 3318, 3316, 3351, 3316, 3316, 3350, 3380, - 3380, 3313, 3381, 3382, 3316, 3316, 3316, 83, - 84, 3383, 3384, 3316, 3316, 3316, 739, 3385, - 3385, 3320, 3386, 3387, 3323, 69, 3324, 3323, - 83, 84, 3383, 3388, 92, 93, 3383, 3389, - 69, 69, 3323, 69, 3323, 69, 3323, 69, - 739, 3319, 3319, 3320, 3321, 3322, 3323, 69, - 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, - 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3324, - 3323, 3392, 3393, 3394, 3395, 3396, 3397, 3398, - 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, - 20, 21, 3325, 3326, 118, 119, 3327, 3328, - 69, 69, 3323, 3391, 69, 3323, 69, 3323, - 69, 3390, 3385, 3385, 3320, 3386, 3387, 3323, - 69, 3392, 3393, 3394, 3395, 3396, 3397, 3398, - 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, - 3324, 3323, 3392, 3393, 3394, 3395, 3396, 3397, - 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, - 3406, 83, 84, 3407, 3388, 92, 93, 3407, - 3389, 69, 69, 3323, 3391, 69, 3323, 69, - 3323, 69, 3390, 661, 661, 661, 852, 849, - 852, 851, 852, 849, 853, 849, 848, 661, - 661, 661, 985, 985, 986, 987, 957, 958, - 959, 957, 988, 989, 957, 957, 957, 963, - 661, 996, 996, 997, 998, 991, 999, 1000, - 1001, 1001, 1002, 1003, 991, 991, 991, 990, - 999, 1000, 990, 661, 1013, 1013, 1014, 1015, - 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, - 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1016, - 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, - 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, - 1033, 1033, 1034, 1035, 1004, 1031, 1032, 1004, - 661, 1517, 1517, 1518, 1519, 1520, 1521, 1522, - 1522, 1523, 1524, 1513, 1513, 1513, 1509, 1520, - 1521, 1509, 1539, 1539, 1540, 1541, 1543, 1544, - 1542, 1542, 1542, 1509, 1495, 1546, 1546, 1547, - 1548, 1549, 1550, 1551, 1551, 1552, 1553, 1542, - 1542, 1542, 1509, 1549, 1550, 1509, 1543, 1544, - 1495, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 1923, 1923, 1924, 1925, 1926, 1927, - 1928, 1928, 1929, 1930, 1922, 1922, 1922, 1913, - 1926, 1927, 1913, 661, 661, 2094, 2094, 2095, - 2096, 2097, 2098, 2043, 2043, 2099, 2100, 1934, - 2097, 2098, 1934, 2076, 2076, 2077, 2078, 2080, - 2081, 2043, 2043, 2082, 2083, 2079, 1934, 2080, - 2081, 1934, 2057, 2057, 2058, 2059, 2061, 2062, - 2043, 2043, 2063, 2064, 2060, 1934, 2061, 2062, - 1934, 2037, 2037, 2038, 2039, 2041, 2042, 2043, - 2043, 2044, 2045, 2040, 1934, 2041, 2042, 1934, - 661, 661, 661, 661, 2292, 2292, 2293, 2294, - 2295, 2296, 2297, 2298, 2299, 2300, 2300, 2301, - 2302, 2291, 2298, 2299, 71, 661, 2357, 2357, - 2358, 2359, 2360, 2361, 2362, 2362, 2363, 2364, - 2353, 2353, 2353, 2349, 2360, 2361, 2349, 661, - 2391, 2391, 2392, 2393, 2394, 2395, 2396, 2396, - 2397, 2398, 2387, 2387, 2387, 2349, 2394, 2395, - 2349, 661, 2439, 2439, 2440, 2441, 2445, 2445, - 2445, 2445, 2450, 2451, 2445, 2445, 2452, 2453, - 2458, 2450, 2451, 2458, 2436, 2436, 2437, 2438, - 2459, 2446, 2447, 2459, 2459, 2459, 2458, 2446, - 2447, 2458, 2459, 2436, 2436, 2437, 2438, 2439, - 2439, 2440, 2441, 2442, 2442, 2443, 2444, 2445, - 2445, 2445, 2445, 2446, 2447, 2445, 2445, 2448, - 2449, 2450, 2451, 2445, 2445, 2452, 2453, 2454, - 2455, 2445, 2445, 2456, 2457, 2459, 2459, 2459, - 2458, 2446, 2450, 2454, 2447, 2451, 2455, 2458, - 661, 661, 661, 661, 661, 661, 661, 3200, - 3200, 3201, 3202, 3203, 3204, 3205, 3205, 3206, - 3207, 3196, 3196, 3196, 2349, 3203, 3204, 2349, - 661, 661, 661, 661, 661, 661, 0 + 1584, 1584, 1559, 1585, 1586, 1585, 1586, 1559, + 1587, 1588, 1587, 1588, 1559, 1589, 1559, 1590, + 1590, 1559, 1591, 1591, 1559, 1592, 1592, 1559, + 1593, 1593, 1559, 1594, 1594, 1594, 1594, 1559, + 1595, 1595, 1559, 1596, 1596, 1559, 1597, 1597, + 1559, 1598, 1599, 1559, 1600, 1559, 1601, 1559, + 1602, 1602, 1559, 1603, 1603, 1559, 1604, 1604, + 1559, 1605, 1559, 1606, 1559, 1607, 1559, 1608, + 1608, 1608, 1608, 1559, 1609, 1559, 1610, 1559, + 1611, 1611, 1559, 1612, 1612, 1559, 1613, 1613, + 1559, 1614, 1559, 1615, 1559, 1616, 1559, 1617, + 1617, 1617, 1617, 1559, 1618, 1619, 1559, 1620, + 1559, 1621, 1559, 1622, 1559, 1623, 1559, 1624, + 1624, 1624, 1624, 1559, 1625, 1559, 1626, 1559, + 1627, 1627, 1627, 1627, 1559, 1628, 1628, 1559, + 1629, 1629, 1559, 1630, 1630, 1559, 1631, 1631, + 1559, 1632, 1632, 1559, 1633, 1633, 1559, 1634, + 1634, 1559, 1635, 1635, 1635, 1635, 1559, 1636, + 1636, 1559, 1637, 1637, 1559, 1638, 1638, 1559, + 1639, 1639, 1559, 1640, 1640, 1559, 1641, 1641, + 1559, 1642, 1643, 1642, 1643, 1559, 1644, 1644, + 1559, 1645, 1645, 1559, 1646, 1646, 1646, 1646, + 1559, 1647, 1647, 1559, 1648, 1648, 1559, 1649, + 1649, 1649, 1649, 1559, 1650, 1650, 1559, 1651, + 1651, 1559, 1652, 1653, 1652, 1653, 1559, 1654, + 1654, 1559, 1655, 1559, 1656, 1656, 1656, 1656, + 1559, 1657, 1657, 1559, 1658, 1658, 1559, 1659, + 1660, 1661, 1559, 1662, 1663, 1662, 1662, 1662, + 1559, 1664, 1664, 1559, 1665, 1665, 1559, 1666, + 1666, 1559, 1667, 1667, 1559, 1668, 1559, 1669, + 1559, 1670, 1670, 1559, 1671, 1671, 1559, 1672, + 1672, 1559, 1673, 1559, 1674, 1674, 1674, 1674, + 1559, 1675, 1559, 1676, 1559, 1677, 1677, 1677, + 1677, 1559, 1678, 1559, 1679, 1559, 1680, 1680, + 1680, 1680, 1559, 1683, 1684, 1685, 1686, 1687, + 1688, 1683, 1684, 1685, 1686, 1687, 1688, 1682, + 1681, 1689, 1689, 1689, 1689, 1690, 1681, 1691, + 1691, 1681, 1692, 1692, 1681, 1693, 1693, 1681, + 1694, 1694, 1681, 1695, 1695, 1681, 1696, 1696, + 1696, 1696, 1681, 1697, 1698, 1699, 1697, 1698, + 1699, 1681, 1700, 1700, 1681, 1701, 1701, 1681, + 1702, 1702, 1681, 1703, 1703, 1681, 1704, 1704, + 1681, 1705, 1705, 1705, 1705, 1681, 1706, 1707, + 1706, 1707, 1681, 1708, 1708, 1681, 1709, 1709, + 1709, 1709, 1681, 1710, 1710, 1681, 1711, 1711, + 1681, 1712, 1712, 1712, 1712, 1681, 1713, 1713, + 1681, 1714, 1714, 1681, 1715, 1715, 1681, 1716, + 1716, 1716, 1716, 1681, 1717, 1717, 1681, 1718, + 1718, 1681, 1719, 1719, 1719, 1719, 1681, 1720, + 1721, 1720, 1721, 1681, 1722, 1722, 1681, 1723, + 1723, 1723, 1723, 1681, 1724, 1724, 1681, 1725, + 1725, 1681, 1726, 1726, 1726, 1726, 1681, 1727, + 1727, 1681, 1728, 1728, 1681, 1729, 1729, 1681, + 1730, 1730, 1730, 1730, 1681, 1731, 1731, 1681, + 1732, 1732, 1681, 1733, 1733, 1733, 1733, 1681, + 1735, 1735, 1734, 1736, 1737, 1736, 1736, 1736, + 1737, 1734, 1738, 1738, 1738, 1738, 1738, 1738, + 71, 1739, 1739, 1739, 1739, 71, 1740, 1740, + 1740, 1740, 1740, 1740, 71, 1741, 1741, 1742, + 1743, 1744, 1745, 71, 1746, 1746, 1747, 1748, + 1749, 1749, 1749, 1750, 1751, 1749, 1749, 1749, + 71, 1752, 1752, 1753, 1754, 1755, 1756, 71, + 1758, 1758, 1759, 1760, 1762, 1763, 1761, 1757, + 1764, 1764, 1765, 1766, 1768, 1769, 1767, 1757, + 1770, 1770, 1771, 1772, 1774, 1775, 1773, 1757, + 1777, 1777, 1778, 1779, 1781, 1782, 1783, 1784, + 1785, 1781, 1782, 1783, 1784, 1785, 1786, 1787, + 1780, 1776, 1788, 1788, 1789, 1790, 1792, 1793, + 1791, 1757, 1794, 1794, 1795, 1796, 1798, 1799, + 1800, 1801, 1802, 1798, 1799, 1800, 1801, 1802, + 1803, 1804, 1797, 1776, 1805, 1805, 1806, 1807, + 1809, 1810, 1808, 1757, 1811, 1811, 1812, 1813, + 1815, 1816, 1817, 1818, 1819, 1815, 1816, 1817, + 1818, 1819, 1820, 1821, 1814, 1776, 1822, 1822, + 1823, 1824, 1826, 1827, 1825, 1757, 1828, 1828, + 1830, 1831, 1832, 1833, 1834, 1830, 1831, 1832, + 1833, 1834, 1828, 1828, 1829, 1776, 1828, 1828, + 1828, 1828, 1835, 1776, 1837, 1838, 1839, 1840, + 1841, 1837, 1838, 1839, 1840, 1841, 1836, 1776, + 1842, 1842, 1842, 1842, 1843, 1776, 1826, 1827, + 71, 1811, 1811, 1812, 1813, 1820, 1821, 1844, + 1776, 1846, 1847, 1848, 1849, 1850, 1846, 1847, + 1848, 1849, 1850, 1845, 1776, 1851, 1851, 1852, + 1853, 1855, 1856, 1854, 1776, 1809, 1810, 71, + 1794, 1794, 1795, 1796, 1803, 1804, 1857, 1776, + 1859, 1860, 1861, 1862, 1863, 1859, 1860, 1861, + 1862, 1863, 1858, 1776, 1864, 1864, 1865, 1866, + 1868, 1869, 1867, 1776, 1792, 1793, 71, 1777, + 1777, 1778, 1779, 1786, 1787, 1870, 1776, 1872, + 1873, 1874, 1875, 1876, 1872, 1873, 1874, 1875, + 1876, 1871, 1776, 1877, 1877, 1878, 1879, 1881, + 1882, 1880, 1776, 1774, 1775, 71, 1762, 1763, + 71, 1750, 1751, 71, 71, 71, 71, 71, + 1883, 1884, 1884, 1885, 1886, 1887, 1888, 71, + 1890, 1890, 1891, 1892, 1893, 1894, 1889, 1889, + 1889, 71, 1895, 1895, 1895, 1895, 71, 1893, + 1894, 71, 1896, 1896, 1896, 1896, 1896, 1896, + 71, 1897, 1897, 1898, 1899, 1900, 1901, 71, + 1902, 1902, 1903, 1904, 1905, 1905, 1905, 1906, + 1907, 1905, 1905, 1905, 71, 1908, 1908, 1908, + 1908, 71, 1906, 1907, 71, 1909, 1757, 1910, + 1910, 1911, 1912, 1914, 1915, 1913, 1757, 1916, + 1916, 1917, 1918, 1919, 1919, 1919, 1920, 1921, + 1919, 1919, 1919, 71, 1922, 1922, 1922, 1922, + 71, 1920, 1921, 71, 1924, 1924, 1924, 1924, + 1923, 1925, 1925, 1926, 1927, 1928, 1929, 1930, + 1930, 1931, 1932, 1924, 1934, 1934, 1935, 1936, + 1937, 1938, 1939, 1939, 1940, 1941, 1933, 1933, + 1933, 1924, 1937, 1938, 1924, 1942, 1942, 1942, + 1942, 1734, 1943, 1944, 1943, 1943, 1943, 1944, + 1944, 1944, 1734, 1946, 1945, 1947, 1947, 1948, + 1949, 1951, 1952, 1950, 1945, 1953, 1953, 1954, + 1955, 1957, 1958, 1959, 1960, 1956, 1945, 1961, + 1961, 1962, 1963, 1965, 1966, 1964, 1945, 1967, + 1967, 1968, 1969, 1957, 1958, 1971, 1972, 1970, + 1945, 1973, 1973, 1974, 1975, 1976, 1978, 1979, + 1977, 1945, 1980, 1980, 1981, 1982, 1957, 1958, + 1983, 1984, 1945, 1985, 1985, 1986, 1987, 1988, + 1989, 1945, 1985, 1985, 1986, 1987, 1988, 1989, + 1990, 1945, 1991, 1991, 1992, 1993, 1995, 1996, + 1994, 1945, 1997, 1997, 1998, 1999, 2001, 2002, + 2003, 2004, 2000, 1945, 2005, 2005, 2006, 2007, + 2009, 2010, 2008, 1945, 2011, 2011, 2012, 2013, + 2001, 2002, 2015, 2016, 2014, 1945, 2017, 2017, + 2018, 2019, 2020, 2022, 2023, 2021, 1945, 2024, + 2024, 2025, 2026, 2001, 2002, 2027, 2028, 1945, + 2029, 2029, 2030, 2031, 2032, 2033, 1945, 2029, + 2029, 2030, 2031, 2034, 2032, 2033, 2035, 1945, + 2036, 1945, 2037, 2037, 2038, 2039, 2040, 2042, + 2043, 2044, 2045, 2045, 2046, 2047, 2041, 1945, + 2048, 2048, 2049, 2050, 2052, 2053, 2054, 2054, + 2055, 2056, 2051, 1945, 2057, 2057, 2058, 2059, + 2060, 2062, 2063, 2064, 2065, 2065, 2066, 2067, + 2061, 1945, 2068, 2068, 2069, 2070, 2072, 2073, + 2054, 2054, 2074, 2075, 2071, 1945, 2076, 2076, + 2077, 2078, 2079, 2081, 2082, 2083, 2084, 2084, + 2085, 2086, 2080, 1945, 2087, 2087, 2088, 2089, + 2091, 2092, 2054, 2054, 2093, 2094, 2090, 1945, + 2095, 2095, 2096, 2097, 2098, 2095, 2100, 2101, + 2102, 2102, 2103, 2104, 2099, 1945, 2105, 2105, + 2106, 2107, 2108, 2109, 2054, 2054, 2110, 2111, + 1945, 2108, 2109, 1945, 2112, 2112, 2113, 2114, + 2112, 2116, 2117, 2118, 2118, 2119, 2120, 2115, + 1945, 2095, 2095, 2096, 2097, 2095, 2100, 2101, + 2102, 2102, 2103, 2104, 2121, 1945, 2091, 2092, + 1945, 2122, 2122, 2123, 2124, 2126, 2127, 2128, + 2129, 2129, 2130, 2131, 2125, 1945, 2076, 2076, + 2077, 2078, 2081, 2082, 2083, 2084, 2084, 2085, + 2086, 2132, 1945, 2087, 2087, 2088, 2089, 2091, + 2092, 2054, 2054, 2093, 2094, 1945, 2072, 2073, + 1945, 2133, 2133, 2134, 2135, 2137, 2138, 2139, + 2140, 2140, 2141, 2142, 2136, 1945, 2057, 2057, + 2058, 2059, 2062, 2063, 2064, 2065, 2065, 2066, + 2067, 2143, 1945, 2068, 2068, 2069, 2070, 2072, + 2073, 2054, 2054, 2074, 2075, 1945, 2052, 2053, + 1945, 2144, 2144, 2145, 2146, 2148, 2149, 2150, + 2151, 2151, 2152, 2153, 2147, 1945, 2037, 2037, + 2038, 2039, 2042, 2043, 2044, 2045, 2045, 2046, + 2047, 2154, 1945, 2048, 2048, 2049, 2050, 2052, + 2053, 2054, 2054, 2055, 2056, 1945, 2032, 2033, + 1945, 2155, 2155, 2156, 2157, 2158, 2159, 1945, + 2027, 2028, 1945, 2160, 2160, 2161, 2162, 2164, + 2165, 2163, 1945, 2017, 2017, 2018, 2019, 2022, + 2023, 2166, 1945, 2015, 2016, 1945, 2003, 2004, + 1945, 1988, 1989, 1945, 2167, 2167, 2168, 2169, + 2170, 2171, 1945, 1983, 1984, 1945, 2172, 2172, + 2173, 2174, 2176, 2177, 2175, 1945, 1973, 1973, + 1974, 1975, 1978, 1979, 2178, 1945, 1971, 1972, + 1945, 1959, 1960, 1945, 2179, 1757, 2180, 2180, + 2181, 2182, 2184, 2185, 2183, 1757, 2186, 2186, + 2187, 2188, 2190, 2191, 2189, 1757, 2192, 2192, + 2193, 2194, 2196, 2197, 2195, 1757, 2198, 2198, + 2199, 2200, 2202, 2203, 2201, 1757, 2204, 2204, + 2205, 2206, 2208, 2209, 2207, 1757, 2210, 2210, + 2211, 2212, 2213, 2213, 2213, 2214, 2215, 2213, + 2213, 2213, 71, 2216, 2216, 2216, 2216, 71, + 2214, 2215, 71, 2202, 2203, 71, 2190, 2191, + 71, 2217, 1757, 2218, 2218, 2219, 2220, 2222, + 2223, 2221, 1757, 2224, 2224, 2225, 2226, 2228, + 2229, 2227, 1757, 2230, 2230, 2231, 2232, 2234, + 2235, 2233, 1757, 2237, 2237, 2238, 2239, 2240, + 2241, 2236, 2236, 2236, 71, 2242, 2242, 2243, + 2244, 2245, 2246, 71, 2248, 2248, 2249, 2250, + 2251, 2252, 2247, 2247, 2247, 71, 2253, 2253, + 2254, 2255, 2256, 2257, 71, 2259, 2259, 2260, + 2261, 2262, 2263, 2258, 2258, 2258, 71, 2264, + 2264, 2265, 2266, 2267, 2268, 71, 2269, 2269, + 2270, 2271, 2272, 2272, 2272, 2273, 2274, 2272, + 2272, 2272, 71, 2275, 2275, 2275, 2275, 71, + 2273, 2274, 71, 2262, 2263, 71, 2251, 2252, + 71, 2240, 2241, 71, 2228, 2229, 71, 2276, + 2276, 2276, 71, 2277, 2277, 2278, 2279, 2280, + 2281, 71, 2277, 2277, 2278, 2279, 2280, 2281, + 2282, 1757, 2283, 2283, 2284, 2285, 2287, 2288, + 2286, 1757, 2289, 2289, 2290, 2291, 2293, 2294, + 2292, 2292, 2292, 71, 2295, 2295, 2296, 2297, + 2298, 2299, 71, 2295, 2295, 2296, 2297, 2300, + 2298, 2299, 2300, 2300, 2300, 71, 2301, 2301, + 71, 2298, 2299, 71, 2293, 2294, 71, 2280, + 2281, 71, 2303, 2303, 2304, 2305, 2306, 2307, + 2308, 2309, 2310, 2311, 2311, 2312, 2313, 2302, + 2314, 2315, 2302, 2316, 2302, 2318, 2318, 2317, + 2320, 2319, 2317, 2321, 2302, 2322, 2322, 2323, + 2324, 2326, 2327, 2328, 2328, 2329, 2330, 2325, + 2302, 2309, 2310, 71, 2331, 2302, 2332, 2332, + 2332, 2332, 2317, 2334, 2333, 2333, 2333, 2317, + 2335, 1757, 2336, 2336, 2337, 2338, 2340, 2341, + 2339, 1757, 2342, 2342, 2343, 2344, 2346, 2347, + 2345, 2345, 2345, 71, 2348, 2348, 2349, 2350, + 2351, 2352, 71, 2348, 2348, 2349, 2350, 2351, + 2352, 2353, 1757, 2354, 2354, 2355, 2356, 2358, + 2359, 2357, 1757, 2361, 2361, 2362, 2363, 2365, + 2366, 2364, 2364, 2364, 2360, 2367, 2367, 2367, + 2360, 2368, 2368, 2369, 2370, 2371, 2372, 2373, + 2373, 2374, 2375, 2364, 2364, 2364, 2360, 2371, + 2372, 2360, 2365, 2366, 71, 2351, 2352, 71, + 2346, 2347, 71, 2376, 1757, 2377, 2377, 2378, + 2379, 2381, 2382, 2380, 1757, 2383, 2383, 2384, + 2385, 2387, 2388, 2386, 1757, 2389, 2389, 2390, + 2391, 2393, 2394, 2392, 1757, 2395, 2395, 2396, + 2397, 2399, 2400, 2398, 2398, 2398, 2360, 2401, + 2401, 2401, 2360, 2402, 2402, 2403, 2404, 2405, + 2406, 2407, 2407, 2408, 2409, 2398, 2398, 2398, + 2360, 2405, 2406, 2360, 2399, 2400, 71, 2387, + 2388, 71, 2410, 1757, 2411, 2411, 2412, 2413, + 2415, 2416, 2414, 1757, 2418, 2418, 2419, 2420, + 2421, 2422, 2423, 2424, 2425, 2426, 2417, 2427, + 2427, 2428, 2429, 2430, 2431, 2417, 2427, 2427, + 2428, 2429, 2430, 2431, 2433, 2432, 2434, 2434, + 2435, 2436, 2438, 2439, 2437, 2432, 2440, 2440, + 2441, 2442, 2443, 2444, 2445, 2417, 2447, 2447, + 2448, 2449, 2450, 2450, 2451, 2452, 2453, 2453, + 2454, 2455, 2456, 2456, 2456, 2456, 2457, 2458, + 2456, 2456, 2459, 2460, 2461, 2462, 2456, 2456, + 2463, 2464, 2465, 2466, 2456, 2456, 2467, 2468, + 2446, 2447, 2447, 2448, 2449, 2470, 2457, 2458, + 2470, 2470, 2470, 2469, 2456, 2456, 2469, 2457, + 2458, 2469, 2450, 2450, 2451, 2452, 2456, 2456, + 2456, 2456, 2461, 2462, 2456, 2456, 2463, 2464, + 2469, 2461, 2462, 2469, 2470, 2447, 2447, 2448, + 2449, 2450, 2450, 2451, 2452, 2453, 2453, 2454, + 2455, 2456, 2456, 2456, 2456, 2457, 2458, 2456, + 2456, 2459, 2460, 2461, 2462, 2456, 2456, 2463, + 2464, 2465, 2466, 2456, 2456, 2467, 2468, 2470, + 2470, 2470, 2469, 2457, 2461, 2465, 2458, 2462, + 2466, 2469, 2444, 2445, 2417, 2430, 2431, 2417, + 2471, 2471, 2472, 2473, 2474, 2475, 2417, 2471, + 2471, 2472, 2473, 2474, 2475, 2476, 2432, 2477, + 2477, 2478, 2479, 2481, 2482, 2480, 2432, 2484, + 2484, 2485, 2486, 2487, 2488, 2489, 2487, 2483, + 2491, 2492, 2492, 2493, 2494, 2495, 2495, 2496, + 2497, 2498, 2498, 2499, 2500, 2501, 2501, 2501, + 2501, 2502, 2503, 2501, 2501, 2504, 2505, 2506, + 2507, 2501, 2501, 2508, 2509, 2510, 2511, 2501, + 2501, 2512, 2513, 2491, 2490, 2488, 2489, 2417, + 2474, 2475, 2417, 2514, 2514, 2515, 2516, 2517, + 2518, 2417, 2514, 2514, 2515, 2516, 2517, 2518, + 2519, 2432, 2520, 2520, 2521, 2522, 2524, 2525, + 2523, 2432, 2526, 2526, 2527, 2528, 2529, 2530, + 2531, 2529, 2529, 2529, 2483, 2532, 2533, 2533, + 2534, 2535, 2536, 2536, 2537, 2538, 2539, 2539, + 2540, 2541, 2542, 2542, 2542, 2542, 2543, 2544, + 2542, 2542, 2545, 2546, 2547, 2548, 2542, 2542, + 2549, 2550, 2551, 2552, 2542, 2542, 2553, 2554, + 2532, 2532, 2532, 2490, 2530, 2531, 2417, 2517, + 2518, 2417, 2555, 2555, 2556, 2557, 2558, 2559, + 2417, 2555, 2555, 2556, 2557, 2558, 2559, 2560, + 2432, 2561, 2561, 2562, 2563, 2565, 2566, 2564, + 2432, 2567, 2567, 2568, 2569, 2570, 2570, 2570, + 2571, 2572, 2570, 2570, 2570, 2417, 2573, 2573, + 2574, 2575, 2576, 2576, 2577, 2578, 2579, 2579, + 2580, 2581, 2582, 2582, 2582, 2582, 2583, 2584, + 2582, 2582, 2585, 2586, 2587, 2588, 2582, 2582, + 2589, 2590, 2591, 2592, 2582, 2582, 2593, 2594, + 2446, 2571, 2572, 2417, 2558, 2559, 2417, 2425, + 2426, 71, 2596, 2597, 2598, 2599, 2600, 2601, + 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, + 2610, 2596, 2597, 2598, 2599, 2600, 2601, 2602, + 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, + 2595, 2611, 2611, 2612, 2613, 2614, 2615, 2616, + 2614, 2615, 2616, 2617, 2618, 2595, 2619, 2619, + 2620, 2621, 2623, 2624, 2622, 2622, 2622, 71, + 2625, 2625, 2626, 2627, 2628, 2629, 71, 2625, + 2625, 2626, 2627, 2628, 2629, 2630, 1757, 2631, + 2631, 2632, 2633, 2635, 2636, 2634, 1757, 2637, + 2637, 2638, 2639, 2641, 2642, 2640, 1757, 2643, + 2643, 2644, 2645, 2647, 2648, 2646, 1757, 2650, + 2650, 2651, 2652, 2654, 2655, 2653, 2649, 2656, + 2656, 2657, 2658, 2660, 2661, 2659, 2649, 2662, + 2662, 2663, 2664, 2666, 2667, 2665, 2649, 2668, + 2668, 2669, 2670, 2672, 2673, 2671, 2649, 2674, + 2674, 2675, 2676, 2678, 2679, 2677, 1757, 2680, + 2680, 2681, 2682, 2684, 2685, 2683, 1757, 2686, + 2686, 2687, 2688, 2689, 2689, 2689, 2690, 2691, + 2689, 2689, 2689, 71, 2692, 2692, 2693, 2694, + 2695, 2696, 71, 2697, 2697, 2698, 2699, 2700, + 2701, 2702, 2700, 2700, 2700, 71, 2703, 2703, + 71, 2701, 2702, 71, 2690, 2691, 71, 2678, + 2679, 71, 2666, 2667, 71, 2654, 2655, 71, + 2641, 2642, 71, 2628, 2629, 71, 2623, 2624, + 71, 2704, 2704, 2595, 2705, 2705, 2595, 2706, + 2706, 2707, 2708, 2709, 2710, 2595, 2711, 2711, + 2595, 2712, 2712, 2595, 2713, 2713, 2595, 2714, + 2714, 2715, 2716, 2717, 2718, 2595, 2719, 2719, + 2595, 2720, 2720, 2721, 2722, 2723, 2724, 2595, + 2725, 2726, 2727, 2728, 2725, 2726, 2727, 2728, + 2595, 2729, 2729, 2595, 2730, 2730, 2731, 2732, + 2733, 2734, 2595, 2735, 2736, 2735, 2736, 2595, + 2737, 2737, 2595, 2738, 2738, 2595, 2739, 2739, + 2595, 2740, 2740, 2595, 2741, 2741, 2742, 2743, + 2744, 2745, 2595, 2746, 2746, 2747, 2748, 2749, + 2750, 2595, 2751, 2751, 2595, 2752, 2752, 2595, + 2753, 2753, 2754, 2755, 2756, 2757, 2595, 2758, + 2758, 2595, 2759, 2759, 2595, 2760, 2760, 2595, + 2761, 2761, 2762, 2763, 2764, 2765, 2595, 2766, + 2767, 2768, 2766, 2767, 2768, 2595, 2769, 2769, + 2595, 2770, 2770, 2595, 2771, 2771, 2595, 2772, + 2772, 2773, 2774, 2775, 2776, 2595, 2777, 2778, + 2777, 2778, 2595, 2779, 2779, 2595, 2780, 2780, + 2595, 2781, 2781, 2782, 2783, 2784, 2785, 2595, + 2786, 2786, 2595, 2787, 2787, 2595, 2788, 2788, + 2595, 2789, 2789, 2790, 2791, 2792, 2793, 2595, + 2794, 2794, 2795, 2796, 2797, 2798, 2595, 2799, + 2799, 2595, 2800, 2800, 2595, 2801, 2802, 2595, + 2803, 2595, 2804, 2804, 2805, 2806, 2807, 2808, + 2595, 2809, 2595, 2810, 2810, 2811, 2812, 2813, + 2814, 2595, 2815, 2815, 2595, 2816, 2816, 2595, + 2817, 2817, 2595, 2818, 2818, 2595, 2819, 2819, + 2820, 2821, 2822, 2823, 2595, 2824, 2824, 2595, + 2825, 2825, 2595, 2826, 2826, 2595, 2827, 2827, + 2595, 2828, 2828, 2595, 2829, 2829, 2595, 2830, + 2830, 2595, 2831, 2831, 2832, 2833, 2834, 2835, + 2595, 2836, 2837, 2836, 2837, 2595, 2838, 2838, + 2595, 2839, 2839, 2840, 2841, 2842, 2843, 2595, + 2844, 2844, 2845, 2846, 2847, 2848, 2595, 2849, + 2850, 2851, 2852, 2851, 2852, 2595, 2853, 2595, + 2854, 2854, 2855, 2856, 2857, 2858, 2595, 2859, + 2595, 2860, 2860, 2861, 2862, 2863, 2864, 2595, + 2865, 2865, 2595, 2866, 2866, 2867, 2868, 2869, + 2870, 2595, 2871, 2871, 2872, 2873, 2874, 2875, + 2595, 2876, 2877, 2876, 2877, 2595, 2878, 2878, + 2595, 2879, 2879, 2595, 2880, 2880, 2595, 2881, + 2881, 2882, 2883, 2884, 2885, 2595, 2886, 2886, + 2887, 2888, 2889, 2890, 2595, 2891, 2892, 2893, + 2891, 2892, 2893, 2595, 2894, 2894, 2595, 2895, + 2895, 2595, 2896, 2896, 2595, 2897, 2897, 2898, + 2899, 2900, 2901, 2595, 2902, 2902, 2595, 2903, + 2903, 2904, 2905, 2906, 2907, 2595, 2908, 2908, + 2909, 2910, 2911, 2911, 2912, 2913, 2595, 2914, + 2914, 2595, 2915, 2915, 2916, 2917, 2918, 2919, + 2920, 2595, 2921, 2921, 2922, 2923, 2924, 2924, + 2925, 2926, 2595, 2927, 2927, 2595, 2928, 2928, + 2595, 2929, 2929, 2595, 2930, 2930, 2595, 2931, + 2931, 2932, 2933, 2934, 2935, 2595, 2936, 2936, + 2595, 2937, 2937, 2595, 2938, 2938, 2939, 2940, + 2941, 2942, 2595, 2943, 2944, 2945, 2943, 2944, + 2945, 2595, 2946, 2946, 2947, 2948, 2949, 2950, + 2595, 2951, 2951, 2595, 2952, 2952, 2595, 2953, + 2953, 2595, 2954, 2954, 2955, 2956, 2957, 2958, + 2595, 2959, 2959, 2960, 2961, 2962, 2963, 2595, + 2964, 2965, 2966, 2967, 2964, 2965, 2966, 2967, + 2595, 2968, 2968, 2595, 2969, 2969, 2970, 2971, + 2972, 2973, 2595, 2974, 2974, 2595, 2975, 2975, + 2976, 2977, 2978, 2979, 2595, 2980, 2980, 2595, + 2981, 2981, 2982, 2983, 2984, 2985, 2595, 2986, + 2986, 2595, 2987, 2987, 2595, 2988, 2988, 2595, + 2989, 2989, 2990, 2991, 2992, 2993, 2595, 2994, + 2995, 2996, 2994, 2995, 2996, 2595, 2997, 2997, + 2595, 2998, 2998, 2595, 2999, 2999, 3000, 3001, + 3002, 3003, 2595, 3004, 3004, 2595, 3005, 3005, + 3006, 3007, 3008, 3009, 2595, 3010, 3010, 2595, + 3011, 3011, 2595, 3013, 3012, 3014, 3014, 3015, + 3016, 3018, 3019, 3017, 3012, 3020, 3020, 2595, + 3021, 3021, 2595, 3022, 3022, 3023, 3024, 3025, + 3026, 2595, 3027, 3027, 3027, 3027, 3027, 3027, + 71, 3028, 3028, 3028, 3028, 71, 3029, 3029, + 3029, 3029, 71, 3030, 1757, 3031, 3031, 3032, + 3033, 3035, 3036, 3034, 1757, 3037, 3037, 3038, + 3039, 3041, 3042, 3040, 1757, 3043, 3043, 3044, + 3045, 3047, 3048, 3046, 1757, 3049, 3049, 3050, + 3051, 3053, 3054, 3052, 3052, 3052, 71, 3055, + 3055, 3056, 3057, 3058, 3059, 71, 3055, 3055, + 3056, 3057, 3060, 3058, 3059, 3060, 3060, 3060, + 71, 3061, 3061, 71, 3058, 3059, 71, 3053, + 3054, 71, 3041, 3042, 71, 3062, 3062, 3062, + 3062, 71, 3063, 3063, 71, 3064, 1757, 3065, + 3065, 3066, 3067, 3069, 3070, 3068, 1757, 3071, + 3071, 3072, 3073, 3075, 3076, 3074, 1757, 3077, + 3077, 3078, 3079, 3081, 3082, 3080, 1757, 3083, + 3083, 3084, 3085, 3087, 3088, 3086, 1757, 3089, + 3089, 3090, 3091, 3093, 3094, 3092, 1757, 3095, + 3095, 3096, 3097, 3098, 3100, 3101, 3099, 3099, + 3099, 2360, 3102, 3102, 3103, 3104, 3105, 3106, + 2360, 3108, 3108, 3109, 3110, 3112, 3113, 3111, + 3111, 3111, 3107, 3114, 3114, 3114, 3107, 3116, + 3115, 3115, 3115, 3107, 3117, 3117, 3117, 3107, + 3119, 3118, 3118, 3118, 3107, 3121, 3120, 3120, + 3120, 3107, 3122, 3122, 3122, 3107, 3124, 3123, + 3123, 3123, 3107, 3125, 3125, 3125, 3125, 3126, + 3126, 3126, 3107, 3127, 3127, 3127, 3127, 71, + 3128, 3107, 3124, 3107, 3121, 3107, 3129, 3107, + 3119, 3107, 3112, 3113, 71, 3130, 3130, 3130, + 2360, 3102, 3102, 3103, 3104, 3105, 3106, 3131, + 3131, 3131, 2360, 3100, 3101, 71, 3087, 3088, + 71, 3075, 3076, 71, 3132, 1757, 3133, 3133, + 3134, 3135, 3137, 3138, 3136, 1757, 3139, 3139, + 3140, 3141, 3143, 3144, 3142, 1757, 3145, 3145, + 3146, 3147, 3149, 3150, 3148, 1757, 3151, 3151, + 3152, 3153, 3155, 3156, 3154, 1757, 3157, 3157, + 3158, 3159, 3161, 3162, 3160, 1757, 3163, 3163, + 3164, 3165, 3166, 3168, 3169, 3167, 3167, 3167, + 2360, 3170, 3170, 3170, 3170, 2360, 3171, 3171, + 3171, 2360, 3170, 3170, 3170, 3170, 3172, 3172, + 3172, 2360, 3168, 3169, 71, 3155, 3156, 71, + 3143, 3144, 71, 3173, 1757, 3174, 3174, 3175, + 3176, 3178, 3179, 3177, 1757, 3180, 3180, 3181, + 3182, 3184, 3185, 3183, 1757, 3186, 3186, 3187, + 3188, 3190, 3191, 3189, 1757, 3192, 3192, 3193, + 3194, 3196, 3197, 3195, 1757, 3198, 3198, 3199, + 3200, 3202, 3203, 3201, 1757, 3204, 3204, 3205, + 3206, 3208, 3209, 3207, 3207, 3207, 2360, 3210, + 3210, 3210, 2360, 3211, 3211, 3212, 3213, 3214, + 3215, 3216, 3216, 3217, 3218, 3207, 3207, 3207, + 2360, 3214, 3215, 2360, 3208, 3209, 71, 3196, + 3197, 71, 3184, 3185, 71, 3219, 1757, 3220, + 3220, 3221, 3222, 3224, 3225, 3223, 1757, 3226, + 3226, 3227, 3228, 3229, 3230, 3231, 3229, 1734, + 3232, 3233, 3232, 3232, 3232, 3233, 1734, 3230, + 3231, 71, 3234, 1757, 3235, 3235, 3236, 3237, + 3239, 3240, 3238, 1757, 3241, 3241, 3242, 3243, + 3245, 3246, 3244, 3244, 3244, 2360, 3247, 3247, + 3247, 2360, 3248, 3248, 3248, 2360, 3249, 3249, + 3249, 2360, 3251, 3250, 3252, 3252, 3252, 2360, + 3253, 3253, 3253, 2360, 3254, 3254, 3254, 2360, + 3255, 3255, 3255, 2360, 3257, 3251, 3257, 3257, + 3257, 3256, 3245, 3246, 71, 3258, 3258, 3258, + 2360, 3259, 3259, 3259, 2360, 3261, 3260, 3262, + 3262, 3262, 2360, 3263, 3263, 3263, 2360, 3264, + 3261, 3264, 3264, 3264, 3260, 3265, 3265, 3265, + 2360, 3266, 3266, 3266, 2360, 3267, 3260, 3268, + 3268, 3268, 2360, 3269, 3269, 3269, 2360, 3270, + 3267, 3270, 3270, 3270, 3260, 3271, 1757, 3272, + 3272, 3273, 3274, 3276, 3277, 3275, 1757, 3278, + 3278, 3279, 3280, 3282, 3283, 3281, 1757, 3284, + 3284, 3285, 3286, 3288, 3289, 3287, 1757, 3291, + 3291, 3292, 3293, 3294, 3295, 3290, 3290, 3290, + 71, 3296, 3296, 3296, 3296, 71, 3294, 3295, + 71, 3282, 3283, 71, 3297, 1757, 3298, 3298, + 3299, 3300, 3302, 3303, 3301, 1757, 3305, 3305, + 3306, 3307, 3308, 3309, 3304, 3304, 3304, 71, + 3310, 3310, 3311, 3312, 3313, 3314, 71, 3316, + 3316, 3317, 3318, 3319, 3320, 3315, 3315, 3315, + 71, 3321, 3321, 3321, 3321, 71, 3319, 3320, + 71, 3308, 3309, 71, 3323, 3323, 3324, 3325, + 3326, 3327, 3327, 3327, 20, 21, 3328, 3329, + 3327, 3327, 3327, 3322, 3330, 3330, 3331, 3332, + 3333, 3334, 69, 3335, 3334, 20, 21, 3336, + 3337, 118, 119, 3338, 3339, 69, 69, 3334, + 69, 3334, 69, 3334, 69, 739, 3341, 3341, + 3324, 3342, 3343, 3327, 3344, 3345, 3346, 3347, + 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, + 3356, 3357, 3358, 3327, 3327, 3344, 3345, 3346, + 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, + 3355, 3356, 3357, 3358, 20, 21, 3359, 3360, + 3327, 3327, 3327, 3340, 3341, 3341, 3324, 3342, + 3343, 3327, 3363, 3364, 3365, 3366, 3367, 3368, + 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, + 3377, 3327, 3327, 3363, 3364, 3365, 3366, 3367, + 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, + 3376, 3377, 20, 21, 3359, 3360, 3327, 3362, + 3327, 3327, 3361, 3379, 3379, 3380, 3381, 3382, + 3383, 3383, 3383, 3384, 3385, 3386, 3387, 3383, + 3383, 3383, 3378, 3323, 3323, 3324, 3388, 3389, + 3327, 3363, 3364, 3365, 3366, 3367, 3368, 3369, + 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, + 3327, 3327, 3363, 3364, 3365, 3366, 3367, 3368, + 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, + 3377, 20, 21, 3390, 3329, 3327, 3362, 3327, + 3327, 3361, 3391, 3391, 3324, 3392, 3393, 3327, + 3327, 3327, 83, 84, 3394, 3395, 3327, 3327, + 3327, 739, 3396, 3396, 3331, 3397, 3398, 3334, + 69, 3335, 3334, 83, 84, 3394, 3399, 92, + 93, 3394, 3400, 69, 69, 3334, 69, 3334, + 69, 3334, 69, 739, 3330, 3330, 3331, 3332, + 3333, 3334, 69, 3403, 3404, 3405, 3406, 3407, + 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, + 3416, 3417, 3335, 3334, 3403, 3404, 3405, 3406, + 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, + 3415, 3416, 3417, 20, 21, 3336, 3337, 118, + 119, 3338, 3339, 69, 69, 3334, 3402, 69, + 3334, 69, 3334, 69, 3401, 3396, 3396, 3331, + 3397, 3398, 3334, 69, 3403, 3404, 3405, 3406, + 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, + 3415, 3416, 3417, 3335, 3334, 3403, 3404, 3405, + 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, + 3414, 3415, 3416, 3417, 83, 84, 3418, 3399, + 92, 93, 3418, 3400, 69, 69, 3334, 3402, + 69, 3334, 69, 3334, 69, 3401, 661, 661, + 661, 852, 849, 852, 851, 852, 849, 853, + 849, 848, 661, 661, 661, 985, 985, 986, + 987, 957, 958, 959, 957, 988, 989, 957, + 957, 957, 963, 661, 996, 996, 997, 998, + 991, 999, 1000, 1001, 1001, 1002, 1003, 991, + 991, 991, 990, 999, 1000, 990, 661, 1013, + 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, + 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1033, 1034, 1035, 1004, + 1031, 1032, 1004, 661, 1517, 1517, 1518, 1519, + 1520, 1521, 1522, 1522, 1523, 1524, 1513, 1513, + 1513, 1509, 1520, 1521, 1509, 1539, 1539, 1540, + 1541, 1543, 1544, 1542, 1542, 1542, 1509, 1495, + 1546, 1546, 1547, 1548, 1549, 1550, 1551, 1551, + 1552, 1553, 1542, 1542, 1542, 1509, 1549, 1550, + 1509, 1543, 1544, 1495, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 1934, 1934, 1935, + 1936, 1937, 1938, 1939, 1939, 1940, 1941, 1933, + 1933, 1933, 1924, 1937, 1938, 1924, 661, 661, + 2105, 2105, 2106, 2107, 2108, 2109, 2054, 2054, + 2110, 2111, 1945, 2108, 2109, 1945, 2087, 2087, + 2088, 2089, 2091, 2092, 2054, 2054, 2093, 2094, + 2090, 1945, 2091, 2092, 1945, 2068, 2068, 2069, + 2070, 2072, 2073, 2054, 2054, 2074, 2075, 2071, + 1945, 2072, 2073, 1945, 2048, 2048, 2049, 2050, + 2052, 2053, 2054, 2054, 2055, 2056, 2051, 1945, + 2052, 2053, 1945, 661, 661, 661, 661, 2303, + 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, + 2311, 2311, 2312, 2313, 2302, 2309, 2310, 71, + 661, 2368, 2368, 2369, 2370, 2371, 2372, 2373, + 2373, 2374, 2375, 2364, 2364, 2364, 2360, 2371, + 2372, 2360, 661, 2402, 2402, 2403, 2404, 2405, + 2406, 2407, 2407, 2408, 2409, 2398, 2398, 2398, + 2360, 2405, 2406, 2360, 661, 2450, 2450, 2451, + 2452, 2456, 2456, 2456, 2456, 2461, 2462, 2456, + 2456, 2463, 2464, 2469, 2461, 2462, 2469, 2447, + 2447, 2448, 2449, 2470, 2457, 2458, 2470, 2470, + 2470, 2469, 2457, 2458, 2469, 2470, 2447, 2447, + 2448, 2449, 2450, 2450, 2451, 2452, 2453, 2453, + 2454, 2455, 2456, 2456, 2456, 2456, 2457, 2458, + 2456, 2456, 2459, 2460, 2461, 2462, 2456, 2456, + 2463, 2464, 2465, 2466, 2456, 2456, 2467, 2468, + 2470, 2470, 2470, 2469, 2457, 2461, 2465, 2458, + 2462, 2466, 2469, 661, 661, 661, 661, 661, + 661, 661, 3211, 3211, 3212, 3213, 3214, 3215, + 3216, 3216, 3217, 3218, 3207, 3207, 3207, 2360, + 3214, 3215, 2360, 661, 661, 661, 661, 661, + 661, 0 }; static const short _zone_scanner_trans_targs[] = { 0, 1, 1, 1, 2, 4, 16, 34, 48, 55, 141, 71, 75, 83, 89, 105, - 108, 115, 126, 136, 1111, 149, 1116, 257, + 108, 115, 126, 136, 1120, 149, 1125, 257, 0, 3, 3, 3, 2, 164, 164, 164, 164, 164, 3, 167, 0, 3, 3, 3, 4, 16, 34, 48, 55, 60, 71, 75, @@ -4109,13 +4122,13 @@ static const short _zone_scanner_trans_targs[] = { 167, 0, 5, 5, 5, 227, 230, 234, 5, 10, 6, 11, 19, 6, 5, 0, 5, 5, 9, 5, 10, 11, 19, 0, - 7, 7, 7, 1111, 8, 0, 6, 6, - 11, 11, 11, 12, 1117, 174, 240, 1112, + 7, 7, 7, 1120, 8, 0, 6, 6, + 11, 11, 11, 12, 1126, 174, 240, 1121, 13, 0, 13, 13, 14, 170, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 1119, 236, 1117, 237, - 1120, 239, 0, 15, 15, 15, 1113, 260, - 0, 15, 15, 15, 1113, 260, 17, 20, + 187, 188, 189, 190, 1128, 236, 1126, 237, + 1129, 239, 0, 15, 15, 15, 1122, 260, + 0, 15, 15, 15, 1122, 260, 17, 20, 27, 30, 18, 5, 5, 5, 5, 10, 6, 11, 19, 19, 19, 19, 21, 26, 22, 23, 24, 25, 5, 5, 5, 5, @@ -4172,7 +4185,7 @@ static const short _zone_scanner_trans_targs[] = { 134, 0, 135, 0, 5, 5, 5, 135, 5, 10, 6, 11, 19, 137, 138, 5, 5, 5, 5, 10, 6, 11, 19, 140, - 140, 140, 1114, 258, 142, 143, 143, 143, + 140, 140, 1123, 258, 142, 143, 143, 143, 143, 148, 143, 143, 143, 144, 4, 16, 34, 48, 55, 63, 71, 75, 83, 89, 105, 108, 115, 126, 136, 143, 148, 62, @@ -4180,21 +4193,21 @@ static const short _zone_scanner_trans_targs[] = { 62, 139, 146, 146, 147, 147, 147, 147, 147, 62, 62, 62, 146, 62, 139, 0, 151, 193, 199, 152, 153, 154, 155, 156, - 157, 1115, 0, 159, 159, 159, 159, 160, + 157, 1124, 0, 159, 159, 159, 159, 160, 159, 159, 159, 159, 160, 0, 0, 162, 162, 162, 162, 163, 162, 162, 162, 162, 163, 165, 165, 166, 166, 166, 166, 166, 3, 3, 3, 165, 3, 167, 0, 169, 169, 169, 169, 241, 176, 242, 169, 169, 169, 169, 241, 176, 242, 0, 171, 171, - 171, 1112, 12, 1117, 174, 1118, 240, 171, - 171, 171, 1118, 172, 172, 172, 1116, 173, + 171, 1121, 12, 1126, 174, 1127, 240, 171, + 171, 171, 1127, 172, 172, 172, 1125, 173, 175, 175, 175, 176, 176, 176, 191, 226, - 1119, 0, 194, 195, 196, 197, 198, 1115, - 200, 201, 1115, 0, 172, 172, 172, 1116, - 173, 0, 204, 204, 204, 1114, 205, 204, - 204, 204, 1114, 205, 0, 207, 207, 207, - 1119, 191, 1120, 226, 207, 207, 207, 1120, + 1128, 0, 194, 195, 196, 197, 198, 1124, + 200, 201, 1124, 0, 172, 172, 172, 1125, + 173, 0, 204, 204, 204, 1123, 205, 204, + 204, 204, 1123, 205, 0, 207, 207, 207, + 1128, 191, 1129, 226, 207, 207, 207, 1129, 223, 0, 223, 223, 223, 224, 225, 225, 225, 226, 226, 226, 228, 229, 5, 5, 5, 5, 10, 6, 11, 19, 231, 232, @@ -4202,798 +4215,802 @@ static const short _zone_scanner_trans_targs[] = { 19, 235, 5, 5, 5, 5, 10, 6, 11, 19, 238, 238, 238, 239, 239, 239, 240, 240, 240, 242, 242, 242, 0, 262, - 1121, 262, 1121, 0, 264, 270, 271, 266, - 1122, 264, 265, 266, 1122, 264, 266, 267, - 0, 268, 269, 1122, 264, 265, 266, 1122, - 0, 273, 278, 274, 1123, 1124, 275, 0, - 276, 277, 1123, 273, 1124, 274, 278, 279, + 1130, 262, 1130, 0, 264, 270, 271, 266, + 1131, 264, 265, 266, 1131, 264, 266, 267, + 0, 268, 269, 1131, 264, 265, 266, 1131, + 0, 273, 278, 274, 1132, 1133, 275, 0, + 276, 277, 1132, 273, 1133, 274, 278, 279, 280, 0, 281, 282, 283, 278, 279, 280, 0, 285, 285, 285, 285, 292, 0, 286, 0, 287, 287, 287, 286, 289, 289, 289, - 289, 289, 1125, 288, 0, 290, 0, 290, + 289, 289, 1134, 288, 0, 290, 0, 290, 291, 291, 291, 291, 291, 287, 287, 287, - 290, 1125, 288, 0, 294, 294, 294, 294, + 290, 1134, 288, 0, 294, 294, 294, 294, 304, 295, 303, 299, 295, 296, 299, 0, - 297, 297, 297, 295, 299, 1126, 298, 297, - 297, 297, 1126, 298, 300, 0, 301, 302, + 297, 297, 297, 295, 299, 1135, 298, 297, + 297, 297, 1135, 298, 300, 0, 301, 302, 295, 296, 299, 306, 306, 306, 306, 321, - 307, 0, 0, 308, 308, 308, 1127, 312, + 307, 0, 0, 308, 308, 308, 1136, 312, 318, 0, 308, 308, 308, 309, 317, 313, - 1127, 312, 318, 0, 309, 310, 313, 311, - 311, 311, 309, 313, 1127, 312, 311, 311, + 1136, 312, 318, 0, 309, 310, 313, 311, + 311, 311, 309, 313, 1136, 312, 311, 311, 311, 314, 0, 315, 316, 309, 310, 313, - 1128, 319, 319, 319, 319, 320, 0, 323, + 1137, 319, 319, 319, 319, 320, 0, 323, 324, 325, 328, 326, 326, 326, 326, 326, - 327, 1129, 1130, 1131, 0, 330, 330, 330, - 330, 335, 1132, 1133, 1134, 330, 330, 330, + 327, 1138, 1139, 1140, 0, 330, 330, 330, + 330, 335, 1141, 1142, 1143, 330, 330, 330, 331, 336, 353, 367, 374, 379, 387, 391, 399, 405, 421, 424, 431, 442, 452, 330, - 335, 1132, 1133, 1134, 330, 330, 330, 332, - 455, 459, 330, 335, 1132, 1133, 1134, 333, - 334, 330, 330, 330, 330, 335, 1132, 1133, - 1134, 337, 339, 346, 349, 338, 330, 330, - 330, 330, 335, 1132, 1133, 1134, 340, 345, + 335, 1141, 1142, 1143, 330, 330, 330, 332, + 455, 459, 330, 335, 1141, 1142, 1143, 333, + 334, 330, 330, 330, 330, 335, 1141, 1142, + 1143, 337, 339, 346, 349, 338, 330, 330, + 330, 330, 335, 1141, 1142, 1143, 340, 345, 341, 342, 343, 344, 330, 330, 330, 330, - 335, 1132, 1133, 1134, 330, 330, 330, 330, - 335, 1132, 1133, 1134, 347, 348, 330, 330, - 330, 330, 335, 1132, 1133, 1134, 350, 351, - 352, 330, 330, 330, 330, 335, 1132, 1133, - 1134, 354, 358, 366, 355, 356, 357, 330, - 330, 330, 330, 335, 1132, 1133, 1134, 359, + 335, 1141, 1142, 1143, 330, 330, 330, 330, + 335, 1141, 1142, 1143, 347, 348, 330, 330, + 330, 330, 335, 1141, 1142, 1143, 350, 351, + 352, 330, 330, 330, 330, 335, 1141, 1142, + 1143, 354, 358, 366, 355, 356, 357, 330, + 330, 330, 330, 335, 1141, 1142, 1143, 359, 362, 360, 361, 330, 330, 330, 330, 335, - 1132, 1133, 1134, 363, 364, 365, 330, 330, - 330, 330, 335, 1132, 1133, 1134, 330, 330, - 330, 330, 335, 1132, 1133, 1134, 368, 369, + 1141, 1142, 1143, 363, 364, 365, 330, 330, + 330, 330, 335, 1141, 1142, 1143, 330, 330, + 330, 330, 335, 1141, 1142, 1143, 368, 369, 370, 372, 371, 330, 330, 330, 330, 335, - 1132, 1133, 1134, 373, 330, 330, 330, 330, - 335, 1132, 1133, 1134, 375, 376, 377, 378, - 330, 330, 330, 330, 335, 1132, 1133, 1134, + 1141, 1142, 1143, 373, 330, 330, 330, 330, + 335, 1141, 1142, 1143, 375, 376, 377, 378, + 330, 330, 330, 330, 335, 1141, 1142, 1143, 380, 381, 382, 383, 384, 385, 386, 330, - 330, 330, 330, 335, 1132, 1133, 1134, 388, - 390, 389, 330, 330, 330, 330, 335, 1132, - 1133, 1134, 330, 330, 330, 330, 335, 1132, - 1133, 1134, 392, 394, 396, 398, 393, 330, - 330, 330, 330, 335, 1132, 1133, 1134, 395, - 330, 330, 330, 330, 335, 1132, 1133, 1134, - 397, 330, 330, 330, 330, 335, 1132, 1133, - 1134, 330, 330, 330, 330, 335, 1132, 1133, - 1134, 400, 404, 401, 402, 403, 330, 330, - 330, 330, 335, 1132, 1133, 1134, 330, 330, - 330, 330, 335, 1132, 1133, 1134, 406, 410, + 330, 330, 330, 335, 1141, 1142, 1143, 388, + 390, 389, 330, 330, 330, 330, 335, 1141, + 1142, 1143, 330, 330, 330, 330, 335, 1141, + 1142, 1143, 392, 394, 396, 398, 393, 330, + 330, 330, 330, 335, 1141, 1142, 1143, 395, + 330, 330, 330, 330, 335, 1141, 1142, 1143, + 397, 330, 330, 330, 330, 335, 1141, 1142, + 1143, 330, 330, 330, 330, 335, 1141, 1142, + 1143, 400, 404, 401, 402, 403, 330, 330, + 330, 330, 335, 1141, 1142, 1143, 330, 330, + 330, 330, 335, 1141, 1142, 1143, 406, 410, 412, 407, 408, 409, 330, 330, 330, 330, - 335, 1132, 1133, 1134, 411, 330, 330, 330, - 330, 335, 1132, 1133, 1134, 330, 330, 330, - 413, 330, 335, 1132, 1133, 1134, 414, 330, - 330, 330, 415, 330, 335, 1132, 1133, 1134, - 330, 330, 330, 416, 330, 335, 1132, 1133, - 1134, 417, 418, 419, 420, 330, 330, 330, - 330, 335, 1132, 1133, 1134, 422, 423, 330, - 330, 330, 330, 335, 1132, 1133, 1134, 425, - 426, 430, 330, 330, 330, 330, 335, 1132, - 1133, 1134, 427, 428, 429, 330, 330, 330, - 330, 335, 1132, 1133, 1134, 330, 330, 330, - 330, 335, 1132, 1133, 1134, 432, 434, 436, - 438, 433, 330, 330, 330, 330, 335, 1132, - 1133, 1134, 435, 330, 330, 330, 330, 335, - 1132, 1133, 1134, 437, 330, 330, 330, 330, - 335, 1132, 1133, 1134, 439, 440, 441, 330, - 330, 330, 330, 335, 1132, 1133, 1134, 443, + 335, 1141, 1142, 1143, 411, 330, 330, 330, + 330, 335, 1141, 1142, 1143, 330, 330, 330, + 413, 330, 335, 1141, 1142, 1143, 414, 330, + 330, 330, 415, 330, 335, 1141, 1142, 1143, + 330, 330, 330, 416, 330, 335, 1141, 1142, + 1143, 417, 418, 419, 420, 330, 330, 330, + 330, 335, 1141, 1142, 1143, 422, 423, 330, + 330, 330, 330, 335, 1141, 1142, 1143, 425, + 426, 430, 330, 330, 330, 330, 335, 1141, + 1142, 1143, 427, 428, 429, 330, 330, 330, + 330, 335, 1141, 1142, 1143, 330, 330, 330, + 330, 335, 1141, 1142, 1143, 432, 434, 436, + 438, 433, 330, 330, 330, 330, 335, 1141, + 1142, 1143, 435, 330, 330, 330, 330, 335, + 1141, 1142, 1143, 437, 330, 330, 330, 330, + 335, 1141, 1142, 1143, 439, 440, 441, 330, + 330, 330, 330, 335, 1141, 1142, 1143, 443, 446, 448, 444, 445, 330, 330, 330, 330, - 335, 1132, 1133, 1134, 447, 330, 330, 330, - 330, 335, 1132, 1133, 1134, 449, 450, 451, - 330, 330, 330, 451, 330, 335, 1132, 1133, - 1134, 453, 454, 330, 330, 330, 330, 335, - 1132, 1133, 1134, 456, 457, 458, 330, 330, - 330, 330, 335, 1132, 1133, 1134, 460, 330, - 330, 330, 330, 335, 1132, 1133, 1134, 0, + 335, 1141, 1142, 1143, 447, 330, 330, 330, + 330, 335, 1141, 1142, 1143, 449, 450, 451, + 330, 330, 330, 451, 330, 335, 1141, 1142, + 1143, 453, 454, 330, 330, 330, 330, 335, + 1141, 1142, 1143, 456, 457, 458, 330, 330, + 330, 330, 335, 1141, 1142, 1143, 460, 330, + 330, 330, 330, 335, 1141, 1142, 1143, 0, 462, 462, 462, 462, 469, 0, 463, 464, 464, 464, 463, 464, 468, 0, 464, 464, 464, 465, 464, 468, 466, 466, 466, 466, - 466, 467, 1135, 1136, 1137, 471, 471, 471, - 471, 479, 472, 478, 1138, 1138, 1138, 478, - 1139, 1138, 1142, 473, 473, 473, 474, 473, - 477, 475, 475, 475, 475, 475, 476, 1139, - 1140, 1141, 473, 473, 473, 473, 477, 0, - 481, 482, 497, 527, 535, 548, 1143, 481, - 483, 484, 1143, 485, 1143, 486, 487, 488, + 466, 467, 1144, 1145, 1146, 471, 471, 471, + 471, 479, 472, 478, 1147, 1147, 1147, 478, + 1148, 1147, 1151, 473, 473, 473, 474, 473, + 477, 475, 475, 475, 475, 475, 476, 1148, + 1149, 1150, 473, 473, 473, 473, 477, 0, + 481, 482, 497, 536, 544, 557, 1152, 481, + 483, 484, 1152, 485, 1152, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 1143, 498, 499, 505, 500, 501, 502, 503, - 504, 1143, 506, 507, 508, 509, 518, 510, - 511, 512, 513, 514, 515, 516, 517, 1143, - 519, 520, 521, 522, 523, 524, 525, 526, - 1143, 528, 529, 530, 531, 532, 533, 534, - 1143, 536, 537, 538, 539, 540, 541, 542, - 545, 543, 544, 1143, 546, 547, 1143, 549, - 550, 551, 554, 552, 553, 1143, 555, 556, - 557, 569, 572, 1143, 558, 559, 560, 561, - 562, 563, 564, 565, 566, 567, 568, 1143, - 570, 571, 1143, 573, 574, 1143, 0, 576, - 577, 583, 600, 603, 609, 613, 1144, 576, - 578, 579, 580, 581, 582, 1144, 584, 590, - 596, 585, 586, 587, 588, 589, 1144, 591, - 593, 592, 1144, 594, 595, 1144, 597, 598, - 599, 1144, 601, 602, 1144, 604, 606, 605, - 1144, 607, 608, 1144, 610, 611, 612, 1144, - 614, 615, 1144, 0, 617, 1145, 617, 619, - 1146, 621, 622, 622, 622, 622, 651, 622, - 622, 622, 623, 622, 651, 624, 624, 624, - 624, 650, 0, 624, 624, 624, 625, 624, - 650, 626, 626, 626, 625, 626, 649, 626, - 626, 626, 627, 626, 649, 0, 628, 628, - 628, 627, 646, 646, 646, 646, 646, 628, - 645, 628, 628, 628, 629, 628, 645, 630, - 630, 630, 629, 642, 642, 642, 642, 642, - 630, 641, 630, 630, 630, 631, 630, 641, - 632, 632, 632, 631, 638, 638, 638, 638, - 638, 632, 637, 632, 632, 632, 633, 632, - 637, 1147, 633, 634, 634, 634, 634, 634, - 635, 635, 636, 636, 636, 636, 636, 1147, - 635, 639, 639, 640, 640, 640, 640, 640, - 632, 632, 632, 639, 632, 637, 643, 643, - 644, 644, 644, 644, 644, 630, 630, 630, - 643, 630, 641, 647, 647, 648, 648, 648, - 648, 648, 628, 628, 628, 647, 628, 645, - 653, 654, 654, 654, 654, 656, 655, 654, - 654, 654, 654, 656, 1148, 658, 659, 659, - 659, 659, 661, 659, 659, 659, 660, 659, - 661, 1149, 663, 664, 664, 664, 663, 664, - 666, 664, 664, 664, 665, 664, 666, 1150, - 668, 0, 669, 669, 669, 669, 670, 1151, - 1152, 1153, 668, 669, 669, 669, 669, 670, - 1151, 1152, 1153, 672, 1154, 672, 0, 674, - 675, 675, 675, 674, 675, 727, 675, 675, - 675, 676, 680, 722, 675, 727, 677, 677, - 677, 676, 677, 726, 677, 677, 677, 678, - 677, 726, 679, 679, 679, 724, 678, 679, - 723, 679, 679, 679, 679, 723, 681, 681, - 681, 681, 721, 682, 683, 683, 683, 682, - 683, 720, 683, 683, 683, 684, 688, 715, - 683, 720, 685, 685, 685, 684, 685, 719, - 685, 685, 685, 686, 685, 719, 687, 687, - 687, 717, 686, 687, 716, 687, 687, 687, - 687, 716, 689, 689, 689, 689, 714, 690, - 691, 691, 692, 692, 692, 711, 691, 713, - 692, 710, 1155, 1162, 1163, 692, 692, 692, - 693, 692, 710, 1155, 1162, 1163, 694, 694, - 694, 707, 693, 709, 694, 706, 1155, 1160, - 1161, 694, 694, 694, 695, 694, 706, 1160, - 1161, 696, 696, 696, 703, 695, 705, 696, - 702, 1155, 1158, 1159, 696, 696, 696, 697, - 696, 702, 1158, 1159, 698, 698, 698, 700, - 697, 698, 699, 1155, 1156, 1157, 698, 698, - 698, 698, 699, 1156, 1157, 698, 698, 698, - 701, 698, 699, 1155, 1156, 1157, 701, 696, - 696, 696, 704, 705, 696, 702, 1155, 1158, - 1159, 704, 694, 694, 694, 708, 709, 694, - 706, 1155, 1160, 1161, 708, 692, 692, 692, - 712, 713, 692, 710, 1155, 1162, 1163, 712, - 689, 689, 689, 689, 714, 687, 687, 687, - 718, 687, 716, 718, 681, 681, 681, 681, - 721, 679, 679, 679, 725, 679, 723, 725, - 729, 730, 730, 730, 729, 730, 738, 730, - 730, 730, 731, 730, 738, 732, 732, 732, - 731, 732, 737, 732, 732, 732, 733, 732, - 737, 734, 734, 734, 733, 734, 736, 734, - 734, 734, 735, 734, 736, 1164, 740, 741, - 741, 741, 740, 741, 755, 741, 741, 741, - 742, 741, 755, 743, 743, 743, 742, 743, - 754, 744, 743, 743, 743, 743, 754, 745, - 745, 745, 745, 753, 746, 745, 745, 745, - 745, 753, 747, 747, 747, 747, 752, 748, - 747, 747, 747, 747, 752, 749, 749, 749, - 749, 751, 749, 749, 749, 750, 749, 751, - 1165, 757, 758, 758, 758, 758, 766, 759, - 760, 760, 760, 759, 760, 765, 760, 760, - 760, 761, 760, 765, 762, 762, 762, 762, - 764, 763, 1166, 0, 767, 768, 767, 767, - 769, 775, 767, 774, 1167, 1168, 1169, 769, - 775, 770, 0, 771, 771, 772, 773, 767, - 767, 767, 773, 767, 774, 1167, 1168, 1169, - 776, 777, 777, 772, 779, 780, 780, 780, - 779, 780, 790, 780, 780, 780, 781, 780, - 790, 782, 782, 782, 782, 789, 783, 784, - 784, 784, 783, 784, 788, 0, 784, 784, - 784, 785, 784, 788, 786, 786, 786, 786, - 786, 787, 1170, 1171, 1172, 792, 793, 793, - 793, 792, 793, 800, 793, 793, 793, 794, - 793, 800, 795, 795, 795, 794, 795, 799, - 795, 795, 795, 796, 795, 799, 797, 797, - 797, 797, 797, 798, 1173, 1174, 1175, 802, - 803, 803, 803, 802, 803, 839, 0, 803, - 803, 803, 804, 818, 825, 832, 803, 839, - 805, 805, 805, 805, 817, 0, 806, 807, - 807, 807, 806, 807, 816, 807, 807, 807, - 808, 807, 816, 0, 809, 809, 809, 812, - 812, 812, 814, 814, 814, 1176, 809, 811, - 1179, 1180, 812, 813, 1177, 1178, 814, 815, - 1181, 1182, 0, 810, 819, 819, 819, 819, - 824, 820, 821, 821, 821, 820, 821, 823, - 0, 821, 821, 821, 822, 821, 823, 0, - 822, 809, 809, 809, 812, 812, 812, 814, - 814, 814, 1176, 809, 811, 1179, 1180, 812, - 813, 1177, 1178, 814, 815, 1181, 1182, 826, - 826, 826, 826, 831, 827, 828, 828, 828, - 827, 828, 830, 828, 828, 828, 829, 828, - 830, 829, 809, 809, 809, 812, 812, 812, - 814, 814, 814, 1176, 809, 811, 1179, 1180, - 812, 813, 1177, 1178, 814, 815, 1181, 1182, - 833, 833, 833, 833, 838, 834, 835, 835, - 835, 834, 835, 837, 835, 835, 835, 836, - 835, 837, 809, 809, 809, 812, 812, 812, - 814, 814, 814, 1176, 809, 811, 1179, 1180, - 812, 813, 1177, 1178, 814, 815, 1181, 1182, - 0, 841, 875, 892, 906, 913, 918, 926, - 930, 938, 944, 960, 963, 970, 981, 991, - 842, 842, 842, 866, 869, 873, 842, 865, - 842, 842, 842, 843, 842, 865, 844, 844, - 844, 844, 864, 845, 846, 846, 846, 845, - 846, 863, 846, 846, 846, 847, 846, 863, - 848, 848, 848, 847, 848, 862, 0, 848, - 848, 848, 849, 848, 862, 850, 850, 850, - 849, 850, 861, 850, 850, 850, 851, 850, - 861, 852, 852, 852, 851, 852, 860, 852, - 852, 852, 853, 852, 860, 854, 854, 854, - 853, 854, 859, 854, 854, 854, 855, 854, - 859, 856, 856, 856, 856, 858, 856, 856, - 856, 857, 856, 858, 1183, 867, 868, 842, - 842, 842, 842, 865, 870, 871, 872, 842, - 842, 842, 842, 865, 874, 842, 842, 842, - 842, 865, 876, 878, 885, 888, 877, 842, - 842, 842, 842, 865, 879, 884, 880, 881, - 882, 883, 842, 842, 842, 842, 865, 842, - 842, 842, 842, 865, 886, 887, 842, 842, - 842, 842, 865, 889, 890, 891, 842, 842, - 842, 842, 865, 893, 897, 905, 894, 895, - 896, 842, 842, 842, 842, 865, 898, 901, - 899, 900, 842, 842, 842, 842, 865, 902, - 903, 904, 842, 842, 842, 842, 865, 842, - 842, 842, 842, 865, 907, 908, 909, 911, - 910, 842, 842, 842, 842, 865, 912, 842, - 842, 842, 842, 865, 914, 915, 916, 917, - 842, 842, 842, 842, 865, 919, 920, 921, - 922, 923, 924, 925, 842, 842, 842, 842, - 865, 927, 929, 928, 842, 842, 842, 842, - 865, 842, 842, 842, 842, 865, 931, 933, - 935, 937, 932, 842, 842, 842, 842, 865, - 934, 842, 842, 842, 842, 865, 936, 842, - 842, 842, 842, 865, 842, 842, 842, 842, - 865, 939, 943, 940, 941, 942, 842, 842, - 842, 842, 865, 842, 842, 842, 842, 865, - 945, 949, 951, 946, 947, 948, 842, 842, - 842, 842, 865, 950, 842, 842, 842, 842, - 865, 842, 842, 842, 952, 842, 865, 953, - 842, 842, 842, 954, 842, 865, 842, 842, - 842, 955, 842, 865, 956, 957, 958, 959, - 842, 842, 842, 842, 865, 961, 962, 842, - 842, 842, 842, 865, 964, 965, 969, 842, - 842, 842, 842, 865, 966, 967, 968, 842, - 842, 842, 842, 865, 842, 842, 842, 842, - 865, 971, 973, 975, 977, 972, 842, 842, - 842, 842, 865, 974, 842, 842, 842, 842, - 865, 976, 842, 842, 842, 842, 865, 978, - 979, 980, 842, 842, 842, 842, 865, 982, - 985, 987, 983, 984, 842, 842, 842, 842, - 865, 986, 842, 842, 842, 842, 865, 988, - 989, 0, 990, 842, 842, 842, 990, 842, - 865, 992, 993, 842, 842, 842, 842, 865, - 995, 996, 1184, 998, 999, 999, 999, 998, - 999, 1007, 999, 999, 999, 1000, 999, 1007, - 1001, 1001, 1001, 1000, 1001, 1006, 1001, 1001, - 1001, 1002, 1001, 1006, 1003, 1003, 1003, 1003, - 1005, 1004, 1185, 1009, 1186, 1011, 1012, 1012, - 1012, 1011, 1012, 1038, 1012, 1012, 1012, 1013, - 1012, 1038, 1014, 1014, 1014, 1013, 1014, 1037, - 1014, 1014, 1014, 1015, 1014, 1037, 1016, 1016, - 1016, 1015, 1016, 1036, 1016, 1016, 1016, 1017, - 1034, 1016, 1036, 1018, 1018, 1018, 1018, 1033, - 0, 1018, 1018, 1018, 1019, 1018, 1033, 1020, - 1021, 1031, 1022, 1023, 1030, 1024, 1028, 1025, - 1026, 1026, 1027, 1019, 1187, 1029, 1032, 1035, - 1034, 1040, 1041, 1041, 1041, 1040, 1041, 1051, - 1041, 1041, 1041, 1042, 1041, 1051, 1043, 1043, - 1043, 1042, 1043, 1050, 1043, 1043, 1043, 1044, - 1043, 1050, 1045, 1045, 1045, 1044, 1045, 1049, - 1045, 1045, 1045, 1046, 1047, 1045, 1049, 1188, - 1048, 1047, 1053, 1054, 1054, 1054, 1053, 1054, - 1064, 1054, 1054, 1054, 1055, 1054, 1064, 1056, - 1056, 1056, 1055, 1056, 1063, 1056, 1056, 1056, - 1057, 1056, 1063, 1058, 1058, 1058, 1057, 1058, - 1062, 1058, 1058, 1058, 1059, 1058, 1062, 1060, - 1060, 1060, 1060, 1060, 1061, 1189, 1190, 1191, - 1066, 1067, 1067, 1067, 1066, 1067, 1069, 1067, - 1067, 1067, 1068, 1067, 1069, 1192, 1068, 1071, - 1072, 1072, 1072, 1071, 1072, 1082, 1072, 1072, - 1072, 1073, 1072, 1082, 1074, 1075, 1076, 0, - 1077, 1078, 1079, 1080, 1081, 0, 1193, 1084, - 1085, 0, 1086, 1087, 1088, 1194, 1090, 1091, - 1092, 1093, 1094, 1195, 1096, 1097, 1097, 1097, - 1096, 1097, 1102, 1097, 1097, 1097, 1098, 1097, - 1102, 1099, 1099, 1099, 1098, 1099, 1101, 1100, - 1099, 1099, 1099, 1099, 1101, 1196, 1104, 1105, - 1105, 1105, 1104, 1105, 1110, 1106, 1105, 1105, - 1105, 1105, 1110, 1107, 1107, 1107, 1107, 1109, - 1108, 1107, 1107, 1107, 1107, 1109, 1197, 0, - 1, 150, 1, 1, 158, 1116, 257, 13, - 192, 13, 13, 202, 222, 1119, 236, 1120, - 239, 0, 140, 140, 140, 168, 243, 244, - 245, 246, 259, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 1114, 258, 0, 161, - 168, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 0, - 1, 150, 1, 1, 158, 1111, 149, 1116, - 257, 1, 1, 1116, 172, 172, 172, 1116, - 173, 176, 176, 176, 191, 226, 0, 203, - 206, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 1116 + 1152, 498, 527, 499, 505, 500, 501, 502, + 503, 504, 1152, 506, 507, 508, 509, 518, + 510, 511, 512, 513, 514, 515, 516, 517, + 1152, 519, 520, 521, 522, 523, 524, 525, + 526, 1152, 528, 533, 529, 530, 531, 532, + 1152, 534, 535, 1152, 537, 538, 539, 540, + 541, 542, 543, 1152, 545, 546, 547, 548, + 549, 550, 551, 554, 552, 553, 1152, 555, + 556, 1152, 558, 559, 560, 563, 561, 562, + 1152, 564, 565, 566, 578, 581, 1152, 567, + 568, 569, 570, 571, 572, 573, 574, 575, + 576, 577, 1152, 579, 580, 1152, 582, 583, + 1152, 0, 585, 586, 592, 609, 612, 618, + 622, 1153, 585, 587, 588, 589, 590, 591, + 1153, 593, 599, 605, 594, 595, 596, 597, + 598, 1153, 600, 602, 601, 1153, 603, 604, + 1153, 606, 607, 608, 1153, 610, 611, 1153, + 613, 615, 614, 1153, 616, 617, 1153, 619, + 620, 621, 1153, 623, 624, 1153, 0, 626, + 1154, 626, 628, 1155, 630, 631, 631, 631, + 631, 660, 631, 631, 631, 632, 631, 660, + 633, 633, 633, 633, 659, 0, 633, 633, + 633, 634, 633, 659, 635, 635, 635, 634, + 635, 658, 635, 635, 635, 636, 635, 658, + 0, 637, 637, 637, 636, 655, 655, 655, + 655, 655, 637, 654, 637, 637, 637, 638, + 637, 654, 639, 639, 639, 638, 651, 651, + 651, 651, 651, 639, 650, 639, 639, 639, + 640, 639, 650, 641, 641, 641, 640, 647, + 647, 647, 647, 647, 641, 646, 641, 641, + 641, 642, 641, 646, 1156, 642, 643, 643, + 643, 643, 643, 644, 644, 645, 645, 645, + 645, 645, 1156, 644, 648, 648, 649, 649, + 649, 649, 649, 641, 641, 641, 648, 641, + 646, 652, 652, 653, 653, 653, 653, 653, + 639, 639, 639, 652, 639, 650, 656, 656, + 657, 657, 657, 657, 657, 637, 637, 637, + 656, 637, 654, 662, 663, 663, 663, 663, + 665, 664, 663, 663, 663, 663, 665, 1157, + 667, 668, 668, 668, 668, 670, 668, 668, + 668, 669, 668, 670, 1158, 672, 673, 673, + 673, 672, 673, 675, 673, 673, 673, 674, + 673, 675, 1159, 677, 0, 678, 678, 678, + 678, 679, 1160, 1161, 1162, 677, 678, 678, + 678, 678, 679, 1160, 1161, 1162, 681, 1163, + 681, 0, 683, 684, 684, 684, 683, 684, + 736, 684, 684, 684, 685, 689, 731, 684, + 736, 686, 686, 686, 685, 686, 735, 686, + 686, 686, 687, 686, 735, 688, 688, 688, + 733, 687, 688, 732, 688, 688, 688, 688, + 732, 690, 690, 690, 690, 730, 691, 692, + 692, 692, 691, 692, 729, 692, 692, 692, + 693, 697, 724, 692, 729, 694, 694, 694, + 693, 694, 728, 694, 694, 694, 695, 694, + 728, 696, 696, 696, 726, 695, 696, 725, + 696, 696, 696, 696, 725, 698, 698, 698, + 698, 723, 699, 700, 700, 701, 701, 701, + 720, 700, 722, 701, 719, 1164, 1171, 1172, + 701, 701, 701, 702, 701, 719, 1164, 1171, + 1172, 703, 703, 703, 716, 702, 718, 703, + 715, 1164, 1169, 1170, 703, 703, 703, 704, + 703, 715, 1169, 1170, 705, 705, 705, 712, + 704, 714, 705, 711, 1164, 1167, 1168, 705, + 705, 705, 706, 705, 711, 1167, 1168, 707, + 707, 707, 709, 706, 707, 708, 1164, 1165, + 1166, 707, 707, 707, 707, 708, 1165, 1166, + 707, 707, 707, 710, 707, 708, 1164, 1165, + 1166, 710, 705, 705, 705, 713, 714, 705, + 711, 1164, 1167, 1168, 713, 703, 703, 703, + 717, 718, 703, 715, 1164, 1169, 1170, 717, + 701, 701, 701, 721, 722, 701, 719, 1164, + 1171, 1172, 721, 698, 698, 698, 698, 723, + 696, 696, 696, 727, 696, 725, 727, 690, + 690, 690, 690, 730, 688, 688, 688, 734, + 688, 732, 734, 738, 739, 739, 739, 738, + 739, 747, 739, 739, 739, 740, 739, 747, + 741, 741, 741, 740, 741, 746, 741, 741, + 741, 742, 741, 746, 743, 743, 743, 742, + 743, 745, 743, 743, 743, 744, 743, 745, + 1173, 749, 750, 750, 750, 749, 750, 764, + 750, 750, 750, 751, 750, 764, 752, 752, + 752, 751, 752, 763, 753, 752, 752, 752, + 752, 763, 754, 754, 754, 754, 762, 755, + 754, 754, 754, 754, 762, 756, 756, 756, + 756, 761, 757, 756, 756, 756, 756, 761, + 758, 758, 758, 758, 760, 758, 758, 758, + 759, 758, 760, 1174, 766, 767, 767, 767, + 767, 775, 768, 769, 769, 769, 768, 769, + 774, 769, 769, 769, 770, 769, 774, 771, + 771, 771, 771, 773, 772, 1175, 0, 776, + 777, 776, 776, 778, 784, 776, 783, 1176, + 1177, 1178, 778, 784, 779, 0, 780, 780, + 781, 782, 776, 776, 776, 782, 776, 783, + 1176, 1177, 1178, 785, 786, 786, 781, 788, + 789, 789, 789, 788, 789, 799, 789, 789, + 789, 790, 789, 799, 791, 791, 791, 791, + 798, 792, 793, 793, 793, 792, 793, 797, + 0, 793, 793, 793, 794, 793, 797, 795, + 795, 795, 795, 795, 796, 1179, 1180, 1181, + 801, 802, 802, 802, 801, 802, 809, 802, + 802, 802, 803, 802, 809, 804, 804, 804, + 803, 804, 808, 804, 804, 804, 805, 804, + 808, 806, 806, 806, 806, 806, 807, 1182, + 1183, 1184, 811, 812, 812, 812, 811, 812, + 848, 0, 812, 812, 812, 813, 827, 834, + 841, 812, 848, 814, 814, 814, 814, 826, + 0, 815, 816, 816, 816, 815, 816, 825, + 816, 816, 816, 817, 816, 825, 0, 818, + 818, 818, 821, 821, 821, 823, 823, 823, + 1185, 818, 820, 1188, 1189, 821, 822, 1186, + 1187, 823, 824, 1190, 1191, 0, 819, 828, + 828, 828, 828, 833, 829, 830, 830, 830, + 829, 830, 832, 0, 830, 830, 830, 831, + 830, 832, 0, 831, 818, 818, 818, 821, + 821, 821, 823, 823, 823, 1185, 818, 820, + 1188, 1189, 821, 822, 1186, 1187, 823, 824, + 1190, 1191, 835, 835, 835, 835, 840, 836, + 837, 837, 837, 836, 837, 839, 837, 837, + 837, 838, 837, 839, 838, 818, 818, 818, + 821, 821, 821, 823, 823, 823, 1185, 818, + 820, 1188, 1189, 821, 822, 1186, 1187, 823, + 824, 1190, 1191, 842, 842, 842, 842, 847, + 843, 844, 844, 844, 843, 844, 846, 844, + 844, 844, 845, 844, 846, 818, 818, 818, + 821, 821, 821, 823, 823, 823, 1185, 818, + 820, 1188, 1189, 821, 822, 1186, 1187, 823, + 824, 1190, 1191, 0, 850, 884, 901, 915, + 922, 927, 935, 939, 947, 953, 969, 972, + 979, 990, 1000, 851, 851, 851, 875, 878, + 882, 851, 874, 851, 851, 851, 852, 851, + 874, 853, 853, 853, 853, 873, 854, 855, + 855, 855, 854, 855, 872, 855, 855, 855, + 856, 855, 872, 857, 857, 857, 856, 857, + 871, 0, 857, 857, 857, 858, 857, 871, + 859, 859, 859, 858, 859, 870, 859, 859, + 859, 860, 859, 870, 861, 861, 861, 860, + 861, 869, 861, 861, 861, 862, 861, 869, + 863, 863, 863, 862, 863, 868, 863, 863, + 863, 864, 863, 868, 865, 865, 865, 865, + 867, 865, 865, 865, 866, 865, 867, 1192, + 876, 877, 851, 851, 851, 851, 874, 879, + 880, 881, 851, 851, 851, 851, 874, 883, + 851, 851, 851, 851, 874, 885, 887, 894, + 897, 886, 851, 851, 851, 851, 874, 888, + 893, 889, 890, 891, 892, 851, 851, 851, + 851, 874, 851, 851, 851, 851, 874, 895, + 896, 851, 851, 851, 851, 874, 898, 899, + 900, 851, 851, 851, 851, 874, 902, 906, + 914, 903, 904, 905, 851, 851, 851, 851, + 874, 907, 910, 908, 909, 851, 851, 851, + 851, 874, 911, 912, 913, 851, 851, 851, + 851, 874, 851, 851, 851, 851, 874, 916, + 917, 918, 920, 919, 851, 851, 851, 851, + 874, 921, 851, 851, 851, 851, 874, 923, + 924, 925, 926, 851, 851, 851, 851, 874, + 928, 929, 930, 931, 932, 933, 934, 851, + 851, 851, 851, 874, 936, 938, 937, 851, + 851, 851, 851, 874, 851, 851, 851, 851, + 874, 940, 942, 944, 946, 941, 851, 851, + 851, 851, 874, 943, 851, 851, 851, 851, + 874, 945, 851, 851, 851, 851, 874, 851, + 851, 851, 851, 874, 948, 952, 949, 950, + 951, 851, 851, 851, 851, 874, 851, 851, + 851, 851, 874, 954, 958, 960, 955, 956, + 957, 851, 851, 851, 851, 874, 959, 851, + 851, 851, 851, 874, 851, 851, 851, 961, + 851, 874, 962, 851, 851, 851, 963, 851, + 874, 851, 851, 851, 964, 851, 874, 965, + 966, 967, 968, 851, 851, 851, 851, 874, + 970, 971, 851, 851, 851, 851, 874, 973, + 974, 978, 851, 851, 851, 851, 874, 975, + 976, 977, 851, 851, 851, 851, 874, 851, + 851, 851, 851, 874, 980, 982, 984, 986, + 981, 851, 851, 851, 851, 874, 983, 851, + 851, 851, 851, 874, 985, 851, 851, 851, + 851, 874, 987, 988, 989, 851, 851, 851, + 851, 874, 991, 994, 996, 992, 993, 851, + 851, 851, 851, 874, 995, 851, 851, 851, + 851, 874, 997, 998, 0, 999, 851, 851, + 851, 999, 851, 874, 1001, 1002, 851, 851, + 851, 851, 874, 1004, 1005, 1193, 1007, 1008, + 1008, 1008, 1007, 1008, 1016, 1008, 1008, 1008, + 1009, 1008, 1016, 1010, 1010, 1010, 1009, 1010, + 1015, 1010, 1010, 1010, 1011, 1010, 1015, 1012, + 1012, 1012, 1012, 1014, 1013, 1194, 1018, 1195, + 1020, 1021, 1021, 1021, 1020, 1021, 1047, 1021, + 1021, 1021, 1022, 1021, 1047, 1023, 1023, 1023, + 1022, 1023, 1046, 1023, 1023, 1023, 1024, 1023, + 1046, 1025, 1025, 1025, 1024, 1025, 1045, 1025, + 1025, 1025, 1026, 1043, 1025, 1045, 1027, 1027, + 1027, 1027, 1042, 0, 1027, 1027, 1027, 1028, + 1027, 1042, 1029, 1030, 1040, 1031, 1032, 1039, + 1033, 1037, 1034, 1035, 1035, 1036, 1028, 1196, + 1038, 1041, 1044, 1043, 1049, 1050, 1050, 1050, + 1049, 1050, 1060, 1050, 1050, 1050, 1051, 1050, + 1060, 1052, 1052, 1052, 1051, 1052, 1059, 1052, + 1052, 1052, 1053, 1052, 1059, 1054, 1054, 1054, + 1053, 1054, 1058, 1054, 1054, 1054, 1055, 1056, + 1054, 1058, 1197, 1057, 1056, 1062, 1063, 1063, + 1063, 1062, 1063, 1073, 1063, 1063, 1063, 1064, + 1063, 1073, 1065, 1065, 1065, 1064, 1065, 1072, + 1065, 1065, 1065, 1066, 1065, 1072, 1067, 1067, + 1067, 1066, 1067, 1071, 1067, 1067, 1067, 1068, + 1067, 1071, 1069, 1069, 1069, 1069, 1069, 1070, + 1198, 1199, 1200, 1075, 1076, 1076, 1076, 1075, + 1076, 1078, 1076, 1076, 1076, 1077, 1076, 1078, + 1201, 1077, 1080, 1081, 1081, 1081, 1080, 1081, + 1091, 1081, 1081, 1081, 1082, 1081, 1091, 1083, + 1084, 1085, 0, 1086, 1087, 1088, 1089, 1090, + 0, 1202, 1093, 1094, 0, 1095, 1096, 1097, + 1203, 1099, 1100, 1101, 1102, 1103, 1204, 1105, + 1106, 1106, 1106, 1105, 1106, 1111, 1106, 1106, + 1106, 1107, 1106, 1111, 1108, 1108, 1108, 1107, + 1108, 1110, 1109, 1108, 1108, 1108, 1108, 1110, + 1205, 1113, 1114, 1114, 1114, 1113, 1114, 1119, + 1115, 1114, 1114, 1114, 1114, 1119, 1116, 1116, + 1116, 1116, 1118, 1117, 1116, 1116, 1116, 1116, + 1118, 1206, 0, 1, 150, 1, 1, 158, + 1125, 257, 13, 192, 13, 13, 202, 222, + 1128, 236, 1129, 239, 0, 140, 140, 140, + 168, 243, 244, 245, 246, 259, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 1123, + 258, 0, 161, 168, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 0, 1, 150, 1, 1, 158, + 1120, 149, 1125, 257, 1, 1, 1125, 172, + 172, 172, 1125, 173, 176, 176, 176, 191, + 226, 0, 203, 206, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 1125 }; static const short _zone_scanner_trans_actions[] = { - 1918, 0, 5, 7, 510, 666, 666, 666, + 1924, 0, 5, 7, 510, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 3, 0, 3, 0, - 2046, 103, 681, 684, 41, 55, 53, 51, + 2052, 103, 681, 684, 41, 55, 53, 51, 0, 57, 678, 103, 361, 0, 5, 7, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 3, - 0, 1662, 1665, 2430, 2434, 0, 0, 0, - 2426, 1665, 2438, 3592, 2438, 357, 0, 355, - 5, 7, 0, 3, 0, 372, 357, 1647, - 0, 5, 7, 1791, 0, 9, 1656, 359, - 0, 5, 7, 0, 2418, 357, 357, 375, - 0, 3182, 5, 7, 1906, 2134, 2134, 2134, - 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2134, 2134, 2134, 3, 0, 1650, 357, - 372, 357, 3885, 103, 681, 684, 2138, 103, - 1659, 0, 5, 7, 375, 0, 0, 0, - 0, 0, 0, 1788, 3086, 3090, 3082, 1788, - 3094, 3802, 3094, 0, 5, 7, 0, 0, - 0, 0, 0, 0, 1761, 2942, 2946, 2938, - 1761, 2950, 3757, 2950, 1758, 2926, 2930, 2922, - 1758, 2934, 3752, 2934, 0, 0, 1719, 2718, - 2722, 2714, 1719, 2726, 3687, 2726, 0, 0, - 0, 1671, 2462, 2466, 2458, 1671, 2470, 3607, - 2470, 0, 0, 0, 0, 0, 0, 1746, - 2862, 2866, 2858, 1746, 2870, 3732, 2870, 0, - 0, 0, 0, 1722, 2734, 2738, 2730, 1722, - 2742, 3692, 2742, 0, 0, 0, 1743, 2846, - 2850, 2842, 1743, 2854, 3727, 2854, 1728, 2766, - 2770, 2762, 1728, 2774, 3702, 2774, 0, 0, - 0, 0, 0, 1779, 3038, 3042, 3034, 1779, - 3046, 3787, 3046, 0, 1782, 3054, 3058, 3050, - 1782, 3062, 3792, 3062, 0, 0, 0, 0, - 1680, 2510, 2514, 2506, 1680, 2518, 3622, 2518, + 0, 1668, 1671, 2436, 2440, 0, 0, 0, + 2432, 1671, 2444, 3598, 2444, 357, 0, 355, + 5, 7, 0, 3, 0, 372, 357, 1653, + 0, 5, 7, 1797, 0, 9, 1662, 359, + 0, 5, 7, 0, 2424, 357, 357, 375, + 0, 3188, 5, 7, 1912, 2140, 2140, 2140, + 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, + 2140, 2140, 2140, 2140, 3, 0, 1656, 357, + 372, 357, 3891, 103, 681, 684, 2144, 103, + 1665, 0, 5, 7, 375, 0, 0, 0, + 0, 0, 0, 1794, 3092, 3096, 3088, 1794, + 3100, 3808, 3100, 0, 5, 7, 0, 0, + 0, 0, 0, 0, 1767, 2948, 2952, 2944, + 1767, 2956, 3763, 2956, 1764, 2932, 2936, 2928, + 1764, 2940, 3758, 2940, 0, 0, 1725, 2724, + 2728, 2720, 1725, 2732, 3693, 2732, 0, 0, + 0, 1677, 2468, 2472, 2464, 1677, 2476, 3613, + 2476, 0, 0, 0, 0, 0, 0, 1752, + 2868, 2872, 2864, 1752, 2876, 3738, 2876, 0, + 0, 0, 0, 1728, 2740, 2744, 2736, 1728, + 2748, 3698, 2748, 0, 0, 0, 1749, 2852, + 2856, 2848, 1749, 2860, 3733, 2860, 1734, 2772, + 2776, 2768, 1734, 2780, 3708, 2780, 0, 0, + 0, 0, 0, 1785, 3044, 3048, 3040, 1785, + 3052, 3793, 3052, 0, 1788, 3060, 3064, 3056, + 1788, 3068, 3798, 3068, 0, 0, 0, 0, + 1686, 2516, 2520, 2512, 1686, 2524, 3628, 2524, 0, 0, 101, 672, 675, 669, 101, 0, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, - 0, 1734, 2798, 2802, 2794, 1734, 2806, 3712, - 2806, 0, 0, 0, 1701, 2622, 2626, 2618, - 1701, 2630, 3657, 2630, 1716, 2702, 2706, 2698, - 1716, 2710, 3682, 2710, 0, 0, 0, 0, - 0, 1770, 2990, 2994, 2986, 1770, 2998, 3772, - 2998, 0, 1773, 3006, 3010, 3002, 1773, 3014, - 3777, 3014, 0, 1707, 2654, 2658, 2650, 1707, - 2662, 3667, 2662, 1776, 3022, 3026, 3018, 1776, - 3030, 3782, 3030, 0, 0, 0, 0, 0, - 1683, 2526, 2530, 2522, 1683, 2534, 3627, 2534, - 1686, 2542, 2546, 2538, 1686, 2550, 3632, 2550, - 0, 0, 0, 0, 0, 0, 1713, 2686, - 2690, 2682, 1713, 2694, 3677, 2694, 0, 1767, - 2974, 2978, 2970, 1767, 2982, 3767, 2982, 1668, - 2446, 2450, 0, 2442, 1668, 2454, 3602, 2454, - 0, 1740, 2830, 2834, 0, 2826, 1740, 2838, - 3722, 2838, 1749, 2878, 2882, 0, 2874, 1749, - 2886, 3737, 2886, 0, 0, 0, 0, 1752, - 2894, 2898, 2890, 1752, 2902, 3742, 2902, 0, - 0, 1677, 2494, 2498, 2490, 1677, 2502, 3617, - 2502, 0, 0, 0, 1692, 2574, 2578, 2570, - 1692, 2582, 3642, 2582, 0, 0, 0, 1737, - 2814, 2818, 2810, 1737, 2822, 3717, 2822, 1698, - 2606, 2610, 2602, 1698, 2614, 3652, 2614, 0, - 0, 0, 0, 0, 1674, 2478, 2482, 2474, - 1674, 2486, 3612, 2486, 0, 1764, 2958, 2962, - 2954, 1764, 2966, 3762, 2966, 0, 1710, 2670, - 2674, 2666, 1710, 2678, 3672, 2678, 0, 0, - 0, 1731, 2782, 2786, 2778, 1731, 2790, 3707, - 2790, 0, 0, 0, 0, 0, 1755, 2910, - 2914, 2906, 1755, 2918, 3747, 2918, 0, 1689, - 2558, 2562, 2554, 1689, 2566, 3637, 2566, 0, - 0, 522, 510, 1922, 579, 2026, 2030, 41, - 2022, 579, 2034, 3312, 2034, 0, 0, 1785, - 3070, 3074, 3066, 1785, 3078, 3797, 3078, 0, + 0, 1740, 2804, 2808, 2800, 1740, 2812, 3718, + 2812, 0, 0, 0, 1707, 2628, 2632, 2624, + 1707, 2636, 3663, 2636, 1722, 2708, 2712, 2704, + 1722, 2716, 3688, 2716, 0, 0, 0, 0, + 0, 1776, 2996, 3000, 2992, 1776, 3004, 3778, + 3004, 0, 1779, 3012, 3016, 3008, 1779, 3020, + 3783, 3020, 0, 1713, 2660, 2664, 2656, 1713, + 2668, 3673, 2668, 1782, 3028, 3032, 3024, 1782, + 3036, 3788, 3036, 0, 0, 0, 0, 0, + 1689, 2532, 2536, 2528, 1689, 2540, 3633, 2540, + 1692, 2548, 2552, 2544, 1692, 2556, 3638, 2556, + 0, 0, 0, 0, 0, 0, 1719, 2692, + 2696, 2688, 1719, 2700, 3683, 2700, 0, 1773, + 2980, 2984, 2976, 1773, 2988, 3773, 2988, 1674, + 2452, 2456, 0, 2448, 1674, 2460, 3608, 2460, + 0, 1746, 2836, 2840, 0, 2832, 1746, 2844, + 3728, 2844, 1755, 2884, 2888, 0, 2880, 1755, + 2892, 3743, 2892, 0, 0, 0, 0, 1758, + 2900, 2904, 2896, 1758, 2908, 3748, 2908, 0, + 0, 1683, 2500, 2504, 2496, 1683, 2508, 3623, + 2508, 0, 0, 0, 1698, 2580, 2584, 2576, + 1698, 2588, 3648, 2588, 0, 0, 0, 1743, + 2820, 2824, 2816, 1743, 2828, 3723, 2828, 1704, + 2612, 2616, 2608, 1704, 2620, 3658, 2620, 0, + 0, 0, 0, 0, 1680, 2484, 2488, 2480, + 1680, 2492, 3618, 2492, 0, 1770, 2964, 2968, + 2960, 1770, 2972, 3768, 2972, 0, 1716, 2676, + 2680, 2672, 1716, 2684, 3678, 2684, 0, 0, + 0, 1737, 2788, 2792, 2784, 1737, 2796, 3713, + 2796, 0, 0, 0, 0, 0, 1761, 2916, + 2920, 2912, 1761, 2924, 3753, 2924, 0, 1695, + 2564, 2568, 2560, 1695, 2572, 3643, 2572, 0, + 0, 522, 510, 1928, 579, 2032, 2036, 41, + 2028, 579, 2040, 3318, 2040, 0, 0, 1791, + 3076, 3080, 3072, 1791, 3084, 3803, 3084, 0, 5, 7, 3, 0, 0, 101, 672, 675, 669, 101, 0, 5, 7, 510, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 3, 0, 103, 681, 684, 41, 55, 53, 51, 0, 57, - 678, 103, 2050, 41, 55, 53, 51, 0, - 57, 600, 2074, 2078, 3322, 2070, 600, 95, + 678, 103, 2056, 41, 55, 53, 51, 0, + 57, 600, 2080, 2084, 3328, 2076, 600, 95, 91, 91, 91, 0, 0, 0, 0, 0, 0, 89, 37, 33, 462, 465, 459, 33, - 0, 5, 7, 3, 0, 0, 3167, 468, - 1870, 1874, 1862, 468, 0, 5, 7, 3, - 0, 2050, 41, 55, 53, 51, 0, 57, - 600, 2074, 2078, 3322, 2070, 600, 1898, 1882, - 3142, 3152, 3132, 1882, 3813, 3157, 0, 5, - 7, 3, 0, 372, 357, 2422, 1665, 2430, - 2434, 3597, 1665, 3909, 2438, 3903, 2438, 0, - 5, 7, 1830, 0, 5, 7, 375, 0, + 0, 5, 7, 3, 0, 0, 3173, 468, + 1876, 1880, 1868, 468, 0, 5, 7, 3, + 0, 2056, 41, 55, 53, 51, 0, 57, + 600, 2080, 2084, 3328, 2076, 600, 1904, 1888, + 3148, 3158, 3138, 1888, 3819, 3163, 0, 5, + 7, 3, 0, 372, 357, 2428, 1671, 2436, + 2440, 3603, 1671, 3915, 2444, 3909, 2444, 0, + 5, 7, 1836, 0, 5, 7, 375, 0, 0, 5, 7, 0, 5, 7, 0, 357, - 375, 2410, 0, 0, 0, 0, 0, 81, - 0, 0, 77, 1890, 33, 462, 465, 1866, - 33, 3922, 468, 1870, 1874, 3122, 468, 0, - 5, 7, 375, 0, 3172, 1882, 3142, 3152, - 3819, 1882, 3915, 3157, 0, 5, 7, 1830, - 1878, 483, 3137, 3147, 3127, 1878, 0, 5, - 7, 0, 5, 7, 0, 0, 1704, 2638, - 2642, 2634, 1704, 2646, 3662, 2646, 0, 0, - 0, 1695, 2590, 2594, 2586, 1695, 2598, 3647, - 2598, 0, 1725, 2750, 2754, 2746, 1725, 2758, - 3697, 2758, 0, 5, 7, 0, 5, 7, + 375, 2416, 0, 0, 0, 0, 0, 81, + 0, 0, 77, 1896, 33, 462, 465, 1872, + 33, 3928, 468, 1876, 1880, 3128, 468, 0, + 5, 7, 375, 0, 3178, 1888, 3148, 3158, + 3825, 1888, 3921, 3163, 0, 5, 7, 1836, + 1884, 483, 3143, 3153, 3133, 1884, 0, 5, + 7, 0, 5, 7, 0, 0, 1710, 2644, + 2648, 2640, 1710, 2652, 3668, 2652, 0, 0, + 0, 1701, 2596, 2600, 2592, 1701, 2604, 3653, + 2604, 0, 1731, 2756, 2760, 2752, 1731, 2764, + 3703, 2764, 0, 5, 7, 0, 5, 7, 0, 5, 7, 0, 5, 7, 486, 390, - 3102, 11, 1838, 27, 1854, 25, 0, 429, - 1842, 15, 17, 0, 414, 393, 13, 396, - 405, 19, 19, 3107, 399, 402, 21, 426, - 621, 65, 0, 0, 1, 618, 624, 2086, - 69, 69, 627, 630, 2082, 71, 65, 0, + 3108, 11, 1844, 27, 1860, 25, 0, 429, + 1848, 15, 17, 0, 414, 393, 13, 396, + 405, 19, 19, 3113, 399, 402, 21, 426, + 621, 65, 0, 0, 1, 618, 624, 2092, + 69, 69, 627, 630, 2088, 71, 65, 0, 0, 67, 624, 69, 69, 630, 71, 71, 75, 0, 5, 7, 3, 0, 513, 510, - 3317, 0, 5, 7, 41, 55, 53, 51, - 0, 57, 2094, 0, 384, 2050, 2038, 41, + 3323, 0, 5, 7, 41, 55, 53, 51, + 0, 57, 2100, 0, 384, 2056, 2044, 41, 55, 53, 51, 0, 57, 59, 591, 594, - 3322, 3327, 59, 79, 0, 5, 7, 3, - 0, 3332, 639, 2098, 15, 17, 0, 387, - 23, 417, 420, 393, 13, 3112, 23, 0, - 5, 7, 2102, 0, 396, 408, 19, 19, + 3328, 3333, 59, 79, 0, 5, 7, 3, + 0, 3338, 639, 2104, 15, 17, 0, 387, + 23, 417, 420, 393, 13, 3118, 23, 0, + 5, 7, 2108, 0, 396, 408, 19, 19, 399, 402, 21, 0, 5, 7, 3, 0, - 642, 85, 651, 83, 645, 648, 3337, 83, - 83, 657, 0, 5, 7, 3342, 654, 2106, - 2110, 0, 0, 87, 15, 17, 0, 423, - 1846, 1850, 393, 13, 3807, 423, 0, 5, + 642, 85, 651, 83, 645, 648, 3343, 83, + 83, 657, 0, 5, 7, 3348, 654, 2112, + 2116, 0, 0, 87, 15, 17, 0, 423, + 1852, 1856, 393, 13, 3813, 423, 0, 5, 7, 396, 411, 19, 19, 399, 402, 21, - 1810, 0, 5, 7, 3, 0, 127, 119, + 1816, 0, 5, 7, 3, 0, 127, 119, 121, 123, 0, 125, 0, 5, 7, 3, - 0, 1, 366, 1, 327, 325, 1572, 1575, - 1569, 325, 2382, 3587, 2382, 0, 5, 7, + 0, 1, 366, 1, 327, 325, 1578, 1581, + 1575, 325, 2388, 3593, 2388, 0, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 0, 1578, 1818, 1578, 241, 1194, 1197, 0, - 0, 0, 1191, 241, 2214, 3377, 2214, 0, - 0, 267, 1311, 1314, 1308, 267, 2266, 3442, - 2266, 0, 0, 0, 0, 0, 323, 1563, - 1566, 1560, 323, 2378, 3582, 2378, 0, 0, - 0, 0, 0, 0, 305, 1482, 1485, 1479, - 305, 2342, 3537, 2342, 303, 1473, 1476, 1470, - 303, 2338, 3532, 2338, 0, 0, 277, 1356, - 1359, 1353, 277, 2286, 3467, 2286, 0, 0, - 0, 245, 1212, 1215, 1209, 245, 2222, 3387, - 2222, 0, 0, 0, 0, 0, 0, 295, - 1437, 1440, 1434, 295, 2322, 3512, 2322, 0, - 0, 0, 0, 279, 1365, 1368, 1362, 279, - 2290, 3472, 2290, 0, 0, 0, 293, 1428, - 1431, 1425, 293, 2318, 3507, 2318, 283, 1383, - 1386, 1380, 283, 2298, 3482, 2298, 0, 0, - 0, 0, 0, 317, 1536, 1539, 1533, 317, - 2366, 3567, 2366, 0, 319, 1545, 1548, 1542, - 319, 2370, 3572, 2370, 0, 0, 0, 0, - 251, 1239, 1242, 1236, 251, 2234, 3402, 2234, + 0, 1584, 1824, 1584, 241, 1200, 1203, 0, + 0, 0, 1197, 241, 2220, 3383, 2220, 0, + 0, 267, 1317, 1320, 1314, 267, 2272, 3448, + 2272, 0, 0, 0, 0, 0, 323, 1569, + 1572, 1566, 323, 2384, 3588, 2384, 0, 0, + 0, 0, 0, 0, 305, 1488, 1491, 1485, + 305, 2348, 3543, 2348, 303, 1479, 1482, 1476, + 303, 2344, 3538, 2344, 0, 0, 277, 1362, + 1365, 1359, 277, 2292, 3473, 2292, 0, 0, + 0, 245, 1218, 1221, 1215, 245, 2228, 3393, + 2228, 0, 0, 0, 0, 0, 0, 295, + 1443, 1446, 1440, 295, 2328, 3518, 2328, 0, + 0, 0, 0, 279, 1371, 1374, 1368, 279, + 2296, 3478, 2296, 0, 0, 0, 293, 1434, + 1437, 1431, 293, 2324, 3513, 2324, 283, 1389, + 1392, 1386, 283, 2304, 3488, 2304, 0, 0, + 0, 0, 0, 317, 1542, 1545, 1539, 317, + 2372, 3573, 2372, 0, 319, 1551, 1554, 1548, + 319, 2376, 3578, 2376, 0, 0, 0, 0, + 251, 1245, 1248, 1242, 251, 2240, 3408, 2240, 0, 0, 0, 0, 0, 0, 0, 287, - 1401, 1404, 1398, 287, 2306, 3492, 2306, 0, - 0, 0, 265, 1302, 1305, 1299, 265, 2262, - 3437, 2262, 275, 1347, 1350, 1344, 275, 2282, - 3462, 2282, 0, 0, 0, 0, 0, 311, - 1509, 1512, 1506, 311, 2354, 3552, 2354, 0, - 313, 1518, 1521, 1515, 313, 2358, 3557, 2358, - 0, 269, 1320, 1323, 1317, 269, 2270, 3447, - 2270, 315, 1527, 1530, 1524, 315, 2362, 3562, - 2362, 0, 0, 0, 0, 0, 253, 1248, - 1251, 1245, 253, 2238, 3407, 2238, 255, 1257, - 1260, 1254, 255, 2242, 3412, 2242, 0, 0, - 0, 0, 0, 0, 273, 1338, 1341, 1335, - 273, 2278, 3457, 2278, 0, 309, 1500, 1503, - 1497, 309, 2350, 3547, 2350, 243, 1203, 1206, - 0, 1200, 243, 2218, 3382, 2218, 0, 291, - 1419, 1422, 0, 1416, 291, 2314, 3502, 2314, - 297, 1446, 1449, 0, 1443, 297, 2326, 3517, - 2326, 0, 0, 0, 0, 299, 1455, 1458, - 1452, 299, 2330, 3522, 2330, 0, 0, 249, - 1230, 1233, 1227, 249, 2230, 3397, 2230, 0, - 0, 0, 259, 1275, 1278, 1272, 259, 2250, - 3422, 2250, 0, 0, 0, 289, 1410, 1413, - 1407, 289, 2310, 3497, 2310, 263, 1293, 1296, - 1290, 263, 2258, 3432, 2258, 0, 0, 0, - 0, 0, 247, 1221, 1224, 1218, 247, 2226, - 3392, 2226, 0, 307, 1491, 1494, 1488, 307, - 2346, 3542, 2346, 0, 271, 1329, 1332, 1326, - 271, 2274, 3452, 2274, 0, 0, 0, 285, - 1392, 1395, 1389, 285, 2302, 3487, 2302, 0, - 0, 0, 0, 0, 301, 1464, 1467, 1461, - 301, 2334, 3527, 2334, 0, 257, 1266, 1269, - 1263, 257, 2246, 3417, 2246, 0, 0, 510, - 239, 1185, 1188, 41, 1182, 239, 2210, 3372, - 2210, 0, 0, 321, 1554, 1557, 1551, 321, - 2374, 3577, 2374, 0, 0, 0, 261, 1284, - 1287, 1281, 261, 2254, 3427, 2254, 0, 281, - 1374, 1377, 1371, 281, 2294, 3477, 2294, 341, + 1407, 1410, 1404, 287, 2312, 3498, 2312, 0, + 0, 0, 265, 1308, 1311, 1305, 265, 2268, + 3443, 2268, 275, 1353, 1356, 1350, 275, 2288, + 3468, 2288, 0, 0, 0, 0, 0, 311, + 1515, 1518, 1512, 311, 2360, 3558, 2360, 0, + 313, 1524, 1527, 1521, 313, 2364, 3563, 2364, + 0, 269, 1326, 1329, 1323, 269, 2276, 3453, + 2276, 315, 1533, 1536, 1530, 315, 2368, 3568, + 2368, 0, 0, 0, 0, 0, 253, 1254, + 1257, 1251, 253, 2244, 3413, 2244, 255, 1263, + 1266, 1260, 255, 2248, 3418, 2248, 0, 0, + 0, 0, 0, 0, 273, 1344, 1347, 1341, + 273, 2284, 3463, 2284, 0, 309, 1506, 1509, + 1503, 309, 2356, 3553, 2356, 243, 1209, 1212, + 0, 1206, 243, 2224, 3388, 2224, 0, 291, + 1425, 1428, 0, 1422, 291, 2320, 3508, 2320, + 297, 1452, 1455, 0, 1449, 297, 2332, 3523, + 2332, 0, 0, 0, 0, 299, 1461, 1464, + 1458, 299, 2336, 3528, 2336, 0, 0, 249, + 1236, 1239, 1233, 249, 2236, 3403, 2236, 0, + 0, 0, 259, 1281, 1284, 1278, 259, 2256, + 3428, 2256, 0, 0, 0, 289, 1416, 1419, + 1413, 289, 2316, 3503, 2316, 263, 1299, 1302, + 1296, 263, 2264, 3438, 2264, 0, 0, 0, + 0, 0, 247, 1227, 1230, 1224, 247, 2232, + 3398, 2232, 0, 307, 1497, 1500, 1494, 307, + 2352, 3548, 2352, 0, 271, 1335, 1338, 1332, + 271, 2280, 3458, 2280, 0, 0, 0, 285, + 1398, 1401, 1395, 285, 2308, 3493, 2308, 0, + 0, 0, 0, 0, 301, 1470, 1473, 1467, + 301, 2340, 3533, 2340, 0, 257, 1272, 1275, + 1269, 257, 2252, 3423, 2252, 0, 0, 510, + 239, 1191, 1194, 41, 1188, 239, 2216, 3378, + 2216, 0, 0, 321, 1560, 1563, 1557, 321, + 2380, 3583, 2380, 0, 0, 0, 261, 1290, + 1293, 1287, 261, 2260, 3433, 2260, 0, 281, + 1380, 1383, 1377, 281, 2300, 3483, 2300, 341, 0, 5, 7, 3, 0, 516, 510, 49, - 585, 588, 41, 582, 49, 2198, 0, 5, + 585, 588, 41, 582, 49, 2204, 0, 5, 7, 115, 3, 0, 117, 0, 5, 7, - 3, 0, 717, 1814, 717, 0, 5, 7, - 3, 0, 510, 510, 363, 1798, 1802, 41, - 1, 1794, 363, 0, 5, 7, 115, 3, + 3, 0, 717, 1820, 717, 0, 5, 7, + 3, 0, 510, 510, 363, 1804, 1808, 41, + 1, 1800, 363, 0, 5, 7, 115, 3, 0, 117, 0, 5, 7, 3, 0, 717, - 1814, 717, 49, 585, 588, 582, 49, 347, + 1820, 717, 49, 585, 588, 582, 49, 347, 510, 0, 0, 0, 0, 0, 543, 41, 0, 0, 726, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 0, 0, 0, - 0, 747, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 750, - 0, 0, 0, 0, 0, 0, 0, 0, - 753, 0, 0, 0, 0, 0, 0, 0, - 756, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 759, 0, 0, 762, 0, - 0, 0, 0, 0, 0, 723, 0, 0, - 0, 0, 0, 732, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 738, - 0, 0, 741, 0, 0, 744, 349, 510, - 0, 0, 0, 0, 0, 0, 555, 41, - 0, 0, 0, 0, 0, 783, 0, 0, - 0, 0, 0, 0, 0, 0, 786, 0, - 0, 0, 780, 0, 0, 774, 0, 0, - 0, 777, 0, 0, 792, 0, 0, 0, - 771, 0, 0, 765, 0, 0, 0, 768, - 0, 0, 789, 690, 687, 2150, 105, 489, - 492, 489, 39, 498, 501, 495, 39, 0, - 5, 7, 489, 3, 0, 39, 498, 501, - 495, 39, 519, 0, 5, 7, 510, 3, - 0, 47, 573, 576, 41, 570, 47, 0, - 5, 7, 510, 3, 0, 2042, 47, 573, - 576, 41, 55, 53, 51, 0, 57, 570, - 47, 0, 5, 7, 510, 3, 0, 47, - 573, 576, 41, 55, 53, 51, 0, 57, + 0, 0, 747, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 750, 0, 0, 0, 0, 0, 0, 0, + 0, 753, 0, 0, 0, 0, 0, 0, + 756, 0, 0, 759, 0, 0, 0, 0, + 0, 0, 0, 762, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 765, 0, + 0, 768, 0, 0, 0, 0, 0, 0, + 723, 0, 0, 0, 0, 0, 732, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 738, 0, 0, 741, 0, 0, + 744, 349, 510, 0, 0, 0, 0, 0, + 0, 555, 41, 0, 0, 0, 0, 0, + 789, 0, 0, 0, 0, 0, 0, 0, + 0, 792, 0, 0, 0, 786, 0, 0, + 780, 0, 0, 0, 783, 0, 0, 798, + 0, 0, 0, 777, 0, 0, 771, 0, + 0, 0, 774, 0, 0, 795, 690, 687, + 2156, 105, 489, 492, 489, 39, 498, 501, + 495, 39, 0, 5, 7, 489, 3, 0, + 39, 498, 501, 495, 39, 519, 0, 5, + 7, 510, 3, 0, 47, 573, 576, 41, 570, 47, 0, 5, 7, 510, 3, 0, - 47, 573, 576, 41, 55, 53, 51, 0, - 57, 570, 47, 0, 5, 7, 510, 3, - 0, 567, 41, 55, 53, 51, 0, 57, - 2050, 41, 55, 53, 51, 0, 57, 2054, - 3322, 2050, 41, 55, 53, 51, 0, 57, - 597, 2062, 2066, 3322, 2058, 597, 2050, 41, - 55, 53, 51, 0, 57, 597, 2062, 2066, - 3322, 2058, 597, 2050, 41, 55, 53, 51, - 0, 57, 597, 2062, 2066, 3322, 2058, 597, - 432, 31, 447, 450, 444, 31, 432, 0, - 5, 7, 3, 0, 441, 489, 39, 498, - 501, 495, 39, 0, 5, 7, 489, 3, - 0, 492, 510, 45, 561, 564, 41, 558, - 45, 0, 5, 7, 489, 3, 0, 492, - 2090, 636, 31, 447, 450, 444, 31, 1858, - 3117, 1858, 432, 0, 5, 7, 3, 0, - 633, 1806, 633, 687, 2166, 105, 1638, 2386, - 329, 1584, 1587, 41, 1581, 329, 0, 5, - 7, 510, 0, 0, 3, 0, 333, 1602, - 1605, 41, 1599, 333, 0, 5, 7, 3307, - 3, 0, 525, 1954, 1958, 0, 41, 1950, - 525, 0, 5, 7, 3, 0, 0, 5, - 7, 3, 0, 510, 331, 1593, 1596, 41, - 1590, 331, 0, 5, 7, 510, 0, 0, - 3, 0, 335, 1611, 1614, 41, 1608, 335, - 0, 5, 7, 3307, 3, 0, 528, 1966, - 1970, 0, 41, 1962, 528, 0, 5, 7, - 3, 0, 0, 5, 7, 3, 0, 0, - 3302, 3897, 531, 1978, 1982, 0, 41, 531, - 1974, 531, 3282, 3861, 3282, 0, 5, 7, - 3302, 3, 0, 1635, 1822, 1635, 534, 1990, - 1994, 0, 41, 534, 1986, 534, 3287, 3867, - 3287, 0, 5, 7, 3302, 3, 0, 1822, - 1635, 537, 2002, 2006, 0, 41, 537, 1998, - 537, 3292, 3873, 3292, 0, 5, 7, 3302, - 3, 0, 1822, 1635, 540, 2014, 2018, 0, - 41, 2010, 540, 3297, 3879, 3297, 0, 5, - 7, 3, 0, 1822, 1635, 1946, 3272, 3277, - 3187, 3267, 1946, 3855, 3950, 3855, 507, 1942, - 3257, 3262, 3187, 1942, 3252, 1942, 3849, 3943, - 3849, 507, 1938, 3242, 3247, 3187, 1938, 3237, - 1938, 3843, 3936, 3843, 507, 1934, 3227, 3232, - 3187, 1934, 3222, 1934, 3837, 3929, 3837, 507, - 339, 1629, 1632, 1626, 339, 1930, 3212, 3217, - 3187, 3207, 1930, 507, 337, 1620, 1623, 1617, - 337, 1926, 3197, 3202, 3187, 3192, 1926, 507, - 510, 45, 561, 564, 41, 558, 45, 0, - 5, 7, 510, 3, 0, 45, 561, 564, - 41, 558, 45, 0, 5, 7, 510, 3, - 0, 45, 561, 564, 41, 558, 45, 0, - 5, 7, 489, 3, 0, 492, 510, 45, - 561, 564, 41, 558, 45, 0, 5, 7, - 510, 3, 0, 45, 561, 564, 41, 558, - 45, 432, 0, 5, 7, 3, 0, 31, - 447, 450, 444, 31, 432, 0, 5, 7, + 2048, 47, 573, 576, 41, 55, 53, 51, + 0, 57, 570, 47, 0, 5, 7, 510, + 3, 0, 47, 573, 576, 41, 55, 53, + 51, 0, 57, 570, 47, 0, 5, 7, + 510, 3, 0, 47, 573, 576, 41, 55, + 53, 51, 0, 57, 570, 47, 0, 5, + 7, 510, 3, 0, 567, 41, 55, 53, + 51, 0, 57, 2056, 41, 55, 53, 51, + 0, 57, 2060, 3328, 2056, 41, 55, 53, + 51, 0, 57, 597, 2068, 2072, 3328, 2064, + 597, 2056, 41, 55, 53, 51, 0, 57, + 597, 2068, 2072, 3328, 2064, 597, 2056, 41, + 55, 53, 51, 0, 57, 597, 2068, 2072, + 3328, 2064, 597, 432, 31, 447, 450, 444, + 31, 432, 0, 5, 7, 3, 0, 441, + 489, 39, 498, 501, 495, 39, 0, 5, + 7, 489, 3, 0, 492, 510, 45, 561, + 564, 41, 558, 45, 0, 5, 7, 489, + 3, 0, 492, 2096, 636, 31, 447, 450, + 444, 31, 1864, 3123, 1864, 432, 0, 5, + 7, 3, 0, 633, 1812, 633, 687, 2172, + 105, 1644, 2392, 329, 1590, 1593, 41, 1587, + 329, 0, 5, 7, 510, 0, 0, 3, + 0, 333, 1608, 1611, 41, 1605, 333, 0, + 5, 7, 3313, 3, 0, 525, 1960, 1964, + 0, 41, 1956, 525, 0, 5, 7, 3, + 0, 0, 5, 7, 3, 0, 510, 331, + 1599, 1602, 41, 1596, 331, 0, 5, 7, + 510, 0, 0, 3, 0, 335, 1617, 1620, + 41, 1614, 335, 0, 5, 7, 3313, 3, + 0, 528, 1972, 1976, 0, 41, 1968, 528, + 0, 5, 7, 3, 0, 0, 5, 7, + 3, 0, 0, 3308, 3903, 531, 1984, 1988, + 0, 41, 531, 1980, 531, 3288, 3867, 3288, + 0, 5, 7, 3308, 3, 0, 1641, 1828, + 1641, 534, 1996, 2000, 0, 41, 534, 1992, + 534, 3293, 3873, 3293, 0, 5, 7, 3308, + 3, 0, 1828, 1641, 537, 2008, 2012, 0, + 41, 537, 2004, 537, 3298, 3879, 3298, 0, + 5, 7, 3308, 3, 0, 1828, 1641, 540, + 2020, 2024, 0, 41, 2016, 540, 3303, 3885, + 3303, 0, 5, 7, 3, 0, 1828, 1641, + 1952, 3278, 3283, 3193, 3273, 1952, 3861, 3956, + 3861, 507, 1948, 3263, 3268, 3193, 1948, 3258, + 1948, 3855, 3949, 3855, 507, 1944, 3248, 3253, + 3193, 1944, 3243, 1944, 3849, 3942, 3849, 507, + 1940, 3233, 3238, 3193, 1940, 3228, 1940, 3843, + 3935, 3843, 507, 339, 1635, 1638, 1632, 339, + 1936, 3218, 3223, 3193, 3213, 1936, 507, 337, + 1626, 1629, 1623, 337, 1932, 3203, 3208, 3193, + 3198, 1932, 507, 510, 45, 561, 564, 41, + 558, 45, 0, 5, 7, 510, 3, 0, + 45, 561, 564, 41, 558, 45, 0, 5, + 7, 510, 3, 0, 45, 561, 564, 41, + 558, 45, 0, 5, 7, 489, 3, 0, + 492, 510, 45, 561, 564, 41, 558, 45, + 0, 5, 7, 510, 3, 0, 45, 561, + 564, 41, 558, 45, 432, 0, 5, 7, 3, 0, 31, 447, 450, 444, 31, 432, 0, 5, 7, 3, 0, 31, 447, 450, - 444, 31, 0, 5, 7, 489, 3, 0, - 492, 353, 0, 5, 7, 3, 0, 510, + 444, 31, 432, 0, 5, 7, 3, 0, + 31, 447, 450, 444, 31, 0, 5, 7, + 489, 3, 0, 492, 353, 0, 5, 7, + 3, 0, 510, 45, 561, 564, 41, 558, + 45, 0, 5, 7, 351, 3, 0, 0, + 5, 7, 3, 0, 129, 1, 711, 0, + 699, 5, 7, 702, 705, 3, 0, 1, + 366, 1, 111, 113, 0, 2148, 687, 105, + 107, 510, 708, 2196, 2200, 41, 2192, 708, + 2188, 3373, 2188, 0, 687, 105, 109, 510, 45, 561, 564, 41, 558, 45, 0, 5, 7, 351, 3, 0, 0, 5, 7, 3, - 0, 129, 1, 711, 0, 699, 5, 7, - 702, 705, 3, 0, 1, 366, 1, 111, - 113, 0, 2142, 687, 105, 107, 510, 708, - 2190, 2194, 41, 2186, 708, 2182, 3367, 2182, - 0, 687, 105, 109, 510, 45, 561, 564, - 41, 558, 45, 0, 5, 7, 351, 3, - 0, 0, 5, 7, 3, 0, 510, 43, - 549, 552, 41, 546, 43, 714, 0, 5, - 7, 115, 3, 0, 117, 0, 5, 7, - 3, 0, 1, 366, 1, 510, 43, 549, - 552, 41, 546, 43, 0, 5, 7, 510, - 3, 0, 43, 549, 552, 41, 546, 43, - 0, 5, 7, 115, 3, 0, 117, 0, - 5, 7, 3, 0, 1, 366, 1, 510, - 43, 549, 552, 41, 546, 43, 795, 0, - 5, 7, 147, 149, 151, 153, 3, 0, - 0, 5, 7, 3, 0, 1910, 510, 43, - 549, 552, 41, 546, 43, 0, 5, 7, - 0, 3, 0, 2206, 0, 5, 7, 0, - 5, 7, 0, 5, 7, 1, 3, 0, - 366, 1, 3, 0, 366, 1, 3, 0, - 366, 1, 798, 129, 0, 5, 7, 3, 0, 510, 43, 549, 552, 41, 546, 43, - 2146, 0, 5, 7, 687, 3, 0, 3352, - 105, 693, 2158, 2162, 693, 2158, 2162, 693, - 2158, 2162, 2150, 2154, 693, 3357, 2150, 2154, - 693, 3357, 2150, 2154, 693, 3357, 2150, 0, + 714, 0, 5, 7, 115, 3, 0, 117, + 0, 5, 7, 3, 0, 1, 366, 1, + 510, 43, 549, 552, 41, 546, 43, 0, + 5, 7, 510, 3, 0, 43, 549, 552, + 41, 546, 43, 0, 5, 7, 115, 3, + 0, 117, 0, 5, 7, 3, 0, 1, + 366, 1, 510, 43, 549, 552, 41, 546, + 43, 801, 0, 5, 7, 147, 149, 151, + 153, 3, 0, 0, 5, 7, 3, 0, + 1916, 510, 43, 549, 552, 41, 546, 43, + 0, 5, 7, 0, 3, 0, 2212, 0, + 5, 7, 0, 5, 7, 0, 5, 7, + 1, 3, 0, 366, 1, 3, 0, 366, + 1, 3, 0, 366, 1, 804, 129, 0, 5, 7, 3, 0, 510, 43, 549, 552, - 41, 546, 43, 0, 5, 7, 687, 3, - 0, 105, 696, 2174, 2178, 696, 2174, 2178, - 696, 2174, 2178, 2166, 2170, 696, 3362, 2166, - 2170, 696, 3362, 2166, 2170, 696, 3362, 2166, - 0, 5, 7, 3, 0, 510, 43, 549, - 552, 41, 546, 43, 0, 5, 7, 489, - 3, 0, 39, 498, 501, 39, 498, 501, - 39, 498, 501, 492, 495, 39, 1902, 492, - 495, 39, 1902, 492, 495, 39, 1902, 492, - 801, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 155, 807, 810, 0, 0, 0, 804, 155, - 0, 5, 7, 351, 3, 0, 0, 5, - 7, 3, 0, 510, 43, 549, 552, 41, - 546, 43, 0, 5, 7, 510, 3, 0, - 47, 573, 576, 41, 570, 47, 615, 0, - 5, 7, 603, 3, 0, 63, 609, 612, - 61, 606, 63, 0, 5, 7, 603, 3, - 0, 63, 609, 612, 61, 606, 63, 0, - 5, 7, 510, 3, 0, 45, 561, 564, - 41, 558, 45, 0, 5, 7, 489, 3, - 0, 39, 498, 501, 495, 39, 0, 5, - 7, 129, 3, 0, 1, 0, 0, 181, - 924, 927, 921, 181, 0, 0, 0, 175, - 897, 900, 894, 175, 0, 195, 987, 990, - 984, 195, 0, 0, 0, 0, 0, 237, - 1176, 1179, 1173, 237, 0, 0, 0, 0, - 0, 0, 219, 1095, 1098, 1092, 219, 217, - 1086, 1089, 1083, 217, 0, 0, 191, 969, - 972, 966, 191, 0, 0, 0, 159, 825, - 828, 822, 159, 0, 0, 0, 0, 0, - 0, 209, 1050, 1053, 1047, 209, 0, 0, - 0, 0, 193, 978, 981, 975, 193, 0, - 0, 0, 207, 1041, 1044, 1038, 207, 197, - 996, 999, 993, 197, 0, 0, 0, 0, - 0, 231, 1149, 1152, 1146, 231, 0, 233, - 1158, 1161, 1155, 233, 0, 0, 0, 0, - 165, 852, 855, 849, 165, 0, 0, 0, - 0, 0, 0, 0, 201, 1014, 1017, 1011, - 201, 0, 0, 0, 179, 915, 918, 912, - 179, 189, 960, 963, 957, 189, 0, 0, - 0, 0, 0, 225, 1122, 1125, 1119, 225, - 0, 227, 1131, 1134, 1128, 227, 0, 183, - 933, 936, 930, 183, 229, 1140, 1143, 1137, - 229, 0, 0, 0, 0, 0, 167, 861, - 864, 858, 167, 169, 870, 873, 867, 169, - 0, 0, 0, 0, 0, 0, 187, 951, - 954, 948, 187, 0, 223, 1113, 1116, 1110, - 223, 157, 816, 819, 0, 813, 157, 0, - 205, 1032, 1035, 0, 1029, 205, 211, 1059, - 1062, 0, 1056, 211, 0, 0, 0, 0, - 213, 1068, 1071, 1065, 213, 0, 0, 163, - 843, 846, 840, 163, 0, 0, 0, 173, - 888, 891, 885, 173, 0, 0, 0, 203, - 1023, 1026, 1020, 203, 177, 906, 909, 903, - 177, 0, 0, 0, 0, 0, 161, 834, - 837, 831, 161, 0, 221, 1104, 1107, 1101, - 221, 0, 185, 942, 945, 939, 185, 0, - 0, 0, 199, 1005, 1008, 1002, 199, 0, - 0, 0, 0, 0, 215, 1077, 1080, 1074, - 215, 0, 171, 879, 882, 876, 171, 0, - 0, 1914, 510, 45, 561, 564, 41, 558, - 45, 0, 0, 235, 1167, 1170, 1164, 235, - 489, 504, 1, 510, 45, 561, 564, 41, - 558, 45, 0, 5, 7, 510, 3, 0, + 41, 546, 43, 2152, 0, 5, 7, 687, + 3, 0, 3358, 105, 693, 2164, 2168, 693, + 2164, 2168, 693, 2164, 2168, 2156, 2160, 693, + 3363, 2156, 2160, 693, 3363, 2156, 2160, 693, + 3363, 2156, 0, 5, 7, 3, 0, 510, 43, 549, 552, 41, 546, 43, 0, 5, - 7, 351, 3, 0, 0, 5, 7, 3, - 0, 129, 1, 129, 1, 510, 43, 549, + 7, 687, 3, 0, 105, 696, 2180, 2184, + 696, 2180, 2184, 696, 2180, 2184, 2172, 2176, + 696, 3368, 2172, 2176, 696, 3368, 2172, 2176, + 696, 3368, 2172, 0, 5, 7, 3, 0, + 510, 43, 549, 552, 41, 546, 43, 0, + 5, 7, 489, 3, 0, 39, 498, 501, + 39, 498, 501, 39, 498, 501, 492, 495, + 39, 1908, 492, 495, 39, 1908, 492, 495, + 39, 1908, 492, 807, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 155, 813, 816, 0, 0, + 0, 810, 155, 0, 5, 7, 351, 3, + 0, 0, 5, 7, 3, 0, 510, 43, + 549, 552, 41, 546, 43, 0, 5, 7, + 510, 3, 0, 47, 573, 576, 41, 570, + 47, 615, 0, 5, 7, 603, 3, 0, + 63, 609, 612, 61, 606, 63, 0, 5, + 7, 603, 3, 0, 63, 609, 612, 61, + 606, 63, 0, 5, 7, 510, 3, 0, + 45, 561, 564, 41, 558, 45, 0, 5, + 7, 489, 3, 0, 39, 498, 501, 495, + 39, 0, 5, 7, 129, 3, 0, 1, + 0, 0, 181, 930, 933, 927, 181, 0, + 0, 0, 175, 903, 906, 900, 175, 0, + 195, 993, 996, 990, 195, 0, 0, 0, + 0, 0, 237, 1182, 1185, 1179, 237, 0, + 0, 0, 0, 0, 0, 219, 1101, 1104, + 1098, 219, 217, 1092, 1095, 1089, 217, 0, + 0, 191, 975, 978, 972, 191, 0, 0, + 0, 159, 831, 834, 828, 159, 0, 0, + 0, 0, 0, 0, 209, 1056, 1059, 1053, + 209, 0, 0, 0, 0, 193, 984, 987, + 981, 193, 0, 0, 0, 207, 1047, 1050, + 1044, 207, 197, 1002, 1005, 999, 197, 0, + 0, 0, 0, 0, 231, 1155, 1158, 1152, + 231, 0, 233, 1164, 1167, 1161, 233, 0, + 0, 0, 0, 165, 858, 861, 855, 165, + 0, 0, 0, 0, 0, 0, 0, 201, + 1020, 1023, 1017, 201, 0, 0, 0, 179, + 921, 924, 918, 179, 189, 966, 969, 963, + 189, 0, 0, 0, 0, 0, 225, 1128, + 1131, 1125, 225, 0, 227, 1137, 1140, 1134, + 227, 0, 183, 939, 942, 936, 183, 229, + 1146, 1149, 1143, 229, 0, 0, 0, 0, + 0, 167, 867, 870, 864, 167, 169, 876, + 879, 873, 169, 0, 0, 0, 0, 0, + 0, 187, 957, 960, 954, 187, 0, 223, + 1119, 1122, 1116, 223, 157, 822, 825, 0, + 819, 157, 0, 205, 1038, 1041, 0, 1035, + 205, 211, 1065, 1068, 0, 1062, 211, 0, + 0, 0, 0, 213, 1074, 1077, 1071, 213, + 0, 0, 163, 849, 852, 846, 163, 0, + 0, 0, 173, 894, 897, 891, 173, 0, + 0, 0, 203, 1029, 1032, 1026, 203, 177, + 912, 915, 909, 177, 0, 0, 0, 0, + 0, 161, 840, 843, 837, 161, 0, 221, + 1110, 1113, 1107, 221, 0, 185, 948, 951, + 945, 185, 0, 0, 0, 199, 1011, 1014, + 1008, 199, 0, 0, 0, 0, 0, 215, + 1083, 1086, 1080, 215, 0, 171, 885, 888, + 882, 171, 0, 0, 1920, 510, 45, 561, + 564, 41, 558, 45, 0, 0, 235, 1173, + 1176, 1170, 235, 489, 504, 1, 510, 45, + 561, 564, 41, 558, 45, 0, 5, 7, + 510, 3, 0, 43, 549, 552, 41, 546, + 43, 0, 5, 7, 351, 3, 0, 0, + 5, 7, 3, 0, 129, 1, 129, 1, + 510, 43, 549, 552, 41, 546, 43, 0, + 5, 7, 510, 3, 0, 43, 549, 552, + 41, 546, 43, 0, 5, 7, 510, 3, + 0, 45, 561, 564, 41, 558, 45, 0, + 5, 7, 29, 435, 3, 0, 31, 447, + 450, 444, 31, 720, 0, 5, 7, 438, + 3, 0, 133, 135, 0, 137, 139, 0, + 141, 0, 143, 145, 0, 453, 131, 1, + 0, 0, 117, 115, 510, 43, 549, 552, + 41, 546, 43, 0, 5, 7, 510, 3, + 0, 43, 549, 552, 41, 546, 43, 0, + 5, 7, 510, 3, 0, 45, 561, 564, + 41, 558, 45, 0, 5, 7, 29, 435, + 3, 0, 441, 117, 115, 510, 43, 549, 552, 41, 546, 43, 0, 5, 7, 510, 3, 0, 43, 549, 552, 41, 546, 43, - 0, 5, 7, 510, 3, 0, 45, 561, - 564, 41, 558, 45, 0, 5, 7, 29, - 435, 3, 0, 31, 447, 450, 444, 31, - 720, 0, 5, 7, 438, 3, 0, 133, - 135, 0, 137, 139, 0, 141, 0, 143, - 145, 0, 453, 131, 1, 0, 0, 117, - 115, 510, 43, 549, 552, 41, 546, 43, 0, 5, 7, 510, 3, 0, 43, 549, - 552, 41, 546, 43, 0, 5, 7, 510, - 3, 0, 45, 561, 564, 41, 558, 45, - 0, 5, 7, 29, 435, 3, 0, 441, - 117, 115, 510, 43, 549, 552, 41, 546, - 43, 0, 5, 7, 510, 3, 0, 43, - 549, 552, 41, 546, 43, 0, 5, 7, - 510, 3, 0, 43, 549, 552, 41, 546, - 43, 0, 5, 7, 115, 3, 0, 117, - 0, 5, 7, 3, 0, 1, 366, 1, - 510, 45, 561, 564, 41, 558, 45, 0, - 5, 7, 687, 3, 0, 2150, 105, 510, + 552, 41, 546, 43, 0, 5, 7, 115, + 3, 0, 117, 0, 5, 7, 3, 0, + 1, 366, 1, 510, 45, 561, 564, 41, + 558, 45, 0, 5, 7, 687, 3, 0, + 2156, 105, 510, 45, 561, 564, 41, 558, + 45, 0, 5, 7, 1650, 3, 0, 117, + 115, 117, 2208, 345, 115, 117, 115, 117, + 2412, 2408, 1647, 117, 2404, 343, 115, 117, + 2396, 1647, 117, 343, 115, 117, 2400, 510, 45, 561, 564, 41, 558, 45, 0, 5, - 7, 1644, 3, 0, 117, 115, 117, 2202, - 345, 115, 117, 115, 117, 2406, 2402, 1641, - 117, 2398, 343, 115, 117, 2390, 1641, 117, - 343, 115, 117, 2394, 510, 45, 561, 564, - 41, 558, 45, 0, 5, 7, 510, 3, - 0, 45, 561, 564, 41, 558, 45, 73, - 0, 5, 7, 3, 0, 1, 510, 43, - 549, 552, 41, 546, 43, 432, 0, 5, - 7, 3, 0, 31, 447, 450, 444, 31, - 73, 0, 5, 7, 3, 0, 1, 480, - 35, 0, 474, 477, 456, 471, 35, 35, - 357, 378, 381, 2414, 456, 369, 35, 1826, - 1653, 1894, 35, 378, 381, 2130, 2130, 2130, - 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, - 2130, 2130, 2130, 2130, 369, 35, 3162, 3177, - 3347, 3347, 3347, 3347, 3347, 3347, 3347, 3347, - 3347, 3347, 3347, 3347, 3347, 3347, 3347, 1886, - 663, 93, 2122, 2126, 2114, 660, 93, 2118, - 663, 378, 381, 369, 35, 378, 381, 3098, - 35, 35, 378, 381, 35, 1653, 3825, 3831, - 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, - 3891, 3891, 3891, 3891, 3891, 3891, 3891, 1834 + 7, 510, 3, 0, 45, 561, 564, 41, + 558, 45, 73, 0, 5, 7, 3, 0, + 1, 510, 43, 549, 552, 41, 546, 43, + 432, 0, 5, 7, 3, 0, 31, 447, + 450, 444, 31, 73, 0, 5, 7, 3, + 0, 1, 480, 35, 0, 474, 477, 456, + 471, 35, 35, 357, 378, 381, 2420, 456, + 369, 35, 1832, 1659, 1900, 35, 378, 381, + 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, + 2136, 2136, 2136, 2136, 2136, 2136, 2136, 369, + 35, 3168, 3183, 3353, 3353, 3353, 3353, 3353, + 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, + 3353, 3353, 1892, 663, 93, 2128, 2132, 2120, + 660, 93, 2124, 663, 378, 381, 369, 35, + 378, 381, 3104, 35, 35, 378, 381, 35, + 1659, 3831, 3837, 3897, 3897, 3897, 3897, 3897, + 3897, 3897, 3897, 3897, 3897, 3897, 3897, 3897, + 3897, 3897, 1840 }; static const short _zone_scanner_eof_actions[] = { - 0, 1918, 2046, 361, 1662, 355, 1647, 9, - 9, 355, 355, 1647, 1647, 3182, 3885, 1659, - 361, 361, 1662, 1647, 361, 361, 361, 361, - 361, 1662, 1662, 361, 361, 1662, 361, 361, - 361, 1662, 361, 361, 361, 361, 1662, 361, - 361, 361, 1662, 361, 361, 361, 1662, 1662, - 361, 361, 361, 361, 1662, 361, 1662, 361, - 361, 361, 361, 1662, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 1662, 361, - 361, 1662, 1662, 361, 361, 1662, 361, 1662, - 361, 1662, 1662, 361, 361, 361, 361, 1662, - 1662, 361, 361, 361, 361, 1662, 361, 1662, - 1662, 361, 1662, 1662, 361, 361, 361, 361, - 1662, 361, 361, 1662, 361, 1662, 361, 361, - 361, 1662, 1662, 361, 361, 1662, 361, 1662, - 361, 1662, 361, 361, 361, 1662, 361, 361, - 361, 1662, 361, 1662, 361, 361, 522, 1922, - 361, 361, 1662, 361, 1918, 361, 361, 522, - 2046, 2046, 2046, 2046, 361, 9, 95, 95, + 0, 1924, 2052, 361, 1668, 355, 1653, 9, + 9, 355, 355, 1653, 1653, 3188, 3891, 1665, + 361, 361, 1668, 1653, 361, 361, 361, 361, + 361, 1668, 1668, 361, 361, 1668, 361, 361, + 361, 1668, 361, 361, 361, 361, 1668, 361, + 361, 361, 1668, 361, 361, 361, 1668, 1668, + 361, 361, 361, 361, 1668, 361, 1668, 361, + 361, 361, 361, 1668, 361, 361, 361, 361, + 361, 361, 361, 361, 361, 361, 1668, 361, + 361, 1668, 1668, 361, 361, 1668, 361, 1668, + 361, 1668, 1668, 361, 361, 361, 361, 1668, + 1668, 361, 361, 361, 361, 1668, 361, 1668, + 1668, 361, 1668, 1668, 361, 361, 361, 361, + 1668, 361, 361, 1668, 361, 1668, 361, 361, + 361, 1668, 1668, 361, 361, 1668, 361, 1668, + 361, 1668, 361, 361, 361, 1668, 361, 361, + 361, 1668, 361, 1668, 361, 361, 522, 1928, + 361, 361, 1668, 361, 1924, 361, 361, 522, + 2052, 2052, 2052, 2052, 361, 9, 95, 95, 95, 95, 95, 95, 95, 95, 37, 522, - 0, 3167, 522, 361, 2046, 2046, 2046, 361, - 1898, 1922, 2422, 1647, 1918, 9, 1647, 9, - 3182, 2422, 2422, 2422, 2422, 2422, 2422, 2422, - 2422, 2422, 2422, 2422, 2422, 2422, 2422, 1647, - 2410, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 1890, 3922, 1918, 1659, 3172, 3182, - 3172, 3172, 3172, 3172, 3172, 3172, 3172, 3172, - 3172, 3172, 3172, 3172, 3172, 3172, 483, 3182, - 1647, 9, 1647, 361, 361, 1662, 361, 361, - 361, 1662, 361, 1662, 1647, 1647, 9, 1647, - 1647, 355, 1647, 486, 486, 486, 486, 486, + 0, 3173, 522, 361, 2052, 2052, 2052, 361, + 1904, 1928, 2428, 1653, 1924, 9, 1653, 9, + 3188, 2428, 2428, 2428, 2428, 2428, 2428, 2428, + 2428, 2428, 2428, 2428, 2428, 2428, 2428, 1653, + 2416, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 1896, 3928, 1924, 1665, 3178, 3188, + 3178, 3178, 3178, 3178, 3178, 3178, 3178, 3178, + 3178, 3178, 3178, 3178, 3178, 3178, 483, 3188, + 1653, 9, 1653, 361, 361, 1668, 361, 361, + 361, 1668, 361, 1668, 1653, 1653, 9, 1653, + 1653, 355, 1653, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, - 486, 9, 1659, 486, 1659, 0, 0, 27, + 486, 9, 1665, 486, 1665, 0, 0, 27, 27, 27, 405, 405, 405, 405, 27, 27, - 621, 621, 2086, 2086, 2086, 2086, 621, 67, - 2086, 2086, 2086, 2086, 75, 513, 3317, 384, - 384, 3317, 2038, 3317, 75, 79, 79, 79, + 621, 621, 2092, 2092, 2092, 2092, 621, 67, + 2092, 2092, 2092, 2092, 75, 513, 3323, 384, + 384, 3323, 2044, 3323, 75, 79, 79, 79, 387, 387, 387, 408, 408, 408, 408, 387, 79, 0, 85, 651, 657, 87, 657, 9, 9, 411, 411, 411, 411, 657, 9, 87, @@ -5015,8 +5032,10 @@ static const short _zone_scanner_eof_actions[] = { 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 341, 516, 516, - 2198, 2198, 2198, 2198, 341, 341, 341, 516, - 516, 2198, 2198, 2198, 2198, 341, 516, 341, + 2204, 2204, 2204, 2204, 341, 341, 341, 516, + 516, 2204, 2204, 2204, 2204, 341, 516, 341, + 347, 347, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, @@ -5028,75 +5047,74 @@ static const short _zone_scanner_eof_actions[] = { 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 347, 347, 347, 347, 347, 347, 347, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, - 690, 690, 355, 355, 355, 355, 355, 355, - 519, 519, 519, 2042, 519, 2042, 519, 2042, - 519, 2042, 2042, 2042, 2042, 355, 2042, 2042, - 2042, 355, 2042, 2042, 2042, 355, 2042, 2042, - 2042, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 519, 519, - 355, 355, 355, 636, 636, 636, 636, 690, - 690, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, - 519, 519, 519, 519, 519, 519, 355, 355, - 355, 355, 355, 519, 519, 519, 519, 355, + 349, 690, 690, 355, 355, 355, 355, 355, + 355, 519, 519, 519, 2048, 519, 2048, 519, + 2048, 519, 2048, 2048, 2048, 2048, 355, 2048, + 2048, 2048, 355, 2048, 2048, 2048, 355, 2048, + 2048, 2048, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 519, + 519, 355, 355, 355, 636, 636, 636, 636, + 690, 690, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, + 1644, 519, 519, 519, 519, 519, 519, 355, + 355, 355, 355, 355, 519, 519, 519, 519, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 519, 519, - 355, 355, 355, 355, 355, 355, 355, 711, - 711, 711, 2142, 2142, 711, 711, 355, 711, - 2142, 2142, 519, 519, 355, 355, 519, 519, - 714, 714, 714, 714, 355, 355, 355, 519, - 519, 519, 519, 714, 714, 714, 714, 355, - 355, 519, 519, 795, 795, 1910, 1910, 795, - 2206, 798, 798, 798, 798, 798, 798, 798, - 795, 795, 795, 1910, 1910, 2146, 3352, 795, - 795, 795, 1910, 1910, 2146, 3352, 795, 795, - 795, 1910, 1910, 795, 2206, 795, 795, 355, - 801, 801, 355, 355, 519, 519, 519, 519, - 615, 615, 615, 615, 519, 519, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 1914, 1914, 801, - 801, 801, 355, 355, 355, 519, 519, 519, + 355, 355, 355, 355, 355, 355, 355, 519, 519, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 519, 519, 519, 519, 519, 519, - 714, 714, 720, 720, 720, 720, 720, 720, - 720, 720, 720, 355, 720, 720, 720, 720, - 720, 355, 714, 714, 355, 355, 355, 519, - 519, 519, 519, 519, 519, 714, 714, 714, - 714, 355, 355, 355, 519, 519, 519, 519, - 519, 519, 714, 714, 714, 714, 355, 355, - 355, 519, 519, 690, 690, 355, 519, 519, - 714, 714, 714, 714, 2202, 714, 714, 714, - 714, 2406, 355, 714, 714, 2398, 714, 714, - 2398, 714, 714, 2398, 714, 714, 2398, 519, - 519, 519, 519, 355, 355, 355, 355, 519, - 519, 355, 355, 355, 355, 355, 355, 0, - 0, 0, 0, 93, 0, 0, 0, 0, + 711, 711, 711, 2148, 2148, 711, 711, 355, + 711, 2148, 2148, 519, 519, 355, 355, 519, + 519, 714, 714, 714, 714, 355, 355, 355, + 519, 519, 519, 519, 714, 714, 714, 714, + 355, 355, 519, 519, 801, 801, 1916, 1916, + 801, 2212, 804, 804, 804, 804, 804, 804, + 804, 801, 801, 801, 1916, 1916, 2152, 3358, + 801, 801, 801, 1916, 1916, 2152, 3358, 801, + 801, 801, 1916, 1916, 801, 2212, 801, 801, + 355, 807, 807, 355, 355, 519, 519, 519, + 519, 615, 615, 615, 615, 519, 519, 355, + 355, 355, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 807, 807, + 807, 807, 807, 807, 807, 807, 1920, 1920, + 807, 807, 807, 355, 355, 355, 519, 519, + 519, 519, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 519, 519, 519, 519, 519, + 519, 714, 714, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 355, 720, 720, 720, + 720, 720, 355, 714, 714, 355, 355, 355, + 519, 519, 519, 519, 519, 519, 714, 714, + 714, 714, 355, 355, 355, 519, 519, 519, + 519, 519, 519, 714, 714, 714, 714, 355, + 355, 355, 519, 519, 690, 690, 355, 519, + 519, 714, 714, 714, 714, 2208, 714, 714, + 714, 714, 2412, 355, 714, 714, 2404, 714, + 714, 2404, 714, 714, 2404, 714, 714, 2404, + 519, 519, 519, 519, 355, 355, 355, 355, + 519, 519, 355, 355, 355, 355, 355, 355, + 0, 0, 0, 0, 93, 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, @@ -5106,7 +5124,7 @@ static const short _zone_scanner_eof_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0 }; @@ -5128,7 +5146,7 @@ int zs_init( memset(s, 0, sizeof(*s)); // Nonzero initial scanner state. - s->cs = 1111; + s->cs = 1120; // Reset the file descriptor. s->file.descriptor = -1; @@ -5652,9 +5670,9 @@ _match: case 8: { if (escape) { - cs = 1111; {p++; goto _out; } + cs = 1120; {p++; goto _out; } } else { - {cs = 1111; goto _again;} + {cs = 1120; goto _again;} } } break; @@ -6307,7 +6325,7 @@ _match: { NOERR; if (escape) { - cs = 1111; {p++; goto _out; } + cs = 1120; {p++; goto _out; } } } break; @@ -6696,224 +6714,234 @@ _match: break; case 133: { - *(rdata_tail++) = 252; + *(rdata_tail++) = 15; } break; case 134: { - *(rdata_tail++) = 253; + *(rdata_tail++) = 16; } break; case 135: { - *(rdata_tail++) = 254; + *(rdata_tail++) = 252; } break; case 136: + { + *(rdata_tail++) = 253; + } + break; + case 137: + { + *(rdata_tail++) = 254; + } + break; + case 138: { *((uint16_t *)rdata_tail) = htons(1); rdata_tail += 2; } break; - case 137: + case 139: { *((uint16_t *)rdata_tail) = htons(2); rdata_tail += 2; } break; - case 138: + case 140: { *((uint16_t *)rdata_tail) = htons(3); rdata_tail += 2; } break; - case 139: + case 141: { *((uint16_t *)rdata_tail) = htons(4); rdata_tail += 2; } break; - case 140: + case 142: { *((uint16_t *)rdata_tail) = htons(5); rdata_tail += 2; } break; - case 141: + case 143: { *((uint16_t *)rdata_tail) = htons(6); rdata_tail += 2; } break; - case 142: + case 144: { *((uint16_t *)rdata_tail) = htons(7); rdata_tail += 2; } break; - case 143: + case 145: { *((uint16_t *)rdata_tail) = htons(8); rdata_tail += 2; } break; - case 144: + case 146: { *((uint16_t *)rdata_tail) = htons(253); rdata_tail += 2; } break; - case 145: + case 147: { *((uint16_t *)rdata_tail) = htons(254); rdata_tail += 2; } break; - case 146: + case 148: { WARN(ZS_BAD_GATEWAY); p--; {cs = 261; goto _again;} } break; - case 147: + case 149: { WARN(ZS_BAD_GATEWAY_KEY); p--; {cs = 261; goto _again;} } break; - case 148: + case 150: { WARN(ZS_UNSUPPORTED_TYPE); p--; {cs = 261; goto _again;} } break; - case 149: + case 151: { type_num(KNOT_RRTYPE_A, &rdata_tail); } break; - case 150: + case 152: { type_num(KNOT_RRTYPE_NS, &rdata_tail); } break; - case 151: + case 153: { type_num(KNOT_RRTYPE_CNAME, &rdata_tail); } break; - case 152: + case 154: { type_num(KNOT_RRTYPE_SOA, &rdata_tail); } break; - case 153: + case 155: { type_num(KNOT_RRTYPE_PTR, &rdata_tail); } break; - case 154: + case 156: { type_num(KNOT_RRTYPE_HINFO, &rdata_tail); } break; - case 155: + case 157: { type_num(KNOT_RRTYPE_MINFO, &rdata_tail); } break; - case 156: + case 158: { type_num(KNOT_RRTYPE_MX, &rdata_tail); } break; - case 157: + case 159: { type_num(KNOT_RRTYPE_TXT, &rdata_tail); } break; - case 158: + case 160: { type_num(KNOT_RRTYPE_RP, &rdata_tail); } break; - case 159: + case 161: { type_num(KNOT_RRTYPE_AFSDB, &rdata_tail); } break; - case 160: + case 162: { type_num(KNOT_RRTYPE_RT, &rdata_tail); } break; - case 161: + case 163: { type_num(KNOT_RRTYPE_KEY, &rdata_tail); } break; - case 162: + case 164: { type_num(KNOT_RRTYPE_AAAA, &rdata_tail); } break; - case 163: + case 165: { type_num(KNOT_RRTYPE_LOC, &rdata_tail); } break; - case 164: + case 166: { type_num(KNOT_RRTYPE_SRV, &rdata_tail); } break; - case 165: + case 167: { type_num(KNOT_RRTYPE_NAPTR, &rdata_tail); } break; - case 166: + case 168: { type_num(KNOT_RRTYPE_KX, &rdata_tail); } break; - case 167: + case 169: { type_num(KNOT_RRTYPE_CERT, &rdata_tail); } break; - case 168: + case 170: { type_num(KNOT_RRTYPE_DNAME, &rdata_tail); } break; - case 169: + case 171: { type_num(KNOT_RRTYPE_APL, &rdata_tail); } break; - case 170: + case 172: { type_num(KNOT_RRTYPE_DS, &rdata_tail); } break; - case 171: + case 173: { type_num(KNOT_RRTYPE_SSHFP, &rdata_tail); } break; - case 172: + case 174: { type_num(KNOT_RRTYPE_IPSECKEY, &rdata_tail); } break; - case 173: + case 175: { type_num(KNOT_RRTYPE_RRSIG, &rdata_tail); } break; - case 174: + case 176: { type_num(KNOT_RRTYPE_NSEC, &rdata_tail); } break; - case 175: + case 177: { type_num(KNOT_RRTYPE_DNSKEY, &rdata_tail); } break; - case 176: + case 178: { type_num(KNOT_RRTYPE_DHCID, &rdata_tail); } break; - case 177: + case 179: { type_num(KNOT_RRTYPE_NSEC3, &rdata_tail); } break; - case 178: + case 180: { type_num(KNOT_RRTYPE_NSEC3PARAM, &rdata_tail); } break; - case 179: + case 181: { type_num(KNOT_RRTYPE_TLSA, &rdata_tail); } break; - case 180: + case 182: { type_num(KNOT_RRTYPE_CDS, &rdata_tail); } break; - case 181: + case 183: { type_num(KNOT_RRTYPE_CDNSKEY, &rdata_tail); } break; - case 182: + case 184: { type_num(KNOT_RRTYPE_SPF, &rdata_tail); } break; - case 183: + case 185: { type_num(KNOT_RRTYPE_NID, &rdata_tail); } break; - case 184: + case 186: { type_num(KNOT_RRTYPE_L32, &rdata_tail); } break; - case 185: + case 187: { type_num(KNOT_RRTYPE_L64, &rdata_tail); } break; - case 186: + case 188: { type_num(KNOT_RRTYPE_LP, &rdata_tail); } break; - case 187: + case 189: { type_num(KNOT_RRTYPE_EUI48, &rdata_tail); } break; - case 188: + case 190: { type_num(KNOT_RRTYPE_EUI64, &rdata_tail); } break; - case 189: + case 191: { type_num(KNOT_RRTYPE_URI, &rdata_tail); } break; - case 190: + case 192: { type_num(KNOT_RRTYPE_CAA, &rdata_tail); } break; - case 191: + case 193: { if (s->number64 <= UINT16_MAX) { window_add_bit(s->number64, s); @@ -6923,139 +6951,139 @@ _match: } } break; - case 192: + case 194: { window_add_bit(KNOT_RRTYPE_A, s); } break; - case 193: + case 195: { window_add_bit(KNOT_RRTYPE_NS, s); } break; - case 194: + case 196: { window_add_bit(KNOT_RRTYPE_CNAME, s); } break; - case 195: + case 197: { window_add_bit(KNOT_RRTYPE_SOA, s); } break; - case 196: + case 198: { window_add_bit(KNOT_RRTYPE_PTR, s); } break; - case 197: + case 199: { window_add_bit(KNOT_RRTYPE_HINFO, s); } break; - case 198: + case 200: { window_add_bit(KNOT_RRTYPE_MINFO, s); } break; - case 199: + case 201: { window_add_bit(KNOT_RRTYPE_MX, s); } break; - case 200: + case 202: { window_add_bit(KNOT_RRTYPE_TXT, s); } break; - case 201: + case 203: { window_add_bit(KNOT_RRTYPE_RP, s); } break; - case 202: + case 204: { window_add_bit(KNOT_RRTYPE_AFSDB, s); } break; - case 203: + case 205: { window_add_bit(KNOT_RRTYPE_RT, s); } break; - case 204: + case 206: { window_add_bit(KNOT_RRTYPE_KEY, s); } break; - case 205: + case 207: { window_add_bit(KNOT_RRTYPE_AAAA, s); } break; - case 206: + case 208: { window_add_bit(KNOT_RRTYPE_LOC, s); } break; - case 207: + case 209: { window_add_bit(KNOT_RRTYPE_SRV, s); } break; - case 208: + case 210: { window_add_bit(KNOT_RRTYPE_NAPTR, s); } break; - case 209: + case 211: { window_add_bit(KNOT_RRTYPE_KX, s); } break; - case 210: + case 212: { window_add_bit(KNOT_RRTYPE_CERT, s); } break; - case 211: + case 213: { window_add_bit(KNOT_RRTYPE_DNAME, s); } break; - case 212: + case 214: { window_add_bit(KNOT_RRTYPE_APL, s); } break; - case 213: + case 215: { window_add_bit(KNOT_RRTYPE_DS, s); } break; - case 214: + case 216: { window_add_bit(KNOT_RRTYPE_SSHFP, s); } break; - case 215: + case 217: { window_add_bit(KNOT_RRTYPE_IPSECKEY, s); } break; - case 216: + case 218: { window_add_bit(KNOT_RRTYPE_RRSIG, s); } break; - case 217: + case 219: { window_add_bit(KNOT_RRTYPE_NSEC, s); } break; - case 218: + case 220: { window_add_bit(KNOT_RRTYPE_DNSKEY, s); } break; - case 219: + case 221: { window_add_bit(KNOT_RRTYPE_DHCID, s); } break; - case 220: + case 222: { window_add_bit(KNOT_RRTYPE_NSEC3, s); } break; - case 221: + case 223: { window_add_bit(KNOT_RRTYPE_NSEC3PARAM, s); } break; - case 222: + case 224: { window_add_bit(KNOT_RRTYPE_TLSA, s); } break; - case 223: + case 225: { window_add_bit(KNOT_RRTYPE_CDS, s); } break; - case 224: + case 226: { window_add_bit(KNOT_RRTYPE_CDNSKEY, s); } break; - case 225: + case 227: { window_add_bit(KNOT_RRTYPE_SPF, s); } break; - case 226: + case 228: { window_add_bit(KNOT_RRTYPE_NID, s); } break; - case 227: + case 229: { window_add_bit(KNOT_RRTYPE_L32, s); } break; - case 228: + case 230: { window_add_bit(KNOT_RRTYPE_L64, s); } break; - case 229: + case 231: { window_add_bit(KNOT_RRTYPE_LP, s); } break; - case 230: + case 232: { window_add_bit(KNOT_RRTYPE_EUI48, s); } break; - case 231: + case 233: { window_add_bit(KNOT_RRTYPE_EUI64, s); } break; - case 232: + case 234: { window_add_bit(KNOT_RRTYPE_URI, s); } break; - case 233: + case 235: { window_add_bit(KNOT_RRTYPE_CAA, s); } break; - case 234: + case 236: { memset(s->windows, 0, sizeof(s->windows)); s->last_window = -1; } break; - case 235: + case 237: { for (window = 0; window <= s->last_window; window++) { if ((s->windows[window]).length > 0) { @@ -7080,16 +7108,16 @@ _match: } } break; - case 236: + case 238: { WARN(ZS_BAD_BITMAP); p--; {cs = 261; goto _again;} } break; - case 237: + case 239: { p--; {stack[top++] = cs; cs = 329; goto _again;} } break; - case 238: + case 240: { if (s->number64 <= 90) { s->loc.d1 = (uint32_t)(s->number64); @@ -7099,7 +7127,7 @@ _match: } } break; - case 239: + case 241: { if (s->number64 <= 180) { s->loc.d2 = (uint32_t)(s->number64); @@ -7109,7 +7137,7 @@ _match: } } break; - case 240: + case 242: { if (s->number64 <= 59) { s->loc.m1 = (uint32_t)(s->number64); @@ -7119,7 +7147,7 @@ _match: } } break; - case 241: + case 243: { if (s->number64 <= 59) { s->loc.m2 = (uint32_t)(s->number64); @@ -7129,7 +7157,7 @@ _match: } } break; - case 242: + case 244: { if (s->number64 <= 59999) { s->loc.s1 = (uint32_t)(s->number64); @@ -7139,7 +7167,7 @@ _match: } } break; - case 243: + case 245: { if (s->number64 <= 59999) { s->loc.s2 = (uint32_t)(s->number64); @@ -7149,7 +7177,7 @@ _match: } } break; - case 244: + case 246: { if ((s->loc.alt_sign == 1 && s->number64 <= 4284967295) || (s->loc.alt_sign == -1 && s->number64 <= 10000000)) @@ -7161,7 +7189,7 @@ _match: } } break; - case 245: + case 247: { if (s->number64 <= 9000000000ULL) { s->loc.siz = s->number64; @@ -7171,7 +7199,7 @@ _match: } } break; - case 246: + case 248: { if (s->number64 <= 9000000000ULL) { s->loc.hp = s->number64; @@ -7181,7 +7209,7 @@ _match: } } break; - case 247: + case 249: { if (s->number64 <= 9000000000ULL) { s->loc.vp = s->number64; @@ -7191,22 +7219,22 @@ _match: } } break; - case 248: + case 250: { s->loc.lat_sign = -1; } break; - case 249: + case 251: { s->loc.long_sign = -1; } break; - case 250: + case 252: { s->loc.alt_sign = -1; } break; - case 251: + case 253: { memset(&(s->loc), 0, sizeof(s->loc)); // Defaults. @@ -7218,7 +7246,7 @@ _match: s->loc.alt_sign = 1; } break; - case 252: + case 254: { // Write version. *(rdata_tail) = 0; @@ -7246,29 +7274,29 @@ _match: rdata_tail += 4; } break; - case 253: + case 255: { WARN(ZS_BAD_LOC_DATA); p--; {cs = 261; goto _again;} } break; - case 254: + case 256: { WARN(ZS_BAD_HEX_RDATA); p--; {cs = 261; goto _again;} } break; - case 255: + case 257: { s->item_length = 0; } break; - case 256: + case 258: { s->item_length++; } break; - case 257: + case 259: { if (s->item_length != 6) { WARN(ZS_BAD_EUI_LENGTH); @@ -7276,7 +7304,7 @@ _match: } } break; - case 258: + case 260: { if (s->item_length != 8) { WARN(ZS_BAD_EUI_LENGTH); @@ -7284,23 +7312,23 @@ _match: } } break; - case 259: + case 261: { WARN(ZS_BAD_CHAR_DASH); p--; {cs = 261; goto _again;} } break; - case 260: + case 262: { s->item_length = 0; } break; - case 261: + case 263: { s->item_length++; } break; - case 262: + case 264: { if (s->item_length != 4) { WARN(ZS_BAD_L64_LENGTH); @@ -7308,123 +7336,123 @@ _match: } } break; - case 263: + case 265: { WARN(ZS_BAD_CHAR_COLON); p--; {cs = 261; goto _again;} } break; - case 264: + case 266: { WARN(ZS_BAD_ALGORITHM); p--; {cs = 261; goto _again;} } break; - case 265: + case 267: { WARN(ZS_BAD_CERT_TYPE); p--; {cs = 261; goto _again;} } break; - case 266: + case 268: { p--; {stack[top++] = cs; cs = 480; goto _again;} } break; - case 267: - { p--; {stack[top++] = cs; cs = 575; goto _again;} } + case 269: + { p--; {stack[top++] = cs; cs = 584; goto _again;} } break; - case 268: + case 270: { rdata_tail = s->r_data; } break; - case 269: + case 271: { WARN(ZS_BAD_RDATA); p--; {cs = 261; goto _again;} } break; - case 270: + case 272: { p--; switch (s->r_type) { case KNOT_RRTYPE_A: - {stack[top++] = cs; cs = 616; goto _again;} + {stack[top++] = cs; cs = 625; goto _again;} case KNOT_RRTYPE_NS: case KNOT_RRTYPE_CNAME: case KNOT_RRTYPE_PTR: case KNOT_RRTYPE_DNAME: - {stack[top++] = cs; cs = 618; goto _again;} + {stack[top++] = cs; cs = 627; goto _again;} case KNOT_RRTYPE_SOA: - {stack[top++] = cs; cs = 620; goto _again;} + {stack[top++] = cs; cs = 629; goto _again;} case KNOT_RRTYPE_HINFO: - {stack[top++] = cs; cs = 652; goto _again;} + {stack[top++] = cs; cs = 661; goto _again;} case KNOT_RRTYPE_MINFO: case KNOT_RRTYPE_RP: - {stack[top++] = cs; cs = 657; goto _again;} + {stack[top++] = cs; cs = 666; goto _again;} case KNOT_RRTYPE_MX: case KNOT_RRTYPE_AFSDB: case KNOT_RRTYPE_RT: case KNOT_RRTYPE_KX: case KNOT_RRTYPE_LP: - {stack[top++] = cs; cs = 662; goto _again;} + {stack[top++] = cs; cs = 671; goto _again;} case KNOT_RRTYPE_TXT: case KNOT_RRTYPE_SPF: - {stack[top++] = cs; cs = 667; goto _again;} + {stack[top++] = cs; cs = 676; goto _again;} case KNOT_RRTYPE_AAAA: - {stack[top++] = cs; cs = 671; goto _again;} + {stack[top++] = cs; cs = 680; goto _again;} case KNOT_RRTYPE_LOC: - {stack[top++] = cs; cs = 673; goto _again;} + {stack[top++] = cs; cs = 682; goto _again;} case KNOT_RRTYPE_SRV: - {stack[top++] = cs; cs = 728; goto _again;} + {stack[top++] = cs; cs = 737; goto _again;} case KNOT_RRTYPE_NAPTR: - {stack[top++] = cs; cs = 739; goto _again;} + {stack[top++] = cs; cs = 748; goto _again;} case KNOT_RRTYPE_CERT: - {stack[top++] = cs; cs = 756; goto _again;} + {stack[top++] = cs; cs = 765; goto _again;} case KNOT_RRTYPE_APL: - {stack[top++] = cs; cs = 767; goto _again;} + {stack[top++] = cs; cs = 776; goto _again;} case KNOT_RRTYPE_DS: case KNOT_RRTYPE_CDS: - {stack[top++] = cs; cs = 778; goto _again;} + {stack[top++] = cs; cs = 787; goto _again;} case KNOT_RRTYPE_SSHFP: - {stack[top++] = cs; cs = 791; goto _again;} + {stack[top++] = cs; cs = 800; goto _again;} case KNOT_RRTYPE_IPSECKEY: - {stack[top++] = cs; cs = 801; goto _again;} + {stack[top++] = cs; cs = 810; goto _again;} case KNOT_RRTYPE_RRSIG: - {stack[top++] = cs; cs = 840; goto _again;} + {stack[top++] = cs; cs = 849; goto _again;} case KNOT_RRTYPE_NSEC: - {stack[top++] = cs; cs = 994; goto _again;} + {stack[top++] = cs; cs = 1003; goto _again;} case KNOT_RRTYPE_KEY: case KNOT_RRTYPE_DNSKEY: case KNOT_RRTYPE_CDNSKEY: - {stack[top++] = cs; cs = 997; goto _again;} + {stack[top++] = cs; cs = 1006; goto _again;} case KNOT_RRTYPE_DHCID: - {stack[top++] = cs; cs = 1008; goto _again;} + {stack[top++] = cs; cs = 1017; goto _again;} case KNOT_RRTYPE_NSEC3: - {stack[top++] = cs; cs = 1010; goto _again;} + {stack[top++] = cs; cs = 1019; goto _again;} case KNOT_RRTYPE_NSEC3PARAM: - {stack[top++] = cs; cs = 1039; goto _again;} + {stack[top++] = cs; cs = 1048; goto _again;} case KNOT_RRTYPE_TLSA: - {stack[top++] = cs; cs = 1052; goto _again;} + {stack[top++] = cs; cs = 1061; goto _again;} case KNOT_RRTYPE_NID: case KNOT_RRTYPE_L64: - {stack[top++] = cs; cs = 1070; goto _again;} + {stack[top++] = cs; cs = 1079; goto _again;} case KNOT_RRTYPE_L32: - {stack[top++] = cs; cs = 1065; goto _again;} + {stack[top++] = cs; cs = 1074; goto _again;} case KNOT_RRTYPE_EUI48: - {stack[top++] = cs; cs = 1083; goto _again;} + {stack[top++] = cs; cs = 1092; goto _again;} case KNOT_RRTYPE_EUI64: - {stack[top++] = cs; cs = 1089; goto _again;} + {stack[top++] = cs; cs = 1098; goto _again;} case KNOT_RRTYPE_URI: - {stack[top++] = cs; cs = 1095; goto _again;} + {stack[top++] = cs; cs = 1104; goto _again;} case KNOT_RRTYPE_CAA: - {stack[top++] = cs; cs = 1103; goto _again;} + {stack[top++] = cs; cs = 1112; goto _again;} default: WARN(ZS_CANNOT_TEXT_DATA); {cs = 261; goto _again;} } } break; - case 271: + case 273: { switch (s->r_type) { // Next types must not have empty rdata. @@ -7477,142 +7505,142 @@ _match: } } break; - case 272: + case 274: { p--; } break; - case 273: + case 275: { WARN(ZS_UNSUPPORTED_TYPE); p--; {cs = 261; goto _again;} } break; - case 274: + case 276: { s->r_type = KNOT_RRTYPE_A; } break; - case 275: + case 277: { s->r_type = KNOT_RRTYPE_NS; } break; - case 276: + case 278: { s->r_type = KNOT_RRTYPE_CNAME; } break; - case 277: + case 279: { s->r_type = KNOT_RRTYPE_SOA; } break; - case 278: + case 280: { s->r_type = KNOT_RRTYPE_PTR; } break; - case 279: + case 281: { s->r_type = KNOT_RRTYPE_HINFO; } break; - case 280: + case 282: { s->r_type = KNOT_RRTYPE_MINFO; } break; - case 281: + case 283: { s->r_type = KNOT_RRTYPE_MX; } break; - case 282: + case 284: { s->r_type = KNOT_RRTYPE_TXT; } break; - case 283: + case 285: { s->r_type = KNOT_RRTYPE_RP; } break; - case 284: + case 286: { s->r_type = KNOT_RRTYPE_AFSDB; } break; - case 285: + case 287: { s->r_type = KNOT_RRTYPE_RT; } break; - case 286: + case 288: { s->r_type = KNOT_RRTYPE_KEY; } break; - case 287: + case 289: { s->r_type = KNOT_RRTYPE_AAAA; } break; - case 288: + case 290: { s->r_type = KNOT_RRTYPE_LOC; } break; - case 289: + case 291: { s->r_type = KNOT_RRTYPE_SRV; } break; - case 290: + case 292: { s->r_type = KNOT_RRTYPE_NAPTR; } break; - case 291: + case 293: { s->r_type = KNOT_RRTYPE_KX; } break; - case 292: + case 294: { s->r_type = KNOT_RRTYPE_CERT; } break; - case 293: + case 295: { s->r_type = KNOT_RRTYPE_DNAME; } break; - case 294: + case 296: { s->r_type = KNOT_RRTYPE_APL; } break; - case 295: + case 297: { s->r_type = KNOT_RRTYPE_DS; } break; - case 296: + case 298: { s->r_type = KNOT_RRTYPE_SSHFP; } break; - case 297: + case 299: { s->r_type = KNOT_RRTYPE_IPSECKEY; } break; - case 298: + case 300: { s->r_type = KNOT_RRTYPE_RRSIG; } break; - case 299: + case 301: { s->r_type = KNOT_RRTYPE_NSEC; } break; - case 300: + case 302: { s->r_type = KNOT_RRTYPE_DNSKEY; } break; - case 301: + case 303: { s->r_type = KNOT_RRTYPE_DHCID; } break; - case 302: + case 304: { s->r_type = KNOT_RRTYPE_NSEC3; } break; - case 303: + case 305: { s->r_type = KNOT_RRTYPE_NSEC3PARAM; } break; - case 304: + case 306: { s->r_type = KNOT_RRTYPE_TLSA; } break; - case 305: + case 307: { s->r_type = KNOT_RRTYPE_CDS; } break; - case 306: + case 308: { s->r_type = KNOT_RRTYPE_CDNSKEY; } break; - case 307: + case 309: { s->r_type = KNOT_RRTYPE_SPF; } break; - case 308: + case 310: { s->r_type = KNOT_RRTYPE_NID; } break; - case 309: + case 311: { s->r_type = KNOT_RRTYPE_L32; } break; - case 310: + case 312: { s->r_type = KNOT_RRTYPE_L64; } break; - case 311: + case 313: { s->r_type = KNOT_RRTYPE_LP; } break; - case 312: + case 314: { s->r_type = KNOT_RRTYPE_EUI48; } break; - case 313: + case 315: { s->r_type = KNOT_RRTYPE_EUI64; } break; - case 314: + case 316: { s->r_type = KNOT_RRTYPE_URI; } break; - case 315: + case 317: { s->r_type = KNOT_RRTYPE_CAA; } break; - case 316: + case 318: { if (rdata_tail - s->r_data > UINT16_MAX) { WARN(ZS_RDATA_OVERFLOW); @@ -7747,7 +7775,7 @@ _again: { NOERR; if (escape) { - cs = 1111; {p++; goto _out; } + cs = 1120; {p++; goto _out; } } } break; @@ -7793,73 +7821,73 @@ _again: p--; {cs = 261; goto _again;} } break; - case 146: + case 148: { WARN(ZS_BAD_GATEWAY); p--; {cs = 261; goto _again;} } break; - case 147: + case 149: { WARN(ZS_BAD_GATEWAY_KEY); p--; {cs = 261; goto _again;} } break; - case 148: + case 150: { WARN(ZS_UNSUPPORTED_TYPE); p--; {cs = 261; goto _again;} } break; - case 236: + case 238: { WARN(ZS_BAD_BITMAP); p--; {cs = 261; goto _again;} } break; - case 253: + case 255: { WARN(ZS_BAD_LOC_DATA); p--; {cs = 261; goto _again;} } break; - case 254: + case 256: { WARN(ZS_BAD_HEX_RDATA); p--; {cs = 261; goto _again;} } break; - case 259: + case 261: { WARN(ZS_BAD_CHAR_DASH); p--; {cs = 261; goto _again;} } break; - case 263: + case 265: { WARN(ZS_BAD_CHAR_COLON); p--; {cs = 261; goto _again;} } break; - case 264: + case 266: { WARN(ZS_BAD_ALGORITHM); p--; {cs = 261; goto _again;} } break; - case 265: + case 267: { WARN(ZS_BAD_CERT_TYPE); p--; {cs = 261; goto _again;} } break; - case 269: + case 271: { WARN(ZS_BAD_RDATA); p--; {cs = 261; goto _again;} } break; - case 273: + case 275: { WARN(ZS_UNSUPPORTED_TYPE); p--; {cs = 261; goto _again;} diff --git a/src/zscanner/scanner.h b/src/zscanner/scanner.h index 361f4da21ff2ab4f5401838d39d44dbcf7bf829f..e1db73f172a776685b87ffbd49e3760c51a5c34b 100644 --- a/src/zscanner/scanner.h +++ b/src/zscanner/scanner.h @@ -361,7 +361,7 @@ int zs_parse_record( * \brief Launches automatic parsing of the whole input. * * For each correctly recognized record, the record callback is executed. - * If any syntax error occures, the error callback is executed. + * If any syntax error occurs, the error callback is executed. * * \note Error code and other information are stored in the scanner context. * diff --git a/src/zscanner/scanner_body.rl b/src/zscanner/scanner_body.rl index 4f91ffe52fc7c38a168568c391abab14ef448539..bff90813dc4861eb3cfa577becac34e3f98f7fe5 100644 --- a/src/zscanner/scanner_body.rl +++ b/src/zscanner/scanner_body.rl @@ -1186,6 +1186,12 @@ action _write8_14 { *(rdata_tail++) = 14; } + action _write8_15 { + *(rdata_tail++) = 15; + } + action _write8_16 { + *(rdata_tail++) = 16; + } action _write8_252 { *(rdata_tail++) = 252; } @@ -1663,6 +1669,8 @@ | "ECC-GOST"i %_write8_12 | "ECDSAP256SHA256"i %_write8_13 | "ECDSAP384SHA384"i %_write8_14 + | "ED25519"i %_write8_15 + | "ED448"i %_write8_16 | "INDIRECT"i %_write8_252 | "PRIVATEDNS"i %_write8_253 | "PRIVATEOID"i %_write8_254 diff --git a/src/zscanner/tests/data/29_CERT.in b/src/zscanner/tests/data/29_CERT.in index 5a5daf6ae0d7dcdff8453f56dd73934fa44c0a87..ee70ce24ae328af7595d1546a7bd48fcd6d3ab0f 100644 --- a/src/zscanner/tests/data/29_CERT.in +++ b/src/zscanner/tests/data/29_CERT.in @@ -25,6 +25,8 @@ $TTL 1 @ CERT 0 0 ECC-GOST AA== ; Algorithm mnemo @ CERT 0 0 ECDSAP256SHA256 AA== ; Algorithm mnemo @ CERT 0 0 ECDSAP384SHA384 AA== ; Algorithm mnemo +@ CERT 0 0 ED25519 AA== ; Algorithm mnemo +@ CERT 0 0 ED448 AA== ; Algorithm mnemo @ CERT 0 0 INDIRECT AA== ; Algorithm mnemo @ CERT 0 0 PRIVATEDNS AA== ; Algorithm mnemo @ CERT 0 0 PRIVATEOID AA== ; Algorithm mnemo diff --git a/src/zscanner/tests/data/29_CERT.out b/src/zscanner/tests/data/29_CERT.out index 6bd3674a897c98f04519cf259ad0a23a6eed2934..da2c89771c3f49742149db91404433ce4c060839 100644 --- a/src/zscanner/tests/data/29_CERT.out +++ b/src/zscanner/tests/data/29_CERT.out @@ -140,6 +140,18 @@ OWNER=00 CLASS=0001 RRTTL=00000001 RTYPE=0025 +RDATA=000000000F00 +------ +OWNER=00 +CLASS=0001 +RRTTL=00000001 +RTYPE=0025 +RDATA=000000001000 +------ +OWNER=00 +CLASS=0001 +RRTTL=00000001 +RTYPE=0025 RDATA=00000000FC00 ------ OWNER=00 diff --git a/src/zscanner/tests/tests.c b/src/zscanner/tests/tests.c index 85ef1272d077b871ded6ca557607548572b98005..3f0725bf575cd021713114814ff2fa71c9283b3f 100644 --- a/src/zscanner/tests/tests.c +++ b/src/zscanner/tests/tests.c @@ -48,6 +48,7 @@ int test__date_to_timestamp(void) gmtime_r(&ref_timestamp, &result)); // Get testing timestamp. + test_timestamp = 0U; // prevents Wunitialized date_to_timestamp(buffer, &test_timestamp); // Some continuous loging. diff --git a/tests-extra/data/flags.zone b/tests-extra/data/flags.zone index a71811e1a9ad2efa3a5eee1310f4262d43929453..5bc42585e0aca025503703460062e07ae11ef757 100644 --- a/tests-extra/data/flags.zone +++ b/tests-extra/data/flags.zone @@ -19,6 +19,8 @@ mail A 192.0.2.3 ; Delegation of a subdomain sub NS ns.sub +sub NS sub +sub A 192.0.0.1 ns.sub A 192.0.2.4 ; CNAME to A record @@ -56,7 +58,6 @@ cname-mx-wc MX 10 cname-wildcard ; MX record leading to CNAME (outside zone) cname-mx-out MX 10 cname-out - ; DNAME subtree dname DNAME dname-tree dname-tree A 1.2.3.4 diff --git a/tests-extra/tests/basic/delegation_tc/data/tc.test.zone b/tests-extra/tests/basic/delegation_tc/data/tc.test.zone index 2b35912fe18c8a057ca47843ca950fa9c83c6e9c..c0d6e9297453165f480a8f02f4402d54fc0b5b00 100644 --- a/tests-extra/tests/basic/delegation_tc/data/tc.test.zone +++ b/tests-extra/tests/basic/delegation_tc/data/tc.test.zone @@ -1,5 +1,5 @@ -; File written on Mon Jun 27 16:20:15 2016 -; dnssec_signzone version 9.10.4-P1-RedHat-9.10.4-1.P1.fc24 +; File written on Tue Oct 4 18:49:49 2016 +; dnssec_signzone version 9.10.3-P4-Ubuntu tc.test. 60 IN SOA tc.test. admin.tc.test. ( 1 ; serial 60 ; refresh (1 minute) @@ -8,61 +8,113 @@ tc.test. 60 IN SOA tc.test. admin.tc.test. ( 60 ; minimum (1 minute) ) 60 RRSIG SOA 13 2 60 ( - 20160727132015 20160627132015 64455 tc.test. - TnjmkPEP/Yy1UuTqzahLYltxhlPmC7zaHqIf - XixOb1NTA7iRu3CQ8fydn9drzXvFXlZLx8hJ - RdzmPYf/XXPdDQ== ) + 20161103154949 20161004154949 43962 tc.test. + CdroAlkr6etDRTiUrtK63XwysxIWy8PBh2bK + mIhx3h4HFx29bqeyhiUCZZ7AZwvJMRNSb6vW + tIn6ctgo9nJB8g== ) + 60 NS ns.glue.deleg.tc.test. 60 NS tc.test. + 60 NS a1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890a.tc.test. + 60 NS b1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890b.tc.test. 60 RRSIG NS 13 2 60 ( - 20160727132015 20160627132015 64455 tc.test. - Ixp5MrVn6puk0DM2G3E0Dv1+Ssqn0w4OLsXm - L0558mx6XG8e6vjOYab9PMkscYswujF612ET - Xh5Jv3ielAQwUA== ) - 60 A 0.0.0.0 - 60 RRSIG A 13 2 60 ( - 20160727132015 20160627132015 64455 tc.test. - lvmzV1EVATXjKdtjdZNykSbz3aG/fMI3UU6Y - qjs0xY9lO58UjdifCWRIEclcEj492aqKyhHC - TK00LHCoigTXIg== ) + 20161103154949 20161004154949 43962 tc.test. + tExlMqyl8AGdpN54tLe51urPTOkUWOh3AN/0 + adMTHB1/5GOESgv8F+cPrZCGghR2uF3G61Gh + TWxZ1NI3hM7gMw== ) 60 AAAA :: 60 RRSIG AAAA 13 2 60 ( - 20160727132015 20160627132015 64455 tc.test. - P8e9gYCeih3z3elNnNc0yN9IM42LmsHL+4Gz - sDvbzTHQ6iry4LHrvGmlJ5A5SvtRMFqRVHzh - C3RvOZrAR7ZQAw== ) - 60 NSEC foreign.tc.test. A NS SOA AAAA RRSIG NSEC DNSKEY + 20161103154949 20161004154949 43962 tc.test. + vBNliPGFvWdC9HcPAmftJC6fZmGlC7x2dIWC + RL+0U6UVBh+J1AQVI/McHkS/ojj6C/3k/XnI + JZhKFfOPm2cahA== ) + 60 NSEC glue.deleg.tc.test. NS SOA AAAA RRSIG NSEC DNSKEY 60 RRSIG NSEC 13 2 60 ( - 20160727132015 20160627132015 64455 tc.test. - jbLlXSKDpBmULul32602Xhfeuzksyr9FJQSX - YUPfwKEn9KhEEIqG2H737Q/IrEQ4wXT8OxOq - kQldQGuKJzik1w== ) + 20161103154949 20161004154949 43962 tc.test. + 74SOcgcFwHTcR9vVerLexSsusmRb56Ly+WoX + ZtxiMNyjIPHPY6FTvJG9PToQZ9RivENeC1F/ + ysDIpga+TC3XjQ== ) 60 DNSKEY 256 3 13 ( - dmTlwBFWofgOnzvUJxiDncJBTVHnZqfdiGUq - /pspqAlSSbloYVWMUJi/VuaO8IkCoxanvbJO - 14z1nvPngQEdhg== - ) ; ZSK; alg = ECDSAP256SHA256 ; key id = 64455 + SWZimv5X53kJSM9SHXaSp13I3SRPB3VsIATS + q6WhFs6xqI/RfWJlSmrHRIyXhnMsgMqzP1hc + psZoHx9V6JBdQQ== + ) ; ZSK; alg = ECDSAP256SHA256; key id = 43962 60 RRSIG DNSKEY 13 2 60 ( - 20160727132015 20160627132015 64455 tc.test. - QLuwVg0lv7VhnhSDLrdakw1Z0PnY2BPgqory - c2zHlw5yqzCIUHD09RcDya4Wcc7MgeVyx8E/ - ofOayYOx5bOJmw== ) + 20161103154949 20161004154949 43962 tc.test. + KWHRVRIP3uXVsGa41jBOAAnTNcrvlSfAiRUp + 7boGE4kuONxA8Q0OaNV2gk4VoREadz0lgfni + 2D12paWCMtTtOg== ) +ns.glue.deleg.tc.test. 60 IN AAAA :: ns1.glue.tc.test. 60 IN AAAA :: ns2.glue.tc.test. 60 IN AAAA :: ns1.mixed.tc.test. 60 IN AAAA :: +glue.deleg.tc.test. 60 IN NS unreachable.glue.deleg.tc.test. + 60 DS 0 0 0 ( + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 000000000000000000000000000000000000 + 0000000000000000 ) + 60 RRSIG DS 13 4 60 ( + 20161103154949 20161004154949 43962 tc.test. + hy9jX6erUiHKqIxQ8y19z0nmPPLWkyaDZ8m/ + q0X/xchcDrvGqc/U0MGLnaaN51jf42hq6X3C + H6GeHDvz1OqstQ== ) + 60 NSEC foreign.tc.test. NS DS RRSIG NSEC + 60 RRSIG NSEC 13 4 60 ( + 20161103154949 20161004154949 43962 tc.test. + PNYj39ndR5DQySdXPBrcZG65I1upHgytrjF0 + 6bScaqcJNEeElS/ig6mwqW35B0oQmwypKsXn + am63w/B/RCYccw== ) ns1.tc.test. 60 IN AAAA :: 60 RRSIG AAAA 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - ZgmxeHyHkfjthPOHeXUtVeOU3jgBZgX0bLvi - ea7jLpBSHW4TTjqw//eLv3He6/aX8GLryGAe - dMTRQJkTeYF+Cg== ) + 20161103154949 20161004154949 43962 tc.test. + gcVt5GtZ6fb4KaqTFUOXuj5fPaHxTNnl3IK7 + CjZn6/wesLmE3y5wVQhoudQBzum5a2k5rjru + 6Dh7RMUXoIUEow== ) 60 NSEC ns2.tc.test. AAAA RRSIG NSEC 60 RRSIG NSEC 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - NPx5b/hjFJT2xt+CUNQmFHDLF78Ma3VaFZOW - ynAJ6CxEVhkowziVihK23suEBHpC4BeS+7lD - CJOFDSPBkuisLA== ) -parent.tc.test. 60 IN NS ns1.tc.test. - 60 IN NS ns2.tc.test. + 20161103154949 20161004154949 43962 tc.test. + BAQsRggb/+eQfkp4UXOB3EmcLsv7mmyDS02D + PbF+9+PrfH9ls6oXP1wsplZjX+CmegBZLQtZ + joPCCJTWRSnxUA== ) +ns2.tc.test. 60 IN AAAA :: + 60 RRSIG AAAA 13 3 60 ( + 20161103154949 20161004154949 43962 tc.test. + SfwMuwRAtwAtaOSg8S+IRoQzyQcc7T+CFkSx + UOndn2wYeoKvoECryvQlPFO67Sp0xeAOXNYN + 6c5b6o9U9U9Xpw== ) + 60 NSEC parent.tc.test. AAAA RRSIG NSEC + 60 RRSIG NSEC 13 3 60 ( + 20161103154949 20161004154949 43962 tc.test. + lgFal01FR1nsoLbZjZk7Dqre5h3ddaaNXUQv + 2Qp52aJQjLzolVSxDYFdqThSyeR/hR6R4Qz/ + SSBTePSsIgSyJA== ) +unreachable.tc.test. 60 IN NS ns1.unreachable.tc.test. + 60 IN NS ns2.unreachable.tc.test. 60 DS 0 0 0 ( 000000000000000000000000000000000000 000000000000000000000000000000000000 @@ -94,33 +146,21 @@ parent.tc.test. 60 IN NS ns1.tc.test. 000000000000000000000000000000000000 0000000000000000 ) 60 RRSIG DS 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - wiwEeDbPOIHnMCOyT5bwiLt/LFvtRSTm4qEK - B4hnVPNi+vaFum6hzyDeD1Pvk2DBF+GymzMs - VcvnJ08KpSVZCA== ) - 60 NSEC unreachable.tc.test. NS DS RRSIG NSEC - 60 RRSIG NSEC 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - u7l8cLKgpeAV//tkeCuC6gskK9C1ecqHjnSc - MCKedEcWFDHs1eZZu4Zc/XXBoviTdO0GFSFg - Qu3ttGHyCl3fMw== ) -ns2.tc.test. 60 IN AAAA :: - 60 RRSIG AAAA 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - FAt/j5NI/hOMhnXyCYKUMpRLLj+x2NDuWGxI - Riejg4oFfD/mRyNS3zc+bdxFUg7LkqbGYjog - F5IEgTZp12kBXQ== ) - 60 NSEC parent.tc.test. AAAA RRSIG NSEC + 20161103154949 20161004154949 43962 tc.test. + TJci/N50BFgb+j+dY0uIsmWaWoXtZgPvZX9Y + 2uvCN2UTT5YgZe7PmvNlpHaf4INR3wPBZTAd + NQyo/aSzFDRW6g== ) + 60 NSEC tc.test. NS DS RRSIG NSEC 60 RRSIG NSEC 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - WzlI2GOO1V4EReUrB11XAMojvmXlfSETsyKb - I12crk4J8saxHkWGEDgGdGJKyxUqwTPGzfGt - umrufGCjG7rQSg== ) -mixed.tc.test. 60 IN NS ns1.glue.tc.test. + 20161103154949 20161004154949 43962 tc.test. + NctQNuDiG6dDMZMWzgwb3B0CcHm5ymoSIDGf + QwGB5Cm3pSuIeYwUmDxIxQ0TsFqvILTObUXj + 6L9FpH762qOOzQ== ) +mixed.tc.test. 60 IN NS ns1.tc.test. + 60 IN NS ns1.glue.tc.test. 60 IN NS ns1.mixed.tc.test. - 60 IN NS ns2.mixed.tc.test. 60 IN NS ns1.foreign. - 60 IN NS ns1.tc.test. + 60 IN NS ns2.mixed.tc.test. 60 IN NS mixed.tc.test. 60 AAAA :: 60 DS 0 0 0 ( @@ -154,18 +194,18 @@ mixed.tc.test. 60 IN NS ns1.glue.tc.test. 000000000000000000000000000000000000 0000000000000000 ) 60 RRSIG DS 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - EBzF/SidBA4MfNPBYjpySXro2kk7xUbFKMaH - oEyPhBPBZmWgj90yUAY99ToeXm89d48THrj8 - mQGiuIPQqraTew== ) + 20161103154949 20161004154949 43962 tc.test. + nxQnxKLM0nb8ofj27x+5bRh8rlXJH0CxdyaH + sFNUSCZCgDWLWaCHfnVN72DRBBS8fYqsrRYU + /w6WMadeAMjFZQ== ) 60 NSEC ns1.tc.test. NS DS RRSIG NSEC 60 RRSIG NSEC 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - VuUqyaNf7AzFOuzxksdXaBMC28gudtTi6ONT - FYaE7755Lb+CViJOSOvTxjfW203ZZAQDriyu - +MPy+3SWX2mpLA== ) -unreachable.tc.test. 60 IN NS ns1.unreachable.tc.test. - 60 IN NS ns2.unreachable.tc.test. + 20161103154949 20161004154949 43962 tc.test. + sMGpWInz4Nq9FoR2BmV6Rhz7vrFYE9VZ56gU + tPokXH6Wq1EkhyHb8pU93L34c3ZmdZq3w3L2 + Md1d7nbXZB9iLw== ) +foreign.tc.test. 60 IN NS ns1.foreign. + 60 IN NS ns2.foreign. 60 DS 0 0 0 ( 000000000000000000000000000000000000 000000000000000000000000000000000000 @@ -197,18 +237,18 @@ unreachable.tc.test. 60 IN NS ns1.unreachable.tc.test. 000000000000000000000000000000000000 0000000000000000 ) 60 RRSIG DS 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - FcwbELcllvBAwlwdnhbRbvWfIbBG7Zo3dvkR - leAn9UHxsvX5VTj1PMfyEbF0GCW2G/aypOxk - W1cWRvh6rbhuEQ== ) - 60 NSEC tc.test. NS DS RRSIG NSEC + 20161103154949 20161004154949 43962 tc.test. + zA+z/aFaPHYnpL2WqdLtzBeJWG1787K/fM9c + 5lx26R2dU+icIgYp8PvF3kR0JCsEaatJ976P + E162l20bRl0FmA== ) + 60 NSEC glue.tc.test. NS DS RRSIG NSEC 60 RRSIG NSEC 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - 2RuLDamP6L3wxnR8KxMGsBXO9Md5SNb454m6 - h571kM56PSEJUtSCMRN+6d0aw0RHbv1lBAMK - 5PrSNT79J03hGw== ) -foreign.tc.test. 60 IN NS ns1.foreign. - 60 IN NS ns2.foreign. + 20161103154949 20161004154949 43962 tc.test. + 0JIr/XfONM1bfGApeinZ27P0joqQB0pFFtOW + qsesrOjzGf6lbcWn6Jj+5w93LO1X2pcaM/10 + GFcABRrkPIcVuQ== ) +parent.tc.test. 60 IN NS ns1.tc.test. + 60 IN NS ns2.tc.test. 60 DS 0 0 0 ( 000000000000000000000000000000000000 000000000000000000000000000000000000 @@ -240,16 +280,16 @@ foreign.tc.test. 60 IN NS ns1.foreign. 000000000000000000000000000000000000 0000000000000000 ) 60 RRSIG DS 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - qyuZxrODgWdj2TK4mbdCggBu6iW/Yo0Ic6qD - mRGXmaaD5cLfGi40M0+Rx/ejQAdjdMw9b8/O - Toxk5SPaoRfkBg== ) - 60 NSEC glue.tc.test. NS DS RRSIG NSEC + 20161103154949 20161004154949 43962 tc.test. + hGh1MErM/Bzq/5Kyy5+QX0uvJU2KipsOu0OK + tkSDGZw6wg3H1kmgngODnWqdZjiF6bAigzNl + VtmFW84CGNDH8A== ) + 60 NSEC unreachable.tc.test. NS DS RRSIG NSEC 60 RRSIG NSEC 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - 2m9bCBlcybvflAFhMNQ+nWw3BRJy9POCC+X+ - aakp7pVSz4D210zGZpGko4z0B8ycS9zgIT/C - tWlb9Ti39jLmjg== ) + 20161103154949 20161004154949 43962 tc.test. + 9nz05/2JAHhfGTfST4mQ/7SvKXQisE+VTakO + zsq0yV6TCaWAx+jrK/pDm4Ko0wTsDwBBASGn + /kZQJ1vJ993VdA== ) glue.tc.test. 60 IN NS ns1.glue.tc.test. 60 IN NS ns2.glue.tc.test. 60 DS 0 0 0 ( @@ -283,13 +323,13 @@ glue.tc.test. 60 IN NS ns1.glue.tc.test. 000000000000000000000000000000000000 0000000000000000 ) 60 RRSIG DS 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - +fsRJmG1j6Lmv22PA5Cu6gnKTT945LXfEdX9 - E01YzT/tt2uvCcB6kKMJBa/Z+tYJvimmB0kJ - XT+/EFWfXy75UA== ) + 20161103154949 20161004154949 43962 tc.test. + WEwidsGXvEcggup1H5cbfAPVnC1ZW1TDFZks + h3ZPY3GpBgHZb0/+0o9l0pC6804zxhBfxSMI + g4tNd8Ez+8OUbQ== ) 60 NSEC mixed.tc.test. NS DS RRSIG NSEC 60 RRSIG NSEC 13 3 60 ( - 20160727132015 20160627132015 64455 tc.test. - hppa5s62Dqg2iofOsnJ6D9Bc8Gg61Um9vAxb - P/yGKBKp35m2PJP3iQ9M6WwWUAIiCtxUFCk9 - W01Xe2Y+OcBHAQ== ) + 20161103154949 20161004154949 43962 tc.test. + xT9iBxgZhNMqeyWIQjm1bmiZG0yRU0Z9C2BH + gEvl/3vCQoOVlPZRkMvUB8hQideyb8rfwcR4 + fTtRpkqgK4no4g== ) diff --git a/tests-extra/tests/basic/delegation_tc/data/tc.test.zone.unsigned b/tests-extra/tests/basic/delegation_tc/data/tc.test.zone.unsigned index b9515a601ec1375ddcbeba1471edec38aee04ee8..2d998f7727aca41ab756fdac331cfb2cc7283e1d 100644 --- a/tests-extra/tests/basic/delegation_tc/data/tc.test.zone.unsigned +++ b/tests-extra/tests/basic/delegation_tc/data/tc.test.zone.unsigned @@ -2,10 +2,19 @@ $ORIGIN tc.test. $TTL 60 @ SOA @ admin 1 60 60 1800 60 + +; local name servers NS @ - A 0.0.0.0 + NS a1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890a + NS b1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890123456789.1234567890123456789012345678901234567890b AAAA :: +; foreign name server + NS ns.glue.deleg +ns.glue.deleg AAAA :: +glue.deleg DS 0 0 0 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +glue.deleg NS unreachable.glue.deleg + ; delegation with glue glue DS 0 0 0 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 glue NS ns1.glue diff --git a/tests-extra/tests/basic/delegation_tc/test.py b/tests-extra/tests/basic/delegation_tc/test.py index 877eb2a937460a3bd40c5238c6c8010195e39c12..4b4e7dc23e8fbce230822d0b1b43d7dd93b00a1e 100644 --- a/tests-extra/tests/basic/delegation_tc/test.py +++ b/tests-extra/tests/basic/delegation_tc/test.py @@ -13,19 +13,21 @@ t.link(zone, knot) t.start() class DelegationTest: - def __init__(self, name): + def __init__(self, name, authoritative=False): self._name = name + self._auth = authoritative def _get_flags(self, truncated): - if truncated: - return ("TC", "AA") + if self._auth: + return ("AA TC", "") if truncated else ("AA", "TC") else: - return ("", "AA TC") + return ("TC", "AA") if truncated else ("", "AA TC") def run(self, bufsize=None, truncated=False, counts=None): - name = "www.%s" % self._name + name = "%s%s" % ("" if self._auth else "www.", self._name) + rtype = "NS" if self._auth else "A" flags, noflags = self._get_flags(truncated) - resp = knot.dig(name, "A", udp=True, dnssec=True, bufsize=bufsize) + resp = knot.dig(name, rtype, udp=True, dnssec=True, bufsize=bufsize) resp.check(rcode="NOERROR", noflags=noflags, flags=flags) for section in counts: for rtype in counts[section]: @@ -37,6 +39,35 @@ class DelegationTest: def __exit__(self, exc_type, exc_vaue, traceback): return False +# Authoritative answer with glue of foreign name server + +with DelegationTest("tc.test", authoritative=True) as test: + # incomplete answer, no signature + test.run(bufsize=592, truncated=True, counts={ + "answer": {"NS": 4, "RRSIG": 0}, + "additional": {"AAAA": 0, "RRSIG": 0}} + ) + # complete answer, no additionals + test.run(bufsize=695, truncated=False, counts={ + "answer": {"NS": 4, "RRSIG": 1}, + "additional": {"AAAA": 0, "RRSIG": 0}} + ) + # complete answer, one optional additional for foreign name server + test.run(bufsize=723, truncated=False, counts={ + "answer": {"NS": 4, "RRSIG": 1}, + "additional": {"AAAA": 1, "RRSIG": 0}} + ) + # complete answer, all optional additionals + test.run(bufsize=751, truncated=False, counts={ + "answer": {"NS": 4, "RRSIG": 1}, + "additional": {"AAAA": 2, "RRSIG": 0}} + ) + # complete answer, all optional additionals with signature + test.run(bufsize=2000, truncated=False, counts={ + "answer": {"NS": 4, "RRSIG": 1}, + "additional": {"AAAA": 2, "RRSIG": 1}} + ) + # Delegation with glue with DelegationTest("glue.tc.test") as test: @@ -61,7 +92,7 @@ with DelegationTest("glue.tc.test") as test: "additional": {"AAAA": 1, "RRSIG": 0}} ) # complete delegation, complete glue - test.run(bufsize=768, truncated=False, counts={ + test.run(bufsize=2000, truncated=False, counts={ "authority": {"NS": 2, "DS": 1, "RRSIG": 1}, "additional": {"AAAA": 2, "RRSIG": 0}} ) @@ -80,10 +111,11 @@ with DelegationTest("unreachable.tc.test") as test: "additional": {"AAAA": 0, "RRSIG": 0}} ) # complete delegation, no glue available - test.run(bufsize=719, truncated=False, counts={ + test.run(bufsize=2000, truncated=False, counts={ "authority": {"NS": 2, "DS": 1, "RRSIG": 1}, "additional": {"AAAA": 0, "RRSIG": 0}} ) + # Delegation with foreign name servers with DelegationTest("foreign.tc.test") as test: @@ -98,7 +130,7 @@ with DelegationTest("foreign.tc.test") as test: "additional": {"AAAA": 0, "RRSIG": 0}} ) # complete delegation, no glue needed - test.run(bufsize=722, truncated=False, counts={ + test.run(bufsize=2000, truncated=False, counts={ "authority": {"NS": 2, "DS": 1, "RRSIG": 1}, "additional": {"AAAA": 0, "RRSIG": 0}} ) @@ -137,7 +169,7 @@ with DelegationTest("parent.tc.test") as test: "additional": {"AAAA": 2, "RRSIG": 1}} ) # complete delegation, all optional additionals with signatures - test.run(bufsize=976, truncated=False, counts={ + test.run(bufsize=2000, truncated=False, counts={ "authority": {"NS": 2, "DS": 1, "RRSIG": 1}, "additional": {"AAAA": 2, "RRSIG": 2}} ) @@ -176,9 +208,14 @@ with DelegationTest("mixed.tc.test") as test: "additional": {"AAAA": 3, "RRSIG": 0}} ) # complete delegation, full glue, optional - test.run(bufsize=999, truncated=False, counts={ + test.run(bufsize=924, truncated=False, counts={ + "authority": {"NS": 6, "DS": 1, "RRSIG": 1}, + "additional": {"AAAA": 4, "RRSIG": 0}} + ) + # complete delegation, full glue, optional with signature + test.run(bufsize=2000, truncated=False, counts={ "authority": {"NS": 6, "DS": 1, "RRSIG": 1}, - "additional": {"AAAA": 3, "RRSIG": 1}} + "additional": {"AAAA": 4, "RRSIG": 1}} ) t.stop() diff --git a/tests-extra/tests/basic/flags/test.py b/tests-extra/tests/basic/flags/test.py index 6370712ea4d425aefca9fa9dc13a0a08f10ea834..4ad7c4cc097ba5fd8404f8ce4de71234b5ac35c0 100644 --- a/tests-extra/tests/basic/flags/test.py +++ b/tests-extra/tests/basic/flags/test.py @@ -23,10 +23,10 @@ resp = knot.dig("flags", "NS", flags="RD") resp.check(flags="QR AA RD", noflags="TC RA AD CD Z") resp.cmp(bind) -# CD flag preservation. +# CD flag must be cleared (RFC 4035, Section 3.1.6). resp = knot.dig("flags", "NS", flags="CD") -resp.check(flags="QR AA CD", noflags="TC RA AD RD Z") -resp.cmp(bind) +resp.check(flags="QR AA", noflags="TC RA AD RD CD Z") +# Bind preserves CD flag # TC flag must be cleared resp = knot.dig("flags", "NS", flags="TC") diff --git a/tests-extra/tests/basic/query/test.py b/tests-extra/tests/basic/query/test.py index 86e0c2dbb44f5175ab7f542c5e726a2b5fbe0e01..89a430eefaa88848b43b61109c63fd136fc87d68 100644 --- a/tests-extra/tests/basic/query/test.py +++ b/tests-extra/tests/basic/query/test.py @@ -56,6 +56,11 @@ resp = knot.dig("ns.sub.flags", "A", udp=True) resp.check(rcode="NOERROR", flags="QR", noflags="AA TC AD RA") resp.cmp(bind, additional=True) +# Positive (REFERRAL, below delegation, ignoring empty-nonterminal during lookup) +resp = knot.dig("bellow.ns.sub.flags", "A", udp=True) +resp.check(rcode="NOERROR", flags="QR", noflags="AA TC AD RA") +resp.cmp(bind, additional=True) + ''' ANY query type. ''' # ANY to SOA record diff --git a/tests-extra/tests/ctl/basic/test.py b/tests-extra/tests/ctl/basic/test.py new file mode 100644 index 0000000000000000000000000000000000000000..a7d0043cf5ea2c56c358122657440eeb8c2bc2ca --- /dev/null +++ b/tests-extra/tests/ctl/basic/test.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python3 + +'''Ctl conf and zone commands test.''' + +import os + +from dnstest.libknot import libknot +from dnstest.test import Test +from dnstest.utils import * + +t = Test() + +knot = t.server("knot") + +ctl = libknot.control.KnotCtl() + +ZONE_NAME = "testzone." + +t.start() + +ctl.connect(os.path.join(knot.dir, "knot.sock")) + +# Add new zone. +ctl.send_block(cmd="conf-begin") +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-set", section="zone", item="domain", data=ZONE_NAME) +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-set", section="zone", item="file", identifier=ZONE_NAME, + data=os.path.join(knot.dir, ZONE_NAME + "zone")) +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-commit") +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-read", section="zone") +resp = ctl.receive_block() + +isset(ZONE_NAME in resp['zone'], "zone configured") +isset("file" in resp['zone'][ZONE_NAME], "zone.file configured") + +# Fill the zone content. +ctl.send_block(cmd="zone-begin") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-set", zone=ZONE_NAME, owner="@", ttl="3600", rtype="SOA", + data="a. b. 1 2 3 4 5") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-set", zone=ZONE_NAME, owner="@", ttl="3600", rtype="A", + data="192.168.0.1") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-commit") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-read", zone=ZONE_NAME) +resp = ctl.receive_block() + +isset(ZONE_NAME in resp, "zone content") +isset("SOA" in resp[ZONE_NAME][ZONE_NAME], "zone SOA presence") +isset("3600" in resp[ZONE_NAME][ZONE_NAME]["SOA"]["ttl"], "zone SOA ttl") +isset("a. b. 1 2 3 4 5" in resp[ZONE_NAME][ZONE_NAME]["SOA"]["data"], "zone SOA rdata") +isset("A" in resp[ZONE_NAME][ZONE_NAME], "zone A presence") +isset("3600" in resp[ZONE_NAME][ZONE_NAME]["A"]["ttl"], "zone A ttl") +isset("192.168.0.1" in resp[ZONE_NAME][ZONE_NAME]["A"]["data"], "zone A rdata") + +ctl.send(libknot.control.KnotCtlType.END) +ctl.close() + +# Check the zone. +resp = knot.dig(ZONE_NAME, "SOA") +resp.check(rcode="NOERROR") + +ctl.connect(os.path.join(knot.dir, "knot.sock")) + +# Abort remove SOA. +ctl.send_block(cmd="zone-begin") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-unset", zone=ZONE_NAME, owner="@", rtype="SOA") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-abort") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-read") +resp = ctl.receive_block() + +isset(ZONE_NAME in resp, "zone content") +isset("SOA" in resp[ZONE_NAME][ZONE_NAME], "zone SOA presence") + +# Commit removed A. +ctl.send_block(cmd="zone-begin") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-unset", zone=ZONE_NAME, owner="@", rtype="A") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-commit") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-read") +resp = ctl.receive_block() + +isset(ZONE_NAME in resp, "zone content") +isset("A" not in resp[ZONE_NAME][ZONE_NAME], "zone A presence") + +# Purge the zone data. +ctl.send_block(cmd="zone-purge") +resp = ctl.receive_block() + +ctl.send_block(cmd="zone-read", section="test-zone") +resp = ctl.receive_block() + +isset(ZONE_NAME not in resp, "zone content") + +resp = knot.dig(ZONE_NAME, "SOA") +resp.check(rcode="SERVFAIL") + +# Abort removed zone. +ctl.send_block(cmd="conf-begin") +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-unset", section="zone", item="domain", data=ZONE_NAME) +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-abort") +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-read", section="zone") +resp = ctl.receive_block() + +isset(ZONE_NAME in resp["zone"], "zone configured") + +# Commit removed zone. +ctl.send_block(cmd="conf-begin") +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-unset", section="zone", item="domain", data=ZONE_NAME) +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-commit") +resp = ctl.receive_block() + +ctl.send_block(cmd="conf-read", section="zone") +resp = ctl.receive_block() + +isset("zone" not in resp, "zone not configured") + +ctl.send(libknot.control.KnotCtlType.END) +ctl.close() + +resp = knot.dig(ZONE_NAME, "SOA") +resp.check(rcode="REFUSED") + +t.end() diff --git a/tests-extra/tests/ddns/basic/test.py b/tests-extra/tests/ddns/basic/test.py index 17ba2191227f52a15e7e826784f71b3ece725d51..2f5e458993618689dd77a6ce0795976ce68e9ac2 100644 --- a/tests-extra/tests/ddns/basic/test.py +++ b/tests-extra/tests/ddns/basic/test.py @@ -515,6 +515,16 @@ def do_refusal_tests(master, zone, dnssec=False): check_soa(master, prev_soa) + # Add DNSKEY + check_log("non-apex DNSKEY addition") + up = master.update(zone) + up.add("nonapex.ddns.", "3600", "DNSKEY", + "256 3 5 AwEAAbs0AlA6xWQn/lECfGt3S6TaeEmgJfEVVEMh06iNMNWMRHOfbqLF h3N52Ob7trmzlrzGlGLPnAZJvMB8lsFGC5CtaLUBD+4xCh5tl5QifZ+y o+MJvPGlVQI2cs7aMWV9CyFrRmuRcJaSZU2uBz9KFJ955UCq/WIy5KqS 7qaKLzzN") + up.send("NOERROR") + resp = master.dig("nonapex.ddns.", "DNSKEY") + resp.check(rcode="NOERROR", + rdata="256 3 5 AwEAAbs0AlA6xWQn/lECfGt3S6TaeEmgJfEVVEMh06iNMNWMRHOfbqLF h3N52Ob7trmzlrzGlGLPnAZJvMB8lsFGC5CtaLUBD+4xCh5tl5QifZ+y o+MJvPGlVQI2cs7aMWV9CyFrRmuRcJaSZU2uBz9KFJ955UCq/WIy5KqS 7qaKLzzN") + zone = t.zone("ddns.", storage=".") master_plain = t.server("knot") diff --git a/tests-extra/tests/dnssec/single_type_signing/test.py b/tests-extra/tests/dnssec/single_type_signing/test.py index 0860597823b5a78d8289e8e04d5396a2a9c0db13..d76e1a5e89a938bcd22894c7d22fa10bc111780a 100644 --- a/tests-extra/tests/dnssec/single_type_signing/test.py +++ b/tests-extra/tests/dnssec/single_type_signing/test.py @@ -8,7 +8,7 @@ from dnstest.test import Test t = Test() knot = t.server("knot") -zones = t.zone_rnd(4, dnssec=False, records=10) +zones = t.zone_rnd(5, dnssec=False, records=10) t.link(zones, knot) t.start() @@ -27,10 +27,15 @@ knot.gen_key(zones[3], ksk=True, alg="RSASHA256", key_len="1024") knot.gen_key(zones[3], ksk=False, alg="RSASHA256", key_len="1024") knot.gen_key(zones[3], ksk=False, alg="RSASHA512", key_len="1024") -for zone in zones: +for zone in zones[:-1]: knot.dnssec(zone).enable = True knot.dnssec(zone).manual = True +# enable automatic Single-Type signing scheme with NSEC3 on the last zone +knot.dnssec(zones[-1]).enable = True +knot.dnssec(zones[-1]).nsec3 = True +knot.dnssec(zones[-1]).single_type_signing = True + knot.gen_confile() knot.reload() t.sleep(2) diff --git a/tests-extra/tests/modules/online_sign/test.py b/tests-extra/tests/modules/online_sign/test.py new file mode 100644 index 0000000000000000000000000000000000000000..6b3097612ae215482e69b2afea74ee7e8a04fd30 --- /dev/null +++ b/tests-extra/tests/modules/online_sign/test.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 + +'''Check online DNSSEC signing module (just basic checks).''' + +import dns.rdatatype +from dnstest.test import Test +from dnstest.utils import * +from dnstest.module import ModOnlineSign + +t = Test() + +ModOnlineSign.check() + +knot = t.server("knot") +zones = t.zone_rnd(2, dnssec=False, records=5) +t.link(zones, knot) +knot.add_module(zones[0], ModOnlineSign()) +knot.add_module(zones[1], ModOnlineSign("RSASHA256")) + +def check_zone(zone, dnskey_rdata_start): + # Check SOA record. + soa1 = knot.dig(zone.name, "SOA", dnssec=True) + soa1.check(rcode="NOERROR", flags="QR AA") + soa1.check_count(1, "RRSIG") + + t.sleep(1) # Ensure different RRSIGs. + + soa2 = knot.dig(zone.name, "SOA", dnssec=True) + soa2.check(rcode="NOERROR", flags="QR AA") + soa2.check_count(1, "RRSIG") + + for rrset in soa1.resp.answer: + if rrset.rdtype == dns.rdatatype.SOA: + if rrset not in soa2.resp.answer: + set_err("DIFFERENT SOA") + check_log("ERROR: DIFFERENT SOA") + elif rrset.rdtype == dns.rdatatype.RRSIG: + if rrset in soa2.resp.answer: + set_err("UNCHANGED RRSIG") + check_log("ERROR: UNCHANGED RRSIG") + else: + set_err("UNEXPECTED RRSET") + check_log("ERROR: UNEXPECTED RRSET") + detail_log("%s" % rrset) + + # Check DNSKEY record. + resp = knot.dig(zone.name, "DNSKEY", dnssec=True) + resp.check(rcode="NOERROR", flags="QR AA") + resp.check_count(1, "DNSKEY") + resp.check_count(1, "RRSIG") + + for rrset in resp.resp.answer: + if rrset.rdtype != dns.rdatatype.DNSKEY: + continue + else: + isset(dnskey_rdata_start in rrset.to_text(), "DNSKEY ALGORITHM") + + # Check NSEC record. + resp = knot.dig("nx." + zone.name, "A", dnssec=True) + resp.check(rcode="NOERROR", flags="QR AA") + resp.check_count(0, section="answer") + resp.check_count(1, "SOA", section="authority") + resp.check_count(1, "NSEC", section="authority") + resp.check_count(2, "RRSIG", section="authority") + +t.start() +knot.zones_wait(zones) + +check_zone(zones[0], "256 3 13") +check_zone(zones[1], "256 3 8") + +t.end() + diff --git a/tests-extra/tests/modules/rosedb/test.py b/tests-extra/tests/modules/rosedb/test.py index 2b3775190ff67c4b2633c164c0dd1a6c5f3d12cb..b3a4add728bef034ed52a5c2dd2abd2010a659df 100644 --- a/tests-extra/tests/modules/rosedb/test.py +++ b/tests-extra/tests/modules/rosedb/test.py @@ -48,7 +48,7 @@ resp = knot.dig("mail6.example.com", "A") resp.check(rcode="NOERROR", noflags="AA") compare(resp.count(), 0, "A count") -# Add autority information. +# Add authority information. module.add_record("example.net", "SOA", "1", "ns1 host 1 3600 60 3600 3600") module.add_record("example.net", "NS", "2", "ns1.example.net") module.add_record("ns1.example.net", "A", "3", "127.0.0.2") diff --git a/tests-extra/tests/modules/rrl/test.py b/tests-extra/tests/modules/rrl/test.py new file mode 100644 index 0000000000000000000000000000000000000000..e4fc4c279fc2a6cce2a0600d7da17747febfd536 --- /dev/null +++ b/tests-extra/tests/modules/rrl/test.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python3 + +'''RRL module functionality test''' + +import dns.exception +import dns.message +import dns.query +import os +import time + +from dnstest.libknot import libknot +from dnstest.test import Test +from dnstest.module import ModRRL +from dnstest.utils import * + +ctl = libknot.control.KnotCtl() + +t = Test(stress=False) + +ModRRL.check() + +knot = t.server("knot") +zones = t.zone_rnd(2, dnssec=False, records=1) +t.link(zones, knot) + +def send_queries(server, name, run_time=1.0, query_time=0.05): + """ + Send UDP queries to the server for certain time and get replies statistics. + """ + replied, slipped, dropped = 0, 0, 0 + start = time.time() + while time.time() < start + run_time: + try: + query = dns.message.make_query(name, "SOA", want_dnssec=False) + response = dns.query.udp(query, server.addr, port=server.port, timeout=query_time) + except dns.exception.Timeout: + response = None + + if response is None: + dropped += 1 + elif response.flags & dns.flags.TC: + slipped += 1 + else: + replied += 1 + + return dict(replied=replied, slipped=slipped, dropped=dropped) + +def check_result(name, res, rate=0, slip=None): + """ + Check response result. + + We cannot send queries in parallel. And we have to give the server some time + to respond, especially under valgrind. Therefore we have to be tolerant when + counting responses when packets are being dropped. + """ + detail_log("RRL %s" % name) + detail_log(", ".join(["%s %d" % (s, res[s]) for s in ["replied", "slipped", "dropped"]])) + + ok = False + + if rate == 0: + ok = res["replied"] >= 100 and res["slipped"] == 0 and res["dropped"] == 0 + elif slip == 0: + ok = res["replied"] > 0 and res["replied"] < 100 and \ + res["slipped"] == 0 and res["dropped"] >= 5 + elif slip == 1: + ok = res["replied"] > 0 and res["replied"] < 100 and \ + res["slipped"] >= 100 and res["dropped"] == 0 + else: + ok = res["replied"] > 0 and res["replied"] < 100 and \ + res["slipped"] >= 5 and res["dropped"] >= 5 + + if ok: + detail_log("success") + else: + detail_log("error") + set_err("RRL ERROR") + +def cmp_stats(server, res, zone_name=None): + try: + ctl = libknot.control.KnotCtl() + ctl.connect(os.path.join(server.dir, "knot.sock")) + + if zone_name: + ctl.send_block(cmd="zone-stats", section="mod-rrl", zone=zone_name, flags="F") + else: + ctl.send_block(cmd="stats", section="mod-rrl", flags="F") + + stats = ctl.receive_stats() + detail_log(stats) + + if zone_name: + ok = int(stats["zone"][zone_name.lower()]["mod-rrl"]["dropped"]) == res["dropped"] and \ + int(stats["zone"][zone_name.lower()]["mod-rrl"]["slipped"]) == res["slipped"] + else: + ok = int(stats["mod-rrl"]["dropped"]) == res["dropped"] and \ + int(stats["mod-rrl"]["slipped"]) == res["slipped"] + + if ok: + detail_log("stats success") + else: + detail_log("stats error") + set_err("RRL STATS ERROR") + + finally: + ctl.send(libknot.control.KnotCtlType.END) + ctl.close() + +def reconfigure(server, zone, rate_limit, slip, whitelist=None): + """ + Reconfigure server module. + """ + server.clear_modules(None) + server.clear_modules(zone) + server.add_module(zone, ModRRL(rate_limit=rate_limit, slip=slip, whitelist=whitelist)) + server.gen_confile() + server.reload() + +t.start() + +knot.zones_wait(zones) + +### RRL global module + +# Disabled +res = send_queries(knot, zones[0].name) +check_result("disabled", res) + +# All drop +reconfigure(knot, None, 5, 0) +res = send_queries(knot, zones[0].name) +check_result("global, zone 1, all drop", res, 5, 0) +cmp_stats(knot, res) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("global, zone 2, all drop", res, 5, 0) +detail_log(SEP) + +# All slip +reconfigure(knot, None, 5, 1) +res = send_queries(knot, zones[0].name) +check_result("global, zone 1, all slip", res, 5, 1) +cmp_stats(knot, res) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("global, zone 2, all slip", res, 5, 1) +detail_log(SEP) + +# 50% slip +reconfigure(knot, None, 5, 2) +res = send_queries(knot, zones[0].name) +check_result("global, zone 1, 50% slip", res, 5, 2) +cmp_stats(knot, res) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("global, zone 2, 50% slip", res, 5, 2) +detail_log(SEP) + +# Whitelist +reconfigure(knot, None, 5, 0, whitelist=knot.addr) +res = send_queries(knot, zones[0].name) +cmp_stats(knot, res) +check_result("global, zone 1, whitelist", res, 0) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("global, zone 2, whitelist", res, 0) +detail_log(SEP) + +### RRL zone module + +# All drop +reconfigure(knot, zones[0], 5, 0) +res = send_queries(knot, zones[0].name) +check_result("zone 1, all drop", res, 5, 0) +cmp_stats(knot, res, zones[0].name) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("zone 2, disabled", res) +detail_log(SEP) + +# All slip +reconfigure(knot, zones[0], 5, 1) +res = send_queries(knot, zones[0].name) +check_result("zone 1, all slip", res, 5, 1) +cmp_stats(knot, res, zones[0].name) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("zone 2, disabled", res) +detail_log(SEP) + +# 50% slip +reconfigure(knot, zones[0], 5, 2) +res = send_queries(knot, zones[0].name) +check_result("zone 1, 50% slip", res, 5, 2) +cmp_stats(knot, res, zones[0].name) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("zone 2, disabled", res) +detail_log(SEP) + +# Whitelist +reconfigure(knot, zones[0], 5, 0, whitelist=knot.addr) +res = send_queries(knot, zones[0].name) +check_result("zone 1, whitelist", res, 0) +cmp_stats(knot, res, zones[0].name) +time.sleep(2) +res = send_queries(knot, zones[1].name) +check_result("zone 2, disabled", res) +detail_log(SEP) + +t.end() diff --git a/tests-extra/tests/modules/stats/test.py b/tests-extra/tests/modules/stats/test.py new file mode 100644 index 0000000000000000000000000000000000000000..23c0e6f987543094fdd94cad7ed109d330b07ff1 --- /dev/null +++ b/tests-extra/tests/modules/stats/test.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 + +''' Check 'stats' query module functionality. ''' + +import os +import random + +from dnstest.libknot import libknot +from dnstest.module import ModStats +from dnstest.test import Test +from dnstest.utils import * + +def check_item(server, section, item, value, idx=None, zone=None): + try: + ctl = libknot.control.KnotCtl() + ctl.connect(os.path.join(server.dir, "knot.sock")) + + if zone: + ctl.send_block(cmd="zone-stats", section=section, item=item, zone=zone.name) + else: + ctl.send_block(cmd="stats", section=section, item=item) + + stats = ctl.receive_stats() + finally: + ctl.send(libknot.control.KnotCtlType.END) + ctl.close() + + if not stats and value == -1: + return + + if zone: + stats = stats.get("zone").get(zone.name.lower()) + + if idx: + if value == -1: + isset(idx not in stats.get(section).get(item), idx) + return + else: + data = int(stats.get(section).get(item).get(idx)) + else: + data = int(stats.get(section).get(item)) + + compare(data, value, "%s.%s" % (section, item)) + +ModStats.check() + +proto = random.choice([4, 6]) + +t = Test(stress=False, tsig=False, address=proto) + +knot = t.server("knot") +zones = t.zone_rnd(2) + +t.link(zones, knot) + +knot.add_module(None, ModStats()) +knot.add_module(zones[0], ModStats()) +knot.add_module(zones[1], ModStats()) + +t.start() +t.sleep(1) + +check_item(knot, "server", "zone-count", 2) + +resp = knot.dig(zones[0].name, "SOA", tries=1, udp=True) +query_size1 = resp.query_size() +reply_size1 = resp.response_size() + +resp = knot.dig(zones[0].name, "NS", tries=1, udp=False) +query_size2 = resp.query_size() +reply_size2 = resp.response_size() + +resp = knot.dig(zones[1].name, "TYPE11", tries=1, udp=True) +query_size3 = resp.query_size() +reply_size3 = resp.response_size() + +# Sucessfull transfer. +resp = knot.dig(zones[0].name, "AXFR", tries=1) +resp.check_xfr(rcode="NOERROR") +xfr_query_size = resp.query_size() +# Cannot get xfr_reply_size :-/ + +# Successfull update. +up = knot.update(zones[1]) +up.add(zones[1].name, "3600", "AAAA", "::1") +up.send("NOERROR") +ddns_query_size = up.query_size() +# Due to DDNS bulk processing, failed RCODE and response-bytes are not incremented! + +# Check request protocol metrics. +check_item(knot, "mod-stats", "request-protocol", 2, "udp%s" % proto) +check_item(knot, "mod-stats", "request-protocol", 1, "udp%s" % proto, zone=zones[0]) +check_item(knot, "mod-stats", "request-protocol", 1, "udp%s" % proto, zone=zones[1]) + +check_item(knot, "mod-stats", "request-protocol", 3, "tcp%s" % proto) +check_item(knot, "mod-stats", "request-protocol", 2, "tcp%s" % proto, zone=zones[0]) + +# Check request/response bytes metrics. +check_item(knot, "mod-stats", "request-bytes", query_size1 + query_size2 + query_size3, + "query") +check_item(knot, "mod-stats", "request-bytes", ddns_query_size, "update") +check_item(knot, "mod-stats", "request-bytes", xfr_query_size, "other") + +check_item(knot, "mod-stats", "response-bytes", reply_size1 + reply_size2 + reply_size3, + "reply") + +check_item(knot, "mod-stats", "request-bytes", query_size1 + query_size2, "query", + zone=zones[0]) +check_item(knot, "mod-stats", "response-bytes", reply_size1 + reply_size2, "reply", + zone=zones[0]) + +check_item(knot, "mod-stats", "request-bytes", query_size3, "query", zone=zones[1]) +check_item(knot, "mod-stats", "response-bytes", reply_size3, "reply", zone=zones[1]) + +# Check query size metrics (just for global module). +indices = dict() +for size in [query_size1, query_size2, query_size3]: + idx = "%i-%i" % (int(size / 16) * 16, int(size / 16) * 16 + 15) + if idx not in indices: + indices[idx] = 1 + else: + indices[idx] += 1; +for size in indices: + check_item(knot, "mod-stats", "query-size", indices[size], idx=size) + +# Check reply size metrics (just for global module). +indices = dict() +for size in [reply_size1, reply_size2, reply_size3]: + idx = "%i-%i" % (int(size / 16) * 16, int(size / 16) * 16 + 15) + if idx not in indices: + indices[idx] = 1 + else: + indices[idx] += 1; +for size in indices: + check_item(knot, "mod-stats", "reply-size", indices[size], idx=size) + +# Check query type metrics. +check_item(knot, "mod-stats", "query-type", 1, idx="SOA") +check_item(knot, "mod-stats", "query-type", 1, idx="NS") +check_item(knot, "mod-stats", "query-type", 1, idx="TYPE11") + +check_item(knot, "mod-stats", "query-type", 1, idx="SOA", zone=zones[0]) +check_item(knot, "mod-stats", "query-type", 1, idx="NS", zone=zones[0]) +check_item(knot, "mod-stats", "query-type", -1, idx="TYPE11", zone=zones[0]) + +check_item(knot, "mod-stats", "query-type", -1, idx="SOA", zone=zones[1]) +check_item(knot, "mod-stats", "query-type", -1, idx="NS", zone=zones[1]) +check_item(knot, "mod-stats", "query-type", 1, idx="TYPE11", zone=zones[1]) + +# Check server operation metrics. +check_item(knot, "mod-stats", "server-operation", 3, idx="query") +check_item(knot, "mod-stats", "server-operation", 1, idx="axfr") +check_item(knot, "mod-stats", "server-operation", 1, idx="update") + +# Check response code metrics. +check_item(knot, "mod-stats", "response-code", 4, idx="NOERROR") +check_item(knot, "mod-stats", "response-code", 3, idx="NOERROR", zone=zones[0]) +check_item(knot, "mod-stats", "response-code", 1, idx="NOERROR", zone=zones[1]) + +# Check nodata metrics. +check_item(knot, "mod-stats", "reply-nodata", 1, idx="other") +check_item(knot, "mod-stats", "reply-nodata", -1, idx="other", zone=zones[0]) +check_item(knot, "mod-stats", "reply-nodata", 1, idx="other", zone=zones[1]) + +t.end() diff --git a/tests-extra/tests/records/load/test.py b/tests-extra/tests/records/load/test.py new file mode 100644 index 0000000000000000000000000000000000000000..9f4dc55216fb50efaa054dddc63cef86c1dd0803 --- /dev/null +++ b/tests-extra/tests/records/load/test.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +'''Test for loading of dumped zone''' + +from dnstest.test import Test + +t = Test() + +master = t.server("bind") +slave = t.server("knot") +reference = t.server("bind") + +zones = t.zone_rnd(4) + t.zone(".") + t.zone("records.") + +t.link(zones, master, slave) +t.link(zones, reference) + +t.start() + +# Wait for servers. +master.zones_wait(zones) +slave.zones_wait(zones) +reference.zones_wait(zones) + +# Dump zones on slave. +slave.flush() + +# Compare master with reference server +t.xfr_diff(reference, master, zones) + +# Compare slave with reference server +t.xfr_diff(reference, slave, zones) + +# Stop master. +master.stop() + +# Reload dumped zone files. +slave.stop() +slave.start() + +# Compare reloaded slave with reference server +slave.zones_wait(zones) +t.xfr_diff(reference, slave, zones) + +t.end() diff --git a/tests-extra/tests/security/dnsheader/test.py b/tests-extra/tests/security/dnsheader/test.py index 800464d5e462aa7a9f8a765f98d1811cf89b94da..a32fa736bdb9f74ee236fee739ca3dfab37502c2 100644 --- a/tests-extra/tests/security/dnsheader/test.py +++ b/tests-extra/tests/security/dnsheader/test.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -'''DNS packet header parsing tests. ''' +'''DNS packet header parsing tests.''' import socket from dnstest.test import Test @@ -21,11 +21,11 @@ data = '\x00' max_len = (12 + 5) # Header + minimal question size udp_socket = knot.create_sock(socket.SOCK_DGRAM) for i in range(1, max_len): - knot.send_raw(data * i, udp_socket) + knot.send_raw(data * i, udp_socket) udp_socket.close() -# Check if the server is still alive -resp = knot.dig("example.com", "SOA", timeout=5, tries=1) +# Check if the server is still alive +resp = knot.dig("example.com", "SOA") resp.check(rcode="NOERROR") t.end() diff --git a/tests-extra/tests/zone/load/test.py b/tests-extra/tests/zone/load/test.py index 9f4dc55216fb50efaa054dddc63cef86c1dd0803..c40b7581d1a29487cb825557912a6cefe0589241 100644 --- a/tests-extra/tests/zone/load/test.py +++ b/tests-extra/tests/zone/load/test.py @@ -1,45 +1,43 @@ #!/usr/bin/env python3 -'''Test for loading of dumped zone''' +'''Test for slave zone refresh when loading.''' from dnstest.test import Test +from dnstest.utils import * t = Test() -master = t.server("bind") +master = t.server("knot") slave = t.server("knot") -reference = t.server("bind") - -zones = t.zone_rnd(4) + t.zone(".") + t.zone("records.") +slave.disable_notify = True +zone_del = t.zone_rnd(1, dnssec=False) +zone_upd = t.zone_rnd(1, dnssec=False) +zones = zone_del + zone_upd t.link(zones, master, slave) -t.link(zones, reference) t.start() -# Wait for servers. -master.zones_wait(zones) +serial_del_init = master.zone_wait(zone_del) +serial_upd_init = master.zone_wait(zone_upd) slave.zones_wait(zones) -reference.zones_wait(zones) - -# Dump zones on slave. -slave.flush() -# Compare master with reference server -t.xfr_diff(reference, master, zones) +slave.stop() -# Compare slave with reference server -t.xfr_diff(reference, slave, zones) +# Update a zonefile on the master. +master.update_zonefile(zone_upd, random=True) +master.reload() -# Stop master. -master.stop() +# Remove a zonefile on the slave. +slave.clean(zone=zone_del, timers=False) -# Reload dumped zone files. -slave.stop() slave.start() -# Compare reloaded slave with reference server -slave.zones_wait(zones) -t.xfr_diff(reference, slave, zones) +# Check for immediate zone transfer if deleted. +slave.zone_wait(zone_del, serial=serial_del_init, equal=True, greater=False) + +# Check for untouched zone if retransfer already scheduled. +serial_upd = slave.zone_wait(zone_upd) +master.zone_wait(zone_upd, serial_upd, equal=False, greater=True) t.end() diff --git a/tests-extra/tools/dnstest/libknot.py b/tests-extra/tools/dnstest/libknot.py new file mode 100644 index 0000000000000000000000000000000000000000..418b5a8491cda2465879821806f5ea6a59b6d2b2 --- /dev/null +++ b/tests-extra/tools/dnstest/libknot.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +import sys + +from dnstest.utils import Skip +import dnstest.params as params + +try: + sys.path.append(params.repo_binary("python")) + import libknot.control + libknot.control.load_lib(params.libknot_lib) +except: + raise Skip("libknot not available") diff --git a/tests-extra/tools/dnstest/module.py b/tests-extra/tools/dnstest/module.py index 5b6457754c2e537a2ebbe69671f0cc0604a68c57..47a9cb94c4129ef81f1202689f589df9ce582380 100644 --- a/tests-extra/tools/dnstest/module.py +++ b/tests-extra/tools/dnstest/module.py @@ -16,6 +16,8 @@ class KnotModule(object): src_name = None # Module name in the configuration. conf_name = None + # Empty configuration + empty = False def __init__(self): self.conf_id = "id%s" % type(self).count @@ -47,9 +49,12 @@ class KnotModule(object): raise Skip("Module '%s' not detected" % cls.conf_name) def get_conf_ref(self): - return "%s/%s" % (self.conf_name, self.conf_id) + if self.empty: + return str(self.conf_name) + else: + return "%s/%s" % (self.conf_name, self.conf_id) - def get_conf(self): pass + def get_conf(self, conf=None): pass class ModSynthRecord(KnotModule): '''Automatic forward/reverse records module''' @@ -104,6 +109,36 @@ class ModDnstap(KnotModule): return conf +class ModRRL(KnotModule): + '''RRL module''' + + src_name = "rrl_load" + conf_name = "mod-rrl" + + def __init__(self, rate_limit, slip=None, table_size=None, whitelist=None): + super().__init__() + self.rate_limit = rate_limit + self.slip = slip + self.table_size = table_size + self.whitelist = whitelist + + def get_conf(self, conf=None): + if not conf: + conf = dnstest.config.KnotConf() + + conf.begin(self.conf_name) + conf.id_item("id", self.conf_id) + conf.item_str("rate-limit", self.rate_limit) + if self.slip or self.slip == 0: + conf.item_str("slip", self.slip) + if self.table_size: + conf.item_str("table-size", self.table_size) + if self.whitelist: + conf.item_str("whitelist", self.whitelist) + conf.end() + + return conf + class ModDnsproxy(KnotModule): '''Dnsproxy module''' @@ -139,17 +174,37 @@ class ModWhoami(KnotModule): src_name = "whoami_load" conf_name = "mod-whoami" + empty = True def __init__(self): super().__init__() +class ModOnlineSign(KnotModule): + '''Online-sign module''' + + src_name = "online_sign_load" + conf_name = "mod-online-sign" + + def __init__(self, algorithm=None): + super().__init__() + self.algorithm = algorithm + if not algorithm: + self.empty = True + def get_conf(self, conf=None): if not conf: conf = dnstest.config.KnotConf() - conf.begin(self.conf_name) - conf.id_item("id", self.conf_id) - conf.end() + if self.algorithm: + conf.begin("policy") + conf.id_item("id", "%s_%s" % (self.conf_name, self.conf_id)) + conf.item_str("algorithm", self.algorithm) + conf.end() + + conf.begin(self.conf_name) + conf.id_item("id", self.conf_id) + conf.item_str("policy", "%s_%s" % (self.conf_name, self.conf_id)) + conf.end() return conf @@ -185,3 +240,36 @@ class ModRosedb(KnotModule): set_err("ROSEDB_TOOL") detail_log("!Failed to add a record into rosedb '%s'" % self.dbdir) detail_log(SEP) + +class ModStats(KnotModule): + '''Stats module''' + + src_name = "stats_load" + conf_name = "mod-stats" + + def __init__(self): + super().__init__() + + def _bool(self, conf, name, value=True): + conf.item_str(name, "on" if value else "off") + + def get_conf(self, conf=None): + if not conf: + conf = dnstest.config.KnotConf() + + conf.begin(self.conf_name) + conf.id_item("id", self.conf_id) + self._bool(conf, "request-protocol", True) + self._bool(conf, "server-operation", True) + self._bool(conf, "request-bytes", True) + self._bool(conf, "response-bytes", True) + self._bool(conf, "edns-presence", True) + self._bool(conf, "flag-presence", True) + self._bool(conf, "response-code", True) + self._bool(conf, "reply-nodata", True) + self._bool(conf, "query-type", True) + self._bool(conf, "query-size", True) + self._bool(conf, "reply-size", True) + conf.end() + + return conf diff --git a/tests-extra/tools/dnstest/params.py b/tests-extra/tools/dnstest/params.py index 3fc5aefeef47a6ee5142cf35ddf2a83faae6010b..e76e2fb893a36d91971828c2542f0aa8724184c0 100644 --- a/tests-extra/tools/dnstest/params.py +++ b/tests-extra/tools/dnstest/params.py @@ -42,15 +42,17 @@ debug = False # KNOT_TEST_VALGRIND - valgrind binary if defined. valgrind_bin = get_binary("KNOT_TEST_VALGRIND", "valgrind") # KNOT_TEST_VALGRIND_FLAGS - valgrind flags. -# Server settings: "--leak-check=full --track-origins=yes --vgdb=yes --verbose" +# Server settings: "--leak-check=full --track-origins=yes --vgdb=yes --verbose --trace-children=yes --trace-children-skip=/usr/*sh,/bin/*sh" valgrind_flags = get_param("KNOT_TEST_VALGRIND_FLAGS", - "--leak-check=full --show-leak-kinds=all --vgdb=yes --verbose") + "--leak-check=full --show-leak-kinds=all --vgdb=yes --verbose --trace-children=yes --trace-children-skip=/usr/*sh,/bin/*sh") # KNOT_TEST_GDB - gdb binary. gdb_bin = get_binary("KNOT_TEST_GDB", "gdb") # KNOT_TEST_VGDB - vgdb binary. vgdb_bin = get_binary("KNOT_TEST_VGDB", "vgdb") # KNOT_TEST_LIBTOOL - libtool script. libtool_bin = get_binary("KNOT_TEST_LIBTOOL", repo_binary("libtool")) +# KNOT_TEST_LIBKNOT - libknot library. +libknot_lib = get_binary("KNOT_TEST_LIBKNOT", repo_binary("src/.libs/libknot.so")) # KNOT_TEST_KNOT - Knot binary. knot_bin = get_binary("KNOT_TEST_KNOT", repo_binary("src/knotd")) # KNOT_TEST_KNOTC - Knot control binary. diff --git a/tests-extra/tools/dnstest/response.py b/tests-extra/tools/dnstest/response.py index 2df0effb14de0591f889eb2c12f49a252939a35c..f5ae00d3bba91215be137444173553f7b5c49ba7 100644 --- a/tests-extra/tools/dnstest/response.py +++ b/tests-extra/tools/dnstest/response.py @@ -392,3 +392,13 @@ class Response(object): for rr in nsec3_rrs: detail_log(" %s" % rr) detail_log(SEP) + + def query_size(self): + '''Return query size.''' + + return len(self.query.to_wire()) + + def response_size(self): + '''Return response size.''' + + return len(self.resp.to_wire()) diff --git a/tests-extra/tools/dnstest/server.py b/tests-extra/tools/dnstest/server.py index 4e62662118e1f5177bf29182f83e0d7ca8442de0..3660f8cc824baa39f7c5056d1998949f4430625f 100644 --- a/tests-extra/tools/dnstest/server.py +++ b/tests-extra/tools/dnstest/server.py @@ -37,6 +37,7 @@ class ZoneDnssec(object): def __init__(self): self.enable = None self.manual = None + self.single_type_signing = None self.alg = None self.ksk_size = None self.zsk_size = None @@ -64,6 +65,9 @@ class Zone(object): def add_module(self, module): self.modules.append(module) + def clear_modules(self): + self.modules.clear() + def disable_master(self, new_zone_file): self.zfile.remove() self.zfile = new_zone_file @@ -115,8 +119,8 @@ class Server(object): self.max_udp6_payload = None self.disable_any = None self.disable_notify = None - self.zonefile_sync = None - self.journal_size = None + self.zonefile_sync = "1d" + self.journal_db_size = 20 * 1024 * 1024 self.zone_size_limit = None self.inquirer = None @@ -661,8 +665,18 @@ class Server(object): else: self.modules.append(module) + def clear_modules(self, zone): + zone = zone_arg_check(zone) + + if zone: + self.zones[zone.name].clear_modules() + else: + self.modules.clear() + def clean(self, zone=True, timers=True): if zone: + zone = zone_arg_check(zone) + # Remove all zonefiles. if zone is True: for _z in sorted(self.zones): @@ -1022,6 +1036,7 @@ class Knot(Server): continue s.id_item("id", z.name) self._bool(s, "manual", z.dnssec.manual) + self._bool(s, "single-type-signing", z.dnssec.single_type_signing) self._str(s, "algorithm", z.dnssec.alg) self._str(s, "ksk_size", z.dnssec.ksk_size) self._str(s, "zsk_size", z.dnssec.zsk_size) @@ -1035,12 +1050,8 @@ class Knot(Server): s.id_item("id", "default") s.item_str("storage", self.dir) s.item_str("kasp-db", self.keydir) - if self.zonefile_sync: - s.item_str("zonefile-sync", self.zonefile_sync) - else: - s.item_str("zonefile-sync", "1d") - if self.journal_size: - s.item_str("max-journal-size", self.journal_size) + s.item_str("zonefile-sync", self.zonefile_sync) + s.item_str("max-journal-db-size", self.journal_db_size) s.item_str("semantic-checks", "on") if self.disable_any: s.item_str("disable-any", "on") diff --git a/tests-extra/tools/dnstest/update.py b/tests-extra/tools/dnstest/update.py index 6532be807dcad4b53f753831ad30757ee9ac2c79..6c9ef5412e304fbb901a3253fbfa245e2c783ee8 100644 --- a/tests-extra/tools/dnstest/update.py +++ b/tests-extra/tools/dnstest/update.py @@ -42,3 +42,8 @@ class Update(object): if self.upd.keyring and not resp.had_tsig: set_err("INVALID RESPONSE") check_log("ERROR: Expected TSIG signed response") + + def query_size(self): + '''Return update query size.''' + + return len(self.upd.to_wire()) diff --git a/tests-fuzz/.gitignore b/tests-fuzz/.gitignore index 6ac8bb7422b5301f63d047b6d847582cc3e1480e..c8a7a2024c23271096c4a2efecd8de4fab5f7567 100644 --- a/tests-fuzz/.gitignore +++ b/tests-fuzz/.gitignore @@ -4,3 +4,4 @@ /knotd_stdio /packet /packet_libfuzzer +/wrap/main.c diff --git a/tests-fuzz/Makefile.am b/tests-fuzz/Makefile.am index 992c87bfd7144960c79b532f332b70e89904080d..1ffb89631ac00a736c508c740a587356a049a990 100644 --- a/tests-fuzz/Makefile.am +++ b/tests-fuzz/Makefile.am @@ -1,7 +1,10 @@ AM_CPPFLAGS = \ - -include $(top_builddir)/src/config.h \ - -I$(top_srcdir)/src \ - -I$(top_srcdir)/src/dnssec/lib + -include $(top_builddir)/src/config.h \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/dnssec/lib \ + -DCONFIG_DIR='"${config_dir}"' \ + -DSTORAGE_DIR='"${storage_dir}"' \ + -DRUN_DIR='"${run_dir}"' LDADD = \ $(top_builddir)/src/libknot.la @@ -15,10 +18,17 @@ check_PROGRAMS += packet_libfuzzer packet_libfuzzer_LDADD = $(LDADD) $(libfuzzer_LIBS) -lstdc++ endif -knotd_stdio_SOURCES = wrap/server.c wrap/tcp-handler.c wrap/udp-handler.c +packet_SOURCES = packet.c afl-loop.h +knotd_stdio_SOURCES = wrap/server.c wrap/tcp-handler.c wrap/udp-handler.c afl-loop.h +nodist_knotd_stdio_SOURCES = wrap/main.c knotd_stdio_CPPFLAGS = $(AM_CPPFLAGS) $(liburcu_CFLAGS) knotd_stdio_LDADD = \ - $(top_builddir)/src/utils/knotd/knotd-main.o \ - $(top_builddir)/src/libknotd.la $(liburcu_LIBS) + $(top_builddir)/src/libknotd.la $(top_builddir)/src/libcontrib.la \ + $(liburcu_LIBS) +BUILT_SOURCES = wrap/main.c +CLEANFILES = wrap/main.c +wrap/main.c: Makefile $(top_builddir)/src/utils/knotd/main.c + echo '#include "afl-loop.h"' > $@ + $(SED) -e 's/for (;;)/while (__AFL_LOOP(1000))/' $(top_srcdir)/src/utils/knotd/main.c >>$@ check-compile: $(check_PROGRAMS) diff --git a/tests-fuzz/afl-loop.h b/tests-fuzz/afl-loop.h new file mode 100644 index 0000000000000000000000000000000000000000..4db002ef2421887f696c487d469768dd036313dd --- /dev/null +++ b/tests-fuzz/afl-loop.h @@ -0,0 +1,4 @@ +#pragma once +#ifndef __AFL_COMPILER +#define __AFL_LOOP(x) (0) +#endif diff --git a/tests-fuzz/packet.c b/tests-fuzz/packet.c index bc6fc7ec74ad651ed2a4f8a94b9c9da8184497a2..feb381ec2bd51298de1232a7c06a294dee5c53a1 100644 --- a/tests-fuzz/packet.c +++ b/tests-fuzz/packet.c @@ -20,10 +20,11 @@ #include <signal.h> #include "libknot/libknot.h" +#include "afl-loop.h" int main(void) { - for(;;) { + while (__AFL_LOOP(1000)) { uint8_t buffer[UINT16_MAX + 1] = { 0 }; size_t len = fread(buffer, 1, sizeof(buffer), stdin); @@ -32,10 +33,6 @@ int main(void) int r = knot_pkt_parse(pkt, 0); knot_pkt_free(&pkt); - if (getenv("AFL_PERSISTENT")) { - raise(SIGSTOP); - } else { - return (r == KNOT_EOK ? 0 : 1); - } + return (r == KNOT_EOK ? 0 : 1); } } diff --git a/tests/.gitignore b/tests/.gitignore index 6668bb4a63c93ebd3e82a01792ac717695258a5d..e74e5bac1804e3fe02f0c48925fe253eca75ad20 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -5,11 +5,11 @@ /contrib/test_base32hex /contrib/test_base64 /contrib/test_endian -/contrib/test_hat-trie /contrib/test_heap /contrib/test_hhash /contrib/test_net /contrib/test_net_shortwrite +/contrib/test_qp-trie /contrib/test_sockaddr /contrib/test_string /contrib/test_strtonum @@ -37,30 +37,33 @@ /libknot/test_ypscheme /libknot/test_yptrafo -/acl -/changeset -/conf -/conf_tools -/confdb -/confio -/dthreads -/fdset -/journal -/modules/online_sign -/node -/process_query -/query_module -/requestor -/rrl -/semantic_check -/server +/modules/test_online_sign +/modules/test_rrl + /utils/test_cert /utils/test_lookup -/worker_pool -/worker_queue -/zone_events -/zone_serial -/zone_timers -/zone_update -/zonedb -/ztree + +/test_acl +/test_changeset +/test_conf +/test_conf_tools +/test_confdb +/test_confio +/test_dthreads +/test_fdset +/test_journal +/test_node +/test_process_answer +/test_process_query +/test_query_module +/test_requestor +/test_semantic_check +/test_server +/test_worker_pool +/test_worker_queue +/test_zone-tree +/test_zone-update +/test_zone_events +/test_zone_serial +/test_zone_timers +/test_zonedb diff --git a/tests/Makefile.am b/tests/Makefile.am index 3a24add52150b1740f12eeadc5939a871ea2f400..898063bbbdc248aa041d6707fcee298cc8c58296 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -8,17 +8,18 @@ LDADD = \ $(top_builddir)/libtap/libtap.la \ $(top_builddir)/src/libknot.la \ $(top_builddir)/src/libknotd.la \ + $(top_builddir)/src/libcontrib.la \ $(libcrypto_LIBS) check_PROGRAMS = \ contrib/test_base32hex \ contrib/test_base64 \ contrib/test_endian \ - contrib/test_hat-trie \ contrib/test_heap \ contrib/test_hhash \ contrib/test_net \ contrib/test_net_shortwrite \ + contrib/test_qp-trie \ contrib/test_sockaddr \ contrib/test_string \ contrib/test_strtonum \ @@ -48,32 +49,36 @@ check_PROGRAMS += \ libknot/test_yptrafo check_PROGRAMS += \ - modules/online_sign \ + modules/test_online_sign \ + modules/test_rrl + +check_PROGRAMS += \ utils/test_cert \ - utils/test_lookup \ - acl \ - changeset \ - conf \ - conf_tools \ - confdb \ - confio \ - dthreads \ - fdset \ - journal \ - node \ - process_query \ - query_module \ - requestor \ - rrl \ - server \ - worker_pool \ - worker_queue \ - zone_events \ - zone_serial \ - zone_timers \ - zone_update \ - zonedb \ - ztree + utils/test_lookup + +check_PROGRAMS += \ + test_acl \ + test_changeset \ + test_conf \ + test_conf_tools \ + test_confdb \ + test_confio \ + test_dthreads \ + test_fdset \ + test_journal \ + test_node \ + test_process_query \ + test_query_module \ + test_requestor \ + test_server \ + test_worker_pool \ + test_worker_queue \ + test_zone-tree \ + test_zone-update \ + test_zone_events \ + test_zone_serial \ + test_zone_timers \ + test_zonedb utils_test_lookup_CPPFLAGS = \ $(AM_CPPFLAGS) \ @@ -106,8 +111,8 @@ check-local: $(check_PROGRAMS) $(check_SCRIPTS) -L $(top_builddir)/tests/runtests.log \ $(check_PROGRAMS) $(check_SCRIPTS) -acl_SOURCES = acl.c test_conf.h -conf_SOURCES = conf.c test_conf.h -confdb_SOURCES = confdb.c test_conf.h -confio_SOURCES = confio.c test_conf.h -process_query_SOURCES = process_query.c fake_server.h test_conf.h +test_acl_SOURCES = test_acl.c test_conf.h +test_conf_SOURCES = test_conf.c test_conf.h +test_confdb_SOURCES = test_confdb.c test_conf.h +test_confio_SOURCES = test_confio.c test_conf.h +test_process_query_SOURCES = test_process_query.c test_server.h test_conf.h diff --git a/tests/TODO b/tests/TODO deleted file mode 100644 index bf03e7c3caa3328aea0c8d542b9fb002697bd011..0000000000000000000000000000000000000000 --- a/tests/TODO +++ /dev/null @@ -1 +0,0 @@ -- reimplement lives_ok diff --git a/tests/contrib/test_hat-trie.c b/tests/contrib/test_qp-trie.c similarity index 66% rename from tests/contrib/test_hat-trie.c rename to tests/contrib/test_qp-trie.c index 33700c844c7dbfa7c868d5623728facff71d8d3f..e1a04c79d7dede24aae385b9bc8aad9b589c9a6c 100644 --- a/tests/contrib/test_hat-trie.c +++ b/tests/contrib/test_qp-trie.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,13 +14,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <stdlib.h> #include <string.h> #include <time.h> #include <tap/basic.h> -#include "contrib/hat-trie/hat-trie.h" +#include "contrib/qp-trie/qp.h" #include "contrib/macros.h" #include "contrib/string.h" +#include "libknot/errcode.h" /* UCW array sorting defines. */ #define ASORT_PREFIX(X) str_key_##X @@ -44,12 +46,12 @@ static char *str_key_rand(size_t len) } /* \brief Check lesser or equal result. */ -static bool str_key_find_leq(hattrie_t *trie, char **keys, size_t i, size_t size) +static bool str_key_get_leq(trie_t *trie, char **keys, size_t i, size_t size) { static char key_buf[KEY_MAXLEN]; int ret = 0; - value_t *val = NULL; + trie_val_t *val = NULL; const char *key = keys[i]; size_t key_len = strlen(key) + 1; memcpy(key_buf, key, key_len); @@ -67,14 +69,14 @@ static bool str_key_find_leq(hattrie_t *trie, char **keys, size_t i, size_t size /* Before current key. */ key_buf[key_len - 2] -= 1; if (i < first_key_count) { - ret = hattrie_find_leq(trie, key_buf, key_len, &val); - if (ret != 1) { + ret = trie_get_leq(trie, key_buf, key_len, &val); + if (ret != KNOT_ENOENT) { diag("%s: leq for key BEFORE %zu/'%s' ret = %d", __func__, i, keys[i], ret); return false; /* No key before first. */ } } else { - ret = hattrie_find_leq(trie, key_buf, key_len, &val); - if (ret > 0 || strcmp(*val, key_buf) > 0) { + ret = trie_get_leq(trie, key_buf, key_len, &val); + if (ret < KNOT_EOK || strcmp(*val, key_buf) > 0) { diag("%s: '%s' is not before the key %zu/'%s'", __func__, (char*)*val, i, keys[i]); return false; /* Found key must be LEQ than searched. */ } @@ -82,16 +84,16 @@ static bool str_key_find_leq(hattrie_t *trie, char **keys, size_t i, size_t size /* Current key. */ key_buf[key_len - 2] += 1; - ret = hattrie_find_leq(trie, key_buf, key_len, &val); - if (! (ret == 0 && val && strcmp(*val, key_buf) == 0)) { + ret = trie_get_leq(trie, key_buf, key_len, &val); + if (! (ret == KNOT_EOK && val && strcmp(*val, key_buf) == 0)) { diag("%s: leq for key %zu/'%s' ret = %d", __func__, i, keys[i], ret); return false; /* Must find equal match. */ } /* After the current key. */ key_buf[key_len - 2] += 1; - ret = hattrie_find_leq(trie, key_buf, key_len, &val); - if (! (ret <= 0 && strcmp(*val, key_buf) <= 0)) { + ret = trie_get_leq(trie, key_buf, key_len, &val); + if (! (ret >= KNOT_EOK && strcmp(*val, key_buf) <= 0)) { diag("%s: leq for key AFTER %zu/'%s' ret = %d %s", __func__, i, keys[i], ret, (char*)*val); return false; /* Every key must have its LEQ match. */ } @@ -116,15 +118,15 @@ int main(int argc, char *argv[]) str_key_sort(keys, key_count); /* Create trie */ - value_t *val = NULL; - hattrie_t *trie = hattrie_create(); - ok(trie != NULL, "hattrie: create"); + trie_val_t *val = NULL; + trie_t *trie = trie_create(NULL); + ok(trie != NULL, "trie: create"); /* Insert keys */ bool passed = true; size_t inserted = 0; for (unsigned i = 0; i < key_count; ++i) { - val = hattrie_get(trie, keys[i], strlen(keys[i]) + 1); + val = trie_get_ins(trie, keys[i], strlen(keys[i]) + 1); if (!val) { passed = false; break; @@ -134,32 +136,29 @@ int main(int argc, char *argv[]) ++inserted; } } - ok(passed, "hattrie: insert"); + ok(passed, "trie: insert"); /* Check total insertions against trie weight. */ - is_int(hattrie_weight(trie), inserted, "hattrie: trie weight matches insertions"); - - /* Build order-index. */ - hattrie_build_index(trie); + is_int(trie_weight(trie), inserted, "trie: trie weight matches insertions"); /* Lookup all keys */ passed = true; for (unsigned i = 0; i < key_count; ++i) { - val = hattrie_tryget(trie, keys[i], strlen(keys[i]) + 1); + val = trie_get_try(trie, keys[i], strlen(keys[i]) + 1); if (val && (*val == keys[i] || strcmp(*val, keys[i]) == 0)) { continue; } else { - diag("hattrie: mismatch on element '%u'", i); + diag("trie: mismatch on element '%u'", i); passed = false; break; } } - ok(passed, "hattrie: lookup all keys"); + ok(passed, "trie: lookup all keys"); /* Lesser or equal lookup. */ passed = true; for (unsigned i = 0; i < key_count; ++i) { - if (!str_key_find_leq(trie, keys, i, key_count)) { + if (!str_key_get_leq(trie, keys, i, key_count)) { passed = false; for (int off = -10; off < 10; ++off) { int k = (int)i + off; @@ -171,34 +170,15 @@ int main(int argc, char *argv[]) break; } } - ok(passed, "hattrie: find lesser or equal for all keys"); - - /* Next lookup. */ - passed = true; - for (unsigned i = 0; i < key_count - 1 && passed; ++i) { - value_t *val; - hattrie_find_next(trie, keys[i], strlen(keys[i]), &val); - passed = val && *val == (void *)keys[(i + 1)]; - } - ok(passed, "hattrie: find next for all keys"); - - /* Unsorted iteration */ - size_t iterated = 0; - hattrie_iter_t *it = hattrie_iter_begin(trie, false); - while (!hattrie_iter_finished(it)) { - ++iterated; - hattrie_iter_next(it); - } - is_int(inserted, iterated, "hattrie: unsorted iteration"); - hattrie_iter_free(it); + ok(passed, "trie: find lesser or equal for all keys"); /* Sorted iteration. */ char key_buf[KEY_MAXLEN] = {'\0'}; - iterated = 0; - it = hattrie_iter_begin(trie, true); - while (!hattrie_iter_finished(it)) { + size_t iterated = 0; + trie_it_t *it = trie_it_begin(trie); + while (!trie_it_finished(it)) { size_t cur_key_len = 0; - const char *cur_key = hattrie_iter_key(it, &cur_key_len); + const char *cur_key = trie_it_key(it, &cur_key_len); if (iterated > 0) { /* Only if previous exists. */ if (strcmp(key_buf, cur_key) > 0) { diag("'%s' <= '%s' FAIL\n", key_buf, cur_key); @@ -207,16 +187,16 @@ int main(int argc, char *argv[]) } ++iterated; memcpy(key_buf, cur_key, cur_key_len); - hattrie_iter_next(it); + trie_it_next(it); } - is_int(inserted, iterated, "hattrie: sorted iteration"); - hattrie_iter_free(it); + is_int(inserted, iterated, "trie: sorted iteration"); + trie_it_free(it); /* Cleanup */ for (unsigned i = 0; i < key_count; ++i) { free(keys[i]); } free(keys); - hattrie_free(trie); + trie_free(trie); return 0; } diff --git a/tests/journal.c b/tests/journal.c deleted file mode 100644 index e0fc3e4cb5b12faa776eadfc7094e5e433096788..0000000000000000000000000000000000000000 --- a/tests/journal.c +++ /dev/null @@ -1,408 +0,0 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> - - 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 - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <assert.h> -#include <string.h> -#include <stdlib.h> -#include <stdio.h> -#include <limits.h> -#include <unistd.h> -#include <sys/stat.h> -#include <tap/basic.h> - -#include "libknot/libknot.h" -#include "knot/server/journal.h" -#include "knot/zone/zone.h" - -#define RAND_RR_LABEL 16 -#define RAND_RR_PAYLOAD 64 -#define MIN_SOA_SIZE 22 - -/*! \brief Generate random string with given length. */ -static int randstr(char* dst, size_t len) -{ - for (int i = 0; i < len - 1; ++i) { - dst[i] = '0' + (int) (('Z'-'0') * (rand() / (RAND_MAX + 1.0))); - } - dst[len - 1] = '\0'; - - return 0; -} - -/*! \brief Init RRSet with type SOA and given serial. */ -static void init_soa(knot_rrset_t *rr, const uint32_t serial, const knot_dname_t *apex) -{ - knot_rrset_init(rr, knot_dname_copy(apex, NULL), KNOT_RRTYPE_SOA, KNOT_CLASS_IN); - - assert(serial < 256); - uint8_t soa_data[MIN_SOA_SIZE] = { 0, 0, 0, 0, 0, serial }; - int ret = knot_rrset_add_rdata(rr, soa_data, sizeof(soa_data), 3600, NULL); - (void)ret; - assert(ret == KNOT_EOK); -} - -/*! \brief Init RRSet with type TXT, random owner and random payload. */ -static void init_random_rr(knot_rrset_t *rr , const knot_dname_t *apex) -{ - /* Create random label. */ - char owner[RAND_RR_LABEL + knot_dname_size(apex)]; - owner[0] = RAND_RR_LABEL - 1; - randstr(owner + 1, RAND_RR_LABEL); - - /* Append zone apex. */ - memcpy(owner + RAND_RR_LABEL, apex, knot_dname_size(apex)); - knot_rrset_init(rr, knot_dname_copy((knot_dname_t *)owner, NULL), KNOT_RRTYPE_TXT, KNOT_CLASS_IN); - - /* Create random RDATA. */ - uint8_t txt[RAND_RR_PAYLOAD + 1]; - txt[0] = RAND_RR_PAYLOAD - 1; - randstr((char *)(txt + 1), RAND_RR_PAYLOAD); - - int ret = knot_rrset_add_rdata(rr, txt, RAND_RR_PAYLOAD, 3600, NULL); - (void)ret; - assert(ret == KNOT_EOK); -} - -/*! \brief Init changeset with random changes. */ -static void init_random_changeset(changeset_t *ch, const uint32_t from, const uint32_t to, const size_t size, const knot_dname_t *apex) -{ - int ret = changeset_init(ch, apex); - (void)ret; - assert(ret == KNOT_EOK); - - // Add SOAs - knot_rrset_t soa; - init_soa(&soa, from, apex); - - ch->soa_from = knot_rrset_copy(&soa, NULL); - assert(ch->soa_from); - knot_rrset_clear(&soa, NULL); - - init_soa(&soa, to, apex); - ch->soa_to = knot_rrset_copy(&soa, NULL); - assert(ch->soa_to); - knot_rrset_clear(&soa, NULL); - - // Add RRs to add section - for (size_t i = 0; i < size / 2; ++i) { - knot_rrset_t rr; - init_random_rr(&rr, apex); - int ret = changeset_add_addition(ch, &rr, 0); - (void)ret; - assert(ret == KNOT_EOK); - knot_rrset_clear(&rr, NULL); - } - - // Add RRs to remove section - for (size_t i = 0; i < size / 2; ++i) { - knot_rrset_t rr; - init_random_rr(&rr, apex); - int ret = changeset_add_removal(ch, &rr, 0); - (void)ret; - assert(ret == KNOT_EOK); - knot_rrset_clear(&rr, NULL); - } -} - -/*! \brief Compare two changesets for equality. */ -static bool changesets_eq(const changeset_t *ch1, changeset_t *ch2) -{ - if (changeset_size(ch1) != changeset_size(ch2)) { - return false; - } - - changeset_iter_t it1; - changeset_iter_all(&it1, ch1, true); - changeset_iter_t it2; - changeset_iter_all(&it2, ch2, true); - - knot_rrset_t rr1 = changeset_iter_next(&it1); - knot_rrset_t rr2 = changeset_iter_next(&it2); - bool ret = true; - while (!knot_rrset_empty(&rr1)) { - if (!knot_rrset_equal(&rr1, &rr2, KNOT_RRSET_COMPARE_WHOLE)) { - ret = false; - break; - } - rr1 = changeset_iter_next(&it1); - rr2 = changeset_iter_next(&it2); - } - - changeset_iter_clear(&it1); - changeset_iter_clear(&it2); - - return ret; -} - -/*! \brief Journal fillup test with size check. */ -static void test_fillup(journal_t *journal, size_t fsize, unsigned iter, size_t chunk_size) -{ - int ret = KNOT_EOK; - char *mptr = NULL; - char *large_entry = malloc(chunk_size); - randstr(large_entry, chunk_size); - assert(large_entry); - - unsigned i = 0; - bool read_passed = true; - for (; i < 2 * JOURNAL_NCOUNT; ++i) { - uint64_t chk_key = 0xBEBE + i; - size_t entry_len = chunk_size/2 + rand() % (chunk_size/2); - - /* Write */ - ret = journal_map(journal, chk_key, &mptr, entry_len, false); - if (ret != KNOT_EOK) { - break; - } - memcpy(mptr, large_entry, entry_len); - ret = journal_unmap(journal, chk_key, mptr, 1); - if (ret != KNOT_EOK) { - diag("journal_unmap = %s", knot_strerror(ret)); - read_passed = true; - break; - } - - /* Read */ - ret = journal_map(journal, chk_key, &mptr, entry_len, true); - if (ret == KNOT_EOK) { - ret = memcmp(large_entry, mptr, entry_len); - if (ret != 0) { - diag("integrity check failed"); - read_passed = false; - } else { - ret = journal_unmap(journal, chk_key, mptr, 0); - if (ret != KNOT_EOK) { - diag("journal_unmap(rdonly) = %s", knot_strerror(ret)); - read_passed = false; - } - } - } else { - diag("journal_map(rdonly) = %s", knot_strerror(ret)); - read_passed = false; - } - - if (!read_passed) { - break; - } - } - ok(read_passed, "journal: fillup #%u, reading written entries", iter); - ok(ret != KNOT_EOK, "journal: fillup #%u (%d entries)", iter, i); - free(large_entry); - - /* Check file size. */ - struct stat st; - fstat(journal->fd, &st); - ok(st.st_size < fsize + chunk_size, "journal: fillup / size check #%u", iter); - if (st.st_size > fsize + chunk_size) { - diag("journal: fillup / size check #%u fsize(%zu) > max(%zu)", - iter, (size_t)st.st_size, fsize + chunk_size); - } -} - -/*! \brief Test behavior with real changesets. */ -static void test_store_load(const char *jfilename) -{ - const size_t filesize = 100 * 1024; - uint8_t *apex = (uint8_t *)"\4test"; - - /* Create fake zone. */ - zone_t z = { .name = apex }; - - /* Save and load changeset. */ - changeset_t ch; - init_random_changeset(&ch, 0, 1, 128, apex); - int ret = journal_store_changeset(&ch, jfilename, filesize); - (void)ret; - ok(ret == KNOT_EOK, "journal: store changeset"); - list_t l; - init_list(&l); - ret = journal_load_changesets(jfilename, &z, &l, 0, 1); - ok(ret == KNOT_EOK && changesets_eq(TAIL(l), &ch), "journal: load changeset"); - changeset_clear(&ch); - changesets_free(&l); - init_list(&l); - - /* Fill the journal. */ - ret = KNOT_EOK; - uint32_t serial = 1; - for (; ret == KNOT_EOK; ++serial) { - init_random_changeset(&ch, serial, serial + 1, 128, apex); - ret = journal_store_changeset(&ch, jfilename, filesize); - changeset_clear(&ch); - } - ok(ret == KNOT_EBUSY, "journal: overfill with changesets"); - - /* Load all changesets stored until now. */ - serial--; - ret = journal_load_changesets(jfilename, &z, &l, 0, serial); - changesets_free(&l); - ok(ret == KNOT_EOK, "journal: load changesets"); - - /* Flush the journal. */ - ret = journal_mark_synced(jfilename); - ok(ret == KNOT_EOK, "journal: flush"); - - /* Store next changeset. */ - init_random_changeset(&ch, serial, serial + 1, 128, apex); - ret = journal_store_changeset(&ch, jfilename, filesize); - changeset_clear(&ch); - ok(ret == KNOT_EOK, "journal: store after flush"); - - /* Load all changesets, except the first one that got evicted. */ - init_list(&l); - ret = journal_load_changesets(jfilename, &z, &l, 1, serial + 1); - changesets_free(&l); - ok(ret == KNOT_EOK, "journal: load changesets after flush"); -} - -/*! \brief Test behavior when writing to jurnal and flushing it. */ -static void test_stress(const char *jfilename) -{ - uint8_t *apex = (uint8_t *)"\4test"; - const size_t filesize = 100 * 1024; - int ret = KNOT_EOK; - uint32_t serial = 0; - size_t update_size = 3; - for (; ret == KNOT_EOK && serial < 32; ++serial) { - changeset_t ch; - init_random_changeset(&ch, serial, serial + 1, update_size, apex); - update_size *= 1.5; - ret = journal_store_changeset(&ch, jfilename, filesize); - changeset_clear(&ch); - journal_mark_synced(jfilename); - } - ok(ret == KNOT_ESPACE, "journal: does not overfill under load"); -} - -int main(int argc, char *argv[]) -{ - plan_lazy(); - - /* Create tmpdir */ - size_t fsize = 10 * 1024 * 1024; - char *tmpdir = test_tmpdir(); - char jfilename[256]; - snprintf(jfilename, sizeof(jfilename), "%s/%s", tmpdir, "journal.XXXXXX"); - - /* Create tmpfile. */ - int tmp_fd = mkstemp(jfilename); - ok(tmp_fd >= 0, "journal: create temporary file"); - if (tmp_fd < 0) { - goto skip_all; - } - close(tmp_fd); - remove(jfilename); - - /* Try to open journal with too small fsize. */ - journal_t *journal = NULL; - int ret = journal_open(&journal, jfilename, 1024); - ok(ret != KNOT_EOK, "journal: open too small"); - - /* Open/create new journal. */ - ret = journal_open(&journal, jfilename, fsize); - ok(ret == KNOT_EOK, "journal: open journal '%s'", jfilename); - if (ret != KNOT_EOK) { - goto skip_all; - } - - /* Write entry and check integrity. */ - char *mptr = NULL; - uint64_t chk_key = 0; - char chk_buf[64] = {'\0'}; - randstr(chk_buf, sizeof(chk_buf)); - ret = journal_map(journal, chk_key, &mptr, sizeof(chk_buf), false); - is_int(KNOT_EOK, ret, "journal: write data (map)"); - if (ret == KNOT_EOK) { - memcpy(mptr, chk_buf, sizeof(chk_buf)); - ret = journal_unmap(journal, chk_key, mptr, 1); - is_int(KNOT_EOK, ret, "journal: write data (unmap)"); - } - - ret = journal_map(journal, chk_key, &mptr, sizeof(chk_buf), true); - is_int(KNOT_EOK, ret, "journal: data integrity check (map)"); - if (ret == KNOT_EOK) { - ret = memcmp(chk_buf, mptr, sizeof(chk_buf)); - is_int(0, ret, "journal: data integrity check (cmp)"); - ret = journal_unmap(journal, chk_key, mptr, 0); - is_int(KNOT_EOK, ret, "journal: data integrity check (unmap)"); - } - - /* Reopen log and re-read value. */ - journal_close(journal); - ret = journal_open(&journal, jfilename, fsize); - ok(ret == KNOT_EOK, "journal: open journal '%s'", jfilename); - - ret = journal_map(journal, chk_key, &mptr, sizeof(chk_buf), true); - if (ret == KNOT_EOK) { - ret = memcmp(chk_buf, mptr, sizeof(chk_buf)); - journal_unmap(journal, chk_key, mptr, 0); - } - is_int(KNOT_EOK, ret, "journal: data integrity check after close/open"); - - /* Write random data. */ - ret = KNOT_EOK; - for (int i = 0; i < 512; ++i) { - chk_key = 0xDEAD0000 + i; - ret = journal_map(journal, chk_key, &mptr, sizeof(chk_buf), false); - if (ret != KNOT_EOK) { - diag("journal_map failed: %s", knot_strerror(ret)); - break; - } - randstr(mptr, sizeof(chk_buf)); - if ((ret = journal_unmap(journal, chk_key, mptr, 1)) != KNOT_EOK) { - diag("journal_unmap failed: %s", knot_strerror(ret)); - break; - } - } - is_int(KNOT_EOK, ret, "journal: sustained mmap r/w"); - - /* Overfill (yields ESPACE/EBUSY) */ - ret = journal_map(journal, chk_key, &mptr, fsize, false); - ok(ret != KNOT_EOK, "journal: overfill"); - - /* Fillup */ - size_t sizes[] = {16, 64, 1024, 4096, 512 * 1024, 1024 * 1024 }; - const int num_sizes = sizeof(sizes)/sizeof(size_t); - for (unsigned i = 0; i < 2 * num_sizes; ++i) { - /* Journal flush. */ - journal_close(journal); - ret = journal_mark_synced(jfilename); - is_int(KNOT_EOK, ret, "journal: flush after fillup #%u", i); - ret = journal_open(&journal, jfilename, fsize); - ok(ret == KNOT_EOK, "journal: reopen after flush #%u", i); - /* Journal fillup. */ - if (journal) { - test_fillup(journal, fsize, i, sizes[i % num_sizes]); - } - } - - /* Close journal. */ - journal_close(journal); - - /* Delete journal. */ - remove(jfilename); - - test_store_load(jfilename); - remove(jfilename); - - test_stress(jfilename); - remove(jfilename); - - free(tmpdir); - -skip_all: - return 0; -} diff --git a/tests/libknot/test_edns_ecs.c b/tests/libknot/test_edns_ecs.c index 27e6c9af6ce52cc8743bba3c1d207e158aea6d35..b17a9c4f37fd1264883e8d2b2a93287c4347b56f 100644 --- a/tests/libknot/test_edns_ecs.c +++ b/tests/libknot/test_edns_ecs.c @@ -159,6 +159,7 @@ static struct sockaddr_storage addr_init(const char *addr) struct addrinfo hints = { .ai_flags = AI_NUMERICHOST }; struct addrinfo *info = NULL; int r = getaddrinfo(addr, NULL, &hints, &info); + (void)r; assert(r == 0); memcpy(&sa, info->ai_addr, info->ai_addrlen); freeaddrinfo(info); diff --git a/tests/modules/online_sign.c b/tests/modules/test_online_sign.c similarity index 100% rename from tests/modules/online_sign.c rename to tests/modules/test_online_sign.c diff --git a/tests/rrl.c b/tests/modules/test_rrl.c similarity index 91% rename from tests/rrl.c rename to tests/modules/test_rrl.c index e96d7b9504fec7cca14f0e69b891678300621ff0..c128d51e186fc53970241c8eaeaf4366cdaa459e 100644 --- a/tests/rrl.c +++ b/tests/modules/test_rrl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -14,17 +14,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <sys/types.h> -#include <sys/socket.h> #include <tap/basic.h> #include "dnssec/crypto.h" #include "dnssec/random.h" -#include "knot/conf/conf.h" -#include "knot/server/rrl.h" -#include "knot/zone/zone.h" -#include "libknot/descriptor.h" +#include "libknot/libknot.h" #include "contrib/sockaddr.h" +#include "knot/modules/rrl/functions.h" /* Enable time-dependent tests. */ //#define ENABLE_TIMED_TESTS @@ -50,12 +46,12 @@ struct runnable_data { rrl_table_t *rrl; struct sockaddr_storage *addr; rrl_req_t *rq; - zone_t *zone; + knot_dname_t *zone; }; static void* rrl_runnable(void *arg) { - struct runnable_data* d = (struct runnable_data*)arg; + struct runnable_data *d = (struct runnable_data *)arg; struct sockaddr_storage addr; memcpy(&addr, d->addr, sizeof(struct sockaddr_storage)); int lock = -1; @@ -143,9 +139,7 @@ int main(int argc, char *argv[]) is_int(KNOT_EOK, ret, "rrl: setlocks"); /* 4. N unlimited requests. */ - knot_dname_t *zone_name = knot_dname_from_str_alloc("rrl."); - zone_t *zone = zone_new(zone_name); - knot_dname_free(&zone_name, NULL); + knot_dname_t *zone = knot_dname_from_str_alloc("rrl."); struct sockaddr_storage addr; struct sockaddr_storage addr6; @@ -199,7 +193,7 @@ int main(int argc, char *argv[]) ok(rd.passed, "rrl: hashtable is ~ consistent"); #endif - zone_free(&zone); + knot_dname_free(&zone, NULL); knot_pkt_free(&query); rrl_destroy(rrl); dnssec_crypto_cleanup(); diff --git a/tests/semantic_check_data/Makefile.inc b/tests/semantic_check_data/Makefile.inc index 2953ff3d5e787e3bc2f375085779368df422ea0e..6e28f651f1d719373e1add872359b433e32d0e19 100644 --- a/tests/semantic_check_data/Makefile.inc +++ b/tests/semantic_check_data/Makefile.inc @@ -1,5 +1,5 @@ check_SCRIPTS = \ - semantic_check + test_semantic_check CLEANFILES += $(check_SCRIPTS) @@ -7,10 +7,10 @@ edit = $(SED) \ -e 's|@top_srcdir[@]|$(abs_top_srcdir)|g' \ -e 's|@top_builddir[@]|$(abs_top_builddir)|g' -semantic_check: $(top_srcdir)/tests/semantic_check.in - $(edit) < $(top_srcdir)/tests/semantic_check.in > $(top_builddir)/tests/semantic_check - chmod +x $(top_builddir)/tests/semantic_check +test_semantic_check: $(top_srcdir)/tests/test_semantic_check.in + $(edit) < $(top_srcdir)/tests/test_semantic_check.in > $(top_builddir)/tests/test_semantic_check + chmod +x $(top_builddir)/tests/test_semantic_check EXTRA_DIST = \ - semantic_check.in \ + test_semantic_check.in \ semantic_check_data diff --git a/tests/acl.c b/tests/test_acl.c similarity index 100% rename from tests/acl.c rename to tests/test_acl.c diff --git a/tests/changeset.c b/tests/test_changeset.c similarity index 97% rename from tests/changeset.c rename to tests/test_changeset.c index 210d78e00a15b3df2e25468a9f0144308d4e449d..aa32fe9f47fe13991a0dfd1228d2d4e1787bce6d 100644 --- a/tests/changeset.c +++ b/tests/test_changeset.c @@ -80,7 +80,7 @@ int main(int argc, char *argv[]) // Test add traversal. changeset_iter_t it; - ret = changeset_iter_add(&it, ch, true); + ret = changeset_iter_add(&it, ch); ok(ret == KNOT_EOK, "changeset: create iter add"); // Order: non.terminals.test. TXT, SPF, here.come.more.non.terminals.test. TXT. knot_rrset_t iter = changeset_iter_next(&it); @@ -100,7 +100,7 @@ int main(int argc, char *argv[]) changeset_add_removal(ch, apex_txt_rr, CHANGESET_CHECK); // Test remove traversal. - ret = changeset_iter_rem(&it, ch, false); + ret = changeset_iter_rem(&it, ch); ok(ret == KNOT_EOK, "changeset: create iter rem"); iter = changeset_iter_next(&it); ok(knot_rrset_equal(&iter, apex_txt_rr, KNOT_RRSET_COMPARE_WHOLE), @@ -108,7 +108,7 @@ int main(int argc, char *argv[]) changeset_iter_clear(&it); // Test all traversal - just count. - ret = changeset_iter_all(&it, ch, false); + ret = changeset_iter_all(&it, ch); ok(ret == KNOT_EOK, "changest: create iter all"); size_t size = 0; iter = changeset_iter_next(&it); diff --git a/tests/conf.c b/tests/test_conf.c similarity index 57% rename from tests/conf.c rename to tests/test_conf.c index ea1a8c692a6e91dc90949bc38d7d9058996a8e13..60fa074437f6b3eff1b0282cf4d6860a12e26236 100644 --- a/tests/conf.c +++ b/tests/test_conf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -19,11 +19,11 @@ #include "knot/conf/conf.c" #include "test_conf.h" -#define ZONE1 "0/25.2.0.192.in-addr.arpa." -#define ZONE2 "." -#define ZONE3 "x." -#define ZONE4 "abc.ab.a." -#define ZONEX "unknown." +#define ZONE_ARPA "0/25.2.0.192.in-addr.arpa." +#define ZONE_ROOT "." +#define ZONE_1LABEL "x." +#define ZONE_3LABEL "abc.ab.a." +#define ZONE_UNKNOWN "unknown." static void check_name(const char *zone, const char *name, const char *ref) { @@ -50,11 +50,19 @@ static void check_name_err(const char *zone, const char *name) static void test_get_filename(void) { + // Name formatter. + char *zone = "abc"; + check_name(zone, "/%s", "/abc"); + + zone = "."; + check_name(zone, "/%s", "/"); + // Char formatter. - char *zone = "abc.def.gh"; + zone = "abc.def.g"; check_name(zone, "/%c[0]", "/a"); - check_name(zone, "/%c[9]", "/h"); check_name(zone, "/%c[3]", "/."); + check_name(zone, "/%c[8]", "/g"); + check_name(zone, "/%c[9]", "/."); check_name(zone, "/%c[0-1]", "/ab"); check_name(zone, "/%c[1-1]", "/b"); check_name(zone, "/%c[1-3]", "/bc."); @@ -64,21 +72,21 @@ static void test_get_filename(void) check_name_err(zone, "/%c[a]"); check_name_err(zone, "/%c[:]"); check_name_err(zone, "/%c[/]"); - check_name_err(zone, "/%c[12]"); + check_name_err(zone, "/%c[10]"); check_name_err(zone, "/%c["); check_name_err(zone, "/%c[1"); check_name_err(zone, "/%c[1-"); check_name_err(zone, "/%c[1-2"); check_name_err(zone, "/%c[1-b]"); - check_name_err(zone, "/%c[9-0]"); + check_name_err(zone, "/%c[8-0]"); zone = "abcd"; - check_name(zone, "/%c[2-9]", "/cd"); + check_name(zone, "/%c[2-9]", "/cd."); check_name(zone, "/%c[3]", "/d"); - check_name(zone, "/%c[4]", "/"); + check_name(zone, "/%c[4]", "/."); zone = "."; - check_name(zone, "/%c[0]", "/"); + check_name(zone, "/%c[0]", "/."); check_name(zone, "/%c[1]", "/"); // Label formatter. @@ -91,7 +99,7 @@ static void test_get_filename(void) check_name_err(zone, "/%l[0-1]"); zone = "."; - check_name(zone, "/%l[0]", "/."); + check_name(zone, "/%l[0]", "/"); check_name(zone, "/%l[1]", "/"); } @@ -100,16 +108,16 @@ static void test_conf_zonefile(void) int ret; char *file; - knot_dname_t *zone1 = knot_dname_from_str_alloc(ZONE1); - ok(zone1 != NULL, "create dname "ZONE1); - knot_dname_t *zone2 = knot_dname_from_str_alloc(ZONE2); - ok(zone2 != NULL, "create dname "ZONE2); - knot_dname_t *zone3 = knot_dname_from_str_alloc(ZONE3); - ok(zone3 != NULL, "create dname "ZONE3); - knot_dname_t *zone4 = knot_dname_from_str_alloc(ZONE4); - ok(zone4 != NULL, "create dname "ZONE4); - knot_dname_t *zonex = knot_dname_from_str_alloc(ZONEX); - ok(zonex != NULL, "create dname "ZONEX); + knot_dname_t *zone_arpa = knot_dname_from_str_alloc(ZONE_ARPA); + ok(zone_arpa != NULL, "create dname "ZONE_ARPA); + knot_dname_t *zone_root = knot_dname_from_str_alloc(ZONE_ROOT); + ok(zone_root != NULL, "create dname "ZONE_ROOT); + knot_dname_t *zone_1label = knot_dname_from_str_alloc(ZONE_1LABEL); + ok(zone_1label != NULL, "create dname "ZONE_1LABEL); + knot_dname_t *zone_3label = knot_dname_from_str_alloc(ZONE_3LABEL); + ok(zone_3label != NULL, "create dname "ZONE_3LABEL); + knot_dname_t *zone_unknown = knot_dname_from_str_alloc(ZONE_UNKNOWN); + ok(zone_unknown != NULL, "create dname "ZONE_UNKNOWN); const char *conf_str = "template:\n" @@ -117,68 +125,68 @@ static void test_conf_zonefile(void) " storage: /tmp\n" "\n" "zone:\n" - " - domain: "ZONE1"\n" + " - domain: "ZONE_ARPA"\n" " file: dir/a%%b/%s.suffix/%a\n" - " - domain: "ZONE2"\n" + " - domain: "ZONE_ROOT"\n" " file: /%s\n" - " - domain: "ZONE3"\n" + " - domain: "ZONE_1LABEL"\n" " file: /%s\n" - " - domain: "ZONE4"\n"; + " - domain: "ZONE_3LABEL"\n"; ret = test_conf(conf_str, NULL); ok(ret == KNOT_EOK, "Prepare configuration"); // Relative path with formatters. - file = conf_zonefile(conf(), zone1); - ok(file != NULL, "Get zonefile path for "ZONE1); + file = conf_zonefile(conf(), zone_arpa); + ok(file != NULL, "Get zonefile path for "ZONE_ARPA); if (file != NULL) { ok(strcmp(file, "/tmp/dir/a%b/0_25.2.0.192.in-addr.arpa.suffix/") == 0, - "Zonefile path compare for "ZONE1); + "Zonefile path compare for "ZONE_ARPA); free(file); } // Absolute path without formatters - root zone. - file = conf_zonefile(conf(), zone2); - ok(file != NULL, "Get zonefile path for "ZONE2); + file = conf_zonefile(conf(), zone_root); + ok(file != NULL, "Get zonefile path for "ZONE_ROOT); if (file != NULL) { - ok(strcmp(file, "/.") == 0, - "Zonefile path compare for "ZONE2); + ok(strcmp(file, "/") == 0, + "Zonefile path compare for "ZONE_ROOT); free(file); } - // Absolute path without formatters. - file = conf_zonefile(conf(), zone3); - ok(file != NULL, "Get zonefile path for "ZONE3); + // Absolute path without formatters - non-root zone. + file = conf_zonefile(conf(), zone_1label); + ok(file != NULL, "Get zonefile path for "ZONE_1LABEL); if (file != NULL) { ok(strcmp(file, "/x") == 0, - "Zonefile path compare for "ZONE3); + "Zonefile path compare for "ZONE_1LABEL); free(file); } // Default zonefile path. - file = conf_zonefile(conf(), zone4); - ok(file != NULL, "Get zonefile path for "ZONE4); + file = conf_zonefile(conf(), zone_3label); + ok(file != NULL, "Get zonefile path for "ZONE_3LABEL); if (file != NULL) { - ok(strcmp(file, "/tmp/"ZONE4"zone") == 0, - "Zonefile path compare for "ZONE4); + ok(strcmp(file, "/tmp/abc.ab.a.zone") == 0, + "Zonefile path compare for "ZONE_3LABEL); free(file); } // Unknown zone zonefile path. - file = conf_zonefile(conf(), zonex); - ok(file != NULL, "Get zonefile path for "ZONEX); + file = conf_zonefile(conf(), zone_unknown); + ok(file != NULL, "Get zonefile path for "ZONE_UNKNOWN); if (file != NULL) { - ok(strcmp(file, "/tmp/"ZONEX"zone") == 0, - "Zonefile path compare for "ZONEX); + ok(strcmp(file, "/tmp/unknown.zone") == 0, + "Zonefile path compare for "ZONE_UNKNOWN); free(file); } conf_free(conf()); - knot_dname_free(&zone1, NULL); - knot_dname_free(&zone2, NULL); - knot_dname_free(&zone3, NULL); - knot_dname_free(&zone4, NULL); - knot_dname_free(&zonex, NULL); + knot_dname_free(&zone_arpa, NULL); + knot_dname_free(&zone_root, NULL); + knot_dname_free(&zone_1label, NULL); + knot_dname_free(&zone_3label, NULL); + knot_dname_free(&zone_unknown, NULL); } int main(int argc, char *argv[]) diff --git a/tests/test_conf.h b/tests/test_conf.h index a890ad3c1af2522633de340430b40a48cfcfea82..739567a1b7514d70eaae3e9113c2588560c47884 100644 --- a/tests/test_conf.h +++ b/tests/test_conf.h @@ -39,7 +39,7 @@ static inline int test_conf(const char *conf_str, const yp_item_t *scheme) return ret; } - conf_update(new_conf); + conf_update(new_conf, CONF_UPD_FNONE); return KNOT_EOK; } diff --git a/tests/conf_tools.c b/tests/test_conf_tools.c similarity index 98% rename from tests/conf_tools.c rename to tests/test_conf_tools.c index e3e450835948802cbe0841ca3bc387e08b9825da..a9f617ae41361f109aca8cbbc0941526b7bd2635 100644 --- a/tests/conf_tools.c +++ b/tests/test_conf_tools.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -140,7 +140,7 @@ int main(int argc, char *argv[]) /* Module id tests. */ mod_id_test("module/id", "\x06moduleid"); - mod_id_bad_test("module", KNOT_EINVAL); + mod_id_test("module", "\x06module"); mod_id_bad_test("module/", KNOT_EINVAL); mod_id_bad_test("/", KNOT_EINVAL); mod_id_bad_test("/id", KNOT_EINVAL); diff --git a/tests/confdb.c b/tests/test_confdb.c similarity index 99% rename from tests/confdb.c rename to tests/test_confdb.c index ae1dee64ef1e951d7e236b4831073139de1b52c6..5341229b14c679f8e6385c843b504d3f7ca2e73f 100644 --- a/tests/confdb.c +++ b/tests/test_confdb.c @@ -126,6 +126,7 @@ static void check_set( } uint8_t section_code, item_code; + section_code = 0, item_code = 0; // prevents Wuninitialized ok(db_code(conf, txn, KEY0_ROOT, key0, DB_GET, §ion_code) == KNOT_EOK, "Get DB section code"); if (key1 != NULL) { @@ -418,6 +419,7 @@ static void test_conf_db_iter(conf_t *conf, knot_db_txn_t *txn) while (ret == KNOT_EOK) { const uint8_t *id; size_t id_len; + id = NULL, id_len = 0; // prevents Wuinitialized ret = conf_db_iter_id(conf, &iter, &id, &id_len); ok(ret == KNOT_EOK, "Get iteration id"); ok(id_len == strlen(names[count]), "Compare iteration id length"); diff --git a/tests/confio.c b/tests/test_confio.c similarity index 93% rename from tests/confio.c rename to tests/test_confio.c index 7df2f61ba89e5702d9f9f3c44272f5346005d8e1..e4f0b8e4cfb4bbbdaf4f1153fae126431f4fe9d1 100644 --- a/tests/confio.c +++ b/tests/test_confio.c @@ -207,19 +207,17 @@ static void test_conf_io_abort(void) #if defined(__OpenBSD__) SKIP_OPENBSD #else - conf_io_t io = { NULL }; - // Test child persistence after subchild abort. ok(conf_io_begin(false) == KNOT_EOK, "begin parent txn"); char idx[2] = { '0' }; - ok(conf_io_set("server", "version", NULL, idx, &io) == + ok(conf_io_set("server", "version", NULL, idx) == KNOT_EOK, "set single value '%s'", idx); for (int i = 1; i < CONF_MAX_TXN_DEPTH; i++) { char idx[2] = { '0' + i }; ok(conf_io_begin(true) == KNOT_EOK, "begin child txn %s", idx); - ok(conf_io_set("server", "version", NULL, idx, &io) == + ok(conf_io_set("server", "version", NULL, idx) == KNOT_EOK, "set single value '%s'", idx); } @@ -239,7 +237,7 @@ static void test_conf_io_abort(void) ok(conf_io_begin(false) == KNOT_EOK, "begin new parent txn"); ok(conf_io_begin(true) == KNOT_EOK, "begin child txn"); ok(conf_io_begin(true) == KNOT_EOK, "begin subchild txn"); - ok(conf_io_set("server", "version", NULL, "text", &io) == + ok(conf_io_set("server", "version", NULL, "text") == KNOT_EOK, "set single value"); ok(conf_io_commit(true) == KNOT_EOK, "commit subchild txn"); conf_val_t val = conf_get_txn(conf(), conf()->io.txn, C_SERVER, C_VERSION); @@ -265,19 +263,17 @@ static void test_conf_io_commit(void) #if defined(__OpenBSD__) SKIP_OPENBSD #else - conf_io_t io = { NULL }; - // Test subchild persistence after commit. ok(conf_io_begin(false) == KNOT_EOK, "begin parent txn"); char idx[2] = { '0' }; - ok(conf_io_set("server", "version", NULL, idx, &io) == + ok(conf_io_set("server", "version", NULL, idx) == KNOT_EOK, "set single value '%s'", idx); for (int i = 1; i < CONF_MAX_TXN_DEPTH; i++) { char idx[2] = { '0' + i }; ok(conf_io_begin(true) == KNOT_EOK, "begin child txn %s", idx); - ok(conf_io_set("server", "version", NULL, idx, &io) == + ok(conf_io_set("server", "version", NULL, idx) == KNOT_EOK, "set single value '%s'", idx); } @@ -319,22 +315,22 @@ static void test_conf_io_check(void) ok(conf_io_begin(false) == KNOT_EOK, "begin txn"); // Section check. - ok(conf_io_set("remote", "id", NULL, "remote1", &io) == + ok(conf_io_set("remote", "id", NULL, "remote1") == KNOT_EOK, "set remote id"); ok(conf_io_check(&io) == KNOT_EINVAL, "check missing remote address"); ok(io.error.code == KNOT_EINVAL, "compare error code"); - ok(conf_io_set("remote", "address", "remote1", "1.1.1.1", &io) == + ok(conf_io_set("remote", "address", "remote1", "1.1.1.1") == KNOT_EOK, "set remote address"); ok(conf_io_check(&io) == KNOT_EOK, "check remote address"); ok(io.error.code == KNOT_EOK, "compare error code"); // Item check. - ok(conf_io_set("zone", "domain", NULL, ZONE1, &io) == + ok(conf_io_set("zone", "domain", NULL, ZONE1) == KNOT_EOK, "set zone domain "ZONE1); - ok(conf_io_set("zone", "master", ZONE1, "remote1", &io) == + ok(conf_io_set("zone", "master", ZONE1, "remote1") == KNOT_EOK, "set zone master"); ok(conf_io_check(&io) == @@ -352,45 +348,41 @@ static void test_conf_io_check(void) static void test_conf_io_set(void) { - conf_io_t io = { NULL }; - // ERR no txn. - ok(conf_io_set("server", "version", NULL, "text", &io) == + ok(conf_io_set("server", "version", NULL, "text") == KNOT_TXN_ENOTEXISTS, "set without active txn"); ok(conf_io_begin(false) == KNOT_EOK, "begin txn"); // ERR. - ok(conf_io_set(NULL, NULL, NULL, NULL, &io) == + ok(conf_io_set(NULL, NULL, NULL, NULL) == KNOT_EINVAL, "set NULL key0"); - ok(conf_io_set("", NULL, NULL, NULL, &io) == + ok(conf_io_set("", NULL, NULL, NULL) == KNOT_YP_EINVAL_ITEM, "set empty key0"); - ok(conf_io_set("uknown", NULL, NULL, NULL, &io) == + ok(conf_io_set("uknown", NULL, NULL, NULL) == KNOT_YP_EINVAL_ITEM, "set unknown key0"); - ok(conf_io_set("server", "unknown", NULL, NULL, &io) == + ok(conf_io_set("server", "unknown", NULL, NULL) == KNOT_YP_EINVAL_ITEM, "set unknown key1"); - ok(conf_io_set("include", NULL, NULL, NULL, &io) == + ok(conf_io_set("include", NULL, NULL, NULL) == KNOT_YP_ENODATA, "set non-group without data"); - ok(conf_io_set("server", "rate-limit", NULL, "x", &io) == + ok(conf_io_set("server", "background-workers", NULL, "x") == KNOT_EINVAL, "set invalid data"); // ERR callback - ok(io.error.code == KNOT_EOK, "io error check before"); - ok(conf_io_set("include", NULL, NULL, "invalid", &io) == + ok(conf_io_set("include", NULL, NULL, "invalid") == KNOT_EFILE, "set invalid callback value"); - ok(io.error.code == KNOT_EFILE, "io error check after"); // Single group, single value. - ok(conf_io_set("server", "version", NULL, "text", &io) == + ok(conf_io_set("server", "version", NULL, "text") == KNOT_EOK, "set single value"); conf_val_t val = conf_get_txn(conf(), conf()->io.txn, C_SERVER, C_VERSION); ok(val.code == KNOT_EOK, "check entry"); ok(strcmp(conf_str(&val), "text") == 0, "check entry value"); // Single group, multi value. - ok(conf_io_set("server", "listen", NULL, "1.1.1.1", &io) == + ok(conf_io_set("server", "listen", NULL, "1.1.1.1") == KNOT_EOK, "set multivalue 1"); - ok(conf_io_set("server", "listen", NULL, "1.1.1.2", &io) == + ok(conf_io_set("server", "listen", NULL, "1.1.1.2") == KNOT_EOK, "set multivalue 2"); val = conf_get_txn(conf(), conf()->io.txn, C_SERVER, C_LISTEN); ok(val.code == KNOT_EOK, "check entry"); @@ -405,24 +397,24 @@ static void test_conf_io_set(void) ok(zone3 != NULL, "create dname "ZONE3); // Multi group ids. - ok(conf_io_set("zone", "domain", NULL, ZONE1, &io) == + ok(conf_io_set("zone", "domain", NULL, ZONE1) == KNOT_EOK, "set zone domain "ZONE1); - ok(conf_io_set("zone", NULL, ZONE2, NULL, &io) == + ok(conf_io_set("zone", NULL, ZONE2, NULL) == KNOT_EOK, "set zone domain "ZONE2); // Multi group, single value. - ok(conf_io_set("zone", "file", ZONE1, "name", &io) == + ok(conf_io_set("zone", "file", ZONE1, "name") == KNOT_EOK, "set zone file"); val = conf_zone_get_txn(conf(), conf()->io.txn, C_FILE, zone1); ok(val.code == KNOT_EOK, "check entry"); ok(strcmp(conf_str(&val), "name") == 0, "check entry value"); // Multi group, single value, bad id. - ok(conf_io_set("zone", "file", ZONE3, "name", &io) == + ok(conf_io_set("zone", "file", ZONE3, "name") == KNOT_YP_EINVAL_ID, "set zone file"); // Multi group, single value, all ids. - ok(conf_io_set("zone", "comment", NULL, "abc", &io) == + ok(conf_io_set("zone", "comment", NULL, "abc") == KNOT_EOK, "set zones comment"); val = conf_zone_get_txn(conf(), conf()->io.txn, C_COMMENT, zone1); ok(val.code == KNOT_EOK, "check entry"); @@ -432,9 +424,9 @@ static void test_conf_io_set(void) ok(strcmp(conf_str(&val), "abc") == 0, "check entry value"); // Prepare different comment. - ok(conf_io_set("zone", "domain", NULL, ZONE3, &io) == + ok(conf_io_set("zone", "domain", NULL, ZONE3) == KNOT_EOK, "set zone domain "ZONE3); - ok(conf_io_set("zone", "comment", ZONE3, "xyz", &io) == + ok(conf_io_set("zone", "comment", ZONE3, "xyz") == KNOT_EOK, "set zone comment"); val = conf_zone_get_txn(conf(), conf()->io.txn, C_COMMENT, zone3); ok(val.code == KNOT_EOK, "check entry"); @@ -467,7 +459,7 @@ static void test_conf_io_unset(void) KNOT_YP_EINVAL_ITEM, "unset unknown key1"); ok(conf_io_unset("include", NULL, NULL, "file") == KNOT_ENOTSUP, "unset non-group item"); - ok(conf_io_unset("server", "rate-limit", NULL, "x") == + ok(conf_io_unset("server", "background-workers", NULL, "x") == KNOT_EINVAL, "unset invalid data"); // Single group, single value. @@ -667,7 +659,7 @@ static void test_conf_io_get(void) KNOT_ENOTSUP, "get non-group item"); // Update item in the active txn. - ok(conf_io_set("server", "version", NULL, "new text", &io) == + ok(conf_io_set("server", "version", NULL, "new text") == KNOT_EOK, "set single value"); // Get new, active txn. @@ -793,7 +785,7 @@ static void test_conf_io_diff(void) ok(strcmp(ref, out) == 0, "compare result"); // Update singlevalued item. - ok(conf_io_set("server", "version", NULL, "new text", &io) == + ok(conf_io_set("server", "version", NULL, "new text") == KNOT_EOK, "set single value"); *out = '\0'; @@ -805,7 +797,7 @@ static void test_conf_io_diff(void) // Update multivalued item. ok(conf_io_unset("server", "listen", NULL, "1.1.1.1") == KNOT_EOK, "unset multivalue"); - ok(conf_io_set("server", "listen", NULL, "1.1.1.3", &io) == + ok(conf_io_set("server", "listen", NULL, "1.1.1.3") == KNOT_EOK, "set multivalue"); *out = '\0'; @@ -893,7 +885,7 @@ static void test_conf_io_list(void) ok(conf_io_list("server", &io) == KNOT_EOK, "list group"); ref = "server.version\n" - "server.rate-limit\n" + "server.background-workers\n" "server.listen\n" "server.tcp-handshake-timeout\n" "server.tcp-idle-timeout\n" @@ -901,14 +893,13 @@ static void test_conf_io_list(void) "server.max-tcp-clients\n" "server.max-udp-payload\n" "server.max-ipv4-udp-payload\n" - "server.max-ipv6-udp-payload\n" - "server.rate-limit-slip"; + "server.max-ipv6-udp-payload"; ok(strcmp(ref, out) == 0, "compare result"); } static const yp_item_t desc_server[] = { { C_VERSION, YP_TSTR, YP_VNONE }, - { C_RATE_LIMIT, YP_TINT, YP_VNONE }, + { C_BG_WORKERS, YP_TINT, YP_VNONE }, { C_LISTEN, YP_TADDR, YP_VNONE, YP_FMULTI }, // Required config cache items - assert fix. { C_TCP_HSHAKE_TIMEOUT, YP_TINT, YP_VNONE }, @@ -918,7 +909,6 @@ static const yp_item_t desc_server[] = { { C_MAX_UDP_PAYLOAD, YP_TINT, YP_VNONE }, { C_MAX_IPV4_UDP_PAYLOAD, YP_TINT, YP_VNONE }, { C_MAX_IPV6_UDP_PAYLOAD, YP_TINT, YP_VNONE }, - { C_RATE_LIMIT_SLIP, YP_TINT, YP_VNONE }, { NULL } }; diff --git a/tests/dthreads.c b/tests/test_dthreads.c similarity index 100% rename from tests/dthreads.c rename to tests/test_dthreads.c diff --git a/tests/fdset.c b/tests/test_fdset.c similarity index 100% rename from tests/fdset.c rename to tests/test_fdset.c diff --git a/tests/test_journal.c b/tests/test_journal.c new file mode 100644 index 0000000000000000000000000000000000000000..a5ddd87791da3e96f5b1f02fd76959a1a68af229 --- /dev/null +++ b/tests/test_journal.c @@ -0,0 +1,705 @@ +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> + + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <assert.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <limits.h> +#include <unistd.h> +#include <sys/stat.h> +#include <tap/basic.h> +#include <tap/files.h> + +#include "libknot/libknot.h" +#include "knot/journal/journal.c" +#include "knot/zone/zone.h" +#include "knot/zone/zone-diff.h" +#include "libknot/rrtype/soa.h" +#include "test_conf.h" + +#define RAND_RR_LABEL 16 +#define RAND_RR_PAYLOAD 64 +#define MIN_SOA_SIZE 22 + +char *test_dir_name; +journal_db_t *db; +journal_t *j; +const knot_dname_t *apex = (const uint8_t *)"\4test"; + +static void set_conf(int zonefile_sync, size_t journal_usage) +{ + char conf_str[512]; + snprintf(conf_str, sizeof(conf_str), + "zone:\n" + " - domain: %s\n" + " zonefile-sync: %d\n" + " max-journal-usage: %zu\n" + " max-journal-depth: 1000\n", + (const char *)(apex + 1), zonefile_sync, journal_usage); + int ret = test_conf(conf_str, NULL); + (void)ret; + assert(ret == KNOT_EOK); +} + +static void unset_conf(void) +{ + conf_update(NULL, CONF_UPD_FNONE); +} + +/*! \brief Generate random string with given length. */ +static int randstr(char* dst, size_t len) +{ + for (int i = 0; i < len - 1; ++i) { + dst[i] = '0' + (int) (('Z'-'0') * (rand() / (RAND_MAX + 1.0))); + } + dst[len - 1] = '\0'; + + return 0; +} + +/*! \brief Init RRSet with type SOA and given serial. */ +static void init_soa(knot_rrset_t *rr, const uint32_t serial, const knot_dname_t *apex) +{ + knot_rrset_init(rr, knot_dname_copy(apex, NULL), KNOT_RRTYPE_SOA, KNOT_CLASS_IN); + + uint8_t soa_data[MIN_SOA_SIZE] = { 0 }; + int ret = knot_rrset_add_rdata(rr, soa_data, sizeof(soa_data), 3600, NULL); + knot_soa_serial_set(&rr->rrs, serial); + (void)ret; + assert(ret == KNOT_EOK); +} + +/*! \brief Init RRSet with type TXT, random owner and random payload. */ +static void init_random_rr(knot_rrset_t *rr , const knot_dname_t *apex) +{ + /* Create random label. */ + char owner[RAND_RR_LABEL + knot_dname_size(apex)]; + owner[0] = RAND_RR_LABEL - 1; + randstr(owner + 1, RAND_RR_LABEL); + + /* Append zone apex. */ + memcpy(owner + RAND_RR_LABEL, apex, knot_dname_size(apex)); + knot_rrset_init(rr, knot_dname_copy((knot_dname_t *)owner, NULL), + KNOT_RRTYPE_TXT, KNOT_CLASS_IN); + + /* Create random RDATA. */ + uint8_t txt[RAND_RR_PAYLOAD + 1]; + txt[0] = RAND_RR_PAYLOAD - 1; + randstr((char *)(txt + 1), RAND_RR_PAYLOAD); + + int ret = knot_rrset_add_rdata(rr, txt, RAND_RR_PAYLOAD, 3600, NULL); + (void)ret; + assert(ret == KNOT_EOK); +} + +/*! \brief Init changeset with random changes. */ +static void init_random_changeset(changeset_t *ch, const uint32_t from, const uint32_t to, + const size_t size, const knot_dname_t *apex) +{ + // Add SOAs + knot_rrset_t soa; + init_soa(&soa, from, apex); + + ch->soa_from = knot_rrset_copy(&soa, NULL); + assert(ch->soa_from); + knot_rrset_clear(&soa, NULL); + + init_soa(&soa, to, apex); + ch->soa_to = knot_rrset_copy(&soa, NULL); + assert(ch->soa_to); + knot_rrset_clear(&soa, NULL); + + // Add RRs to add section + for (size_t i = 0; i < size / 2; ++i) { + knot_rrset_t rr; + init_random_rr(&rr, apex); + int ret = changeset_add_addition(ch, &rr, 0); + (void)ret; + assert(ret == KNOT_EOK); + knot_rrset_clear(&rr, NULL); + } + + // Add RRs to remove section + for (size_t i = 0; i < size / 2; ++i) { + knot_rrset_t rr; + init_random_rr(&rr, apex); + int ret = changeset_add_removal(ch, &rr, 0); + (void)ret; + assert(ret == KNOT_EOK); + knot_rrset_clear(&rr, NULL); + } +} + +static void changeset_set_soa_serials(changeset_t *ch, uint32_t from, uint32_t to, + const knot_dname_t *apex) +{ + knot_rrset_t soa; + + init_soa(&soa, from, apex); + knot_rrset_free(&ch->soa_from, NULL); + ch->soa_from = knot_rrset_copy(&soa, NULL); + assert(ch->soa_from); + knot_rrset_clear(&soa, NULL); + + init_soa(&soa, to, apex); + knot_rrset_free(&ch->soa_to, NULL); + ch->soa_to = knot_rrset_copy(&soa, NULL); + assert(ch->soa_to); + knot_rrset_clear(&soa, NULL); +} + +/*! \brief Compare two changesets for equality. */ +static bool changesets_eq(const changeset_t *ch1, changeset_t *ch2) +{ + if (changeset_size(ch1) != changeset_size(ch2)) { + return false; + } + + changeset_iter_t it1; + changeset_iter_all(&it1, ch1); + changeset_iter_t it2; + changeset_iter_all(&it2, ch2); + + knot_rrset_t rr1 = changeset_iter_next(&it1); + knot_rrset_t rr2 = changeset_iter_next(&it2); + bool ret = true; + while (!knot_rrset_empty(&rr1)) { + if (!knot_rrset_equal(&rr1, &rr2, KNOT_RRSET_COMPARE_WHOLE)) { + ret = false; + break; + } + rr1 = changeset_iter_next(&it1); + rr2 = changeset_iter_next(&it2); + } + + changeset_iter_clear(&it1); + changeset_iter_clear(&it2); + + return ret; +} + +static bool changesets_list_eq(list_t *l1, list_t *l2) +{ + node_t *n = NULL; + node_t *k = HEAD(*l2); + WALK_LIST(n, *l1) { + if (k == NULL) { + return false; + } + + changeset_t *ch1 = (changeset_t *) n; + changeset_t *ch2 = (changeset_t *) k; + if (!changesets_eq(ch1, ch2)) { + return false; + } + + k = k->next; + } + + if (k->next != NULL) { + return false; + } + + return true; +} + +/*! \brief Test a list of changesets for continuity. */ +static bool test_continuity(list_t *l) +{ + node_t *n = NULL; + uint32_t key1, key2; + WALK_LIST(n, *l) { + if (n == TAIL(*l)) { + break; + } + changeset_t *ch1 = (changeset_t *) n; + changeset_t *ch2 = (changeset_t *) n->next; + key1 = knot_soa_serial(&ch1->soa_to->rrs); + key2 = knot_soa_serial(&ch2->soa_from->rrs); + if (key1 != key2) { + return KNOT_EINVAL; + } + } + + return KNOT_EOK; +} + +static void test_journal_db(void) +{ + int ret, ret2 = KNOT_EOK; + + ret = journal_db_init(&db, test_dir_name, 2 * 1024 * 1024); + ok(ret == KNOT_EOK, "journal: init db (%d)", ret); + + ret = open_journal_db(&db); + ok(ret == KNOT_EOK, "journal: open db (%d)", ret); + + journal_db_close(&db); + ok(db == NULL, "journal: close and destroy db"); + + ret = journal_db_init(&db, test_dir_name, 4 * 1024 * 1024); + if (ret == KNOT_EOK) ret2 = open_journal_db(&db); + ok(ret == KNOT_EOK && ret2 == KNOT_EOK, "journal: open with bigger mapsize (%d, %d)", ret, ret2); + journal_db_close(&db); + + ret = journal_db_init(&db, test_dir_name, 1024 * 1024); + if (ret == KNOT_EOK) ret2 = open_journal_db(&db); + ok(ret == KNOT_EOK && ret2 == KNOT_EOK, "journal: open with smaller mapsize (%d, %d)", ret, ret2); + journal_db_close(&db); +} + +/*! \brief Test behavior with real changesets. */ +static void test_store_load(void) +{ + int ret, ret2 = KNOT_EOK; + + set_conf(1000, 512 * 1024); + + j = journal_new(); + ok(j != NULL, "journal: new"); + + ret = journal_db_init(&db, test_dir_name, 1024 * 1024); + if (ret == KNOT_EOK) ret2 = journal_open(j, &db, apex); + ok(ret == KNOT_EOK, "journal: open (%d, %d)", ret, ret2); + + /* Save and load changeset. */ + changeset_t *m_ch = changeset_new(apex); + init_random_changeset(m_ch, 0, 1, 128, apex); + ret = journal_store_changeset(j, m_ch); + ok(ret == KNOT_EOK, "journal: store changeset (%d)", ret); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + list_t l, k; + init_list(&l); + init_list(&k); + ret = journal_load_changesets(j, &l, 0); + add_tail(&k, &m_ch->n); + ok(ret == KNOT_EOK && changesets_list_eq(&l, &k), "journal: load changeset (%d)", ret); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + + changesets_free(&l); + changesets_free(&k); + + /* Flush the journal. */ + ret = journal_flush(j); + ok(ret == KNOT_EOK, "journal: first and simple flush (%d)", ret); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + init_list(&l); + init_list(&k); + + /* Fill the journal. */ + ret = KNOT_EOK; + uint32_t serial = 1; + for (; ret == KNOT_EOK; ++serial) { + changeset_t *m_ch2 = changeset_new(apex); + init_random_changeset(m_ch2, serial, serial + 1, 128, apex); + ret = journal_store_changeset(j, m_ch2); + if (ret != KNOT_EOK) { + changeset_free(m_ch2); + break; + } + add_tail(&k, &m_ch2->n); + } + ok(ret == KNOT_EBUSY, "journal: overfill with changesets (%d inserted) (%d should= %d)", + serial, ret, KNOT_EBUSY); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + + /* Load all changesets stored until now. */ + ret = journal_load_changesets(j, &l, 1); + ok(ret == KNOT_EOK && changesets_list_eq(&l, &k), "journal: load changesets (%d)", ret); + + changesets_free(&l); + init_list(&l); + ret = journal_load_changesets(j, &l, 1); + ok(ret == KNOT_EOK && changesets_list_eq(&l, &k), "journal: re-load changesets (%d)", ret); + + changesets_free(&l); + init_list(&l); + + /* Flush the journal. */ + ret = journal_flush(j); + ok(ret == KNOT_EOK, "journal: second flush (%d)", ret); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + + /* Test whether the journal kept changesets after flush. */ + ret = journal_load_changesets(j, &l, 1); + ok(ret == KNOT_EOK && changesets_list_eq(&l, &k), "journal: load right after flush (%d)", ret); + + changesets_free(&k); + changesets_free(&l); + init_list(&k); + init_list(&l); + + /* Store next changeset. */ + changeset_t ch; + changeset_init(&ch, apex); + init_random_changeset(&ch, serial, serial + 1, 128, apex); + ret = journal_store_changeset(j, &ch); + changeset_clear(&ch); + ok(ret == KNOT_EOK, "journal: store after flush (%d)", ret); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + + /* Load last changesets. */ + init_list(&l); + ret = journal_load_changesets(j, &l, serial); + changesets_free(&l); + ok(ret == KNOT_EOK, "journal: load changesets after flush (%d)", ret); + + /* Flush the journal again. */ + ret = journal_flush(j); + ok(ret == KNOT_EOK, "journal: flush again (%d)", ret); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + + /* Fill the journal using a list. */ + uint32_t m_serial = 1; + for (; m_serial < serial / 2; ++m_serial) { + changeset_t *m_ch7 = changeset_new(apex); + init_random_changeset(m_ch7, m_serial, m_serial + 1, 128, apex); + add_tail(&l, &m_ch7->n); + } + ret = journal_store_changesets(j, &l); + ok(ret == KNOT_EOK, "journal: fill with changesets using a list (%d inserted)", m_serial); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + + /* Cleanup. */ + changesets_free(&l); + init_list(&l); + + /* Load all previous changesets. */ + ret = journal_load_changesets(j, &l, 1); + ok(ret == KNOT_EOK && knot_soa_serial(&((changeset_t *)TAIL(l))->soa_to->rrs) == m_serial, + "journal: load all changesets"); + + /* Check for changeset ordering. */ + ok(test_continuity(&l) == KNOT_EOK, "journal: changesets are in order"); + + /* Cleanup. */ + changesets_free(&l); + init_list(&l); + ret = journal_flush(j); + ok(ret == KNOT_EOK, "journal: allways ok journal_flush 0"); + ret = drop_journal(j, NULL); /* Clear the journal for the collision test */ + ok(ret == KNOT_EOK, "journal: allways ok drop_journal"); + + /* Test for serial number collision handling. We insert changesets + * with valid serial sequence that overflows and then collides with itself. + * The sequence is 0 -> 1 -> 2 -> 2147483647 -> 4294967294 -> 1 which should + * remove changesets 0->1 and 1->2. */ + ok(EMPTY_LIST(k), "journal: empty list k"); + ok(EMPTY_LIST(l), "journal: empty list l"); + changeset_t *m_ch3 = changeset_new(apex); + init_random_changeset(m_ch3, 0, 1, 128, apex); + ret = journal_store_changeset(j, m_ch3); + ok(ret == KNOT_EOK, "journal: allways ok journal_store_changeset 1"); + changeset_set_soa_serials(m_ch3, 1, 2, apex); + ret = journal_store_changeset(j, m_ch3); + ok(ret == KNOT_EOK, "journal: allways ok journal_store_changeset 2"); + changeset_set_soa_serials(m_ch3, 2, 2147483647, apex); + add_tail(&k, &m_ch3->n); + ret = journal_store_changeset(j, m_ch3); + ok(ret == KNOT_EOK, "journal: allways ok journal_store_changeset 3"); + changeset_t *m_ch4 = changeset_new(apex); + init_random_changeset(m_ch4, 2147483647, 4294967294, 128, apex); + add_tail(&k, &m_ch4->n); + ret = journal_store_changeset(j, m_ch4); + ok(ret == KNOT_EOK, "journal: allways ok journal_store_changeset 4"); + changeset_t *m_ch5 = changeset_new(apex); + init_random_changeset(m_ch5, 4294967294, 1, 128, apex); + add_tail(&k, &m_ch5->n); + ret = journal_store_changeset(j, m_ch5); + ok(ret == KNOT_EBUSY, "journal: allways ok journal_store_changeset 5"); + ret = journal_flush(j); + ok(ret == KNOT_EOK, "journal: allways ok journal_flush 1"); + ret = journal_store_changeset(j, m_ch5); + ok(ret == KNOT_EOK, "journal: allways ok journal_store_changeset 6"); + ret = journal_flush(j); + ok(ret == KNOT_EOK, "journal: allways ok journal_flush 2"); + ret = journal_load_changesets(j, &l, 0); + ret2 = journal_load_changesets(j, &l, 1); + int ret3 = journal_load_changesets(j, &l, 2); + fprintf(stderr, "ret=%d ret2=%d ret3=%d\n", ret, ret2, ret3); + ok(ret == KNOT_ENOENT && ret2 == KNOT_ENOENT && ret3 == KNOT_EOK && + changesets_list_eq(&l, &k), "journal: serial collision"); + ret = journal_check(j, JOURNAL_CHECK_INFO); + ok(ret == KNOT_EOK, "journal check (%d)", ret); + + /* Cleanup. */ + changesets_free(&l); + changesets_free(&k); + + init_list(&l); + init_list(&k); + + unset_conf(); +} + +const uint8_t *rdA = (const uint8_t *) "\x01\x02\x03\x04"; +const uint8_t *rdB = (const uint8_t *) "\x01\x02\x03\x05"; +const uint8_t *rdC = (const uint8_t *) "\x01\x02\x03\x06"; + +// frees owner +static knot_rrset_t * tm_rrset(knot_dname_t * owner, const uint8_t * rdata) +{ + knot_rrset_t * rrs = knot_rrset_new(owner, KNOT_RRTYPE_A, KNOT_CLASS_IN, NULL); + knot_rrset_add_rdata(rrs, rdata, 4, 3600, NULL); + free(owner); + return rrs; +} + +static knot_dname_t * tm_owner(const char * prefix, const knot_dname_t *apex) +{ + knot_dname_t * ret = malloc(strlen(prefix) + knot_dname_size(apex) + 2); + ret[0] = strlen(prefix); + strcpy((char *) (ret + 1), prefix); + memcpy(ret + ret[0] + 1, apex, knot_dname_size(apex)); + return ret; +} + +static knot_rrset_t * tm_rrs(const knot_dname_t * apex, int x) +{ + static knot_rrset_t * rrsA = NULL; + static knot_rrset_t * rrsB = NULL; + static knot_rrset_t * rrsC = NULL; + + if (apex == NULL) { + knot_rrset_free(&rrsA, NULL); + knot_rrset_free(&rrsB, NULL); + knot_rrset_free(&rrsC, NULL); + rrsA = rrsB = rrsC = NULL; + return NULL; + } + + if (rrsA == NULL) rrsA = tm_rrset(tm_owner("aaaaaaaaaaaaaaaaa", apex), rdA); + if (rrsB == NULL) rrsB = tm_rrset(tm_owner("bbbbbbbbbbbbbbbbb", apex), rdB); + if (rrsC == NULL) rrsC = tm_rrset(tm_owner("ccccccccccccccccc", apex), rdC); + switch ((x % 3 + 3) % 3) { + case 0: return rrsA; + case 1: return rrsB; + case 2: return rrsC; + } + assert(0); return NULL; +} + +int tm_rrcnt(const changeset_t * ch, int flg) +{ + changeset_iter_t it; + int i = 0; + if (flg >= 0) changeset_iter_add(&it, ch); + else changeset_iter_rem(&it, ch); + + knot_rrset_t rri; + while (rri = changeset_iter_next(&it), !knot_rrset_empty(&rri)) i++; + + changeset_iter_clear(&it); + return i; +} + +static changeset_t * tm_chs(const knot_dname_t * apex, int x) +{ + static changeset_t * chsI = NULL, * chsX = NULL, * chsY = NULL; + static uint32_t serial = 0; + + if (apex == NULL) { + changeset_free(chsI); + changeset_free(chsX); + changeset_free(chsY); + chsI = chsX = chsY = NULL; + return NULL; + } + + if (chsI == NULL) { + chsI = changeset_new(apex); + assert(chsI != NULL); + changeset_add_addition(chsI, tm_rrs(apex, 0), 0); + changeset_add_addition(chsI, tm_rrs(apex, 1), 0); + } + if (chsX == NULL) { + chsX = changeset_new(apex); + assert(chsX != NULL); + changeset_add_removal(chsX, tm_rrs(apex, 1), 0); + changeset_add_addition(chsX, tm_rrs(apex, 2), 0); + } + if (chsY == NULL) { + chsY = changeset_new(apex); + assert(chsY != NULL); + changeset_add_removal(chsY, tm_rrs(apex, 2), 0); + changeset_add_addition(chsY, tm_rrs(apex, 1), 0); + } + assert(x >= 0); + changeset_t * ret; + if (x == 0) ret = chsI; + else if (x % 2 == 1) ret = chsX; + else ret = chsY; + + changeset_set_soa_serials(ret, serial, serial + 1, apex); + serial++; + + return ret; +} + +static int merged_present(void) +{ + local_txn_t(txn, j); + txn_begin(txn, 0); + int res = md_flag(txn, MERGED_SERIAL_VALID); + txn_abort(txn); + return res; +} + +static void test_merge(void) +{ + int i, ret; + list_t l; + + // allow merge + set_conf(-1, 512 * 1024); + ok(journal_merge_allowed(j), "journal: merge allowed"); + + ret = drop_journal(j, NULL); + ok(ret == KNOT_EOK, "journal: drop_journal must be ok"); + + // insert stuff and check the merge + for (i = 0; !merged_present(); i++) { + ret = journal_store_changeset(j, tm_chs(apex, i)); + ok(ret == KNOT_EOK, "journal: journal_store_changeset must be ok"); + } + init_list(&l); + ret = journal_load_changesets(j, &l, 0); + ok(ret == KNOT_EOK, "journal: journal_load_changesets must be ok"); + ok(list_size(&l) == 2, "journal: read the merged and one following"); + changeset_t * mch = (changeset_t *)HEAD(l); + ok(list_size(&l) >= 1 && tm_rrcnt(mch, 1) == 2, "journal: merged additions # = 2"); + ok(list_size(&l) >= 1 && tm_rrcnt(mch, -1) == 1, "journal: merged removals # = 1"); + changesets_free(&l); + + // insert one more and check the #s of results + journal_store_changeset(j, tm_chs(apex, i)); + init_list(&l); + ret = journal_load_changesets(j, &l, 0); + ok(ret == KNOT_EOK, "journal: journal_load_changesets2 must be ok"); + ok(list_size(&l) == 3, "journal: read merged together with new changeset"); + changesets_free(&l); + init_list(&l); + ret = journal_load_changesets(j, &l, (uint32_t) (i - 3)); + ok(ret == KNOT_EOK, "journal: journal_load_changesets3 must be ok"); + ok(list_size(&l) == 4, "journal: read short history of merged/unmerged changesets"); + changesets_free(&l); + + ret = drop_journal(j, NULL); + assert(ret == KNOT_EOK); + + // disallow merge + unset_conf(); + set_conf(1000, 512 * 1024); + ok(!journal_merge_allowed(j), "journal: merge disallowed"); + + tm_rrs(NULL, 0); + tm_chs(NULL, 0); + unset_conf(); +} + +static void test_stress_base(journal_t *j, size_t update_size, size_t file_size) +{ + int ret; + uint32_t serial = 0; + + journal_close(j); + journal_db_close(&db); + db = NULL; + ret = journal_db_init(&db, test_dir_name, file_size); + assert(ret == KNOT_EOK); + ret = open_journal_db(&db); + assert(ret == KNOT_EOK); + ret = journal_open(j, &db, apex); + assert(ret == KNOT_EOK); + + set_conf(1000, file_size / 2); + + changeset_t ch; + changeset_init(&ch, apex); + init_random_changeset(&ch, serial, serial + 1, update_size, apex); + + for (int i = 1; i <= 6; ++i) { + serial = 0; + while (true) { + changeset_set_soa_serials(&ch, serial, serial + 1, apex); + ret = journal_store_changeset(j, &ch); + + if (ret != KNOT_EOK) { + fprintf(stderr, "store failed %d serial=%d (espace=%d ebusy=%d)\n", + ret, serial, KNOT_ESPACE, KNOT_EBUSY); + } + + if (ret == KNOT_EOK) { + serial++; + } else { + break; + } + } + + int ret = journal_flush(j); + ok(serial > 0 && ret == KNOT_EOK, "journal: pass #%d fillup run (%d inserts)", i, serial); + } + + changeset_clear(&ch); + + unset_conf(); +} + +/*! \brief Test behavior when writing to jurnal and flushing it. */ +static void test_stress(journal_t *j) +{ + printf("stress test: small data\n"); + test_stress_base(j, 40, 1024 * 1024 / 2); + + printf("stress test: medium data\n"); + test_stress_base(j, 400, 3 * 1024 * 1024); + + printf("stress test: large data\n"); + test_stress_base(j, 4000, 10 * 1024 * 1024); +} + +int main(int argc, char *argv[]) +{ + plan_lazy(); + + test_dir_name = test_mkdtemp(); + + test_journal_db(); + + test_store_load(); + + test_merge(); + + test_stress(j); + + journal_close(j); + journal_free(&j); + journal_db_close(&db); + + test_rm_rf(test_dir_name); + free(test_dir_name); + + return 0; +} diff --git a/tests/node.c b/tests/test_node.c similarity index 100% rename from tests/node.c rename to tests/test_node.c diff --git a/tests/process_query.c b/tests/test_process_query.c similarity index 98% rename from tests/process_query.c rename to tests/test_process_query.c index 46e8e10cacc0a6b07786c4827afd3bdf2d42ee25..92d786ee660adf5a2ae59649d24136d0f8509c36 100644 --- a/tests/process_query.c +++ b/tests/test_process_query.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2017 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -22,7 +22,7 @@ #include "libknot/descriptor.h" #include "libknot/packet/wire.h" #include "knot/nameserver/process_query.h" -#include "fake_server.h" +#include "test_server.h" #include "contrib/ucw/mempool.h" /* Basic response check (4 TAP tests). */ diff --git a/tests/query_module.c b/tests/test_query_module.c similarity index 100% rename from tests/query_module.c rename to tests/test_query_module.c diff --git a/tests/requestor.c b/tests/test_requestor.c similarity index 100% rename from tests/requestor.c rename to tests/test_requestor.c diff --git a/tests/semantic_check.in b/tests/test_semantic_check.in similarity index 100% rename from tests/semantic_check.in rename to tests/test_semantic_check.in diff --git a/tests/server.c b/tests/test_server.c similarity index 91% rename from tests/server.c rename to tests/test_server.c index b2729b5d8777e535e85123e93e53e9e43e8e9076..b476c67a403439fb14a59fa056ac3c84e789d797 100644 --- a/tests/server.c +++ b/tests/test_server.c @@ -16,6 +16,7 @@ #include <tap/basic.h> #include "knot/server/server.h" +#include "test_conf.h" // Signal handler static void interrupt_handle(int s) @@ -30,6 +31,10 @@ int main(int argc, char *argv[]) server_t server; int ret = 0; + /* Some random configuration just to apply the default conf scheme */ + ret = test_conf("", NULL); + assert(ret == KNOT_EOK); + /* Register service and signal handler */ struct sigaction sa; sa.sa_handler = interrupt_handle; diff --git a/tests/fake_server.h b/tests/test_server.h similarity index 96% rename from tests/fake_server.h rename to tests/test_server.h index 0088faaa37e36f490adb073c79f66fdd6353f2fc..5223c0916ee4c97cf1e3eea53a3a249e0bf5ea22 100644 --- a/tests/fake_server.h +++ b/tests/test_server.h @@ -42,6 +42,7 @@ static inline void create_root_zone(server_t *server, knot_mm_t *mm) /* Insert root zone. */ zone_t *root = zone_new(ROOT_DNAME); + root->journal_db = &server->journal_db; root->contents = zone_contents_new(root->name); knot_rrset_t *soa = knot_rrset_new(root->name, KNOT_RRTYPE_SOA, KNOT_CLASS_IN, mm); @@ -62,11 +63,7 @@ static inline void create_root_zone(server_t *server, knot_mm_t *mm) /* Create fake server. */ static inline int create_fake_server(server_t *server, knot_mm_t *mm) { - /* Create name server. */ - int ret = server_init(server, 1); - if (ret != KNOT_EOK) { - return ret; - } + int ret; /* Load test configuration. */ const char *conf_str = "server:\n identity: bogus.ns\n version: 0.11\n nsid: ""\n" @@ -76,6 +73,12 @@ static inline int create_fake_server(server_t *server, knot_mm_t *mm) return ret; } + /* Create name server. */ + ret = server_init(server, 1); + if (ret != KNOT_EOK) { + return ret; + } + /* Insert root zone. */ create_root_zone(server, mm); diff --git a/tests/worker_pool.c b/tests/test_worker_pool.c similarity index 100% rename from tests/worker_pool.c rename to tests/test_worker_pool.c diff --git a/tests/worker_queue.c b/tests/test_worker_queue.c similarity index 100% rename from tests/worker_queue.c rename to tests/test_worker_queue.c diff --git a/tests/ztree.c b/tests/test_zone-tree.c similarity index 94% rename from tests/ztree.c rename to tests/test_zone-tree.c index b8b2ef28bcdd4e3ba3ed744298fc1e8270934236..63faaa44b1d3ac0bb5efa139819f744f3f61d1c3 100644 --- a/tests/ztree.c +++ b/tests/test_zone-tree.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2016 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> 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 @@ -98,9 +98,6 @@ int main(int argc, char *argv[]) } ok(passed, "ztree: lookup"); - /* heal index for ordered lookup */ - hattrie_build_index(t); - /* 4. ordered lookup */ node = NULL; zone_node_t *prev = NULL; @@ -111,7 +108,7 @@ int main(int argc, char *argv[]) /* 5. ordered traversal */ unsigned i = 0; - int ret = zone_tree_apply_inorder(t, ztree_iter_data, &i); + int ret = zone_tree_apply(t, ztree_iter_data, &i); ok (ret == KNOT_EOK, "ztree: ordered traversal"); zone_tree_free(&t); diff --git a/tests/zone_update.c b/tests/test_zone-update.c similarity index 95% rename from tests/zone_update.c rename to tests/test_zone-update.c index 661ec3c8dc8746bf27e6fdb4b6cf8bb0b70d47c2..63b72c223dcfbebec3b92fa79248092020b99498 100644 --- a/tests/zone_update.c +++ b/tests/test_zone-update.c @@ -21,10 +21,10 @@ #include "test_conf.h" #include "contrib/macros.h" #include "contrib/getline.h" -#include "contrib/openbsd/strlcat.h" #include "knot/updates/zone-update.h" #include "knot/zone/node.h" #include "zscanner/scanner.h" +#include "knot/server/server.h" static const char *zone_str1 = "test. 600 IN SOA ns.test. m.test. 1 900 300 4800 900 \n"; static const char *zone_str2 = "test. IN TXT \"test\"\n"; @@ -287,19 +287,28 @@ int main(int argc, char *argv[]) char *temp_dir = test_mkdtemp(); ok(temp_dir != NULL, "make temporary directory"); - char conf_str[256] = "zone:\n - domain: test.\n storage: "; - strlcat(conf_str, temp_dir, 256); - strlcat(conf_str, "\n", 256); + char conf_str[512]; + snprintf(conf_str, sizeof(conf_str), + "zone:\n" + " - domain: test.\n" + "template:\n" + " - id: default\n" + " storage: %s\n", + temp_dir); /* Load test configuration. */ int ret = test_conf(conf_str, NULL); - (void)ret; - assert(ret == KNOT_EOK); + ok(ret == KNOT_EOK, "load configuration"); + + server_t server; + ret = server_init(&server, 1); + ok(ret == KNOT_EOK, "server init"); /* Set up empty zone */ knot_dname_t *apex = knot_dname_from_str_alloc("test"); assert(apex); zone_t *zone = zone_new(apex); + zone->journal_db = &server.journal_db; /* Setup zscanner */ zs_scanner_t sc; @@ -314,6 +323,7 @@ int main(int argc, char *argv[]) zs_deinit(&sc); zone_free(&zone); + server_deinit(&server); knot_dname_free(&apex, NULL); conf_free(conf()); test_rm_rf(temp_dir); diff --git a/tests/zone_events.c b/tests/test_zone_events.c similarity index 100% rename from tests/zone_events.c rename to tests/test_zone_events.c diff --git a/tests/zone_serial.c b/tests/test_zone_serial.c similarity index 100% rename from tests/zone_serial.c rename to tests/test_zone_serial.c diff --git a/tests/zone_timers.c b/tests/test_zone_timers.c similarity index 100% rename from tests/zone_timers.c rename to tests/test_zone_timers.c diff --git a/tests/zonedb.c b/tests/test_zonedb.c similarity index 100% rename from tests/zonedb.c rename to tests/test_zonedb.c diff --git a/tests/utils/test_lookup.c b/tests/utils/test_lookup.c index d38afae1a7fde12a351b31af32be3c22bbf45aae..70f7646f96e40c386c2cd4af5d9f3a4bab4a5626 100644 --- a/tests/utils/test_lookup.c +++ b/tests/utils/test_lookup.c @@ -63,8 +63,6 @@ static void init(lookup_t *l, const char **table) ok(ret == KNOT_EOK, "Insert '%s'", *table); table++; } - - lookup_index(l); } static void test_search_basic(void)