diff --git a/README-Travis.md b/README-Travis.md index fc4b505e4..3ce22cc20 100644 --- a/README-Travis.md +++ b/README-Travis.md @@ -4,7 +4,7 @@ Unbound 1.10 and above leverage Travis CI to increase coverage of compilers and Android is tested on armv7a, aarch64, x86 and x86_64. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. Mips and Mips64 are not tested because they are no longer supported under current NDKs. -iOS is tested for iPhoneOS, WatchOS and AppleTVOS. The testing uses Xcode 10.0 on OS X 10.13. +iOS is tested for iPhoneOS, WatchOS, AppleTVOS, iPhoneSimulator, AppleTVSimulator and WatchSimulator. The testing uses Xcode 10 on OS X 10.13. The Unbound Travis configuration file `.travis.yml` does not use top-level keys like `os:` and `compiler:` so there is no matrix expansion. Instead Unbound specifies the exact job to run under the `jobs:` and `include:` keys. @@ -68,43 +68,59 @@ elif [ "$TEST_ASAN" = "yes" ]; then Travis tests Android builds for the armv7a, aarch64, x86 and x86_64 architectures. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the Android recipes. -### ANDROID_NDK_ROOT +### Android job -The first step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks botch this step, and use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`). - -Unbound exports the variables in the Travis configuration script for the Android recipe: - -``` -export ANDROID_SDK_ROOT="$HOME/android-sdk" -export ANDROID_NDK_ROOT="$HOME/android-ndk" -``` - -### NDK installation - -The second step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. - -If you are working from a developer machine you probably already have a NDK and SDK installed. - -### Android environment - -The third step sets the Android cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. - -`contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. +The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below. ``` - os: linux - name: Android aarch64, Linux, Amd64 + name: Android armv7a, Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ANDROID=yes - - AUTOTOOLS_HOST=aarch64-linux-android - - OPENSSL_HOST=android-arm64 - - ANDROID_CPU=aarch64 + - AUTOTOOLS_HOST=armv7a-linux-androideabi + - OPENSSL_HOST=android-arm + - ANDROID_CPU=armv7a - ANDROID_API=23 + - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" + - ANDROID_SDK_ROOT="$HOME/android-sdk" + - ANDROID_NDK_ROOT="$HOME/android-ndk" ``` +### ANDROID_NDK_ROOT + +The second step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks miss this step, or use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`). + +If you are working from a developer machine you probably already have the necessary tools installed. You should ensure `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` are set properly. + +### Tool installation + +The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/android/install_tools.sh`. The tools include curl, tar, zip, unzip and java. + +``` +before_script: + - | + if [ "$TEST_ANDROID" = "yes" ]; then + ./contrib/android/install_tools.sh + elif [ "$TEST_IOS" = "yes" ]; then + ./contrib/ios/install_tools.sh + fi +``` + +### NDK installation + +The third step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. + +If you are working from a developer machine you probably already have a NDK and SDK installed. + +### Android environment + +The fourth step sets the Android cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. + +`contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` which tools and libraries to select. + The `contrib/android/setenv_android.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. ``` @@ -121,17 +137,11 @@ armv8a|aarch64|arm64|arm64-v8a) CXXFLAGS="-funwind-tables -fexceptions -frtti" ``` -### Tool installation - -The fourth step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/android/install_tools.sh`. The tools include curl, tar, zip, unzip and java. - -If you are working from a developer machine you probably already have the necessary tools installed. - ### OpenSSL and Expat The fifth step builds OpenSSL and Expat. OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_PREFIX"` so the headers are placed in `$ANDROID_PREFIX/include` directory, and the libraries are placed in the `$ANDROID_PREFIX/lib` directory. -`ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system library's headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/android23-armv7a/lib/pkgconfig` and `$HOME/android23-aarch64/lib/pkgconfig`. +`ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/android23-armv7a/lib/pkgconfig` and `$HOME/android23-aarch64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound, with NDK-r19 and above, and a properly set environment. @@ -147,19 +157,20 @@ elif [ "$TEST_ANDROID" = "yes" ]; then export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh source ./contrib/android/setenv_android.sh - ./contrib/android/install_tools.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh ./configure \ - --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --build="$AUTOTOOLS_BUILD" \ + --host="$AUTOTOOLS_HOST" \ --prefix="$ANDROID_PREFIX" \ - --with-ssl="$ANDROID_PREFIX" --disable-gost \ - --with-libexpat="$ANDROID_PREFIX"; + --with-ssl="$ANDROID_PREFIX" \ + --with-libexpat="$ANDROID_PREFIX" \ + --disable-gost; make -j 2 make install ``` -Travis only smoke tests an Android build using a compile and link. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. +Travis only smoke tests an Android build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. ### Android flags @@ -171,58 +182,68 @@ To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-sample ## iOS builds -Travis tests iOS builds for the armv7a, armv7s and aarch64 architectures for iPhoneOS, AppleTVOS and WatchOS. iPhoneOS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. +Travis tests iOS builds for the armv7a, armv7s and aarch64 architectures for iPhoneOS, AppleTVOS and WatchOS. iPhoneOS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). Travis also tests compiles against the simulators. The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. -### iOS environment +### iOS job -The first step sets the iOS cross-compile environment using the script `contrib/ios/setenv_ios.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so iOS headers and libraries are found; and adds the path to the toolchain to `PATH`. - -`contrib/ios/setenv_ios.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `IOS_SDK` and `IOS_CPU` tell `contrib/ios/setenv_ios.sh` what tools and libraries to select. For example, below is part of the Aarch64 recipe. +The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below. ``` -os: osx -osx_image: xcode10 -name: Apple iPhone, OS X, Amd64 -compiler: clang -env: - - TEST_IOS=yes - - AUTOTOOLS_HOST=armv7-apple-ios - - OPENSSL_HOST=ios-cross - - IOS_SDK=iPhoneOS - - IOS_CPU=armv7s -``` - -The `contrib/ios/setenv_ios.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. - -``` -iphone|iphoneos) - CPP="cpp" - CC="clang" - CXX="clang++" - LD="ld" - AS="as" - AR="ar" - RANLIB="ranlib" - STRIP="strip" - - # Default armv7. Also allowed armv7a, armv7s, arm64 - if [ -z "$IOS_CPU" ]; then IOS_CPU=armv7; fi - - CFLAGS="-arch $IOS_CPU -mios-version-min=6" - CXXFLAGS="-arch $IOS_CPU -stdlib=libc++ -mios-version-min=6" +- os: osx + osx_image: xcode10 + name: Apple iPhone on iOS, armv7 + compiler: clang + env: + - TEST_IOS=yes + - AUTOTOOLS_HOST=armv7-apple-ios + - OPENSSL_HOST=ios-cross + - IOS_SDK=iPhoneOS + - IOS_CPU=armv7s + - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" ``` ### Tool installation -The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/ios/install_tools.sh`. The tools include autotools, curl and perl. +The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/ios/install_tools.sh`. The tools include autotools, curl and perl. The installation happens at the `before_script:` stage of Travis. + +``` +before_script: + - | + if [ "$TEST_ANDROID" = "yes" ]; then + ./contrib/android/install_tools.sh + elif [ "$TEST_IOS" = "yes" ]; then + ./contrib/ios/install_tools.sh + fi +``` + +### iOS environment + +The third step sets the iOS cross-compile environment using the script `contrib/ios/setenv_ios.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so iOS headers and libraries are found; and adds the path to the toolchain to `PATH`. + +`contrib/ios/setenv_ios.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `IOS_SDK` and `IOS_CPU` tell `contrib/ios/setenv_ios.sh` which tools and libraries to select. + +The `contrib/ios/setenv_ios.sh` script specifies the tools to use during the cross-compile. For Apple SDKs, the tool names are the same as a desktop. There are no special prefixes for the mobile tools. + +``` +CPP=cpp +CC=clang +CXX=clang++ +LD=ld +AS=as +AR=ar +RANLIB=ranlib +STRIP=strip +``` If you are working from a developer machine you probably already have the necessary tools installed. ### OpenSSL and Expat -The third step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory. +The fourth step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory. -`IOS_PREFIX` is the value `$HOME/iPhoneOS-$IOS_CPU`, `$HOME/AppleTVOS` or `$HOME/WatchOS`. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system library's headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`. +`IOS_PREFIX` is the value `$HOME/$IOS_SDK-$IOS_CPU`. The scheme handles both iOS SDKs and cpu architectures so the pair recieves a unique installation directory. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, `$HOME/iPhoneSimulator-i386`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. + +`PKG_CONFIG_PATH` is an important variable. It is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-ios.conf`. It is a copy of the OpenSSL's project file and located at `contrib/ios/15-ios.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The changes mean Unbound's `15-ios.conf` will only work with Unbound and a properly set environment. @@ -230,26 +251,27 @@ OpenSSL is configured with `no-engine`. Engines require dynamic loading so engin ### iOS build -Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows. +Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The full recipe looks as follows. ``` elif [ "$TEST_IOS" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" source ./contrib/ios/setenv_ios.sh - ./contrib/ios/install_tools.sh ./contrib/ios/install_openssl.sh ./contrib/ios/install_expat.sh ./configure \ - --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ + --build="$AUTOTOOLS_BUILD" \ + --host="$AUTOTOOLS_HOST" \ --prefix="$IOS_PREFIX" \ - --with-ssl="$IOS_PREFIX" --disable-gost \ - --with-libexpat="$IOS_PREFIX"; + --with-ssl="$IOS_PREFIX" \ + --with-libexpat="$IOS_PREFIX" \ + --disable-gost; make -j 2 make install ``` -Travis only smoke tests an iOS build using a compile and link. The self tests are not run. TODO: figure out how to fire up an simulator, push the tests to the device and run them. +Travis only smoke tests an iOS build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an simulator, push the tests to the device and run them. ### iOS flags diff --git a/acx_python.m4 b/acx_python.m4 index 2940971f1..a84daa035 100644 --- a/acx_python.m4 +++ b/acx_python.m4 @@ -58,6 +58,11 @@ $ac_distutils_result]) AC_MSG_RESULT([$PYTHON_LDFLAGS]) AC_SUBST([PYTHON_LDFLAGS]) + if test -z "$PYTHON_LIBDIR"; then + PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \ + print(get_config_var('LIBDIR'));"` + fi + # # Check for site packages # diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index c5be51622..eed4d5fd9 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -160,7 +160,7 @@ testframe_lookup(struct module_env* env, struct cachedb_env* cachedb_env, static void testframe_store(struct module_env* env, struct cachedb_env* cachedb_env, - char* key, uint8_t* data, size_t data_len) + char* key, uint8_t* data, size_t data_len, time_t ATTR_UNUSED(ttl)) { struct testframe_moddata* d = (struct testframe_moddata*) cachedb_env->backend_data; @@ -606,7 +606,8 @@ cachedb_extcache_store(struct module_qstate* qstate, struct cachedb_env* ie) /* call backend */ (*ie->backend->store)(qstate->env, ie, key, sldns_buffer_begin(qstate->env->scratch_buffer), - sldns_buffer_limit(qstate->env->scratch_buffer)); + sldns_buffer_limit(qstate->env->scratch_buffer), + qstate->return_msg->rep->ttl); } /** diff --git a/cachedb/cachedb.h b/cachedb/cachedb.h index 27187dc56..05c4368e6 100644 --- a/cachedb/cachedb.h +++ b/cachedb/cachedb.h @@ -84,7 +84,7 @@ struct cachedb_backend { /** Store (env, cachedb_env, key, data, data_len) */ void (*store)(struct module_env*, struct cachedb_env*, char*, - uint8_t*, size_t); + uint8_t*, size_t, time_t); }; #define CACHEDB_HASHSIZE 256 /* bit hash */ diff --git a/cachedb/redis.c b/cachedb/redis.c index 3dfbf8f7a..16c3741f7 100644 --- a/cachedb/redis.c +++ b/cachedb/redis.c @@ -59,6 +59,9 @@ struct redis_moddata { struct timeval timeout; /* timeout for connection setup and commands */ }; +static redisReply* redis_command(struct module_env*, struct cachedb_env*, + const char*, const uint8_t*, size_t); + static redisContext* redis_connect(const struct redis_moddata* moddata) { @@ -114,6 +117,33 @@ redis_init(struct module_env* env, struct cachedb_env* cachedb_env) for(i = 0; i < moddata->numctxs; i++) moddata->ctxs[i] = redis_connect(moddata); cachedb_env->backend_data = moddata; + if(env->cfg->redis_expire_records) { + redisReply* rep = NULL; + int redis_reply_type = 0; + /** check if setex command is supported */ + rep = redis_command(env, cachedb_env, + "SETEX __UNBOUND_REDIS_CHECK__ 1 none", NULL, 0); + if(!rep) { + /** init failed, no response from redis server*/ + log_err("redis_init: failed to init redis, the " + "redis-expire-records option requires the SETEX command " + "(redis >= 2.0.0)"); + return 0; + } + redis_reply_type = rep->type; + freeReplyObject(rep); + switch(redis_reply_type) { + case REDIS_REPLY_STATUS: + break; + default: + /** init failed, setex command not supported */ + log_err("redis_init: failed to init redis, the " + "redis-expire-records option requires the SETEX command " + "(redis >= 2.0.0)"); + return 0; + } + } + return 1; } @@ -219,7 +249,7 @@ redis_lookup(struct module_env* env, struct cachedb_env* cachedb_env, rep = redis_command(env, cachedb_env, cmdbuf, NULL, 0); if(!rep) return 0; - switch (rep->type) { + switch(rep->type) { case REDIS_REPLY_NIL: verbose(VERB_ALGO, "redis_lookup: no data cached"); break; @@ -249,16 +279,33 @@ redis_lookup(struct module_env* env, struct cachedb_env* cachedb_env, static void redis_store(struct module_env* env, struct cachedb_env* cachedb_env, - char* key, uint8_t* data, size_t data_len) + char* key, uint8_t* data, size_t data_len, time_t ttl) { redisReply* rep; - char cmdbuf[4+(CACHEDB_HASHSIZE/8)*2+3+1]; /* "SET " + key + " %b" */ int n; + int set_ttl = (env->cfg->redis_expire_records && + (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0)); + /* Supported commands: + * - "SET " + key + " %b" + * - "SETEX " + key + " " + ttl + " %b" + */ + char cmdbuf[6+(CACHEDB_HASHSIZE/8)*2+11+3+1]; + + if (!set_ttl) { + verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); + /* build command to set to a binary safe string */ + n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key); + } else { + /* add expired ttl time to redis ttl to avoid premature eviction of key */ + ttl += env->cfg->serve_expired_ttl; + verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %u", + key, (int)data_len, (uint32_t)ttl); + /* build command to set to a binary safe string */ + n = snprintf(cmdbuf, sizeof(cmdbuf), "SETEX %s %u %%b", key, + (uint32_t)ttl); + } - verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); - /* build command to set to a binary safe string */ - n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key); if(n < 0 || n >= (int)sizeof(cmdbuf)) { log_err("redis_store: unexpected failure to build command"); return; diff --git a/configure b/configure index 107eedc11..f6c6406b8 100755 --- a/configure +++ b/configure @@ -17343,6 +17343,11 @@ $as_echo_n "checking for Python library path... " >&6; } $as_echo "$PYTHON_LDFLAGS" >&6; } + if test -z "$PYTHON_LIBDIR"; then + PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \ + print(get_config_var('LIBDIR'));"` + fi + # # Check for site packages # @@ -17448,6 +17453,15 @@ $as_echo "#define HAVE_PYTHON 1" >>confdefs.h else CPPFLAGS="$PYTHON_CPPFLAGS" fi + if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then + + if test "x$enable_rpath" = xyes; then + if echo "$PYTHON_LIBDIR" | grep "^/" >/dev/null; then + RUNTIME_PATH="$RUNTIME_PATH -R$PYTHON_LIBDIR" + fi + fi + + fi ub_have_python=yes if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\"python\${PY_MAJOR_VERSION}\"\""; } >&5 diff --git a/configure.ac b/configure.ac index 6b761974a..5d7e78450 100644 --- a/configure.ac +++ b/configure.ac @@ -678,6 +678,9 @@ if test x_$ub_test_python != x_no; then else CPPFLAGS="$PYTHON_CPPFLAGS" fi + if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then + ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR]) + fi ub_have_python=yes PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"], [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"], diff --git a/contrib/android/15-android.conf b/contrib/android/15-android.conf index 5e132e816..e1fc91e70 100644 --- a/contrib/android/15-android.conf +++ b/contrib/android/15-android.conf @@ -1,180 +1,37 @@ #### Android... # -# See NOTES.ANDROID for details, and don't miss platform-specific -# comments below... - -{ - use File::Spec::Functions; - - my $android_ndk = {}; - my %triplet = ( - arm => "arm-linux-androideabi", - arm64 => "aarch64-linux-android", - x86 => "i686-linux-android", - x86_64 => "x86_64-linux-android" - ); - - sub android_ndk { - unless (%$android_ndk) { - if ($now_printing =~ m|^android|) { - return $android_ndk = { bn_ops => "BN_AUTO" }; - } - - my $ndk_var; - my $ndk; - foreach (qw(ANDROID_NDK_ROOT)) { - $ndk_var = $_; - $ndk = $ENV{$ndk_var}; - last if defined $ndk; - } - die "\$ANDROID_NDK_ROOT is not defined" if (!$ndk); - if (!-d "$ndk/platforms" && !-f "$ndk/AndroidVersion.txt") { - # $ndk/platforms is traditional "all-inclusive" NDK, while - # $ndk/AndroidVersion.txt is so-called standalone toolchain - # tailored for specific target down to API level. - die "\$ANDROID_NDK_ROOT=$ndk is invalid"; - } - $ndk = canonpath($ndk); - - my $ndkver = undef; - - if (open my $fh, "<$ndk/source.properties") { - local $_; - while(<$fh>) { - if (m|Pkg\.Revision\s*=\s*([0-9]+)|) { - $ndkver = $1; - last; - } - } - close $fh; - } - - my ($sysroot, $api, $arch); - - $config{target} =~ m|[^-]+-([^-]+)$|; # split on dash - $arch = $1; - - if ($arch = "armeabi") { - $arch = "arm"; - } - - if (-f "$ndk/AndroidVersion.txt") { - $sysroot = "$ndk/sysroot"; - } else { - $api = "*"; - - # see if user passed -D__ANDROID_API__=N - foreach (@{$useradd{CPPDEFINES}}, @{$user{CPPFLAGS}}) { - if (m|__ANDROID_API__=([0-9]+)|) { - $api = $1; - last; - } - } - - # list available platforms (numerically) - my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1; - $b =~ m/-([0-9]+)$/; $aa <=> $1; - } glob("$ndk/platforms/android-$api"); - die "no $ndk/platforms/android-$api" if ($#platforms < 0); - - $sysroot = "@platforms[$#platforms]/arch-$arch"; - $sysroot =~ m|/android-([0-9]+)/arch-$arch|; - $api = $1; - } - die "no sysroot=$sysroot" if (!-d $sysroot); - - my $triarch = $triplet{$arch}; - my $cflags; - my $cppflags; - - # see if there is NDK clang on $PATH, "universal" or "standalone" - if (which("clang") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) { - my $host=$1; - # harmonize with gcc default - my $arm = $ndkver > 16 ? "armv7a" : "armv5te"; - (my $tridefault = $triarch) =~ s/^arm-/$arm-/; - (my $tritools = $triarch) =~ s/(?:x|i6)86(_64)?-.*/x86$1/; - $cflags .= " -target $tridefault "; - $user{CC} = "clang" if ($user{CC} !~ m|clang|); - $user{CROSS_COMPILE} = undef; - if (which("llvm-ar") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) { - $user{AR} = "llvm-ar"; - $user{ARFLAGS} = [ "rs" ]; - $user{RANLIB} = ":"; - } - } elsif (-f "$ndk/AndroidVersion.txt") { #"standalone toolchain" - my $cc = $user{CC} // "clang"; - # One can probably argue that both clang and gcc should be - # probed, but support for "standalone toolchain" was added - # *after* announcement that gcc is being phased out, so - # favouring clang is considered adequate. Those who insist - # have option to enforce test for gcc with CC=gcc. - if (which("$triarch-$cc") !~ m|^$ndk|) { - die "no NDK $triarch-$cc on \$PATH"; - } - $user{CC} = $cc; - $user{CROSS_COMPILE} = "$triarch-"; - } elsif ($user{CC} eq "clang") { - die "no NDK clang on \$PATH"; - } else { - if (which("$triarch-gcc") !~ m|^$ndk/.*/prebuilt/([^/]+)/|) { - die "no NDK $triarch-gcc on \$PATH"; - } - $cflags .= " -mandroid"; - $user{CROSS_COMPILE} = "$triarch-"; - } - - if (!-d "$sysroot/usr/include") { - my $incroot = "$ndk/sysroot/usr/include"; - die "no $incroot" if (!-d $incroot); - die "no $incroot/$triarch" if (!-d "$incroot/$triarch"); - $incroot =~ s|^$ndk/||; - $cppflags = "-D__ANDROID_API__=$api"; - } - - $sysroot =~ s|^$ndk/||; - $android_ndk = { - cppflags => $cppflags, - bn_ops => $arch =~ m/64$/ ? "SIXTY_FOUR_BIT_LONG" - : "BN_LLONG", - }; - } - - return $android_ndk; - } -} +# Heavily hacked 15-android.conf based on OpenSSL's config file of the same name. +# This 15-android.conf avoids compiler errors using NDK-r20. This 15-android.conf +# requires an environment set (sourced) using setenv-android.sh. my %targets = ( "android" => { inherit_from => [ "linux-generic32" ], template => 1, - cflags => add(sub { android_ndk()->{cflags} }), - cppflags => add(sub { android_ndk()->{cppflags} }), - cxxflags => add(sub { android_ndk()->{cflags} }), - bn_ops => sub { android_ndk()->{bn_ops} }, - bin_cflags => "-fPIE", - bin_lflags => "-pie", + bin_cflags => add("-fPIE"), + bin_lflags => add("-pie"), enable => [ ], }, + "android-arm" => { inherit_from => [ "android", asm("armv4_asm") ], - bn_ops => add("RC4_CHAR"), + bn_ops => [ "BN_LLONG", "RC4_CHAR" ], }, "android-arm64" => { inherit_from => [ "android", asm("aarch64_asm") ], - bn_ops => add("RC4_CHAR"), + bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_CHAR" ], perlasm_scheme => "linux64", }, "android-x86" => { inherit_from => [ "android", asm("x86_asm") ], - CFLAGS => add(picker(release => "-fomit-frame-pointer")), - bn_ops => add("RC4_INT"), + cflags => add(picker(release => "-fomit-frame-pointer")), + bn_ops => [ "BN_LLONG", "RC4_INT" ], perlasm_scheme => "android", }, "android-x86_64" => { inherit_from => [ "android", asm("x86_64_asm") ], - bn_ops => add("RC4_INT"), + bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_INT" ], perlasm_scheme => "elf", }, ); diff --git a/contrib/android/setenv_android.sh b/contrib/android/setenv_android.sh index d87a8f3e3..fe7f6503c 100755 --- a/contrib/android/setenv_android.sh +++ b/contrib/android/setenv_android.sh @@ -1,16 +1,43 @@ #!/usr/bin/env bash -# Error checking +# ==================================================================== +# Sets the cross compile environment for Android +# +# Based upon OpenSSL's setenv-android.sh by TH, JW, and SM. +# Heavily modified by JWW for Crypto++. +# Updated by Skycoder42 for current recommendations for Android. +# Modified by JWW for Unbound. +# ==================================================================== + +######################################### +##### Some validation ##### +######################################### + +if [ -z "$ANDROID_API" ]; then + echo "ANDROID_API is not set. Please set it" + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 +fi + +if [ -z "$ANDROID_CPU" ]; then + echo "ANDROID_CPU is not set. Please set it" + [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 +fi + if [ ! -d "$ANDROID_NDK_ROOT" ]; then echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it." echo "NDK root is $ANDROID_NDK_ROOT" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi +# cryptest-android.sh may run this script without sourcing. +if [ "$0" = "${BASH_SOURCE[0]}" ]; then + echo "setenv-android.sh is usually sourced, but not this time." +fi + ##################################################################### # Need to set THIS_HOST to darwin-x86_64, linux-x86_64, -# windows-x86_64 or windows. +# windows, or windows-x86_64 if [[ "$(uname -s | grep -i -c darwin)" -ne 0 ]]; then THIS_HOST=darwin-x86_64 @@ -21,38 +48,30 @@ else [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi -AOSP_TOOLCHAIN_ROOT="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST" -AOSP_TOOLCHAIN_PATH="$AOSP_TOOLCHAIN_ROOT/bin" -AOSP_SYSROOT="$AOSP_TOOLCHAIN_ROOT/sysroot" +ANDROID_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/bin" +ANDROID_SYSROOT="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/sysroot" # Error checking -if [ ! -d "$AOSP_TOOLCHAIN_ROOT" ]; then - echo "ERROR: AOSP_TOOLCHAIN_ROOT is not a valid path. Please set it." - echo "Root is $AOSP_TOOLCHAIN_ROOT" +if [ ! -d "$ANDROID_TOOLCHAIN" ]; then + echo "ERROR: ANDROID_TOOLCHAIN is not a valid path. Please set it." + echo "Path is $ANDROID_TOOLCHAIN" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -d "$AOSP_TOOLCHAIN_PATH" ]; then - echo "ERROR: AOSP_TOOLCHAIN_PATH is not a valid path. Please set it." - echo "Path is $AOSP_TOOLCHAIN_PATH" - [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 -fi - -# Error checking -if [ ! -d "$AOSP_SYSROOT" ]; then - echo "ERROR: AOSP_SYSROOT is not a valid path. Please set it." - echo "Path is $AOSP_SYSROOT" +if [ ! -d "$ANDROID_SYSROOT" ]; then + echo "ERROR: ANDROID_SYSROOT is not a valid path. Please set it." + echo "Path is $ANDROID_SYSROOT" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### -AOSP_CPU=$(tr '[:upper:]' '[:lower:]' <<< "$ANDROID_CPU") +THE_ARCH=$(tr '[:upper:]' '[:lower:]' <<< "$ANDROID_CPU") # https://developer.android.com/ndk/guides/abis.html -case "$AOSP_CPU" in - armeabi|armv7a|armv7-a|armeabi-v7a) +case "$THE_ARCH" in + armv7*|armeabi*) CC="armv7a-linux-androideabi$ANDROID_API-clang" CXX="armv7a-linux-androideabi$ANDROID_API-clang++" LD="arm-linux-androideabi-ld" @@ -65,7 +84,7 @@ case "$AOSP_CPU" in CXXFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions -frtti" ;; - armv8|armv8a|aarch64|arm64|arm64-v8a) + armv8*|aarch64|arm64*) CC="aarch64-linux-android$ANDROID_API-clang" CXX="aarch64-linux-android$ANDROID_API-clang++" LD="aarch64-linux-android-ld" @@ -108,66 +127,67 @@ case "$AOSP_CPU" in echo "ERROR: Unknown architecture $ANDROID_CPU" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 ;; - esac ##################################################################### # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$CC" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$CC" ]; then echo "ERROR: Failed to find Android clang. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$CXX" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$CXX" ]; then echo "ERROR: Failed to find Android clang++. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$RANLIB" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$RANLIB" ]; then echo "ERROR: Failed to find Android ranlib. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$AR" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$AR" ]; then echo "ERROR: Failed to find Android ar. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$AS" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$AS" ]; then echo "ERROR: Failed to find Android as. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking -if [ ! -e "$AOSP_TOOLCHAIN_PATH/$LD" ]; then +if [ ! -e "$ANDROID_TOOLCHAIN/$LD" ]; then echo "ERROR: Failed to find Android ld. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### -LENGTH=${#AOSP_TOOLCHAIN_PATH} +LENGTH=${#ANDROID_TOOLCHAIN} SUBSTR=${PATH:0:$LENGTH} -if [ "$SUBSTR" != "$AOSP_TOOLCHAIN_PATH" ]; then - export PATH="$AOSP_TOOLCHAIN_PATH:$PATH" +if [ "$SUBSTR" != "$ANDROID_TOOLCHAIN" ]; then + export PATH="$ANDROID_TOOLCHAIN:$PATH" fi ##################################################################### export CPP CC CXX LD AS AR RANLIB STRIP export ANDROID_SYSROOT="$AOSP_SYSROOT" -export CFLAGS="-D__ANDROID_API__=$ANDROID_API $CFLAGS --sysroot=$AOSP_SYSROOT" -export CXXFLAGS="-D__ANDROID_API__=$ANDROID_API $CXXFLAGS --sysroot=$AOSP_SYSROOT" +export CPPFLAGS="-D__ANDROID_API__=$ANDROID_API" +export CFLAGS="$CFLAGS --sysroot=$AOSP_SYSROOT" +export CXXFLAGS="$CXXFLAGS -stdlib=libc++ --sysroot=$AOSP_SYSROOT" ##################################################################### -echo "AOSP_TOOLCHAIN_PATH: $AOSP_TOOLCHAIN_PATH" +echo "ANDROID_TOOLCHAIN: $ANDROID_TOOLCHAIN" +echo "CPP: $(command -v "$CPP")" echo "CC: $(command -v "$CC")" echo "CXX: $(command -v "$CXX")" echo "LD: $(command -v "$LD")" @@ -176,6 +196,7 @@ echo "AR: $(command -v "$AR")" echo "ANDROID_SYSROOT: $ANDROID_SYSROOT" +echo "CPPFLAGS: $CPPFLAGS" echo "CFLAGS: $CFLAGS" echo "CXXFLAGS: $CXXFLAGS" diff --git a/contrib/ios/install_tools.sh b/contrib/ios/install_tools.sh index a59fc0eb7..55fef454e 100755 --- a/contrib/ios/install_tools.sh +++ b/contrib/ios/install_tools.sh @@ -4,4 +4,5 @@ echo "Updating tools" brew update 1>/dev/null echo "Installing tools" -brew install autoconf automake libtool pkg-config curl perl 1>/dev/null +# already installed are: autoconf automake libtool pkg-config +brew install curl perl 1>/dev/null diff --git a/daemon/remote.c b/daemon/remote.c index 5eb829859..83eef7af2 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -329,7 +329,8 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, /* open fd */ fd = create_tcp_accept_sock(res, 1, &noproto, 0, - cfg->ip_transparent, 0, 0, cfg->ip_freebind, cfg->use_systemd); + cfg->ip_transparent, 0, 0, cfg->ip_freebind, + cfg->use_systemd, cfg->ip_dscp); freeaddrinfo(res); } @@ -1124,6 +1125,10 @@ parse_arg_name(RES* ssl, char* str, uint8_t** res, size_t* len, int* labs) *res = NULL; *len = 0; *labs = 0; + if(str[0] == '\0') { + ssl_printf(ssl, "error: this option requires a domain name\n"); + return 0; + } status = sldns_str2wire_dname_buf(str, nm, &nmlen); if(status != 0) { ssl_printf(ssl, "error cannot parse name %s at %d: %s\n", str, diff --git a/daemon/worker.c b/daemon/worker.c index 24fb3f30e..f6043c3ae 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1809,14 +1809,14 @@ worker_init(struct worker* worker, struct config_file *cfg, worker->back = outside_network_create(worker->base, cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports, cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6, - cfg->do_tcp?cfg->outgoing_num_tcp:0, + cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp, worker->daemon->env->infra_cache, worker->rndstate, cfg->use_caps_bits_for_id, worker->ports, worker->numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &worker_alloc_cleanup, worker, cfg->do_udp || cfg->udp_upstream_without_downstream, worker->daemon->connect_sslctx, cfg->delay_close, - dtenv); + cfg->tls_use_sni, dtenv); if(!worker->back) { log_err("could not create outgoing sockets"); worker_delete(worker); diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index bb862d441..4081a6372 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -351,6 +351,7 @@ int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) log_err("could not setup SSL CTX"); return 0; } + dtio->tls_use_sni = cfg->tls_use_sni; #endif /* HAVE_SSL */ } return 1; @@ -1661,7 +1662,8 @@ static int dtio_setup_ssl(struct dt_io_thread* dtio) dtio->ssl_handshake_done = 0; dtio->ssl_brief_read = 0; - if(!set_auth_name_on_ssl(dtio->ssl, dtio->tls_server_name)) { + if(!set_auth_name_on_ssl(dtio->ssl, dtio->tls_server_name, + dtio->tls_use_sni)) { return 0; } return 1; diff --git a/dnstap/dtstream.h b/dnstap/dtstream.h index 4bb027d5b..03346c213 100644 --- a/dnstap/dtstream.h +++ b/dnstap/dtstream.h @@ -109,6 +109,8 @@ struct dt_io_thread { int started; /** ssl context for the io thread, for tls connections. type SSL_CTX* */ void* ssl_ctx; + /** if SNI will be used for TLS connections. */ + int tls_use_sni; /** file descriptor that the thread writes to */ int fd; diff --git a/doc/Changelog b/doc/Changelog index a63b311b8..0b2a86aa9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,80 @@ +22 April 2020: George + - Explicitly use 'rrset-roundrobin: no' for test cases. + +21 April 2020: Wouter + - Merge #225 from akhait: KSK-2010 has been revoked. It removes the + KSK-2010 from the default list in unbound-anchor, now that the + revocation period is over. KSK-2017 is the only trust anchor in + the shipped default now. + +21 April 2020: George + - Change default value for 'rrset-roundrobin' to yes. + - Fix tests for new rrset-roundrobin default. + +20 April 2020: Wouter + - Fix #222: --enable-rpath, fails to rpath python lib. + - Fix for count of reply states in the mesh. + - Remove unneeded was_mesh_reply check. + +17 April 2020: George + - Add SNI support on more TLS connections (fixes #193). + - Add SNI support to unbound-anchor. + +16 April 2020: George + - Add doxygen documentation for DSCP. + +16 April 2020: Wouter + - Fix help return code in unbound-control-setup script. + - Fix for posix shell syntax for trap in nsd-control-setup. + - Fix for posix shell syntax for trap in run_msg.sh test script. + +15 April 2020: George + - Fix #220: auth-zone section in config may lead to segfault. + +7 April 2020: Wouter + - Merge PR #214 from gearnode: unbound-control-setup recreate + certificates. With the -r option the certificates are created + again, without it, only the files that do not exist are created. + +6 April 2020: Ralph + - Keep track of number of timeouts. Use this counter to determine if + capsforid fallback should be started. + +6 April 2020: George + - More documentation for redis-expire-records option. + +1 April 2020: George + - Merge PR #206: Redis TTL, by Talkabout. + +30 March 2020: Wouter + - Merge PR #207: Clarify if-automatic listens on 0.0.0.0 and :: + - Merge PR #208: Fix uncached CLIENT_RESPONSE'es on stateful + transports. + +27 March 2020: Wouter + - Merge PR #203 from noloader: Update README-Travis.md with current + procedures. + +27 March 2020: Ralph + - Make unbound-control error returned on missing domain name more user + friendly. + +26 March 2020: Ralph + - Fix RPZ concurrency issue when using auth_zone_reload. + +25 March 2020: George + - Merge PR #201 from noloader: Fix OpenSSL cross-compaile warnings. + - Fix on #201. + +24 March 2020: Wouter + - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP + tag for outgoing packets. + - Fixes on #200. + - Travis fix for ios by omitting tools from install. + +23 March 2020: Wouter + - Fix compile on Solaris for unbound-checkconf. + 20 March 2020: George - Merge PR #198 from fobser: Declare lz_enter_rr_into_zone() static, it's only used in this file. diff --git a/doc/example.conf.in b/doc/example.conf.in index dbcb97cec..f7c6364a0 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -119,6 +119,11 @@ server: # Linux only. On Linux you also have ip-transparent that is similar. # ip-freebind: no + # the value of the Differentiated Services Codepoint (DSCP) + # in the differentiated services field (DS) of the outgoing + # IP packets + # ip-dscp: 0 + # EDNS reassembly buffer to advertise to UDP peers (the actual buffer # is set with msg-buffer-size). 1472 can solve fragmentation (timeouts) # edns-buffer-size: 4096 @@ -468,7 +473,7 @@ server: # deny-any: no # if yes, Unbound rotates RRSet order in response. - # rrset-roundrobin: no + # rrset-roundrobin: yes # if yes, Unbound doesn't insert authority/additional sections # into response messages when those sections are not required. @@ -743,6 +748,10 @@ server: # cipher setting for TLSv1.3 # tls-ciphersuites: "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256" + # Use the SNI extension for TLS connections. Default is yes. + # Changing the value requires a reload. + # tls-use-sni: yes + # Add the secret file for TLS Session Ticket. # Secret file must be 80 bytes of random data. # First key use to encrypt and decrypt TLS session tickets. @@ -1010,10 +1019,12 @@ remote-control: # redis-server-port: 6379 # # timeout (in ms) for communication with the redis server # redis-timeout: 100 +# # set timeout on redis records based on DNS response TTL +# redis-expire-records: no # IPSet # Add specify domain into set via ipset. -# Note: To enable ipset needs run unbound as root user. +# Note: To enable ipset unbound needs to run as root user. # ipset: # # set name for ip v4 addresses # name-v4: "list-v4" diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index bccd33161..b0d8302c4 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -69,6 +69,9 @@ The server name, it connects to https://name. Specify without https:// prefix. The default is "data.iana.org". It connects to the port specified with \-P. You can pass an IPv4 address or IPv6 address (no brackets) if you want. .TP +.B \-S +Do not use SNI for the HTTPS connection. Default is to use SNI. +.TP .B \-b \fIaddress The source address to bind to for domain resolution and contacting the server on https. May be either an IPv4 address or IPv6 address (no brackets). diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 3f14061c9..7ee52e7f5 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -126,9 +126,12 @@ interface and port number), if not specified the default port (from Same as interface: (for ease of compatibility with nsd.conf). .TP .B interface\-automatic: \fI -Detect source interface on UDP queries and copy them to replies. This -feature is experimental, and needs support in your OS for particular socket -options. Default value is no. +Listen on all addresses on all (current and future) interfaces, detect the +source interface on UDP queries and copy them to replies. This is a lot like +ip\-transparent, but this option services all interfaces whilst with +ip\-transparent you can select which (future) interfaces unbound provides +service on. This feature is experimental, and needs support in your OS for +particular socket options. Default value is no. .TP .B outgoing\-interface: \fI Interface to use to connect to the network. This interface is used to send @@ -323,6 +326,12 @@ IP addresses that are nonlocal or do not exist, like when the network interface or IP address is down. Exists only on Linux, where the similar ip\-transparent option is also available. .TP +.B ip-dscp: \fI +The value of the Differentiated Services Codepoint (DSCP) in the +differentiated services field (DS) of the outgoing IP packet headers. +The field replaces the outdated IPv4 Type-Of-Service field and the +IPV6 traffic class field. +.TP .B rrset\-cache\-size: \fI Number of bytes size of the RRset cache. Default is 4 megabytes. A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes @@ -542,6 +551,11 @@ and that is the default. Set the list of ciphersuites to allow when serving TLS. This is for newer TLS 1.3 connections. Use "" for defaults, and that is the default. .TP +.B tls\-use\-sni: \fI +Enable or disable sending the SNI extension on TLS connections. +Default is yes. +Changing the value requires a reload. +.TP .B use\-systemd: \fI Enable or disable systemd socket activation. Default is no. @@ -923,7 +937,7 @@ are none. .TP .B rrset\-roundrobin: \fI If yes, Unbound rotates RRSet order in response (the random number is taken -from the query ID, for speed and thread safety). Default is no. +from the query ID, for speed and thread safety). Default is yes. .TP .B minimal-responses: \fI If yes, Unbound doesn't insert authority/additional sections into response @@ -2072,6 +2086,11 @@ even if some data have expired in terms of DNS TTL or the Redis server has cached too much data; if necessary the Redis server must be configured to limit the cache size, preferably with some kind of least-recently-used eviction policy. +Additionaly, the \fBredis\-expire\-records\fR option can be used in order to +set the relative DNS TTL of the message as timeout to the Redis records; keep +in mind that some additional memory is used per key and that the expire +information is stored as absolute Unix timestamps in Redis (computer time must +be stable). This backend uses synchronous communication with the Redis server based on the assumption that the communication is stable and sufficiently fast. @@ -2126,6 +2145,14 @@ If this timeout expires Unbound closes the connection, treats it as if the Redis server does not have the requested data, and will try to re-establish a new connection later. This option defaults to 100 milliseconds. +.TP +.B redis-expire-records: \fI +If Redis record expiration is enabled. If yes, unbound sets timeout for Redis +records so that Redis can evict keys that have expired automatically. If +unbound is configured with \fBserve-expired\fR and \fBserve-expired-ttl\fR is 0, +this option is internally reverted to "no". Redis SETEX support is required +for this option (Redis >= 2.0.0). +This option defaults to no. .SS DNSTAP Logging Options DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section. This starts an extra thread (when compiled with threading) that writes diff --git a/iterator/iterator.c b/iterator/iterator.c index 1e0113a87..eea2f2fb2 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -159,7 +159,7 @@ iter_new(struct module_qstate* qstate, int id) iq->qchase = qstate->qinfo; outbound_list_init(&iq->outlist); iq->minimise_count = 0; - iq->minimise_timeout_count = 0; + iq->timeout_count = 0; if (qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; else @@ -2190,7 +2190,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->qinfo_out.qname = iq->qchase.qname; iq->qinfo_out.qname_len = iq->qchase.qname_len; iq->minimise_count++; - iq->minimise_timeout_count = 0; + iq->timeout_count = 0; iter_dec_attempts(iq->dp, 1); @@ -2249,7 +2249,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, } } if(iq->minimisation_state == SKIP_MINIMISE_STATE) { - if(iq->minimise_timeout_count < MAX_MINIMISE_TIMEOUT_COUNT) + if(iq->timeout_count < MAX_MINIMISE_TIMEOUT_COUNT) /* Do not increment qname, continue incrementing next * iteration */ iq->minimisation_state = MINIMISE_STATE; @@ -2586,14 +2586,15 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, if(iq->response == NULL) { /* Don't increment qname when QNAME minimisation is enabled */ if(qstate->env->cfg->qname_minimisation) { - iq->minimise_timeout_count++; iq->minimisation_state = SKIP_MINIMISE_STATE; } + iq->timeout_count++; iq->chase_to_rd = 0; iq->dnssec_lame_query = 0; verbose(VERB_ALGO, "query response was timeout"); return next_state(iq, QUERYTARGETS_STATE); } + iq->timeout_count = 0; type = response_type_from_server( (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd), iq->response, &iq->qinfo_out, iq->dp); @@ -3599,7 +3600,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq, iq->response = NULL; iq->state = QUERY_RESP_STATE; if(event == module_event_noreply || event == module_event_error) { - if(event == module_event_noreply && iq->sent_count >= 3 && + if(event == module_event_noreply && iq->timeout_count >= 3 && qstate->env->cfg->use_caps_bits_for_id && !iq->caps_fallback && !is_caps_whitelisted(ie, iq)) { /* start fallback */ diff --git a/iterator/iterator.h b/iterator/iterator.h index a2f1b5705..26ff39559 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -388,8 +388,9 @@ struct iter_qstate { /** * Count number of time-outs. Used to prevent resolving failures when - * the QNAME minimisation QTYPE is blocked. */ - int minimise_timeout_count; + * the QNAME minimisation QTYPE is blocked. Used to determine if + * capsforid fallback should be started.*/ + int timeout_count; /** True if the current response is from auth_zone */ int auth_zone_response; diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 66ea7c3ba..44b8d7905 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -233,12 +233,12 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) w->back = outside_network_create(w->base, cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports, cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6, - cfg->do_tcp?cfg->outgoing_num_tcp:0, + cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp, w->env->infra_cache, w->env->rnd, cfg->use_caps_bits_for_id, ports, numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w, cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx, - cfg->delay_close, NULL); + cfg->delay_close, cfg->tls_use_sni, NULL); w->env->outnet = w->back; if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); diff --git a/respip/respip.c b/respip/respip.c index c496653c4..6fa4f1885 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -914,6 +914,7 @@ respip_rewrite_reply(const struct query_info* qinfo, int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; struct rpz* r; + struct auth_zone* a; struct ub_packed_rrset_key* data = NULL; int rpz_used = 0; int rpz_log = 0; @@ -955,6 +956,10 @@ respip_rewrite_reply(const struct query_info* qinfo, } if(!raddr && !view->isfirst) goto done; + if(!raddr && view->isfirst) { + lock_rw_unlock(&view->lock); + view = NULL; + } } if(!raddr && (raddr = respip_addr_lookup(rep, ipset, &rrset_id))) { @@ -965,7 +970,9 @@ respip_rewrite_reply(const struct query_info* qinfo, ipset->tagname, ipset->num_tags); } lock_rw_rdlock(&az->rpz_lock); - for(r = az->rpz_first; r && !raddr; r = r->next) { + for(a = az->rpz_first; a && !raddr; a = a->rpz_az_next) { + lock_rw_rdlock(&a->lock); + r = a->rpz; if(!r->taglist || taglist_intersect(r->taglist, r->taglistlen, ctaglist, ctaglen)) { if((raddr = respip_addr_lookup(rep, @@ -975,16 +982,21 @@ respip_rewrite_reply(const struct query_info* qinfo, region, &rpz_used)) { log_err("out of memory"); lock_rw_unlock(&raddr->lock); + lock_rw_unlock(&a->lock); lock_rw_unlock(&az->rpz_lock); return 0; } - if(!rpz_used) { - lock_rw_unlock(&raddr->lock); - raddr = NULL; - actinfo->rpz_disabled++; + if(rpz_used) { + /* break to make sure 'a' stays pointed + * to used auth_zone, and keeps lock */ + break; } + lock_rw_unlock(&raddr->lock); + raddr = NULL; + actinfo->rpz_disabled++; } - } + } + lock_rw_unlock(&a->lock); } lock_rw_unlock(&az->rpz_lock); if(raddr && !search_only) { @@ -1038,6 +1050,9 @@ respip_rewrite_reply(const struct query_info* qinfo, if(raddr) { lock_rw_unlock(&raddr->lock); } + if(rpz_used) { + lock_rw_unlock(&a->lock); + } return ret; } diff --git a/services/authzone.c b/services/authzone.c index c5803757a..9b0568c8c 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -392,12 +392,12 @@ auth_zone_delete(struct auth_zone* z, struct auth_zones* az) if(az && z->rpz) { /* keep RPZ linked list intact */ lock_rw_wrlock(&az->rpz_lock); - if(z->rpz->prev) - z->rpz->prev->next = z->rpz->next; + if(z->rpz_az_prev) + z->rpz_az_prev->rpz_az_next = z->rpz_az_next; else - az->rpz_first = z->rpz->next; - if(z->rpz->next) - z->rpz->next->prev = z->rpz->prev; + az->rpz_first = z->rpz_az_next; + if(z->rpz_az_next) + z->rpz_az_next->rpz_az_prev = z->rpz_az_prev; lock_rw_unlock(&az->rpz_lock); } if(z->rpz) @@ -426,9 +426,11 @@ auth_zone_create(struct auth_zones* az, uint8_t* nm, size_t nmlen, } rbtree_init(&z->data, &auth_data_cmp); lock_rw_init(&z->lock); - lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type)); + lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type)- + sizeof(&z->rpz_az_next)-sizeof(&z->rpz_az_prev)); lock_rw_wrlock(&z->lock); - /* z lock protects all, except rbtree itself, which is az->lock */ + /* z lock protects all, except rbtree itself and the rpz linked list + * pointers, which are protected using az->lock */ if(!rbtree_insert(&az->ztree, &z->node)) { lock_rw_unlock(&z->lock); auth_zone_delete(z, NULL); @@ -1897,11 +1899,12 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c) fatal_exit("Could not setup RPZ zones"); return 0; } + lock_protect(&z->lock, &z->rpz->local_zones, sizeof(*z->rpz)); lock_rw_wrlock(&az->rpz_lock); - z->rpz->next = az->rpz_first; + z->rpz_az_next = az->rpz_first; if(az->rpz_first) - az->rpz_first->prev = z->rpz; - az->rpz_first = z->rpz; + az->rpz_first->rpz_az_prev = z; + az->rpz_first = z; lock_rw_unlock(&az->rpz_lock); } @@ -5331,7 +5334,7 @@ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, sldns_buffer* buf, log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -5770,7 +5773,7 @@ auth_xfer_transfer_timer_callback(void* arg) log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -5812,7 +5815,7 @@ auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } @@ -5893,7 +5896,7 @@ auth_xfer_transfer_http_callback(struct comm_point* c, void* arg, int err, log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } @@ -6107,7 +6110,7 @@ auth_xfer_probe_timer_callback(void* arg) log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -6143,7 +6146,7 @@ auth_xfer_probe_udp_callback(struct comm_point* c, void* arg, int err, log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } @@ -6388,7 +6391,7 @@ void auth_xfer_probe_lookup_callback(void* arg, int rcode, sldns_buffer* buf, log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } @@ -6465,7 +6468,7 @@ auth_xfer_timer(void* arg) log_assert(xfr->task_nextprobe); lock_basic_lock(&xfr->lock); env = xfr->task_nextprobe->env; - if(env->outnet->want_to_quit) { + if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } diff --git a/services/authzone.h b/services/authzone.h index 9bb131ad8..3d94f30d6 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -82,8 +82,8 @@ struct auth_zones { size_t num_query_up; /** number of queries downstream */ size_t num_query_down; - /** first rpz item in linked list */ - struct rpz* rpz_first; + /** first auth zone containing rpz item in linked list */ + struct auth_zone* rpz_first; /** rw lock for rpz linked list, needed when iterating or editing linked * list. */ lock_rw_type rpz_lock; @@ -138,6 +138,11 @@ struct auth_zone { int zone_deleted; /** deletelist pointer, unused normally except during delete */ struct auth_zone* delete_next; + /* not protected by auth_zone lock, must be last items in struct */ + /** next auth zone containing RPZ data, or NULL */ + struct auth_zone* rpz_az_next; + /** previous auth zone containing RPZ data, or NULL */ + struct auth_zone* rpz_az_prev; }; /** diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index fdfed0a40..656663b42 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -180,9 +180,10 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr, socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv, int snd, int listen, int* reuseport, int transparent, - int freebind, int use_systemd) + int freebind, int use_systemd, int dscp) { int s; + char* err; #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined (SO_BINDANY) int on=1; #endif @@ -452,6 +453,9 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, # endif #endif /* SO_SNDBUF */ } + err = set_ip_dscp(s, family, dscp); + if(err != NULL) + log_warn("error setting IP DiffServ codepoint %d on UDP socket: %s", dscp, err); if(family == AF_INET6) { # if defined(IPV6_V6ONLY) if(v6only) { @@ -640,9 +644,10 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, int* reuseport, int transparent, int mss, int nodelay, int freebind, - int use_systemd) + int use_systemd, int dscp) { int s; + char* err; #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined(SO_BINDANY) int on = 1; #endif @@ -825,6 +830,9 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, strerror(errno)); } #endif /* IP_TRANSPARENT || IP_BINDANY || SO_BINDANY */ + err = set_ip_dscp(s, addr->ai_family, dscp); + if(err != NULL) + log_warn("error setting IP DiffServ codepoint %d on TCP socket: %s", dscp, err); if( #ifdef HAVE_SYSTEMD !got_fd_from_systemd && @@ -898,6 +906,55 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, return s; } +char* +set_ip_dscp(int socket, int addrfamily, int dscp) +{ + int ds; + + if(dscp == 0) + return NULL; + ds = dscp << 2; + switch(addrfamily) { + case AF_INET6: + if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, &ds, sizeof(ds)) < 0) + return sock_strerror(errno); + break; + default: + if(setsockopt(socket, IPPROTO_IP, IP_TOS, &ds, sizeof(ds)) < 0) + return sock_strerror(errno); + break; + } + return NULL; +} + +# ifndef USE_WINSOCK +char* +sock_strerror(int errn) +{ + return strerror(errn); +} + +void +sock_close(int socket) +{ + close(socket); +} + +# else +char* +sock_strerror(int ATTR_UNUSED(errn)) +{ + return wsa_strerror(WSAGetLastError()); +} + +void +sock_close(int socket) +{ + closesocket(socket); +} + +# endif /* USE_WINSOCK */ + int create_local_accept_sock(const char *path, int* noproto, int use_systemd) { @@ -985,7 +1042,7 @@ static int make_sock(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, - int use_systemd) + int use_systemd, int dscp) { struct addrinfo *res = NULL; int r, s, inuse, noproto; @@ -1013,7 +1070,7 @@ make_sock(int stype, const char* ifname, const char* port, s = create_udp_sock(res->ai_family, res->ai_socktype, (struct sockaddr*)res->ai_addr, res->ai_addrlen, v6only, &inuse, &noproto, (int)rcv, (int)snd, 1, - reuseport, transparent, freebind, use_systemd); + reuseport, transparent, freebind, use_systemd, dscp); if(s == -1 && inuse) { log_err("bind: address already in use"); } else if(s == -1 && noproto && hints->ai_family == AF_INET6){ @@ -1021,7 +1078,8 @@ make_sock(int stype, const char* ifname, const char* port, } } else { s = create_tcp_accept_sock(res, v6only, &noproto, reuseport, - transparent, tcp_mss, nodelay, freebind, use_systemd); + transparent, tcp_mss, nodelay, freebind, use_systemd, + dscp); if(s == -1 && noproto && hints->ai_family == AF_INET6){ *noip6 = 1; } @@ -1035,7 +1093,7 @@ static int make_sock_port(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, - int use_systemd) + int use_systemd, int dscp) { char* s = strchr(ifname, '@'); if(s) { @@ -1056,12 +1114,13 @@ make_sock_port(int stype, const char* ifname, const char* port, newif[s-ifname] = 0; (void)strlcpy(p, s+1, sizeof(p)); p[strlen(s+1)]=0; - return make_sock(stype, newif, p, hints, v6only, noip6, - rcv, snd, reuseport, transparent, tcp_mss, nodelay, - freebind, use_systemd); + return make_sock(stype, newif, p, hints, v6only, noip6, rcv, + snd, reuseport, transparent, tcp_mss, nodelay, freebind, + use_systemd, dscp); } return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd, - reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd); + reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, + dscp); } /** @@ -1194,6 +1253,7 @@ if_is_https(const char* ifname, const char* port, int https_port) * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. * @param dnscrypt_port: dnscrypt service port number + * @param dscp: DSCP to use. * @return: returns false on error. */ static int @@ -1202,7 +1262,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, size_t rcv, size_t snd, int ssl_port, struct config_strlist* tls_additional_port, int https_port, int* reuseport, int transparent, int tcp_mss, int freebind, - int use_systemd, int dnscrypt_port) + int use_systemd, int dnscrypt_port, int dscp) { int s, noip6=0; int is_https = if_is_https(ifname, port, https_port); @@ -1221,7 +1281,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(do_auto) { if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, nodelay, freebind, use_systemd)) == -1) { + tcp_mss, nodelay, freebind, use_systemd, dscp)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1250,7 +1310,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, /* regular udp socket */ if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, - tcp_mss, nodelay, freebind, use_systemd)) == -1) { + tcp_mss, nodelay, freebind, use_systemd, dscp)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; @@ -1281,7 +1341,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, port_type = listen_type_tcp; if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay, - freebind, use_systemd)) == -1) { + freebind, use_systemd, dscp)) == -1) { if(noip6) { /*log_warn("IPv6 protocol not available");*/ return 1; @@ -1501,7 +1561,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } @@ -1516,7 +1576,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } @@ -1533,7 +1593,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } @@ -1548,7 +1608,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, - cfg->dnscrypt_port)) { + cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 6b5a85822..603b1388d 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -210,11 +210,12 @@ void listen_start_accept(struct listen_dnsport* listen); * @param transparent: set IP_TRANSPARENT socket option. * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. + * @param dscp: DSCP to use. * @return: the socket. -1 on error. */ int create_udp_sock(int family, int socktype, struct sockaddr* addr, socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv, - int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd); + int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd, int dscp); /** * Create and bind TCP listening socket @@ -228,11 +229,12 @@ int create_udp_sock(int family, int socktype, struct sockaddr* addr, * @param nodelay: if true set TCP_NODELAY and TCP_QUICKACK socket options. * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. + * @param dscp: DSCP to use. * @return: the socket. -1 on error. */ int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, int* reuseport, int transparent, int mss, int nodelay, int freebind, - int use_systemd); + int use_systemd, int dscp); /** * Create and bind local listening socket @@ -394,4 +396,7 @@ int http2_submit_dns_response(struct http2_session* h2_session); int http2_submit_dns_response(void* v); #endif /* HAVE_NGHTTP2 */ +char* set_ip_dscp(int socket, int addrfamily, int ds); +char* sock_strerror(int errn); + #endif /* LISTEN_DNSPORT_H */ diff --git a/services/mesh.c b/services/mesh.c index 4234fd8af..225449fb9 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1968,7 +1968,7 @@ mesh_serve_expired_callback(void* arg) r = mstate->reply_list; mstate->reply_list = NULL; - if(!mstate->reply_list && !mstate->cb_list) { + if(!mstate->reply_list && !mstate->cb_list && r) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; if(mstate->super_set.count == 0) { diff --git a/services/outside_network.c b/services/outside_network.c index b2c67766e..44e01d745 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -205,18 +205,25 @@ pick_outgoing_tcp(struct waiting_tcp* w, int s) /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ int -outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss) +outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp) { int s; + int af; + char* err; #ifdef SO_REUSEADDR int on = 1; #endif #ifdef INET6 - if(addr_is_ip6(addr, addrlen)) + if(addr_is_ip6(addr, addrlen)){ s = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); - else + af = AF_INET6; + } else { +#else + { #endif + af = AF_INET; s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + } if(s == -1) { #ifndef USE_WINSOCK log_err_addr("outgoing tcp: socket", strerror(errno), @@ -236,6 +243,12 @@ outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss) } #endif + err = set_ip_dscp(s, af, dscp); + if(err != NULL) { + verbose(VERB_ALGO, "outgoing tcp:" + "error setting IP DiffServ codepoint on socket"); + } + if(tcp_mss > 0) { #if defined(IPPROTO_TCP) && defined(TCP_MAXSEG) if(setsockopt(s, IPPROTO_TCP, TCP_MAXSEG, @@ -291,7 +304,7 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) log_assert(pkt); log_assert(w->addrlen > 0); /* open socket */ - s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss); + s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss, w->outnet->ip_dscp); if(s == -1) return 0; @@ -373,7 +386,8 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl); #endif pend->c->ssl_shake_state = comm_ssl_shake_write; - if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name)) { + if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name, + w->outnet->tls_use_sni)) { pend->c->fd = s; #ifdef HAVE_SSL SSL_free(pend->c->ssl); @@ -719,11 +733,11 @@ static int setup_if(struct port_if* pif, const char* addrstr, struct outside_network* outside_network_create(struct comm_base *base, size_t bufsize, size_t num_ports, char** ifs, int num_ifs, int do_ip4, - int do_ip6, size_t num_tcp, struct infra_cache* infra, + int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, struct dt_env* dtenv) + void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv) { struct outside_network* outnet = (struct outside_network*) calloc(1, sizeof(struct outside_network)); @@ -739,6 +753,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->infra = infra; outnet->rnd = rnd; outnet->sslctx = sslctx; + outnet->tls_use_sni = tls_use_sni; #ifdef USE_DNSTAP outnet->dtenv = dtenv; #else @@ -752,6 +767,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->use_caps_for_id = use_caps_for_id; outnet->do_udp = do_udp; outnet->tcp_mss = tcp_mss; + outnet->ip_dscp = dscp; #ifndef S_SPLINT_S if(delayclose) { outnet->delayclose = 1; @@ -1037,11 +1053,12 @@ sai6_putrandom(struct sockaddr_in6 *sa, int pfxlen, struct ub_randstate *rnd) * @param port: port override for addr. * @param inuse: if -1 is returned, this bool means the port was in use. * @param rnd: random state (for address randomisation). + * @param dscp: DSCP to use. * @return fd or -1 */ static int udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen, - int port, int* inuse, struct ub_randstate* rnd) + int port, int* inuse, struct ub_randstate* rnd, int dscp) { int fd, noproto; if(addr_is_ip6(addr, addrlen)) { @@ -1056,13 +1073,13 @@ udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen, } fd = create_udp_sock(AF_INET6, SOCK_DGRAM, (struct sockaddr*)&sa, addrlen, 1, inuse, &noproto, - 0, 0, 0, NULL, 0, freebind, 0); + 0, 0, 0, NULL, 0, freebind, 0, dscp); } else { struct sockaddr_in* sa = (struct sockaddr_in*)addr; sa->sin_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET, SOCK_DGRAM, (struct sockaddr*)addr, addrlen, 1, inuse, &noproto, - 0, 0, 0, NULL, 0, 0, 0); + 0, 0, 0, NULL, 0, 0, 0, dscp); } return fd; } @@ -1127,7 +1144,7 @@ select_ifport(struct outside_network* outnet, struct pending* pend, my_port = portno = 0; #endif fd = udp_sockport(&pif->addr, pif->addrlen, pif->pfxlen, - portno, &inuse, outnet->rnd); + portno, &inuse, outnet->rnd, outnet->ip_dscp); if(fd == -1 && !inuse) { /* nonrecoverable error making socket */ return 0; @@ -2176,10 +2193,11 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr, { struct sockaddr_storage* addr; socklen_t addrlen; - int i, try, pnum; + int i, try, pnum, dscp; struct port_if* pif; /* create fd */ + dscp = outnet->ip_dscp; for(try = 0; try<1000; try++) { int port = 0; int freebind = 0; @@ -2226,13 +2244,13 @@ fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr, sa.sin6_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET6, SOCK_DGRAM, (struct sockaddr*)&sa, addrlen, 1, &inuse, &noproto, - 0, 0, 0, NULL, 0, freebind, 0); + 0, 0, 0, NULL, 0, freebind, 0, dscp); } else { struct sockaddr_in* sa = (struct sockaddr_in*)addr; sa->sin_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET, SOCK_DGRAM, (struct sockaddr*)addr, addrlen, 1, &inuse, &noproto, - 0, 0, 0, NULL, 0, freebind, 0); + 0, 0, 0, NULL, 0, freebind, 0, dscp); } if(fd != -1) { return fd; @@ -2281,6 +2299,11 @@ setup_comm_ssl(struct comm_point* cp, struct outside_network* outnet, #endif cp->ssl_shake_state = comm_ssl_shake_write; /* https verification */ +#ifdef HAVE_SSL + if(outnet->tls_use_sni) { + (void)SSL_set_tlsext_host_name(cp->ssl, host); + } +#endif #ifdef HAVE_SSL_SET1_HOST if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) { /* because we set SSL_VERIFY_PEER, in netevent in @@ -2324,7 +2347,7 @@ outnet_comm_point_for_tcp(struct outside_network* outnet, sldns_buffer* query, int timeout, int ssl, char* host) { struct comm_point* cp; - int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss); + int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp); if(fd == -1) { return 0; } @@ -2386,7 +2409,7 @@ outnet_comm_point_for_http(struct outside_network* outnet, { /* cp calls cb with err=NETEVENT_DONE when transfer is done */ struct comm_point* cp; - int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss); + int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp); if(fd == -1) { return 0; } diff --git a/services/outside_network.h b/services/outside_network.h index f12b2e5be..c8f6d5724 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -132,12 +132,16 @@ struct outside_network { struct ub_randstate* rnd; /** ssl context to create ssl wrapped TCP with DNS connections */ void* sslctx; + /** if SNI will be used for TLS connections */ + int tls_use_sni; #ifdef USE_DNSTAP /** dnstap environment */ struct dt_env* dtenv; #endif /** maximum segment size of tcp socket */ int tcp_mss; + /** IP_TOS socket option requested on the sockets */ + int ip_dscp; /** * Array of tcp pending used for outgoing TCP connections. @@ -401,6 +405,7 @@ struct serviced_query { * @param do_ip4: service IP4. * @param do_ip6: service IP6. * @param num_tcp: number of outgoing tcp buffers to preallocate. + * @param dscp: DSCP to use. * @param infra: pointer to infra cached used for serviced queries. * @param rnd: stored to create random numbers for serviced queries. * @param use_caps_for_id: enable to use 0x20 bits to encode id randomness. @@ -414,16 +419,17 @@ struct serviced_query { * @param sslctx: context to create outgoing connections with (if enabled). * @param delayclose: if not 0, udp sockets are delayed before timeout closure. * msec to wait on timeouted udp sockets. + * @param tls_use_sni: if SNI is used for TLS connections. * @param dtenv: environment to send dnstap events with (if enabled). * @return: the new structure (with no pending answers) or NULL on error. */ struct outside_network* outside_network_create(struct comm_base* base, size_t bufsize, size_t num_ports, char** ifs, int num_ifs, - int do_ip4, int do_ip6, size_t num_tcp, struct infra_cache* infra, + int do_ip4, int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, - void* sslctx, int delayclose, struct dt_env *dtenv); + void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv); /** * Delete outside_network structure. @@ -542,7 +548,7 @@ size_t serviced_get_mem(struct serviced_query* sq); /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ -int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss); +int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp); /** * Create udp commpoint suitable for sending packets to the destination. diff --git a/services/rpz.c b/services/rpz.c index efb7ad5a8..105f238d0 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -834,6 +834,8 @@ rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, delete_zone = rpz_data_delete_rr(z, dname, dnamelen, rr_type, rdatawl, rdatalen); else if(a != localzone_type_to_rpz_action(z->type)) { + lock_rw_unlock(&z->lock); + lock_rw_unlock(&r->local_zones->lock); return; } lock_rw_unlock(&z->lock); @@ -939,13 +941,16 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist, size_t taglen, struct ub_server_stats* stats) { - struct rpz* r; + struct rpz* r = NULL; + struct auth_zone* a; int ret; enum localzone_type lzt; struct local_zone* z = NULL; struct local_data* ld = NULL; lock_rw_rdlock(&az->rpz_lock); - for(r = az->rpz_first; r; r = r->next) { + for(a = az->rpz_first; a; a = a->rpz_az_next) { + lock_rw_rdlock(&a->lock); + r = a->rpz; if(!r->taglist || taglist_intersect(r->taglist, r->taglistlen, taglist, taglen)) { z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, @@ -963,13 +968,14 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, } if(z) break; - } + } + lock_rw_unlock(&a->lock); /* not found in this auth_zone */ } lock_rw_unlock(&az->rpz_lock); if(!z) - return 0; + return 0; /* not holding auth_zone.lock anymore */ - + log_assert(r); if(r->action_override == RPZ_NO_OVERRIDE_ACTION) lzt = z->type; else @@ -980,6 +986,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, regional_alloc_zero(temp, sizeof(struct local_rrset)); if(!qinfo->local_alias) { lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return 0; /* out of memory */ } qinfo->local_alias->rrset = @@ -987,6 +994,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, sizeof(*r->cname_override)); if(!qinfo->local_alias->rrset) { lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return 0; /* out of memory */ } qinfo->local_alias->rrset->rk.dname = qinfo->qname; @@ -996,6 +1004,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, qinfo, repinfo, r->log_name); stats->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return 0; } @@ -1008,6 +1017,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, repinfo, r->log_name); stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return !qinfo->local_alias; } @@ -1018,6 +1028,7 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, qinfo, repinfo, r->log_name); stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); + lock_rw_unlock(&a->lock); return ret; } diff --git a/services/rpz.h b/services/rpz.h index a404350d3..77a2db55c 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -86,7 +86,8 @@ enum rpz_action { /** * RPZ containing policies. Pointed to from corresponding auth-zone. Part of a * linked list to keep configuration order. Iterating or changing the linked - * list requires the rpz_lock from struct auth_zones. + * list requires the rpz_lock from struct auth_zones. Changing items in this + * struct require the lock from struct auth_zone. */ struct rpz { struct local_zones* local_zones; @@ -97,8 +98,6 @@ struct rpz { struct ub_packed_rrset_key* cname_override; int log; char* log_name; - struct rpz* next; - struct rpz* prev; struct regional* region; }; diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index b8bd1b850..a30523c76 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -187,6 +187,7 @@ usage(void) printf("-c file cert file, default %s\n", ROOT_CERT_FILE); printf("-l list builtin key and cert on stdout\n"); printf("-u name server in https url, default %s\n", URLNAME); + printf("-S do not use SNI for the https connection\n"); printf("-x path pathname to xml in url, default %s\n", XMLNAME); printf("-s path pathname to p7s in url, default %s\n", P7SNAME); printf("-n name signer's subject emailAddress, default %s\n", P7SIGNER); @@ -245,9 +246,7 @@ get_builtin_ds(void) return /* The anchors must start on a new line with ". IN DS and end with \n"[;] * because the makedist script greps on the source here */ -/* anchor 19036 is from 2010 */ /* anchor 20326 is from 2017 */ -". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5\n" ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; } @@ -772,7 +771,7 @@ setup_sslctx(void) /** initiate TLS on a connection */ static SSL* -TLS_initiate(SSL_CTX* sslctx, int fd) +TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni) { X509* x; int r; @@ -788,6 +787,9 @@ TLS_initiate(SSL_CTX* sslctx, int fd) SSL_free(ssl); return NULL; } + if(use_sni) { + (void)SSL_set_tlsext_host_name(ssl, urlname); + } while(1) { ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) @@ -1123,7 +1125,7 @@ read_http_result(SSL* ssl) /** https to an IP addr, return BIO with pathname or NULL */ static BIO* https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, - struct ip_list* src) + struct ip_list* src, int use_sni) { int fd; SSL* ssl; @@ -1137,7 +1139,7 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, SSL_CTX_free(sslctx); return NULL; } - ssl = TLS_initiate(sslctx, fd); + ssl = TLS_initiate(sslctx, fd, urlname, use_sni); if(!ssl) { SSL_CTX_free(sslctx); fd_close(fd); @@ -1161,11 +1163,12 @@ https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, * @param pathname: pathname of file on server to GET. * @param urlname: name to pass as the virtual host for this request. * @param src: if nonNULL, source address to bind to. + * @param use_sni: if SNI will be used. * @return a memory BIO with the file in it. */ static BIO* https(struct ip_list* ip_list, const char* pathname, const char* urlname, - struct ip_list* src) + struct ip_list* src, int use_sni) { struct ip_list* ip; BIO* bio = NULL; @@ -1173,7 +1176,7 @@ https(struct ip_list* ip_list, const char* pathname, const char* urlname, wipe_ip_usage(ip_list); while( (ip = pick_random_ip(ip_list)) ) { ip->used = 1; - bio = https_to_ip(ip, pathname, urlname, src); + bio = https_to_ip(ip, pathname, urlname, src, use_sni); if(bio) break; } if(!bio) { @@ -1929,7 +1932,7 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int port) + int port, int use_sni) { STACK_OF(X509)* cert; @@ -1963,8 +1966,8 @@ do_certupdate(const char* root_anchor_file, const char* root_cert_file, #endif /* fetch the necessary files over HTTPS */ - xml = https(ip_list, xmlname, urlname, src); - p7s = https(ip_list, p7sname, urlname, src); + xml = https(ip_list, xmlname, urlname, src, use_sni); + p7s = https(ip_list, p7sname, urlname, src, use_sni); /* verify and update the root anchor */ verify_and_update_anchor(root_anchor_file, xml, p7s, cert, p7signer); @@ -2235,7 +2238,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, - int force, int res_conf_fallback, int port) + int force, int res_conf_fallback, int port, int use_sni) { struct ub_result* dnskey; int used_builtin = 0; @@ -2278,7 +2281,7 @@ do_root_update_work(const char* root_anchor_file, const char* root_cert_file, probe_date_allows_certupdate(root_anchor_file)) || force) { if(do_certupdate(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, - debugconf, srcaddr, ip4only, ip6only, port)) + debugconf, srcaddr, ip4only, ip6only, port, use_sni)) return 1; return used_builtin; } @@ -2307,8 +2310,9 @@ int main(int argc, char* argv[]) const char* srcaddr = NULL; int dolist=0, ip4only=0, ip6only=0, force=0, port = HTTPS_PORT; int res_conf_fallback = 0; + int use_sni = 1; /* parse the options */ - while( (c=getopt(argc, argv, "46C:FRP:a:b:c:f:hln:r:s:u:vx:")) != -1) { + while( (c=getopt(argc, argv, "46C:FRSP:a:b:c:f:hln:r:s:u:vx:")) != -1) { switch(c) { case 'l': dolist = 1; @@ -2331,6 +2335,9 @@ int main(int argc, char* argv[]) case 'u': urlname = optarg; break; + case 'S': + use_sni = 0; + break; case 'x': xmlname = optarg; break; @@ -2397,5 +2404,5 @@ int main(int argc, char* argv[]) return do_root_update_work(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, debugconf, - srcaddr, ip4only, ip6only, force, res_conf_fallback, port); + srcaddr, ip4only, ip6only, force, res_conf_fallback, port, use_sni); } diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 685f75b39..3fc638cae 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -705,7 +705,7 @@ check_auth(struct config_file* cfg) { int is_rpz = 0; struct auth_zones* az = auth_zones_create(); - if(!az || !auth_zones_apply_cfg(az, cfg, 0i, &is_rpz)) { + if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz)) { fatal_exit("Could not setup authority zones"); } auth_zones_delete(az); diff --git a/smallapp/unbound-control-setup.sh.in b/smallapp/unbound-control-setup.sh.in index f4024b435..3e506e84e 100644 --- a/smallapp/unbound-control-setup.sh.in +++ b/smallapp/unbound-control-setup.sh.in @@ -5,22 +5,22 @@ # Copyright (c) 2008, NLnet Labs. All rights reserved. # # This software is open source. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: -# +# # Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# +# # Neither the name of the NLNET LABS nor the names of its contributors may # be used to endorse or promote products derived from this software without # specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -57,87 +57,144 @@ SVR_BASE=unbound_server # base name for unbound-control keys CTL_BASE=unbound_control +# flag to recreate generated certificates +RECREATE=0 + # we want -rw-r----- access (say you run this as root: grp=yes (server), all=no). umask 0027 # end of options -# functions: -error ( ) { - echo "$0 fatal error: $1" - exit 1 +set -eu + +cleanup() { + echo "removing artifacts" + + rm -rf \ + server.cnf \ + client.cnf \ + "${SVR_BASE}_trust.pem" \ + "${CTL_BASE}_trust.pem" \ + "${SVR_BASE}_trust.srl" } -# check arguments: -while test $# -ne 0; do - case $1 in - -d) - if test $# -eq 1; then error "need argument for -d"; fi - DESTDIR="$2" - shift - ;; - *) - echo "unbound-control-setup.sh - setup SSL keys for unbound-control" - echo " -d dir use directory to store keys and certificates." - echo " default: $DESTDIR" - echo "please run this command using the same user id that the " - echo "unbound daemon uses, it needs read privileges." - exit 1 - ;; - esac - shift +fatal() { + printf "fatal error: $*\n" >/dev/stderr + exit 1 +} + +usage() { + cat < used directory to store keys and certificates (default: $DESTDIR) +-h show help notice +-r recreate certificates +EOF +} + +OPTIND=1 +while getopts 'd:hr' arg; do + case "$arg" in + d) DESTDIR="$OPTARG" ;; + h) usage; exit 1 ;; + r) RECREATE=1 ;; + ?) fatal "'$arg' unknown option" ;; + esac done +shift $((OPTIND - 1)) + -# go!: echo "setup in directory $DESTDIR" -cd "$DESTDIR" || error "could not cd to $DESTDIR" +cd "$DESTDIR" -# create certificate keys; do not recreate if they already exist. -if test -f $SVR_BASE.key; then - echo "$SVR_BASE.key exists" -else - echo "generating $SVR_BASE.key" - openssl genrsa -out $SVR_BASE.key $BITS || error "could not genrsa" -fi -if test -f $CTL_BASE.key; then - echo "$CTL_BASE.key exists" -else - echo "generating $CTL_BASE.key" - openssl genrsa -out $CTL_BASE.key $BITS || error "could not genrsa" +trap cleanup INT + +# === +# Generate server certificate +# === + +# generate private key; do no recreate it if they already exist. +if [ ! -f "$SVR_BASE.key" ]; then + openssl genrsa -out "$SVR_BASE.key" "$BITS" fi -# create self-signed cert for server -echo "[req]" > request.cfg -echo "default_bits=$BITS" >> request.cfg -echo "default_md=$HASH" >> request.cfg -echo "prompt=no" >> request.cfg -echo "distinguished_name=req_distinguished_name" >> request.cfg -echo "" >> request.cfg -echo "[req_distinguished_name]" >> request.cfg -echo "commonName=$SERVERNAME" >> request.cfg +cat >server.cnf < request.cfg -echo "default_bits=$BITS" >> request.cfg -echo "default_md=$HASH" >> request.cfg -echo "prompt=no" >> request.cfg -echo "distinguished_name=req_distinguished_name" >> request.cfg -echo "" >> request.cfg -echo "[req_distinguished_name]" >> request.cfg -echo "commonName=$CLIENTNAME" >> request.cfg + [ ! -f "SVR_BASE.pem" ] || fatal "cannot create server certificate" +fi -test -f request.cfg || error "could not create request.cfg" +# === +# Generate client certificate +# === + +# generate private key; do no recreate it if they already exist. +if [ ! -f "$CTL_BASE.key" ]; then + openssl genrsa -out "$CTL_BASE.key" "$BITS" +fi + +cat >client.cnf <tls_cert_bundle = NULL; cfg->tls_win_cert = 0; cfg->https_port = UNBOUND_DNS_OVER_HTTPS_PORT; + cfg->tls_use_sni = 1; cfg->use_syslog = 1; cfg->log_identity = NULL; /* changed later with argv[0] */ cfg->log_time_ascii = 0; @@ -187,6 +188,7 @@ config_create(void) cfg->so_reuseport = REUSEPORT_DEFAULT; cfg->ip_transparent = 0; cfg->ip_freebind = 0; + cfg->ip_dscp = 0; cfg->num_ifs = 0; cfg->ifs = NULL; cfg->num_out_ifs = 0; @@ -273,7 +275,7 @@ config_create(void) cfg->control_port = UNBOUND_CONTROL_PORT; cfg->control_use_cert = 1; cfg->minimal_responses = 1; - cfg->rrset_roundrobin = 0; + cfg->rrset_roundrobin = 1; cfg->unknown_server_time_limit = 376; cfg->max_udp_size = 4096; if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key"))) @@ -337,6 +339,7 @@ config_create(void) if(!(cfg->redis_server_host = strdup("127.0.0.1"))) goto error_exit; cfg->redis_timeout = 100; cfg->redis_server_port = 6379; + cfg->redis_expire_records = 0; #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET @@ -507,6 +510,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("tls-ciphers:", tls_ciphers) else S_STR("tls-ciphersuites:", tls_ciphersuites) else S_NUMBER_NONZERO("https-port:", https_port) + else S_YNO("tls-use-sni:", tls_use_sni) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -526,6 +530,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("so-reuseport:", so_reuseport) else S_YNO("ip-transparent:", ip_transparent) else S_YNO("ip-freebind:", ip_freebind) + else S_NUMBER_OR_ZERO("ip-dscp:", ip_dscp) else S_MEMSIZE("rrset-cache-size:", rrset_cache_size) else S_POW2("rrset-cache-slabs:", rrset_cache_slabs) else S_YNO("prefetch:", prefetch) @@ -925,6 +930,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "so-reuseport", so_reuseport) else O_YNO(opt, "ip-transparent", ip_transparent) else O_YNO(opt, "ip-freebind", ip_freebind) + else O_DEC(opt, "ip-dscp", ip_dscp) else O_MEM(opt, "rrset-cache-size", rrset_cache_size) else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs) else O_YNO(opt, "prefetch-key", prefetch_key) @@ -960,6 +966,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "tls-ciphers", tls_ciphers) else O_STR(opt, "tls-ciphersuites", tls_ciphersuites) else O_DEC(opt, "https-port", https_port) + else O_YNO(opt, "tls-use-sni", tls_use_sni) else O_YNO(opt, "use-systemd", use_systemd) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) @@ -1135,6 +1142,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "redis-server-host", redis_server_host) else O_DEC(opt, "redis-server-port", redis_server_port) else O_DEC(opt, "redis-timeout", redis_timeout) + else O_YNO(opt, "redis-expire-records", redis_expire_records) #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET diff --git a/util/config_file.h b/util/config_file.h index 30e552803..24d3e4dc1 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -130,6 +130,8 @@ struct config_file { char* tls_ciphersuites; /** port on which to provide DNS over HTTPS service */ int https_port; + /** if SNI is to be used */ + int tls_use_sni; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; @@ -190,6 +192,8 @@ struct config_file { int ip_transparent; /** IP_FREEBIND socket option request on port 53 sockets */ int ip_freebind; + /** IP_TOS socket option requested on port 53 sockets */ + int ip_dscp; /** number of interfaces to open. If 0 default all interfaces. */ int num_ifs; @@ -598,6 +602,8 @@ struct config_file { int redis_server_port; /** timeout (in ms) for communication with the redis server */ int redis_timeout; + /** set timeout on redis records based on DNS response ttl */ + int redis_expire_records; #endif #endif diff --git a/util/configlexer.c b/util/configlexer.c index abbc7198c..c6cadaa8b 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 310 -#define YY_END_OF_BUFFER 311 +#define YY_NUM_RULES 313 +#define YY_END_OF_BUFFER 314 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,344 +363,346 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3054] = +static const flex_int16_t yy_accept[3081] = { 0, - 1, 1, 292, 292, 296, 296, 300, 300, 304, 304, - 1, 1, 311, 308, 1, 290, 290, 309, 2, 309, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 292, 293, 293, 294, 309, 296, 297, 297, - 298, 309, 303, 300, 301, 301, 302, 309, 304, 305, - 305, 306, 309, 307, 291, 2, 295, 309, 307, 308, - 0, 1, 2, 2, 2, 2, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 1, 1, 295, 295, 299, 299, 303, 303, 307, 307, + 1, 1, 314, 311, 1, 293, 293, 312, 2, 312, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 295, 296, 296, 297, 312, 299, 300, 300, + 301, 312, 306, 303, 304, 304, 305, 312, 307, 308, + 308, 309, 312, 310, 294, 2, 298, 312, 310, 311, + 0, 1, 2, 2, 2, 2, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 292, 0, 296, 0, 303, 0, 300, 304, 0, - 307, 0, 2, 2, 307, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 295, 0, 299, 0, 306, 0, 303, 307, 0, + 310, 0, 2, 2, 310, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 307, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 310, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 114, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 122, 308, - 308, 308, 308, 308, 308, 308, 307, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 116, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 124, + 311, 311, 311, 311, 311, 311, 311, 310, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 98, 308, 308, 308, 308, 308, 308, 8, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 115, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 127, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 100, 311, 311, 311, 311, 311, + 311, 8, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 117, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 307, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 285, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 129, 311, 310, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 288, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 307, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 56, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 224, 308, 14, 15, - 308, 19, 18, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 310, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 58, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 226, 311, 14, 15, 311, 19, 18, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 121, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 208, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 3, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 123, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 210, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 3, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 307, - 308, 308, 308, 308, 308, 308, 308, 280, 308, 308, - 279, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 299, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 310, 311, 311, 311, + 311, 311, 311, 311, 282, 311, 311, 281, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 302, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 59, 308, 254, 308, 308, 308, 308, 308, 308, - 308, 308, 286, 287, 308, 308, 308, 308, 308, 60, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 118, 308, 308, 308, 308, - 308, 308, 308, 308, 197, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 21, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 57, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 61, + 311, 256, 311, 311, 311, 311, 311, 311, 311, 311, + 289, 290, 311, 311, 311, 311, 311, 62, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 120, 311, 311, 311, 311, 311, + 311, 311, 311, 199, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 21, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 146, 308, 308, 299, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 96, 308, 308, - 308, 308, 308, 308, 308, 262, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 169, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 145, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 148, 311, 311, 302, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 98, 311, 311, + 311, 311, 311, 311, 311, 264, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 171, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 147, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 95, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 32, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 33, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 57, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 120, 308, 308, 308, - 308, 308, 113, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 97, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 32, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 33, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 59, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 122, 311, - 308, 308, 308, 308, 308, 308, 308, 58, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 227, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 170, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 47, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 115, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 60, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 229, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 172, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 48, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 245, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 51, - 308, 52, 308, 308, 308, 308, 308, 99, 308, 100, - 308, 308, 308, 308, 97, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 7, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 217, 308, 308, 308, 308, 148, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 247, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 52, 311, 53, 311, 311, 311, 311, 311, + 101, 311, 102, 311, 311, 311, 311, 99, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 7, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 228, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 44, 308, 308, 308, 308, 308, 308, 308, 48, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 189, 308, 188, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 16, 17, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 219, 311, 311, 311, 311, + 150, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 230, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 44, 311, 311, 311, 311, + 311, 311, 311, 49, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 191, 311, 190, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 61, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 196, 308, - 308, 308, 308, 308, 308, 102, 308, 101, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 180, 308, - 308, 308, 308, 308, 308, 308, 308, 128, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 80, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 16, 17, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 63, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 198, 311, 311, 311, 311, 311, 311, + 104, 311, 103, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 182, 311, 311, 311, 311, 311, + 311, 311, 311, 130, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 82, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 84, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 55, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 183, 184, 308, 308, 308, 256, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 6, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 260, 308, 308, 308, 308, 308, 308, 281, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 86, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 56, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 185, 186, 311, + 311, 311, 258, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 6, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 42, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 45, 308, 308, 308, 308, 308, 308, 308, 308, - 176, 308, 308, 308, 123, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 201, 308, 177, 308, 308, - 308, 214, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 46, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 125, 107, 308, 108, 308, 308, 308, 106, 308, + 311, 311, 311, 311, 311, 311, 311, 262, 311, 311, + 311, 311, 311, 311, 283, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 42, 311, 311, 311, 311, + 45, 311, 311, 311, 311, 311, 311, 311, 311, 46, + 311, 311, 311, 311, 311, 311, 311, 311, 178, 311, + 311, 311, 125, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 203, 311, 179, 311, 311, 311, 216, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 47, - 308, 308, 308, 308, 308, 308, 308, 143, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 244, - 308, 308, 308, 308, 308, 308, 308, 308, 178, 308, - 308, 308, 308, 308, 181, 308, 187, 308, 308, 308, - 308, 308, 213, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 94, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 119, 308, 308, 308, 308, - 308, 308, 53, 308, 308, 308, 26, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 20, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 127, + 109, 311, 110, 311, 311, 311, 108, 311, 311, 311, + 311, 311, 311, 311, 311, 145, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 246, 311, 311, + 311, 311, 311, 311, 311, 311, 180, 311, 311, 311, + 311, 311, 183, 311, 189, 311, 311, 311, 311, 311, + 215, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 96, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 121, 311, 311, 311, 311, 311, - 308, 308, 308, 27, 36, 308, 153, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 69, 71, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 264, 308, 308, 308, 225, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 109, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 142, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 275, 308, 308, 308, 308, 308, 308, + 311, 54, 311, 311, 311, 26, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 20, 311, 311, 311, 311, + 311, 311, 27, 36, 311, 155, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 71, 73, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 266, 311, 311, 311, 227, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 111, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 144, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 147, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 207, 308, 308, 308, - 308, 308, 308, 308, 308, 284, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 164, 308, 308, - 308, 308, 308, 308, 308, 308, 103, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 159, 308, 171, 308, - 308, 308, 308, 308, 131, 308, 308, 308, 308, 308, - 90, 308, 308, 308, 308, 199, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 277, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 149, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 209, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 286, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 166, 311, 311, + 311, 311, 311, 311, 311, 311, 105, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 161, 311, 173, 311, - 308, 308, 215, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 236, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 124, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 163, - 308, 308, 308, 308, 308, 72, 73, 308, 308, 308, - 308, 308, 54, 308, 308, 308, 308, 308, 79, 172, - 308, 190, 308, 218, 308, 308, 182, 257, 308, 308, - 308, 308, 308, 65, 308, 174, 308, 308, 308, 308, - 308, 9, 308, 308, 308, 93, 308, 308, 308, 308, - 249, 308, 308, 308, 198, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 133, 311, 311, 311, 311, 311, + 92, 311, 311, 311, 311, 201, 311, 311, 311, 311, + 311, 311, 217, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 238, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 126, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 165, + 311, 311, 311, 311, 311, 74, 75, 311, 311, 311, + 311, 311, 55, 311, 311, 311, 311, 311, 81, 174, + 311, 192, 311, 220, 311, 311, 184, 259, 311, 311, + 311, 311, 311, 67, 311, 176, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 162, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 149, 308, 263, 308, 308, - 308, 308, 235, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 209, 308, 308, 308, 308, 255, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 9, 311, 311, 311, 95, 311, 311, 311, 311, + 251, 311, 311, 311, 311, 200, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 164, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 151, 311, 265, 311, + 311, 311, 311, 237, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 211, 311, 311, 311, 311, - 308, 308, 308, 308, 278, 308, 173, 308, 308, 308, - 308, 308, 308, 308, 64, 66, 308, 308, 308, 308, - 308, 308, 308, 92, 308, 308, 308, 308, 247, 308, - 308, 308, 259, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 203, 34, 28, 30, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 35, 308, 29, - 31, 308, 308, 308, 308, 308, 308, 308, 308, 89, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 205, 202, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 257, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 280, 311, 175, 311, 311, + 311, 311, 311, 311, 311, 66, 68, 311, 311, 311, + 311, 311, 311, 311, 94, 311, 311, 311, 311, 249, + 311, 311, 311, 311, 261, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 205, 34, 28, 30, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 35, + 311, 29, 31, 311, 311, 311, 311, 311, 311, 311, + 311, 91, 311, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 63, 308, 308, 126, - 308, 110, 308, 308, 308, 308, 308, 308, 308, 308, - 144, 13, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 273, 308, 276, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 12, 308, 308, 22, 308, 308, - 308, 253, 308, 308, 308, 261, 308, 308, 308, 67, - 308, 211, 308, 308, 308, 308, 204, 308, 308, 62, - 308, 308, 308, 308, 23, 308, 43, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 158, - 157, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 207, + 204, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 65, 311, + 311, 128, 311, 112, 311, 311, 311, 311, 311, 311, + 311, 311, 146, 13, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 275, 311, 278, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 12, 311, 311, 22, + 311, 311, 311, 255, 311, 311, 311, 311, 263, 311, + 311, 311, 69, 311, 213, 311, 311, 311, 311, 206, + 311, 311, 64, 311, 311, 311, 311, 23, 311, 43, - 206, 200, 308, 216, 308, 308, 265, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 74, 308, 308, 308, 248, 308, - 308, 308, 308, 186, 308, 308, 308, 308, 210, 308, - 308, 308, 308, 308, 308, 308, 308, 282, 283, 155, - 308, 308, 68, 308, 308, 308, 308, 165, 308, 308, - 104, 105, 308, 308, 308, 308, 150, 308, 152, 308, - 191, 308, 308, 308, 308, 156, 308, 308, 219, 308, - 308, 308, 308, 308, 308, 308, 133, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 160, 159, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 208, 202, 311, 218, 311, 311, 267, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 76, 311, 311, + 311, 250, 311, 311, 311, 311, 188, 311, 311, 311, + 311, 212, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 284, 285, 157, 311, 311, 70, 311, 311, 311, + 311, 167, 311, 311, 106, 107, 311, 311, 311, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 226, 308, - 308, 308, 308, 308, 308, 308, 24, 308, 258, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 192, 308, 308, 246, 308, 277, 308, 185, 308, 308, - 308, 308, 49, 308, 308, 308, 308, 4, 308, 308, - 308, 117, 132, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 222, 37, 38, 308, 308, 308, 308, 308, 308, - 308, 266, 308, 308, 308, 308, 308, 308, 234, 308, - 308, 308, 308, 308, 308, 308, 195, 308, 308, 308, + 152, 311, 154, 311, 193, 311, 311, 311, 311, 158, + 311, 311, 221, 311, 311, 311, 311, 311, 311, 311, + 135, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 228, 311, 311, 311, 311, 311, 311, 311, + 24, 311, 260, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 194, 311, 311, 248, 311, 279, + 311, 187, 311, 311, 311, 311, 50, 311, 311, 311, + 311, 4, 311, 311, 311, 311, 119, 134, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 224, 37, 38, 311, - 308, 308, 308, 308, 308, 308, 77, 308, 50, 252, - 308, 223, 308, 308, 308, 308, 11, 308, 308, 308, - 308, 308, 116, 308, 308, 308, 308, 193, 81, 308, - 40, 308, 308, 308, 308, 308, 308, 308, 308, 161, - 308, 308, 308, 308, 308, 135, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 233, 308, 308, 308, 308, - 129, 308, 308, 111, 112, 308, 308, 308, 83, 87, - 82, 308, 75, 308, 308, 308, 308, 308, 10, 308, - 308, 308, 250, 308, 308, 308, 308, 289, 39, 308, - 308, 308, 308, 308, 160, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 311, 311, 268, 311, 311, 311, + 311, 311, 311, 236, 311, 311, 311, 311, 311, 311, + 311, 197, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 79, 311, 51, 254, 311, 225, 311, 311, 311, + 311, 11, 311, 311, 311, 311, 311, 311, 118, 311, + 311, 311, 311, 195, 83, 311, 40, 311, 311, 311, + 311, 311, 311, 311, 311, 163, 311, 311, 311, 311, + 311, 137, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 235, 311, 311, 311, 311, 131, 311, 311, 113, + 114, 311, 311, 311, 85, 89, 84, 311, 77, 311, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 88, 86, 308, - 76, 274, 308, 308, 308, 308, 308, 308, 308, 179, - 308, 308, 308, 308, 308, 194, 308, 308, 308, 308, - 308, 308, 308, 308, 151, 70, 308, 308, 308, 308, - 308, 267, 308, 308, 308, 308, 308, 308, 308, 230, - 308, 308, 229, 130, 308, 85, 136, 137, 140, 141, - 138, 139, 78, 308, 251, 308, 308, 308, 308, 154, - 308, 308, 308, 308, 308, 221, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 311, 311, 311, 311, 10, 311, 311, 311, 252, 287, + 311, 311, 311, 311, 292, 39, 311, 311, 311, 311, + 311, 162, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 90, 88, 311, 78, 276, 311, + 311, 311, 311, 311, 311, 311, 181, 311, 311, 311, + 311, 311, 196, 311, 311, 311, 311, 311, 311, 311, + 311, 153, 72, 311, 311, 311, 311, 311, 269, 311, + 311, 311, 311, 311, 311, 311, 232, 311, 311, 231, + 132, 311, 87, 138, 139, 142, 143, 140, 141, 80, - 308, 308, 308, 167, 166, 41, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 91, 308, 220, 308, 243, 271, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 5, 308, - 308, 212, 308, 308, 272, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 231, 25, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 232, 308, - 308, 308, 134, 308, 308, 308, 308, 308, 308, 308, - 308, 168, 308, 175, 308, 308, 308, 308, 308, 308, + 311, 253, 311, 311, 311, 311, 156, 311, 311, 311, + 311, 311, 223, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 169, 168, 41, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 93, 311, 222, + 311, 245, 273, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 5, 311, 311, 214, 311, + 311, 274, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 233, 25, 311, 311, 311, 311, 311, 311, 311, - 308, 308, 308, 268, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 288, 308, 308, 239, 308, 308, 308, 308, 308, - 269, 308, 308, 308, 308, 308, 308, 270, 308, 308, - 308, 237, 308, 240, 241, 308, 308, 308, 308, 308, - 238, 242, 0 + 311, 311, 311, 311, 311, 234, 311, 311, 311, 136, + 311, 311, 311, 311, 311, 311, 311, 311, 170, 311, + 177, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 270, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 291, 311, + 311, 241, 311, 311, 311, 311, 311, 271, 311, 311, + 311, 311, 311, 311, 272, 311, 311, 311, 239, 311, + 242, 243, 311, 311, 311, 311, 311, 240, 244, 0 } ; static const YY_CHAR yy_ec[256] = @@ -743,15 +745,15 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3068] = +static const flex_int16_t yy_base[3095] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2338, 2174, 81, 5953, 5953, 5953, 96, 52, + 90, 112, 2247, 2197, 81, 6009, 6009, 6009, 96, 52, 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, 76, 144, 141, 114, 151, 124, 167, 173, 186, 161, - 190, 117, 1854, 5953, 5953, 5953, 107, 1734, 5953, 5953, - 5953, 162, 1567, 1365, 5953, 5953, 5953, 212, 1315, 5953, - 5953, 5953, 167, 1197, 5953, 218, 5953, 222, 134, 1088, + 190, 117, 1869, 6009, 6009, 6009, 107, 1639, 6009, 6009, + 6009, 162, 1581, 1486, 6009, 6009, 6009, 212, 1444, 6009, + 6009, 6009, 167, 1373, 6009, 218, 6009, 222, 134, 1256, 226, 182, 0, 233, 0, 0, 194, 227, 85, 184, 220, 234, 235, 136, 230, 222, 241, 242, 207, 243, 250, 245, 228, 246, 249, 252, 264, 254, 266, 269, @@ -760,672 +762,680 @@ static const flex_int16_t yy_base[3068] = 290, 293, 296, 299, 303, 301, 309, 308, 311, 313, 321, 315, 320, 322, 324, 323, 332, 331, 344, 348, 335, 337, 329, 347, 357, 349, 353, 352, 354, 369, - 367, 947, 380, 811, 383, 784, 394, 734, 687, 387, + 367, 1200, 380, 1091, 383, 782, 394, 612, 508, 387, 339, 398, 402, 0, 394, 396, 404, 399, 360, 400, 403, 410, 405, 406, 407, 409, 411, 422, 419, 425, 426, 434, 433, 437, 438, 435, 440, 442, 443, 432, 456, 379, 459, 449, 448, 460, 461, 463, 466, 467, - 468, 477, 470, 478, 489, 484, 493, 497, 480, 498, + 482, 469, 470, 468, 491, 477, 493, 495, 492, 503, - 501, 496, 508, 504, 511, 512, 507, 503, 513, 515, - 518, 520, 521, 523, 522, 525, 526, 528, 530, 538, - 540, 531, 539, 533, 552, 547, 554, 551, 553, 557, - 556, 560, 568, 569, 561, 570, 572, 573, 576, 579, - 588, 589, 590, 574, 581, 591, 585, 593, 594, 595, - 596, 605, 608, 607, 610, 617, 598, 616, 618, 620, - 621, 622, 631, 623, 633, 627, 640, 624, 638, 643, - 632, 641, 646, 650, 651, 658, 645, 661, 662, 663, - 665, 666, 668, 676, 653, 671, 674, 675, 677, 678, - 680, 681, 684, 682, 693, 685, 695, 689, 708, 704, + 504, 480, 511, 509, 516, 521, 517, 494, 519, 506, + 522, 496, 523, 520, 527, 529, 530, 534, 535, 542, + 539, 540, 543, 537, 552, 548, 557, 549, 556, 560, + 553, 563, 571, 574, 554, 581, 564, 577, 578, 583, + 586, 590, 587, 585, 588, 595, 592, 594, 596, 598, + 597, 605, 615, 612, 613, 625, 614, 610, 621, 622, + 623, 601, 633, 632, 628, 637, 643, 634, 641, 644, + 646, 648, 647, 649, 651, 661, 654, 664, 657, 671, + 666, 672, 669, 681, 667, 656, 677, 678, 679, 682, + 685, 680, 689, 684, 690, 696, 691, 701, 694, 711, - 697, 716, 705, 706, 712, 718, 710, 719, 726, 727, - 743, 741, 731, 740, 711, 745, 747, 752, 749, 753, - 756, 758, 759, 760, 762, 769, 764, 5953, 766, 774, - 781, 782, 783, 790, 771, 789, 791, 772, 802, 798, - 799, 803, 825, 801, 809, 807, 814, 813, 5953, 815, - 817, 849, 820, 823, 839, 836, 819, 837, 843, 845, - 847, 859, 850, 855, 857, 873, 860, 862, 869, 870, - 874, 872, 884, 880, 886, 888, 890, 897, 892, 893, - 894, 898, 901, 902, 903, 908, 905, 910, 911, 912, - 916, 923, 920, 924, 926, 928, 933, 932, 929, 939, + 707, 700, 722, 714, 702, 713, 724, 716, 715, 725, + 730, 744, 746, 735, 736, 717, 747, 754, 757, 758, + 748, 760, 761, 750, 764, 766, 774, 775, 6009, 770, + 767, 777, 780, 783, 786, 779, 792, 796, 797, 806, + 802, 799, 807, 829, 803, 812, 809, 819, 817, 6009, + 818, 822, 853, 825, 826, 844, 841, 839, 827, 842, + 849, 851, 877, 854, 859, 861, 882, 862, 863, 864, + 866, 873, 874, 893, 814, 888, 890, 891, 898, 894, + 895, 896, 906, 897, 899, 900, 907, 910, 909, 914, + 922, 920, 925, 926, 927, 924, 928, 935, 932, 931, - 944, 951, 931, 949, 954, 956, 946, 959, 957, 963, - 964, 965, 967, 977, 972, 973, 974, 975, 979, 981, - 985, 983, 986, 987, 989, 994, 993, 1000, 991, 1002, - 1006, 1008, 5953, 1009, 1011, 1012, 1013, 1014, 1015, 5953, - 1017, 1016, 1019, 1024, 1029, 1031, 1021, 1028, 1039, 1040, - 1041, 1044, 1051, 1046, 1049, 1054, 1053, 1056, 1057, 1060, - 1058, 1063, 1065, 1064, 1070, 1071, 1074, 1091, 5953, 1073, - 1083, 1078, 1075, 1084, 1085, 1103, 1101, 1104, 1102, 1106, - 1119, 1114, 1120, 1121, 1076, 1125, 1122, 1127, 1131, 1129, - 1133, 1132, 1134, 1135, 1136, 1138, 1137, 1143, 5953, 1150, + 943, 944, 952, 934, 951, 954, 956, 960, 949, 961, + 963, 967, 968, 964, 970, 978, 975, 974, 980, 981, + 982, 983, 985, 988, 991, 990, 993, 994, 995, 999, + 1005, 1003, 1011, 1004, 6009, 1013, 1006, 1015, 1016, 1017, + 1018, 6009, 1020, 1019, 1021, 1028, 1032, 1042, 1029, 1031, + 1043, 1044, 1046, 1033, 1055, 1050, 1053, 1058, 1057, 1059, + 1061, 1063, 1062, 1067, 1065, 1068, 1069, 1074, 1075, 1094, + 6009, 1077, 1081, 1078, 1079, 1087, 1086, 1106, 1089, 1107, + 1105, 1092, 1122, 1109, 1123, 1117, 1099, 1128, 1118, 1130, + 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1138, 1141, 1144, - 1154, 1161, 1153, 1160, 1162, 1163, 1164, 1077, 1166, 1167, - 1169, 1168, 1173, 1184, 1174, 1188, 1183, 1139, 1185, 1187, - 1189, 1190, 1191, 1192, 1204, 1196, 1206, 1212, 1219, 1215, - 1217, 1224, 1201, 1220, 1221, 1225, 1227, 1228, 1229, 1230, - 1232, 1233, 1242, 1239, 1238, 1240, 1241, 1246, 1254, 1247, - 1249, 1259, 1250, 1260, 1255, 1264, 1265, 1258, 1274, 5953, - 1281, 1276, 1277, 1278, 1279, 1283, 1287, 1290, 1291, 1288, - 1294, 1293, 1296, 1300, 1301, 1302, 1297, 1303, 1305, 1314, - 1318, 1319, 1328, 1320, 1327, 1311, 1330, 1337, 1333, 1340, - 1336, 1341, 1348, 1343, 1345, 1335, 1357, 1349, 1350, 1360, + 6009, 1146, 1159, 1166, 1152, 1153, 1151, 1161, 1162, 1165, + 1167, 1169, 1172, 1173, 1179, 1186, 1176, 1190, 1185, 1189, + 1187, 1191, 1193, 1196, 1194, 1195, 1208, 1204, 1215, 1219, + 1222, 1221, 1224, 1231, 1205, 1209, 1227, 1228, 1229, 1230, + 1234, 1235, 1236, 1238, 1246, 1241, 1243, 1244, 1248, 1250, + 1257, 1254, 1252, 1260, 1253, 1273, 1262, 1265, 1277, 1278, + 1275, 1269, 6009, 1285, 1267, 1287, 1288, 1286, 1293, 1294, + 1295, 1297, 1298, 1300, 1301, 1302, 1304, 1307, 1308, 1309, + 1310, 1312, 1323, 1320, 1318, 1331, 1330, 1332, 1334, 1335, + 1342, 1338, 1345, 1341, 1346, 1354, 1347, 1350, 1356, 1364, - 1352, 1361, 1363, 1364, 1375, 1366, 1371, 1380, 1383, 1373, - 1385, 1377, 1386, 1381, 1389, 1390, 1391, 1392, 1400, 1393, - 1395, 1401, 1402, 1403, 1405, 1406, 1411, 1415, 1413, 1419, - 1414, 1420, 1425, 1422, 1428, 1423, 1430, 1432, 1436, 1434, - 1438, 1437, 1443, 1445, 1447, 1446, 1453, 1455, 1457, 1458, - 1460, 1461, 1465, 1469, 1471, 1473, 1474, 1475, 1477, 1476, - 1480, 1486, 1479, 1485, 1491, 1495, 1492, 1497, 1498, 1501, - 1502, 5953, 1503, 1510, 1505, 1508, 1514, 1515, 1516, 1523, - 1519, 1521, 1518, 1520, 1524, 1546, 5953, 1532, 5953, 5953, - 1531, 5953, 5953, 1529, 1533, 1537, 1550, 1541, 1556, 1549, + 1340, 1357, 1362, 1365, 1368, 1370, 1371, 1378, 1379, 1381, + 1388, 1383, 1355, 1390, 1393, 1394, 1395, 1397, 1398, 1399, + 1400, 1407, 1402, 1405, 1404, 1408, 1403, 1409, 1410, 1411, + 1430, 1417, 1425, 1427, 1429, 1432, 1433, 1434, 1435, 1438, + 1439, 1440, 1441, 1442, 1459, 1447, 1449, 1454, 1462, 1461, + 1452, 1465, 1469, 1470, 1472, 1480, 1481, 1464, 1483, 1484, + 1473, 1488, 1489, 1491, 1492, 1494, 1499, 1500, 1502, 1504, + 1503, 1506, 1507, 1511, 1512, 6009, 1514, 1525, 1515, 1522, + 1520, 1523, 1527, 1534, 1529, 1531, 1536, 1530, 1539, 1560, + 6009, 1541, 6009, 6009, 1540, 6009, 6009, 1542, 1543, 1546, - 1543, 1559, 1552, 1569, 1574, 1530, 1562, 1564, 1570, 1571, - 1577, 1588, 1584, 1589, 1579, 1597, 1595, 1599, 1601, 1603, - 1604, 1607, 1608, 1609, 1611, 1610, 1613, 1617, 1619, 1620, - 1622, 1615, 1623, 1631, 1634, 1636, 1643, 5953, 1641, 1644, - 1653, 1649, 1656, 1648, 1652, 1655, 1660, 1662, 1657, 1664, - 1666, 1667, 1668, 1670, 1672, 1675, 1679, 1676, 5953, 1677, - 1680, 1685, 1684, 1688, 1692, 1694, 1678, 1696, 1698, 1707, - 1699, 1702, 1704, 1709, 177, 1710, 5953, 1712, 1716, 1719, - 1720, 1722, 1724, 1726, 1727, 1728, 1729, 1730, 1624, 1732, - 1733, 1737, 1736, 1735, 1739, 1741, 1751, 1742, 1754, 1761, + 1563, 1552, 1570, 1547, 1550, 1561, 1544, 1583, 1584, 1573, + 1566, 1574, 1589, 1576, 1590, 1595, 1598, 1599, 1597, 1606, + 1608, 1611, 1610, 1617, 1618, 1609, 1619, 1622, 1623, 1625, + 1624, 1627, 1630, 1633, 1634, 1631, 1629, 1636, 1646, 1637, + 1651, 1654, 6009, 1652, 1661, 1662, 1659, 1666, 1665, 1663, + 1667, 1671, 1673, 1674, 1676, 1678, 1677, 1679, 1681, 1686, + 1685, 1696, 1687, 6009, 1688, 1691, 177, 1699, 1692, 1702, + 1703, 1707, 1689, 1709, 1710, 1717, 1712, 1715, 1719, 1720, + 1722, 1724, 6009, 1726, 1732, 1733, 1734, 1736, 1725, 1740, + 1737, 1741, 1742, 1743, 1744, 1747, 1749, 1756, 1753, 1752, - 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1770, 1775, 1771, - 1780, 1776, 1783, 1794, 1791, 1778, 1781, 1798, 1779, 1804, - 1808, 1806, 1792, 1799, 1813, 1811, 1815, 1816, 1817, 1819, - 1820, 1821, 1823, 1826, 1827, 1828, 1830, 5953, 1829, 1832, - 5953, 1836, 1837, 1859, 1838, 1840, 1842, 1851, 1841, 1861, - 1845, 1855, 1867, 1863, 1879, 1871, 1882, 1874, 1876, 1883, - 1887, 1888, 1884, 1890, 1893, 1900, 1903, 1907, 1901, 1914, - 1909, 1910, 1912, 1932, 1911, 1913, 1920, 1915, 1916, 1919, - 1928, 1921, 1922, 1925, 1937, 1943, 1945, 5953, 1953, 1954, - 1948, 1926, 1956, 1959, 1960, 1843, 1961, 1962, 1969, 1965, + 1755, 1758, 1763, 1767, 1770, 1777, 1771, 1773, 1778, 1779, + 1780, 1783, 1784, 1786, 1794, 1795, 1785, 1796, 1792, 1807, + 1808, 1793, 1804, 1809, 1810, 1811, 1813, 1822, 1817, 1818, + 1824, 1825, 1826, 1828, 1830, 1833, 1835, 1839, 1840, 1841, + 1831, 1843, 1845, 1847, 6009, 1849, 1851, 6009, 1852, 1855, + 1877, 1856, 1858, 1859, 1861, 1864, 1867, 1868, 1870, 1885, + 1878, 1897, 1881, 1899, 1879, 1901, 1875, 1900, 1904, 1902, + 1907, 1908, 1917, 1919, 1910, 1925, 1928, 1912, 1924, 1926, + 1945, 1927, 1930, 1933, 1929, 1931, 1937, 1940, 1936, 1938, + 1949, 1952, 1955, 1956, 6009, 1967, 1963, 1958, 1962, 1978, - 1966, 1968, 1971, 1972, 1975, 1976, 1980, 1981, 1977, 1982, - 1993, 5953, 1984, 5953, 1992, 1994, 1996, 1997, 1998, 2002, - 2003, 2004, 5953, 5953, 2005, 2012, 2018, 2007, 2013, 5953, - 2020, 2028, 2029, 2031, 2023, 2024, 2025, 2032, 2035, 2046, - 2038, 2047, 2039, 2048, 2042, 5953, 2049, 2051, 2055, 2057, - 2059, 2061, 2063, 2064, 5953, 2065, 2067, 2073, 2080, 2070, - 2077, 2078, 2081, 2087, 2082, 2085, 2089, 2090, 2092, 2097, - 2101, 2094, 2098, 2102, 2112, 5953, 2108, 2110, 2117, 2113, - 2115, 2116, 2119, 2120, 2121, 2129, 2122, 2123, 2127, 2131, - 2140, 2142, 2137, 2143, 2145, 2135, 2146, 2147, 2153, 2151, + 1969, 1973, 6009, 1976, 1979, 1980, 1987, 1982, 1983, 1984, + 1986, 1990, 1993, 1995, 1994, 1999, 2005, 1997, 2015, 6009, + 2000, 6009, 1998, 2001, 2010, 2017, 2018, 2019, 2020, 2022, + 6009, 6009, 2023, 2024, 2037, 2032, 2030, 6009, 2035, 2045, + 2046, 2049, 2040, 2041, 2042, 2048, 2055, 2056, 2059, 2057, + 2069, 2060, 2062, 2064, 6009, 2070, 2065, 2074, 2076, 2072, + 2080, 2082, 2083, 6009, 2084, 2089, 2091, 2098, 2094, 2099, + 2096, 2100, 2101, 2104, 2106, 2107, 2109, 2110, 2117, 2119, + 2115, 2116, 2124, 2132, 6009, 2118, 2128, 2137, 2130, 2134, + 2138, 2140, 2139, 2141, 2142, 2143, 2144, 2150, 2151, 2152, - 2155, 2156, 2157, 5953, 2158, 2162, 256, 2165, 2163, 2168, - 2166, 2167, 2173, 2170, 2187, 2189, 2186, 2192, 2188, 2184, - 2185, 2195, 2196, 2197, 2201, 2202, 2203, 5953, 2205, 2206, - 2207, 2209, 2212, 2210, 2221, 5953, 2213, 2223, 2232, 2227, - 2215, 2233, 2219, 2239, 2241, 2242, 2243, 2244, 2245, 2246, - 5953, 2252, 2248, 2254, 2255, 2258, 2260, 2261, 2266, 2267, - 2268, 2271, 2269, 2272, 2273, 2274, 2276, 2277, 2280, 2288, - 2278, 2289, 2290, 2291, 5953, 2300, 2292, 2296, 2301, 2302, - 2305, 2314, 2310, 2312, 2315, 2318, 2330, 2320, 2316, 2337, - 2322, 2327, 2336, 2340, 2341, 2342, 2350, 2344, 2354, 2356, + 2159, 2162, 2154, 2161, 2165, 2158, 2167, 2170, 2176, 2173, + 2174, 2175, 2178, 6009, 2179, 2185, 256, 2186, 2180, 2187, + 2188, 2192, 2190, 2196, 2208, 2210, 2206, 2205, 2209, 2212, + 2213, 2215, 2217, 2218, 2221, 2219, 2222, 6009, 2224, 2225, + 2229, 2230, 2236, 2231, 2238, 6009, 2248, 2235, 2256, 2246, + 2244, 2259, 2250, 2260, 2261, 2263, 2264, 2266, 2265, 2267, + 6009, 2273, 2274, 2275, 2277, 2282, 2281, 2284, 2288, 2289, + 2290, 2294, 2292, 2291, 2296, 2295, 2299, 2300, 2305, 2301, + 2302, 2310, 2312, 2313, 6009, 2323, 2315, 2319, 2324, 2326, + 2325, 2340, 2328, 2332, 2335, 2341, 2349, 2338, 2336, 2356, - 2348, 2352, 2357, 2358, 2362, 2360, 2363, 2375, 2377, 2379, - 2372, 2373, 2385, 2397, 2388, 5953, 2392, 2383, 2390, 2400, - 2407, 2380, 2405, 2403, 2404, 2411, 2412, 2414, 2421, 2418, - 2416, 2420, 2422, 2423, 2426, 2425, 2429, 2433, 2440, 2432, - 2442, 2444, 5953, 2445, 2450, 2449, 2451, 2453, 2436, 2458, - 2461, 2459, 2463, 2465, 2467, 2469, 2470, 2471, 2472, 2474, - 2476, 2475, 5953, 2479, 2480, 2485, 2487, 2488, 2494, 2497, - 2500, 2498, 2504, 2505, 2506, 2507, 5953, 2514, 2515, 2512, - 2516, 2518, 2519, 2521, 2524, 2525, 5953, 2526, 2528, 2535, - 2536, 2531, 5953, 2539, 2534, 2540, 2541, 2542, 2543, 2549, + 2352, 2355, 2361, 2365, 2364, 2366, 2373, 2363, 2375, 2377, + 2367, 2378, 2379, 2381, 2385, 2383, 2386, 2395, 2398, 2394, + 2402, 2391, 2412, 2417, 2408, 6009, 2416, 2403, 2410, 2421, + 2432, 2424, 2422, 2429, 2423, 2427, 2435, 2438, 2425, 2446, + 2441, 2443, 2445, 2447, 2448, 2449, 2450, 2453, 2455, 2464, + 2456, 2466, 2467, 6009, 2470, 2472, 2461, 2474, 2476, 2479, + 2482, 2484, 2486, 2487, 2488, 2490, 2492, 2493, 2494, 2495, + 2497, 2501, 2498, 6009, 2502, 2504, 2510, 2507, 2513, 2517, + 2522, 2523, 2529, 2526, 2520, 2533, 2534, 2511, 6009, 2542, + 2543, 2535, 2550, 2545, 2532, 2546, 2548, 2549, 6009, 2552, - 2544, 2547, 2552, 2557, 2559, 2555, 2563, 5953, 2565, 2575, - 2567, 2571, 2573, 2576, 2577, 2579, 2583, 2587, 2582, 5953, - 2599, 2598, 2595, 2609, 2586, 2600, 2601, 2607, 2604, 2610, - 2611, 5953, 2613, 2614, 2616, 2617, 2620, 2621, 2623, 2635, - 2625, 2628, 2630, 2633, 2636, 2638, 2640, 2643, 2641, 2649, - 2652, 2653, 2655, 2659, 2656, 2660, 2663, 2671, 2672, 2673, - 2675, 5953, 2678, 2679, 2680, 2664, 2684, 2685, 2686, 2687, - 2690, 2691, 2692, 2694, 2695, 2702, 2712, 2703, 2704, 2707, - 2709, 2713, 2715, 2716, 2717, 2718, 2725, 2724, 2721, 2733, - 2730, 2732, 2740, 2731, 2739, 2741, 2742, 2743, 2744, 2748, + 2553, 2561, 2562, 2558, 6009, 2565, 2560, 2563, 2566, 2567, + 2568, 2570, 2573, 2575, 2577, 2579, 2588, 2582, 2585, 6009, + 2589, 2597, 2592, 2594, 2598, 2599, 2601, 2602, 2604, 2619, + 2611, 6009, 2624, 2622, 2623, 2633, 2628, 2614, 2630, 2631, + 2635, 2637, 2629, 6009, 2638, 2639, 2641, 2643, 2646, 2645, + 2651, 2660, 2655, 2656, 2658, 2661, 2662, 2664, 2666, 2673, + 2669, 2668, 2678, 2681, 2679, 2685, 2689, 2688, 2691, 2698, + 2699, 2700, 2702, 6009, 2705, 2706, 2707, 2690, 2697, 2712, + 2713, 2714, 2717, 2607, 2718, 2719, 2721, 2730, 2732, 2722, + 2734, 2725, 2728, 2736, 2738, 2739, 2741, 2746, 2754, 2750, - 2745, 2751, 2752, 2756, 2767, 2768, 2770, 2759, 2753, 2769, - 2775, 5953, 2771, 2778, 2779, 2780, 2784, 2785, 2792, 2787, - 2788, 2795, 2803, 2804, 2789, 2797, 2791, 2812, 2814, 5953, - 2798, 5953, 2805, 2817, 2818, 2827, 2810, 5953, 2824, 5953, - 2825, 2832, 2820, 2829, 5953, 2834, 2833, 2835, 2838, 2840, - 2841, 2842, 2843, 2846, 2849, 2847, 2851, 2852, 2856, 2854, - 2858, 2859, 2863, 2870, 2867, 2872, 2873, 2875, 2879, 2880, - 2881, 2882, 5953, 2886, 2883, 2888, 2889, 2891, 2893, 2894, - 2898, 2896, 2899, 2904, 2906, 2907, 2910, 2915, 2923, 2914, - 2928, 5953, 2921, 2925, 2926, 2930, 5953, 2932, 2929, 2938, + 2749, 2757, 2752, 2753, 2762, 2760, 2763, 2765, 2766, 2767, + 2768, 2772, 2769, 2773, 2774, 2778, 2791, 2783, 2792, 2780, + 2794, 2795, 2798, 6009, 2797, 2801, 2799, 2802, 2805, 2810, + 2807, 2819, 2811, 2816, 2818, 2820, 2827, 2825, 2828, 2830, + 2838, 2834, 6009, 2835, 6009, 2836, 2837, 2839, 2847, 2843, + 6009, 2849, 6009, 2851, 2856, 2844, 2852, 6009, 2858, 2859, + 2862, 2864, 2866, 2867, 2870, 2869, 2872, 2875, 2873, 2877, + 2878, 2880, 2883, 2885, 2890, 2887, 2891, 2897, 2894, 2900, + 2901, 2903, 2904, 2907, 2909, 2912, 6009, 2914, 2916, 2910, + 2918, 2919, 2921, 2922, 2926, 2927, 2929, 2930, 2935, 2932, - 2940, 2933, 2931, 2942, 2943, 2950, 2944, 2948, 2952, 2960, - 2959, 2962, 5953, 2963, 2961, 2967, 2971, 2975, 2973, 2976, - 2979, 2988, 2984, 2983, 2985, 2986, 2987, 2990, 2997, 3000, - 2999, 3001, 2998, 3006, 3009, 3010, 3002, 3012, 3013, 3014, - 3016, 5953, 3017, 3018, 3025, 3022, 3023, 3024, 3026, 5953, - 3035, 3036, 3039, 3040, 3037, 3045, 3027, 3046, 3048, 3050, - 3053, 3049, 3054, 5953, 3062, 5953, 3055, 3063, 3068, 3072, - 3069, 3073, 3075, 3084, 3074, 3076, 3085, 3088, 3079, 3086, - 3092, 3089, 3094, 3096, 3110, 3100, 3097, 3107, 3109, 3111, - 3112, 3114, 5953, 5953, 3113, 3115, 3118, 3116, 3121, 3124, + 2941, 2945, 2942, 2944, 2954, 6009, 2951, 2956, 2953, 2957, + 6009, 2961, 2958, 2959, 2967, 2962, 2969, 2970, 2971, 2977, + 2979, 2973, 2980, 2981, 2984, 2992, 6009, 2988, 2994, 2990, + 3000, 3002, 3001, 3004, 3007, 3016, 3009, 3012, 3013, 3017, + 3018, 3019, 3026, 3027, 3023, 3030, 3029, 3032, 3034, 3035, + 3039, 3041, 3042, 3044, 3045, 6009, 3043, 3047, 3054, 3046, + 3049, 3050, 3051, 6009, 3068, 3053, 3065, 3074, 3056, 3063, + 3076, 3078, 3079, 3080, 3082, 3081, 3083, 6009, 3086, 6009, + 3084, 3091, 3098, 3103, 3092, 3087, 3107, 3112, 3108, 3113, + 3114, 3115, 3116, 3117, 3118, 3122, 3125, 3129, 3130, 3140, - 3122, 3131, 3134, 3135, 3136, 3145, 5953, 3141, 3142, 3146, - 3148, 3164, 3147, 3150, 3166, 3162, 3169, 3170, 5953, 3151, - 3159, 3178, 3161, 3177, 3181, 5953, 3179, 5953, 3182, 3183, - 3184, 3185, 3190, 3191, 3193, 3195, 3189, 3205, 3206, 3198, - 3196, 3197, 3208, 3212, 3219, 3214, 3217, 3220, 5953, 3222, - 3223, 3224, 3226, 3229, 3230, 3232, 3237, 5953, 3239, 3245, - 3240, 3246, 3242, 3248, 3249, 3250, 3252, 3253, 3251, 3255, - 3262, 3266, 3267, 3268, 3272, 3273, 3280, 5953, 3277, 3281, - 3289, 3287, 3284, 3291, 3292, 3288, 3294, 3297, 3299, 3298, - 3300, 3301, 3304, 3302, 3305, 3306, 3318, 3320, 3321, 3311, + 3123, 3131, 3128, 3136, 3126, 3145, 6009, 6009, 3147, 3148, + 3151, 3149, 3153, 3154, 3155, 3164, 3158, 3160, 3161, 3167, + 3175, 6009, 3177, 3168, 3171, 3179, 3186, 3181, 3188, 3195, + 3192, 3196, 3194, 6009, 3198, 3201, 3208, 3203, 3204, 3211, + 6009, 3206, 6009, 3209, 3210, 3212, 3217, 3219, 3221, 3222, + 3223, 3225, 3233, 3241, 3230, 3239, 3231, 3240, 3242, 3244, + 3253, 3245, 3248, 3250, 6009, 3255, 3249, 3252, 3260, 3266, + 3270, 3263, 3259, 6009, 3262, 3274, 3276, 3278, 3279, 3281, + 3283, 3284, 3287, 3288, 3285, 3286, 3302, 3289, 3292, 3303, + 3294, 3305, 3312, 6009, 3313, 3307, 3320, 3322, 3315, 3317, - 3328, 3312, 3324, 3329, 3331, 3332, 3338, 3339, 3342, 3347, - 3335, 3349, 3356, 3337, 3344, 3360, 3362, 3367, 3350, 5953, - 3369, 3364, 3374, 3370, 3372, 3377, 3378, 3386, 3371, 3373, - 3381, 3394, 3387, 5953, 3397, 3389, 3398, 3399, 3402, 3411, - 3404, 3392, 3406, 3409, 3414, 3415, 3418, 3419, 3420, 3423, - 3424, 5953, 5953, 3426, 3428, 3430, 5953, 3433, 3429, 3437, - 3435, 3436, 3432, 3445, 3446, 3443, 3448, 3451, 3454, 5953, - 3456, 3464, 3459, 3460, 3468, 3471, 3473, 3475, 3474, 3466, - 3463, 3476, 3478, 3484, 3485, 3489, 3493, 3492, 3491, 3494, - 5953, 3495, 3496, 3499, 3501, 3497, 3505, 5953, 3503, 3509, + 3323, 3324, 3325, 3328, 3330, 3329, 3331, 3333, 3335, 3332, + 3342, 3336, 3349, 3338, 3352, 3358, 3359, 3339, 3355, 3362, + 3363, 3366, 3365, 3369, 3372, 3376, 3373, 3385, 3386, 3377, + 3380, 3389, 3390, 3397, 3392, 6009, 3402, 3382, 3405, 3403, + 3404, 3409, 3410, 3412, 3413, 3414, 3415, 3422, 3417, 6009, + 3424, 3419, 3429, 3430, 3421, 3444, 3439, 3420, 3442, 3446, + 3443, 3449, 3447, 3451, 3452, 3455, 3456, 6009, 6009, 3458, + 3459, 3461, 6009, 3462, 3460, 3472, 3465, 3468, 3475, 3478, + 3474, 3477, 3479, 3482, 3486, 6009, 3487, 3494, 3491, 3493, + 3501, 3504, 3497, 3505, 3506, 3499, 3507, 3509, 3513, 3512, - 3517, 3510, 3508, 3521, 3524, 3527, 3528, 3529, 3531, 3532, - 3533, 3534, 3536, 3541, 3539, 3546, 3547, 3538, 5953, 3551, - 3552, 3555, 3558, 3562, 3565, 3572, 3573, 3569, 3571, 3570, - 3580, 5953, 3577, 3579, 3578, 3581, 3591, 3586, 3593, 3584, - 5953, 3588, 3592, 3594, 5953, 3598, 3602, 3605, 3610, 3597, - 3613, 3612, 3614, 3615, 3616, 5953, 3622, 5953, 3620, 3624, - 3628, 5953, 3626, 3630, 3632, 3634, 3631, 3639, 3641, 3648, - 3635, 3643, 3645, 3649, 3650, 3651, 3659, 3657, 3658, 3660, - 3662, 5953, 3665, 3661, 3664, 3669, 3671, 3672, 3674, 3681, - 3683, 5953, 5953, 3688, 5953, 3682, 3689, 3690, 5953, 3692, + 3514, 3517, 3528, 3529, 3524, 3520, 3527, 6009, 3525, 3532, + 3533, 3537, 3534, 3541, 6009, 3539, 3542, 3543, 3548, 3551, + 3555, 3552, 3561, 3562, 3564, 3565, 3566, 3567, 3569, 3576, + 3573, 3572, 3575, 3579, 3581, 6009, 3582, 3586, 3590, 3593, + 6009, 3595, 3604, 3605, 3606, 3596, 3607, 3601, 3614, 6009, + 3609, 3611, 3616, 3617, 3624, 3619, 3626, 3623, 6009, 3625, + 3627, 3629, 6009, 3630, 3631, 3639, 3644, 3636, 3651, 3647, + 3649, 3652, 3648, 6009, 3650, 6009, 3659, 3660, 3663, 6009, + 3661, 3665, 3666, 3668, 3669, 3670, 3674, 3681, 3676, 3682, + 3683, 3684, 3685, 3687, 3694, 3686, 3690, 3693, 3695, 6009, - 3694, 3697, 3693, 3698, 3700, 3704, 3701, 5953, 3711, 3712, - 3713, 3715, 3716, 3717, 3719, 3721, 3720, 3723, 3722, 5953, - 3725, 3727, 3735, 3726, 3730, 3740, 3742, 3736, 5953, 3748, - 3749, 3752, 3754, 3755, 5953, 3757, 5953, 3758, 3760, 3761, - 3763, 3764, 5953, 3772, 3767, 3778, 3768, 3775, 3782, 3785, - 3786, 3771, 3779, 3793, 3792, 3788, 3795, 5953, 3796, 3798, - 3805, 3806, 3802, 3800, 3814, 3811, 3819, 3810, 3823, 3813, - 3827, 3829, 3824, 3831, 3832, 5953, 3834, 3835, 3838, 3845, - 3840, 3841, 5953, 3842, 3847, 3851, 5953, 3848, 3855, 3857, - 3863, 3858, 3860, 3864, 3865, 3867, 5953, 3869, 3871, 3868, + 3705, 3697, 3698, 3712, 3710, 3702, 3700, 3718, 3716, 6009, + 6009, 3725, 6009, 3727, 3720, 3722, 6009, 3726, 3728, 3737, + 3732, 3733, 3743, 3740, 3744, 6009, 3746, 3735, 3747, 3750, + 3751, 3754, 3756, 3757, 3758, 3760, 3761, 6009, 3762, 3764, + 3771, 3763, 3765, 3774, 3773, 3779, 6009, 3783, 3787, 3786, + 3790, 3791, 6009, 3792, 6009, 3793, 3794, 3796, 3800, 3797, + 6009, 3805, 3806, 3810, 3812, 3813, 3815, 3814, 3821, 3822, + 3823, 3830, 3827, 3828, 3825, 6009, 3829, 3831, 3835, 3836, + 3839, 3842, 3850, 3846, 3847, 3852, 3853, 3856, 3859, 3857, + 3863, 3865, 3867, 3860, 6009, 3868, 3873, 3866, 3882, 3879, - 3872, 3884, 3885, 5953, 5953, 3886, 5953, 3887, 3873, 3891, - 3890, 3870, 3898, 3900, 3901, 3903, 3897, 3909, 3912, 3911, - 3920, 3921, 3928, 3923, 3925, 3918, 5953, 5953, 3930, 3931, - 3927, 3935, 3939, 3937, 3941, 3948, 3945, 3943, 3952, 3953, - 3960, 5953, 3961, 3947, 3962, 5953, 3955, 3963, 3956, 3969, - 3970, 3964, 3971, 3972, 3973, 3974, 3977, 3981, 3983, 3986, - 3988, 3989, 3990, 3994, 3993, 3995, 4003, 5953, 3997, 4000, - 4004, 4007, 4008, 4010, 4012, 4015, 4016, 5953, 4011, 4018, - 4021, 4022, 4020, 4025, 4039, 4042, 4044, 4031, 4036, 4047, - 4045, 4051, 4053, 5953, 4055, 4052, 4056, 4059, 4062, 4064, + 3883, 6009, 3884, 3885, 3886, 6009, 3889, 3892, 3894, 3898, + 3893, 3899, 3900, 3901, 3904, 6009, 3906, 3908, 3905, 3909, + 3921, 3913, 6009, 6009, 3923, 6009, 3924, 3910, 3928, 3927, + 3907, 3931, 3935, 3937, 3939, 3936, 3944, 3947, 3941, 3957, + 3959, 3964, 3960, 3961, 3950, 6009, 6009, 3966, 3967, 3962, + 3973, 3974, 3976, 3977, 3984, 3980, 3986, 3990, 3991, 3998, + 6009, 3979, 3981, 3999, 6009, 3994, 3997, 4000, 4005, 4004, + 4006, 4010, 4007, 4008, 4011, 4015, 4012, 4017, 4025, 4018, + 4022, 4021, 4031, 4028, 4029, 4038, 6009, 4035, 4039, 4042, + 4045, 4046, 4048, 4050, 4051, 4052, 6009, 4049, 4054, 4056, - 4065, 4067, 4068, 4070, 4073, 4074, 4078, 4081, 4075, 4082, - 4083, 4085, 5953, 4087, 4094, 4090, 4096, 4098, 4099, 4100, - 4101, 4107, 4108, 4110, 4111, 4113, 5953, 4114, 4115, 4118, - 4119, 4121, 4122, 4124, 4128, 5953, 4132, 4126, 4129, 4135, - 4137, 4140, 4142, 4144, 4147, 4148, 4151, 5953, 4152, 4157, - 4160, 4153, 4159, 4161, 4170, 4163, 5953, 4174, 4176, 4173, - 4183, 4166, 4186, 4185, 4191, 4167, 4184, 4195, 4193, 4194, - 4199, 4200, 4201, 4210, 4211, 4212, 5953, 4206, 5953, 4213, - 4217, 4220, 4223, 4207, 5953, 4219, 4221, 4231, 4225, 4233, - 5953, 4234, 4228, 4236, 4238, 5953, 4245, 4247, 4239, 4241, + 4062, 4055, 4065, 4076, 4080, 4082, 4057, 4074, 4083, 4085, + 4089, 4086, 6009, 4090, 4092, 4093, 4096, 4099, 4101, 4102, + 4104, 4105, 4107, 4109, 4110, 4117, 4119, 4111, 4120, 4114, + 4122, 6009, 4126, 4133, 4127, 4135, 4130, 4060, 4136, 4137, + 4143, 4140, 4145, 4144, 4150, 6009, 4147, 4151, 4154, 4152, + 4158, 4161, 4165, 4162, 4164, 6009, 4172, 4155, 4166, 4168, + 4176, 4178, 4181, 4183, 4186, 4185, 4188, 6009, 4189, 4192, + 4193, 4190, 4199, 4200, 4204, 4202, 6009, 4205, 4211, 4203, + 4219, 4214, 4223, 4220, 4222, 4224, 4226, 4229, 4231, 4233, + 4234, 4236, 4230, 4247, 4252, 4250, 6009, 4237, 6009, 4251, - 4255, 4256, 5953, 4261, 4262, 4258, 4249, 4270, 4267, 4268, - 4271, 4269, 4273, 4274, 4275, 4283, 4278, 4279, 5953, 4285, - 4288, 4295, 4296, 4290, 4280, 4298, 4304, 4297, 5953, 4306, - 4305, 4307, 4308, 4309, 4312, 4314, 4321, 4317, 4316, 5953, - 4320, 4324, 4337, 4318, 4328, 5953, 5953, 4333, 4338, 4340, - 4335, 4341, 5953, 4344, 4351, 4346, 4350, 4353, 5953, 5953, - 4355, 5953, 4352, 5953, 4357, 4356, 5953, 5953, 4359, 4360, - 4363, 4369, 4366, 5953, 4376, 5953, 4373, 4377, 4379, 4380, - 4382, 5953, 4381, 4384, 4389, 5953, 4383, 4391, 4390, 4394, - 5953, 4398, 4393, 4399, 5953, 4403, 4406, 4410, 4401, 4407, + 4255, 4259, 4261, 4258, 6009, 4248, 4263, 4266, 4267, 4268, + 6009, 4269, 4271, 4273, 4272, 6009, 4283, 4285, 4274, 4289, + 4276, 4291, 6009, 4296, 4297, 4293, 4305, 4308, 4304, 4306, + 4309, 4307, 4311, 4312, 4313, 4321, 4316, 4317, 6009, 4323, + 4326, 4333, 4334, 4328, 4318, 4336, 4342, 4335, 6009, 4344, + 4343, 4345, 4346, 4347, 4350, 4352, 4359, 4355, 4354, 6009, + 4358, 4362, 4375, 4356, 4366, 6009, 6009, 4371, 4376, 4378, + 4373, 4379, 6009, 4382, 4389, 4384, 4388, 4391, 6009, 6009, + 4393, 6009, 4390, 6009, 4395, 4394, 6009, 6009, 4397, 4398, + 4401, 4407, 4404, 6009, 4414, 6009, 4411, 4415, 4417, 4418, - 4413, 4420, 4411, 4414, 4421, 4424, 4423, 4426, 4435, 4437, - 4439, 4441, 4430, 4427, 4444, 4446, 4450, 4448, 4452, 4453, - 4454, 4456, 4457, 4459, 4462, 4463, 4465, 4468, 4466, 4467, - 4479, 4469, 4471, 4481, 4483, 4472, 4482, 4486, 4485, 4490, - 4493, 4488, 4495, 4496, 5953, 4500, 4501, 4503, 4505, 4506, - 4507, 4514, 4516, 4522, 4524, 5953, 4527, 5953, 4529, 4513, - 4532, 4517, 5953, 4533, 4534, 4535, 4538, 4537, 4539, 4540, - 4541, 4544, 4545, 4547, 5953, 4550, 4551, 4555, 4566, 5953, - 4560, 4568, 4554, 4556, 4570, 4571, 4575, 4576, 4579, 4578, - 4581, 4583, 4590, 4585, 4587, 4588, 4591, 4589, 4592, 4599, + 4420, 6009, 4419, 4422, 4427, 6009, 4421, 4429, 4428, 4432, + 6009, 4436, 4439, 4431, 4437, 6009, 4443, 4449, 4451, 4441, + 4445, 4452, 4458, 4453, 4461, 4462, 4463, 4464, 4465, 4472, + 4477, 4479, 4481, 4473, 4469, 4483, 4489, 4491, 4482, 4486, + 4493, 4495, 4497, 4499, 4501, 4503, 4504, 4505, 4507, 4508, + 4506, 4516, 4509, 4510, 4523, 4519, 4512, 4524, 4527, 4525, + 4531, 4532, 4534, 4535, 4536, 6009, 4537, 4539, 4541, 4553, + 4546, 4542, 4552, 4559, 4563, 4565, 6009, 4567, 6009, 4569, + 4554, 4571, 4573, 6009, 4574, 4575, 4576, 4577, 4578, 4579, + 4581, 4580, 4584, 4585, 4588, 6009, 4591, 4586, 4595, 4606, - 4598, 4606, 4608, 4614, 5953, 4601, 5953, 4615, 4611, 4616, - 4617, 4618, 4619, 4621, 5953, 5953, 4622, 4626, 4632, 4633, - 4625, 4635, 4641, 5953, 4636, 4646, 4653, 4644, 5953, 4627, - 4638, 4655, 5953, 4649, 4656, 4659, 4667, 4660, 4669, 4670, - 4662, 4664, 4672, 4674, 5953, 5953, 5953, 5953, 4676, 4678, - 4682, 4683, 4685, 4686, 4688, 4690, 4687, 5953, 4692, 5953, - 5953, 4694, 4701, 4693, 4703, 4704, 4705, 4709, 4711, 5953, - 4710, 4715, 4716, 4713, 4723, 4727, 4729, 4730, 4714, 4731, - 4739, 4737, 4740, 4738, 4743, 4745, 4747, 5953, 5953, 4750, - 4752, 4754, 4761, 4759, 4762, 4771, 4766, 4768, 4769, 4772, + 6009, 4601, 4612, 4596, 4607, 4609, 4613, 4615, 4617, 4618, + 4619, 4621, 4623, 4630, 4626, 4627, 4629, 4631, 4632, 4637, + 4640, 4639, 4647, 4649, 4654, 6009, 4643, 6009, 4650, 4655, + 4656, 4658, 4660, 4661, 4663, 6009, 6009, 4664, 4666, 4671, + 4672, 4667, 4676, 4673, 6009, 4679, 4686, 4689, 4680, 6009, + 4683, 4691, 4692, 4696, 6009, 4697, 4699, 4700, 4702, 4703, + 4706, 4710, 4707, 4713, 4714, 4718, 6009, 6009, 6009, 6009, + 4719, 4721, 4724, 4725, 4727, 4728, 4730, 4732, 4733, 6009, + 4735, 6009, 6009, 4736, 4742, 4744, 4745, 4746, 4749, 4751, + 4753, 6009, 4752, 4757, 4759, 4755, 4766, 4772, 4756, 4769, - 4774, 4756, 4781, 4785, 4783, 4780, 5953, 4784, 4790, 5953, - 4786, 5953, 4791, 4794, 4758, 4795, 4797, 4800, 4801, 4803, - 5953, 5953, 4804, 4805, 4807, 4811, 4813, 4815, 4814, 4817, - 4818, 5953, 4819, 5953, 4820, 4827, 4822, 4828, 4836, 4839, - 4841, 4843, 4838, 4844, 5953, 4845, 4847, 5953, 4848, 4850, - 4851, 5953, 4855, 4858, 4862, 5953, 4868, 4859, 4865, 5953, - 4872, 5953, 4869, 4873, 4874, 4881, 5953, 4876, 4882, 5953, - 4885, 4888, 4890, 4879, 5953, 4877, 5953, 4891, 4898, 4899, - 4902, 4894, 4904, 4905, 4906, 4907, 4914, 4913, 4915, 5953, - 5953, 4923, 4910, 4916, 4920, 4925, 4932, 4927, 4930, 4929, + 4773, 4775, 4782, 4778, 4779, 4777, 4781, 4785, 4788, 6009, + 6009, 4789, 4795, 4796, 4804, 4800, 4801, 4813, 4808, 4809, + 4810, 4811, 4815, 4797, 4822, 4827, 4820, 4817, 6009, 4828, + 4831, 6009, 4824, 6009, 4830, 4832, 4838, 4839, 4840, 4841, + 4842, 4844, 6009, 6009, 4845, 4846, 4848, 4855, 4851, 4859, + 4847, 4858, 4860, 6009, 4861, 6009, 4863, 4865, 4872, 4873, + 4880, 4881, 4884, 4886, 4882, 4887, 6009, 4888, 4889, 6009, + 4891, 4893, 4894, 6009, 4899, 4896, 4904, 4906, 6009, 4911, + 4908, 4913, 6009, 4916, 6009, 4901, 4917, 4919, 4926, 6009, + 4923, 4927, 6009, 4930, 4933, 4934, 4935, 6009, 4924, 6009, - 5953, 5953, 4937, 5953, 4935, 4938, 5953, 4939, 4944, 4945, - 4946, 4948, 4949, 4953, 4955, 4956, 4957, 4958, 4959, 4965, - 4977, 4961, 4975, 4981, 4983, 4985, 4987, 4979, 4989, 4990, - 4991, 4992, 4993, 4996, 5953, 4998, 4999, 5000, 5953, 5004, - 5005, 5007, 5009, 5953, 5020, 5015, 5021, 5022, 5953, 5008, - 5028, 5025, 5023, 5033, 5040, 5036, 5035, 5953, 5953, 5953, - 5037, 5046, 5953, 5051, 5038, 5041, 5043, 5953, 5047, 5053, - 5953, 5953, 5054, 5055, 5057, 5068, 5953, 5058, 5953, 5059, - 5953, 5067, 5069, 5075, 5073, 5953, 5078, 5084, 5953, 5087, - 5090, 5092, 5093, 5081, 5094, 5095, 5953, 5103, 5099, 5105, + 4936, 4939, 4940, 4945, 4946, 4950, 4947, 4951, 4952, 4959, + 4955, 4958, 6009, 6009, 4971, 4957, 4963, 4964, 4967, 4974, + 4972, 4975, 4977, 6009, 6009, 4981, 6009, 4982, 4985, 6009, + 4978, 4989, 4987, 4991, 4993, 4994, 4995, 4999, 5001, 5007, + 5002, 5000, 5012, 5023, 5006, 5027, 5028, 5030, 5032, 5034, + 5008, 5036, 5037, 5013, 5038, 5040, 5042, 6009, 5044, 5045, + 5046, 6009, 5050, 5051, 5053, 5054, 6009, 5056, 5061, 5063, + 5065, 6009, 5066, 5068, 5069, 5071, 5075, 5082, 5078, 5077, + 5079, 6009, 6009, 6009, 5087, 5089, 6009, 5094, 5085, 5095, + 5096, 6009, 5097, 5098, 6009, 6009, 5100, 5102, 5101, 5109, - 5107, 5096, 5098, 5111, 5108, 5115, 5112, 5118, 5953, 5120, - 5122, 5123, 5129, 5121, 5131, 5125, 5953, 5133, 5953, 5134, - 5135, 5138, 5141, 5136, 5139, 5063, 5144, 5143, 5154, 5151, - 5953, 5156, 5160, 5953, 5157, 5953, 5162, 5953, 5163, 5164, - 5165, 5166, 5953, 5168, 5172, 5173, 5174, 5953, 5175, 5177, - 5183, 5953, 5953, 5184, 5194, 5185, 5186, 5198, 5200, 5187, - 5202, 5195, 5203, 5189, 5211, 5210, 5213, 5214, 5216, 5217, - 5218, 5953, 5953, 5953, 5223, 5222, 5230, 5227, 5228, 5238, - 5233, 5953, 5236, 5239, 5237, 5246, 5243, 5248, 5953, 5245, - 5249, 5250, 5252, 5254, 5255, 5259, 5953, 5263, 5270, 5266, + 6009, 5104, 6009, 5105, 6009, 5107, 5108, 5117, 5115, 6009, + 5122, 5128, 6009, 5131, 5134, 5136, 5137, 5119, 5123, 5138, + 6009, 5147, 5140, 5144, 5151, 5148, 5152, 5153, 5154, 5161, + 5156, 5160, 6009, 5163, 5157, 5164, 5170, 5165, 5168, 5174, + 6009, 5176, 6009, 5177, 5178, 5182, 5179, 5180, 5185, 5187, + 5192, 5189, 5199, 5193, 6009, 5201, 5203, 6009, 5205, 6009, + 5207, 6009, 5208, 5209, 5211, 5213, 6009, 5217, 5210, 5214, + 5219, 6009, 5220, 5222, 5223, 5229, 6009, 6009, 5231, 5239, + 5235, 5232, 5244, 5246, 5241, 5248, 5249, 5250, 5252, 5262, + 5234, 5257, 5255, 5264, 5265, 5270, 6009, 6009, 6009, 5266, - 5258, 5273, 5277, 5280, 5282, 5283, 5953, 5285, 5953, 5953, - 5286, 5953, 5287, 5289, 5290, 5291, 5953, 5294, 5296, 5295, - 5297, 5299, 5953, 5307, 5300, 5302, 5303, 5953, 5953, 5314, - 5953, 5317, 5318, 5319, 5328, 5324, 5326, 5330, 5327, 5953, - 5325, 5331, 5335, 5337, 5338, 5953, 5339, 5341, 5342, 5343, - 5346, 5350, 5352, 5353, 5354, 5953, 5356, 5348, 5371, 5367, - 5953, 5355, 5373, 5953, 5953, 5358, 5377, 5378, 5953, 5953, - 5953, 5380, 5953, 5384, 5390, 5394, 5398, 5381, 5953, 5400, - 5389, 5397, 5953, 5393, 5401, 5403, 5405, 5953, 5953, 5402, - 5409, 5406, 5414, 5415, 5953, 5417, 5419, 5424, 5432, 5434, + 5273, 5280, 5277, 5279, 5287, 5283, 6009, 5284, 5285, 5286, + 5294, 5291, 5296, 6009, 5292, 5297, 5298, 5299, 5303, 5300, + 5307, 6009, 5311, 5314, 5317, 5306, 5321, 5325, 5328, 5330, + 5331, 6009, 5333, 6009, 6009, 5318, 6009, 5334, 5335, 5338, + 5339, 6009, 5342, 5344, 5343, 5345, 5347, 5349, 6009, 5359, + 5350, 5352, 5361, 6009, 6009, 5365, 6009, 5368, 5369, 5362, + 5378, 5373, 5375, 5380, 5377, 6009, 5381, 5384, 5386, 5387, + 5388, 6009, 5389, 5390, 5392, 5393, 5396, 5395, 5398, 5400, + 5402, 6009, 5403, 5405, 5423, 5419, 6009, 5406, 5418, 6009, + 6009, 5428, 5430, 5351, 6009, 6009, 6009, 5433, 6009, 5435, - 5422, 5436, 5438, 5445, 5418, 5426, 5440, 5442, 5443, 5449, - 5446, 5453, 5462, 5458, 5460, 5467, 5468, 5953, 5953, 5470, - 5953, 5953, 5472, 5475, 5477, 5479, 5481, 5483, 5485, 5953, - 5420, 5487, 5488, 5489, 5490, 5953, 5492, 5494, 5491, 5495, - 5500, 5498, 5502, 5504, 5953, 5953, 5496, 5513, 5505, 5518, - 5507, 5953, 5520, 5515, 5521, 5522, 5524, 5526, 5529, 5953, - 5528, 5530, 5953, 5953, 5532, 5953, 5953, 5953, 5953, 5953, - 5953, 5953, 5953, 5533, 5953, 5537, 5541, 5549, 5552, 5953, - 5538, 5546, 5457, 5542, 5553, 5953, 5554, 5557, 5558, 5564, - 5556, 5559, 5565, 5569, 5572, 5570, 5573, 5574, 5575, 5579, + 5439, 5443, 5447, 5438, 6009, 5449, 5446, 5451, 6009, 6009, + 5450, 5452, 5453, 5455, 6009, 6009, 5456, 5459, 5457, 5460, + 5462, 6009, 5467, 5471, 5473, 5476, 5479, 5468, 5482, 5484, + 5492, 5494, 5489, 5490, 5495, 5497, 5498, 5499, 5501, 5510, + 5506, 5508, 5520, 5517, 6009, 6009, 5524, 6009, 6009, 5526, + 5528, 5530, 5532, 5534, 5536, 5538, 6009, 5539, 5541, 5542, + 5410, 5543, 6009, 5545, 5547, 5544, 5549, 5509, 5552, 5550, + 5555, 6009, 6009, 5556, 5557, 5558, 5566, 5561, 6009, 5568, + 5575, 5572, 5573, 5570, 5576, 5577, 6009, 5581, 5582, 6009, + 6009, 5580, 6009, 6009, 6009, 6009, 6009, 6009, 6009, 6009, - 5576, 5580, 5582, 5953, 5953, 5953, 5581, 5583, 5593, 5585, - 5602, 5604, 5607, 5609, 5596, 5599, 5610, 5611, 5612, 5614, - 5618, 5626, 5621, 5622, 5623, 5624, 5630, 5625, 5627, 5632, - 5953, 5636, 5953, 5637, 5953, 5953, 5642, 5647, 5645, 5638, - 5649, 5656, 5652, 5654, 5658, 5659, 5661, 5663, 5953, 5665, - 5668, 5953, 5669, 5670, 5953, 5671, 5673, 5675, 5672, 5676, - 5679, 5682, 5690, 5681, 5953, 5953, 5684, 5692, 5693, 5697, - 5700, 5707, 5702, 5706, 5708, 5709, 5699, 5721, 5953, 5717, - 5719, 5723, 5953, 5725, 5720, 5726, 5727, 5728, 5736, 5731, - 5732, 5953, 5734, 5953, 5738, 5740, 5743, 5741, 5742, 5744, + 5585, 6009, 5583, 5598, 5600, 5602, 6009, 5590, 5603, 5511, + 5604, 5592, 6009, 5605, 5607, 5609, 5608, 5611, 5615, 5617, + 5619, 5621, 5620, 5622, 5625, 5623, 5629, 5627, 5631, 5637, + 6009, 6009, 6009, 5635, 5633, 5644, 5645, 5656, 5657, 5660, + 5662, 5646, 5650, 5663, 5664, 5667, 5652, 5668, 5679, 5671, + 5674, 5675, 5676, 5682, 5678, 5684, 5688, 6009, 5689, 6009, + 5690, 6009, 6009, 5692, 5694, 5697, 5698, 5706, 5707, 5699, + 5702, 5709, 5711, 5719, 5721, 6009, 5710, 5712, 6009, 5722, + 5723, 6009, 5714, 5724, 5725, 5726, 5730, 5733, 5735, 5737, + 5746, 6009, 6009, 5738, 5741, 5747, 5749, 5750, 5757, 5753, + + 5756, 5760, 5762, 5763, 5770, 6009, 5769, 5771, 5773, 6009, + 5774, 5775, 5777, 5779, 5780, 5787, 5783, 5788, 6009, 5785, + 6009, 5790, 5791, 5792, 5793, 5795, 5796, 5804, 5806, 5807, + 6009, 5808, 5815, 5810, 5817, 5821, 5819, 5823, 5813, 5826, + 5828, 5835, 5839, 5836, 5840, 5827, 5844, 5831, 6009, 5842, + 5845, 6009, 5848, 5851, 5852, 5854, 5857, 6009, 5860, 5855, + 5861, 5862, 5866, 5868, 6009, 5870, 5877, 5872, 6009, 5878, + 6009, 6009, 5881, 5882, 5884, 5888, 5890, 6009, 6009, 6009, + 5917, 5924, 5931, 5938, 5945, 88, 5952, 5959, 5966, 5973, + 5980, 5987, 5994, 6001 - 5753, 5751, 5755, 5953, 5758, 5762, 5759, 5764, 5766, 5769, - 5770, 5771, 5773, 5775, 5779, 5783, 5785, 5786, 5776, 5789, - 5787, 5953, 5797, 5788, 5953, 5798, 5799, 5791, 5800, 5801, - 5953, 5809, 5805, 5811, 5812, 5815, 5816, 5953, 5818, 5821, - 5822, 5953, 5826, 5953, 5953, 5827, 5825, 5828, 5834, 5836, - 5953, 5953, 5953, 5861, 5868, 5875, 5882, 5889, 88, 5896, - 5903, 5910, 5917, 5924, 5931, 5938, 5945 } ; -static const flex_int16_t yy_def[3068] = +static const flex_int16_t yy_def[3095] = { 0, - 3053, 1, 3054, 3054, 3055, 3055, 3056, 3056, 3057, 3057, - 3058, 3058, 3053, 3059, 3053, 3053, 3053, 3053, 3060, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3061, 3053, 3053, 3053, 3061, 3062, 3053, 3053, - 3053, 3062, 3063, 3053, 3053, 3053, 3053, 3063, 3064, 3053, - 3053, 3053, 3064, 3065, 3053, 3066, 3053, 3065, 3065, 3059, - 3059, 3053, 3067, 3060, 3067, 3060, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3080, 1, 3081, 3081, 3082, 3082, 3083, 3083, 3084, 3084, + 3085, 3085, 3080, 3086, 3080, 3080, 3080, 3080, 3087, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3088, 3080, 3080, 3080, 3088, 3089, 3080, 3080, + 3080, 3089, 3090, 3080, 3080, 3080, 3080, 3090, 3091, 3080, + 3080, 3080, 3091, 3092, 3080, 3093, 3080, 3092, 3092, 3086, + 3086, 3080, 3094, 3087, 3094, 3087, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3061, 3061, 3062, 3062, 3063, 3063, 3053, 3064, 3064, - 3065, 3065, 3066, 3066, 3065, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3088, 3088, 3089, 3089, 3090, 3090, 3080, 3091, 3091, + 3092, 3092, 3093, 3093, 3092, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3065, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3092, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3065, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3092, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3065, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3080, 3086, 3092, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3065, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3053, - 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3092, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3080, 3080, 3086, 3080, 3080, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3065, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3092, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3053, 3059, 3059, 3065, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3092, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3080, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3053, 3059, 3053, 3059, 3059, 3059, 3053, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3080, 3086, 3080, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3053, 3053, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3080, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3080, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3080, 3086, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3053, - 3059, 3053, 3059, 3053, 3059, 3059, 3053, 3053, 3059, 3059, - 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3080, 3080, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3080, 3080, + 3086, 3080, 3086, 3080, 3086, 3086, 3080, 3080, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3080, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3080, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3053, 3053, 3053, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, - 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3080, 3080, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3086, 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3053, - 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3080, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3080, - 3053, 3053, 3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3053, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3053, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, - 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3080, 3086, 3080, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3080, 3080, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3080, 3080, 3086, 3086, 3086, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3053, 3059, 3053, 3059, 3053, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, + 3080, 3086, 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3080, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3080, 3086, 3080, + 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3080, 3080, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3053, 3053, - 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3053, 3059, - 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3053, 3053, - 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3053, 3053, 3059, - 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3080, 3080, 3086, 3080, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3086, 3080, 3080, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3080, + 3080, 3086, 3086, 3086, 3080, 3080, 3080, 3086, 3080, 3086, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3053, 3059, - 3053, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3053, 3053, 3059, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3053, - 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3080, 3080, + 3086, 3086, 3086, 3086, 3080, 3080, 3086, 3086, 3086, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3080, 3086, 3080, 3080, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3080, + 3080, 3086, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, - 3059, 3059, 3059, 3053, 3053, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3053, 3059, 3053, 3059, 3053, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3053, 3053, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, - 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, + 3086, 3080, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, + 3086, 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3080, + 3086, 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3080, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + + 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3080, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3080, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3086, 3080, 3086, + 3086, 3080, 3086, 3086, 3086, 3086, 3086, 3080, 3086, 3086, + 3086, 3086, 3086, 3086, 3080, 3086, 3086, 3086, 3080, 3086, + 3080, 3080, 3086, 3086, 3086, 3086, 3086, 3080, 3080, 0, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080 - 3059, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, 3059, - 3059, 3053, 3059, 3059, 3053, 3059, 3059, 3059, 3059, 3059, - 3053, 3059, 3059, 3059, 3059, 3059, 3059, 3053, 3059, 3059, - 3059, 3053, 3059, 3053, 3053, 3059, 3059, 3059, 3059, 3059, - 3053, 3053, 0, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3053, 3053, 3053, 3053 } ; -static const flex_int16_t yy_nxt[5994] = +static const flex_int16_t yy_nxt[6050] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1450,7 +1460,7 @@ static const flex_int16_t yy_nxt[5994] = 71, 125, 136, 137, 126, 122, 123, 71, 124, 71, 130, 127, 131, 71, 138, 128, 129, 71, 139, 159, - 156, 132, 140, 146, 951, 146, 146, 133, 146, 75, + 156, 132, 140, 146, 945, 146, 146, 133, 146, 75, 71, 75, 75, 151, 75, 151, 151, 70, 151, 70, 70, 154, 70, 71, 75, 71, 75, 75, 70, 75, 71, 71, 172, 71, 157, 75, 76, 71, 71, 166, @@ -1479,617 +1489,622 @@ static const flex_int16_t yy_nxt[5994] = 71, 71, 275, 71, 270, 71, 71, 263, 277, 271, 278, 71, 71, 281, 272, 280, 269, 276, 279, 71, 273, 274, 71, 71, 71, 286, 71, 284, 285, 71, - 71, 71, 293, 71, 291, 292, 288, 294, 287, 289, - 71, 71, 282, 71, 290, 297, 300, 71, 301, 295, + 71, 71, 71, 71, 291, 292, 288, 298, 287, 289, + 71, 302, 282, 71, 290, 71, 293, 300, 301, 294, - 302, 296, 71, 298, 304, 306, 71, 299, 307, 71, - 71, 71, 303, 305, 71, 310, 71, 71, 312, 313, - 71, 71, 311, 308, 71, 71, 71, 314, 71, 315, - 309, 71, 316, 71, 71, 71, 71, 318, 71, 71, - 322, 71, 320, 71, 71, 327, 71, 323, 317, 321, - 328, 71, 71, 71, 324, 319, 331, 325, 329, 333, - 71, 336, 330, 326, 71, 71, 71, 71, 332, 71, - 71, 338, 339, 71, 71, 342, 343, 345, 334, 335, - 341, 71, 71, 71, 337, 71, 71, 71, 340, 71, - 348, 349, 71, 344, 71, 350, 352, 346, 71, 356, + 303, 295, 305, 299, 71, 71, 71, 71, 71, 71, + 307, 308, 304, 296, 310, 297, 71, 71, 311, 71, + 316, 150, 71, 313, 71, 306, 309, 312, 314, 71, + 71, 320, 71, 71, 71, 71, 71, 315, 317, 318, + 71, 319, 71, 71, 321, 323, 322, 71, 71, 328, + 71, 324, 71, 71, 329, 71, 71, 330, 325, 334, + 332, 71, 71, 326, 337, 71, 71, 71, 327, 71, + 71, 331, 333, 71, 339, 340, 71, 71, 343, 335, + 336, 344, 338, 342, 71, 341, 345, 71, 346, 347, + 71, 71, 349, 351, 71, 350, 71, 353, 71, 71, - 347, 71, 71, 71, 152, 353, 71, 71, 71, 71, - 355, 71, 363, 361, 359, 364, 357, 358, 71, 351, - 71, 71, 354, 71, 367, 365, 368, 360, 366, 71, - 71, 71, 362, 71, 71, 71, 71, 71, 374, 375, - 71, 377, 372, 369, 71, 71, 71, 371, 376, 370, - 378, 71, 380, 71, 71, 379, 71, 381, 71, 71, - 373, 382, 384, 71, 71, 387, 71, 385, 389, 383, - 391, 71, 388, 386, 71, 71, 71, 390, 71, 71, - 394, 71, 392, 396, 71, 397, 395, 71, 71, 71, - 71, 71, 402, 71, 71, 71, 403, 71, 71, 393, + 71, 71, 354, 71, 348, 71, 357, 71, 152, 71, + 71, 71, 364, 148, 71, 360, 362, 352, 71, 355, + 358, 356, 365, 71, 359, 71, 71, 71, 71, 361, + 366, 367, 368, 363, 71, 71, 71, 370, 71, 374, + 375, 71, 369, 377, 373, 71, 71, 71, 376, 372, + 71, 378, 371, 379, 71, 381, 71, 71, 382, 71, + 71, 71, 71, 385, 71, 380, 386, 71, 388, 71, + 71, 390, 391, 387, 71, 383, 384, 71, 392, 71, + 71, 389, 71, 393, 71, 71, 395, 396, 397, 399, + 71, 71, 71, 71, 71, 71, 403, 71, 71, 398, - 150, 405, 71, 401, 398, 399, 71, 407, 71, 400, - 71, 409, 404, 406, 411, 412, 408, 71, 71, 71, - 413, 71, 414, 71, 71, 71, 427, 421, 410, 71, - 423, 71, 71, 438, 424, 148, 425, 422, 415, 71, - 71, 416, 430, 431, 71, 428, 417, 418, 419, 420, - 432, 429, 426, 71, 71, 433, 71, 434, 71, 440, - 71, 435, 71, 442, 436, 71, 71, 439, 437, 71, - 441, 71, 71, 71, 444, 71, 449, 71, 450, 71, - 451, 443, 71, 445, 71, 71, 467, 71, 455, 452, - 448, 446, 454, 447, 71, 71, 71, 147, 461, 453, + 394, 404, 71, 71, 71, 402, 406, 71, 400, 71, + 409, 405, 401, 71, 71, 71, 407, 411, 414, 413, + 71, 408, 410, 415, 71, 416, 71, 71, 71, 71, + 71, 425, 429, 424, 412, 71, 423, 71, 71, 440, + 426, 430, 427, 71, 417, 432, 433, 418, 71, 71, + 431, 434, 419, 420, 421, 422, 435, 71, 428, 71, + 71, 71, 436, 71, 439, 437, 442, 71, 438, 441, + 71, 71, 444, 71, 71, 443, 445, 71, 446, 71, + 71, 451, 448, 71, 457, 456, 447, 71, 71, 452, + 71, 453, 71, 71, 450, 147, 71, 449, 458, 71, - 456, 457, 71, 71, 71, 462, 459, 458, 460, 468, - 469, 71, 71, 466, 71, 71, 71, 470, 463, 471, - 71, 464, 71, 465, 145, 472, 71, 71, 71, 473, - 71, 486, 152, 71, 481, 483, 71, 474, 71, 475, - 485, 476, 484, 482, 488, 497, 498, 487, 496, 71, - 71, 499, 71, 501, 477, 500, 71, 478, 71, 479, - 71, 480, 71, 71, 489, 490, 506, 504, 71, 502, - 71, 503, 71, 71, 491, 71, 492, 493, 494, 505, - 510, 495, 71, 71, 509, 71, 71, 71, 508, 507, - 511, 518, 516, 71, 519, 513, 512, 71, 515, 71, + 454, 459, 461, 455, 462, 71, 463, 460, 464, 71, + 71, 469, 71, 470, 471, 71, 71, 472, 468, 71, + 71, 465, 71, 473, 466, 71, 467, 71, 521, 474, + 71, 71, 71, 475, 488, 71, 483, 485, 71, 71, + 71, 476, 71, 477, 487, 478, 484, 486, 499, 490, + 489, 500, 152, 498, 71, 71, 501, 71, 479, 504, + 502, 480, 71, 481, 71, 482, 71, 71, 491, 492, + 505, 506, 71, 503, 71, 71, 71, 71, 493, 71, + 494, 495, 496, 507, 508, 497, 71, 71, 511, 512, + 71, 518, 510, 509, 517, 71, 515, 516, 514, 513, - 517, 71, 514, 71, 523, 71, 71, 71, 527, 528, - 71, 71, 526, 521, 71, 71, 71, 522, 71, 520, - 533, 71, 525, 71, 71, 71, 538, 535, 536, 71, - 524, 530, 531, 71, 529, 532, 71, 71, 534, 71, - 547, 71, 71, 537, 71, 71, 71, 549, 539, 541, - 544, 540, 71, 543, 548, 542, 550, 71, 552, 71, - 143, 545, 71, 546, 71, 553, 551, 71, 554, 71, - 71, 555, 71, 558, 556, 560, 71, 71, 71, 557, - 71, 563, 561, 559, 564, 71, 71, 71, 71, 565, - 71, 562, 71, 568, 71, 570, 71, 569, 71, 71, + 520, 71, 519, 71, 71, 525, 71, 71, 71, 71, + 71, 71, 71, 71, 528, 523, 529, 530, 524, 71, + 71, 522, 71, 71, 527, 535, 537, 71, 532, 533, + 531, 538, 526, 71, 534, 71, 540, 71, 71, 71, + 71, 71, 549, 536, 71, 71, 539, 71, 71, 551, + 546, 545, 541, 542, 550, 543, 71, 71, 544, 554, + 552, 547, 71, 548, 71, 71, 553, 71, 555, 71, + 556, 557, 558, 71, 71, 561, 71, 71, 559, 563, + 71, 71, 560, 71, 566, 567, 564, 71, 71, 562, + 565, 71, 568, 71, 71, 71, 71, 573, 71, 571, - 71, 566, 71, 571, 71, 576, 71, 71, 567, 580, - 572, 577, 575, 71, 579, 71, 573, 574, 578, 71, - 582, 71, 71, 584, 71, 71, 71, 71, 71, 71, - 71, 594, 71, 586, 71, 587, 581, 71, 596, 597, - 589, 71, 71, 583, 71, 585, 593, 588, 590, 592, - 591, 595, 71, 71, 71, 598, 601, 71, 604, 71, - 599, 607, 71, 600, 71, 606, 71, 71, 602, 71, - 71, 71, 603, 71, 610, 613, 71, 71, 71, 605, - 609, 614, 616, 71, 71, 608, 71, 71, 71, 71, - 71, 71, 611, 615, 612, 630, 71, 71, 71, 617, + 572, 71, 569, 71, 71, 574, 71, 71, 71, 579, + 575, 580, 71, 582, 570, 578, 71, 71, 71, 71, + 581, 576, 577, 583, 71, 585, 71, 587, 71, 71, + 71, 71, 71, 71, 71, 597, 589, 584, 590, 586, + 588, 71, 71, 592, 71, 71, 71, 600, 596, 599, + 591, 593, 595, 594, 598, 71, 71, 71, 601, 71, + 604, 606, 607, 71, 602, 610, 71, 603, 71, 609, + 71, 71, 71, 605, 71, 71, 71, 613, 71, 616, + 71, 71, 71, 608, 612, 617, 619, 71, 71, 611, + 71, 71, 71, 618, 71, 633, 614, 615, 620, 71, - 619, 71, 633, 618, 71, 620, 628, 631, 667, 645, - 621, 629, 622, 632, 71, 71, 71, 71, 623, 71, - 624, 634, 637, 625, 626, 635, 640, 71, 639, 636, - 627, 638, 71, 71, 71, 71, 643, 641, 71, 646, - 71, 648, 71, 642, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 654, 650, 677, 71, 644, 655, 649, - 647, 651, 658, 71, 652, 657, 71, 152, 661, 653, - 656, 660, 659, 71, 71, 71, 71, 71, 662, 71, - 71, 71, 71, 668, 670, 672, 71, 71, 663, 671, - 665, 673, 666, 669, 664, 675, 71, 71, 71, 674, + 71, 622, 71, 636, 145, 71, 621, 71, 623, 632, + 631, 634, 71, 624, 643, 625, 635, 639, 71, 71, + 71, 626, 71, 627, 637, 640, 628, 629, 638, 644, + 71, 71, 649, 630, 641, 71, 71, 642, 646, 647, + 645, 71, 650, 71, 652, 71, 71, 71, 71, 71, + 71, 71, 71, 648, 71, 658, 651, 71, 654, 71, + 653, 659, 655, 662, 71, 71, 71, 656, 663, 661, + 660, 657, 152, 665, 71, 71, 664, 666, 71, 71, + 71, 667, 71, 668, 672, 71, 71, 674, 669, 71, + 670, 676, 71, 677, 675, 673, 671, 679, 71, 71, - 71, 71, 71, 71, 71, 71, 681, 680, 676, 71, - 152, 686, 678, 682, 71, 679, 687, 71, 689, 71, - 683, 685, 688, 684, 690, 71, 691, 692, 71, 693, - 71, 694, 71, 71, 71, 695, 696, 71, 71, 697, - 71, 71, 71, 71, 700, 71, 71, 701, 699, 705, - 704, 71, 71, 71, 71, 71, 706, 698, 708, 71, - 71, 711, 71, 71, 703, 712, 702, 71, 71, 707, - 709, 71, 71, 71, 718, 714, 713, 71, 71, 710, - 715, 717, 720, 721, 716, 722, 719, 71, 724, 71, - 71, 71, 71, 726, 71, 727, 71, 729, 725, 730, + 71, 678, 71, 71, 71, 681, 71, 71, 71, 71, + 680, 684, 685, 143, 682, 690, 686, 71, 71, 683, + 691, 71, 71, 687, 689, 700, 688, 693, 71, 695, + 692, 694, 71, 696, 71, 71, 697, 71, 698, 699, + 71, 71, 71, 71, 71, 701, 704, 71, 71, 71, + 703, 71, 705, 709, 71, 708, 71, 71, 710, 71, + 702, 71, 712, 71, 715, 71, 71, 71, 707, 71, + 71, 706, 716, 71, 711, 71, 718, 713, 71, 717, + 71, 719, 71, 714, 721, 720, 71, 722, 71, 730, + 71, 71, 729, 723, 724, 725, 726, 728, 71, 71, - 71, 71, 723, 71, 71, 731, 71, 71, 734, 71, - 71, 736, 738, 71, 71, 71, 71, 728, 71, 732, - 735, 744, 733, 739, 71, 742, 741, 71, 150, 737, - 743, 71, 71, 71, 740, 746, 749, 745, 747, 748, - 71, 71, 751, 71, 753, 750, 71, 755, 71, 71, - 71, 754, 756, 71, 71, 758, 71, 752, 71, 757, - 759, 71, 71, 71, 764, 71, 148, 762, 763, 760, - 71, 761, 766, 71, 71, 769, 71, 71, 767, 71, - 771, 765, 773, 770, 71, 768, 71, 776, 71, 775, - 71, 774, 777, 71, 71, 772, 71, 778, 71, 71, + 71, 71, 727, 731, 734, 732, 71, 71, 71, 735, + 71, 71, 736, 71, 71, 71, 743, 71, 739, 741, + 71, 71, 71, 71, 737, 71, 740, 733, 738, 744, + 749, 71, 747, 71, 751, 742, 71, 748, 746, 750, + 745, 752, 753, 71, 71, 71, 754, 71, 71, 758, + 755, 71, 760, 71, 71, 71, 759, 761, 71, 71, + 71, 763, 757, 71, 762, 756, 764, 71, 71, 71, + 71, 770, 771, 765, 767, 71, 766, 71, 71, 772, + 773, 71, 775, 71, 71, 779, 152, 777, 768, 769, + 776, 71, 71, 785, 71, 782, 71, 784, 774, 781, - 780, 782, 71, 71, 71, 71, 71, 788, 71, 781, - 789, 779, 783, 71, 71, 71, 71, 790, 71, 71, - 784, 785, 797, 786, 71, 787, 71, 71, 71, 791, - 792, 795, 71, 71, 793, 71, 71, 794, 71, 796, - 798, 71, 802, 71, 799, 71, 800, 71, 810, 71, - 71, 71, 801, 803, 805, 811, 71, 804, 71, 71, - 71, 806, 807, 809, 808, 815, 71, 813, 71, 812, - 71, 71, 814, 71, 71, 816, 820, 819, 71, 822, - 821, 818, 71, 823, 71, 817, 71, 71, 71, 152, - 71, 825, 71, 71, 830, 826, 831, 828, 71, 71, + 783, 71, 778, 71, 780, 786, 71, 71, 71, 788, + 71, 71, 71, 71, 794, 71, 71, 71, 71, 795, + 71, 71, 71, 71, 71, 787, 789, 796, 790, 791, + 71, 792, 797, 793, 799, 801, 798, 803, 71, 802, + 71, 800, 71, 71, 804, 71, 71, 71, 71, 808, + 805, 71, 71, 71, 71, 71, 817, 150, 815, 806, + 71, 807, 71, 810, 809, 71, 811, 71, 816, 812, + 813, 814, 71, 820, 71, 71, 818, 71, 71, 819, + 822, 821, 71, 71, 824, 71, 71, 148, 827, 826, + 823, 825, 828, 71, 71, 831, 71, 71, 829, 830, - 824, 827, 829, 832, 71, 71, 833, 834, 71, 838, - 71, 71, 839, 841, 71, 71, 71, 844, 71, 835, - 840, 71, 836, 71, 842, 846, 837, 71, 71, 71, - 850, 71, 71, 71, 71, 843, 71, 71, 845, 847, - 851, 852, 71, 71, 71, 71, 71, 849, 882, 853, - 71, 864, 865, 848, 71, 868, 71, 855, 854, 71, - 862, 863, 71, 71, 856, 71, 866, 867, 857, 71, - 869, 858, 71, 870, 871, 71, 874, 71, 859, 860, - 147, 861, 71, 71, 71, 873, 872, 71, 875, 876, - 71, 877, 71, 887, 878, 884, 883, 71, 885, 879, + 834, 71, 71, 832, 152, 71, 833, 71, 838, 837, + 835, 839, 71, 71, 836, 71, 71, 71, 845, 71, + 71, 846, 841, 848, 71, 71, 840, 71, 71, 847, + 842, 843, 851, 71, 849, 71, 71, 844, 71, 853, + 71, 857, 71, 71, 71, 854, 850, 71, 852, 71, + 858, 859, 71, 71, 71, 71, 71, 71, 856, 71, + 71, 855, 872, 71, 871, 71, 875, 860, 861, 869, + 870, 877, 862, 71, 71, 873, 71, 880, 863, 71, + 874, 878, 864, 71, 876, 865, 71, 71, 879, 71, + 881, 889, 866, 867, 147, 868, 71, 71, 882, 883, - 888, 71, 71, 890, 889, 880, 881, 891, 71, 886, - 71, 892, 71, 893, 71, 894, 71, 71, 896, 895, - 71, 71, 71, 71, 71, 899, 71, 903, 71, 897, - 71, 902, 71, 71, 906, 71, 71, 71, 910, 898, - 908, 965, 900, 901, 71, 904, 905, 71, 912, 71, - 913, 916, 911, 907, 71, 914, 71, 71, 909, 915, - 917, 71, 71, 919, 920, 71, 71, 918, 71, 71, - 71, 921, 923, 71, 924, 71, 922, 71, 925, 71, - 71, 71, 930, 71, 927, 71, 933, 928, 71, 71, - 71, 71, 71, 71, 931, 926, 932, 71, 71, 935, + 890, 884, 71, 71, 885, 891, 894, 895, 71, 886, + 71, 71, 71, 897, 893, 887, 888, 892, 896, 71, + 899, 71, 71, 71, 71, 898, 900, 901, 902, 903, + 71, 71, 71, 904, 905, 71, 71, 71, 71, 907, + 71, 911, 71, 71, 71, 910, 71, 71, 914, 71, + 71, 906, 145, 918, 916, 919, 908, 909, 912, 71, + 913, 921, 915, 920, 71, 71, 922, 71, 924, 925, + 923, 917, 71, 927, 71, 71, 71, 926, 71, 71, + 71, 928, 929, 931, 71, 932, 71, 71, 930, 71, + 71, 71, 71, 938, 71, 933, 935, 936, 71, 71, - 929, 71, 936, 937, 939, 71, 938, 71, 934, 71, - 940, 71, 71, 947, 945, 71, 942, 71, 943, 946, - 71, 941, 71, 71, 944, 71, 952, 954, 955, 71, - 948, 950, 71, 71, 953, 71, 949, 71, 957, 71, - 71, 71, 71, 71, 968, 71, 71, 145, 71, 71, - 71, 963, 71, 956, 71, 71, 958, 959, 969, 960, - 970, 962, 961, 966, 71, 967, 964, 71, 972, 974, - 973, 971, 975, 976, 71, 71, 71, 71, 71, 71, - 71, 71, 985, 71, 71, 978, 980, 987, 71, 71, - 989, 71, 71, 71, 71, 977, 71, 979, 986, 981, + 71, 71, 71, 941, 71, 71, 940, 934, 939, 71, + 943, 937, 71, 944, 947, 71, 71, 946, 948, 942, + 71, 949, 71, 71, 954, 71, 956, 951, 71, 955, + 71, 952, 71, 71, 950, 71, 953, 71, 71, 71, + 961, 963, 959, 957, 964, 71, 71, 71, 962, 71, + 71, 958, 966, 71, 71, 71, 71, 71, 968, 960, + 71, 974, 71, 977, 972, 71, 71, 965, 71, 71, + 967, 71, 970, 969, 971, 978, 71, 979, 975, 973, + 71, 976, 982, 71, 71, 981, 71, 980, 984, 985, + 71, 71, 71, 71, 983, 987, 71, 71, 71, 71, - 983, 990, 982, 984, 71, 71, 993, 71, 991, 988, - 992, 71, 71, 996, 994, 998, 995, 71, 997, 71, - 1002, 71, 999, 1000, 71, 1001, 71, 1004, 71, 71, - 71, 1007, 152, 71, 71, 1006, 71, 1010, 1009, 71, - 71, 71, 71, 71, 1003, 71, 1013, 1005, 1008, 71, - 71, 71, 1025, 71, 71, 71, 71, 1026, 71, 1016, - 1012, 1011, 1014, 1028, 71, 1084, 1015, 143, 71, 1017, - 1027, 1018, 71, 1031, 71, 1019, 71, 1020, 1030, 1029, - 71, 1021, 1032, 1022, 71, 1033, 1035, 71, 1023, 71, - 1034, 1036, 71, 1024, 1041, 71, 71, 71, 1037, 1038, + 989, 994, 995, 997, 986, 71, 71, 71, 71, 71, + 1001, 988, 996, 990, 999, 1000, 992, 71, 991, 993, + 71, 71, 71, 71, 71, 998, 71, 1007, 1005, 1008, + 71, 71, 1012, 1009, 1003, 71, 1002, 71, 71, 71, + 1014, 71, 1004, 71, 71, 1006, 71, 1017, 152, 1010, + 1011, 1016, 71, 71, 71, 1020, 71, 1019, 71, 1013, + 71, 1015, 71, 1023, 71, 71, 1021, 1018, 71, 71, + 1035, 71, 71, 1038, 71, 1036, 1022, 71, 1026, 1024, + 71, 71, 143, 71, 1040, 1027, 1025, 1037, 71, 1028, + 71, 71, 71, 1029, 71, 1030, 1041, 1042, 71, 1031, - 71, 71, 1040, 71, 1042, 1044, 71, 1049, 1043, 1052, - 1050, 1039, 1048, 71, 71, 1045, 71, 1047, 1046, 1051, - 71, 1053, 71, 71, 71, 71, 71, 71, 71, 71, - 1068, 1065, 71, 71, 71, 71, 1064, 1069, 71, 71, - 1067, 71, 1055, 1056, 1054, 71, 1057, 1066, 1071, 1070, - 71, 1058, 1080, 1059, 1072, 1075, 71, 1073, 71, 1060, - 1077, 71, 1076, 1081, 1061, 1062, 71, 71, 1074, 71, - 1078, 1063, 71, 71, 71, 71, 1087, 1082, 71, 71, - 1079, 71, 71, 1085, 71, 71, 1090, 1088, 71, 71, - 71, 1086, 1083, 71, 71, 71, 1097, 71, 1089, 1092, + 1053, 1032, 1039, 1043, 1045, 1044, 1033, 1050, 1047, 1046, + 71, 1034, 71, 71, 71, 71, 1048, 71, 1054, 1051, + 71, 71, 1061, 71, 1059, 71, 1060, 1058, 1049, 1052, + 71, 1055, 71, 1062, 1057, 1063, 1056, 71, 71, 71, + 71, 71, 71, 71, 71, 1078, 71, 1064, 1075, 71, + 71, 71, 1074, 71, 1077, 1079, 1065, 1066, 71, 1067, + 1076, 1080, 71, 1081, 1068, 71, 1069, 1085, 71, 71, + 1082, 71, 1070, 1086, 1087, 71, 71, 1071, 1072, 1088, + 71, 1083, 71, 1084, 1073, 1091, 71, 1092, 1090, 71, + 1089, 71, 71, 71, 1097, 71, 71, 71, 1094, 71, - 1099, 1094, 1095, 1096, 1091, 71, 71, 71, 1093, 71, - 71, 71, 1098, 1100, 1112, 71, 71, 71, 71, 1101, - 71, 1107, 1108, 1109, 1104, 71, 71, 1102, 1103, 1105, - 1106, 71, 1111, 71, 1110, 1115, 71, 71, 71, 1113, - 1116, 71, 71, 1117, 71, 71, 1118, 1119, 71, 1114, - 1120, 71, 71, 1125, 1127, 71, 1122, 1121, 1123, 71, - 71, 71, 71, 1124, 71, 1131, 1129, 1128, 71, 1130, - 71, 1126, 71, 1133, 71, 1134, 71, 71, 71, 1136, - 71, 1137, 1143, 71, 1139, 1132, 71, 1142, 1135, 1138, - 71, 71, 1141, 71, 71, 71, 1140, 1146, 71, 1144, + 71, 1095, 1100, 71, 1098, 1093, 71, 71, 71, 1096, + 71, 71, 71, 71, 71, 1099, 1105, 1102, 71, 1101, + 1104, 1106, 1109, 71, 1107, 1111, 1103, 1108, 71, 1110, + 71, 71, 71, 71, 1112, 71, 71, 71, 1117, 1122, + 1118, 1119, 1113, 71, 1114, 71, 1120, 1116, 71, 1115, + 71, 1121, 1125, 71, 71, 71, 1123, 1126, 71, 71, + 1127, 71, 71, 1128, 1124, 1129, 1136, 1130, 71, 71, + 71, 1132, 71, 71, 1131, 71, 1138, 71, 71, 1133, + 1140, 1134, 71, 71, 1135, 71, 1142, 71, 1139, 71, + 1137, 1141, 1144, 71, 1145, 71, 71, 71, 1147, 1143, - 71, 1147, 71, 71, 1153, 71, 1151, 71, 1154, 1145, - 71, 71, 1155, 1148, 71, 71, 1156, 1149, 1152, 1158, - 1157, 71, 1150, 71, 1161, 71, 71, 1163, 71, 71, - 71, 1162, 71, 71, 71, 71, 71, 1167, 1164, 1159, - 71, 1165, 71, 1160, 71, 1168, 1169, 1173, 71, 1174, - 71, 1166, 1171, 71, 1170, 71, 71, 1177, 71, 71, - 71, 1176, 1181, 1172, 71, 1175, 71, 1178, 71, 71, - 71, 71, 1180, 1179, 1187, 71, 71, 1183, 71, 71, - 71, 71, 1182, 71, 1191, 1193, 71, 71, 1184, 1192, - 1186, 1189, 1188, 1190, 1195, 1185, 1196, 71, 71, 71, + 1148, 1146, 71, 1150, 71, 1153, 1154, 71, 1149, 71, + 1152, 71, 71, 71, 71, 1158, 1157, 71, 1151, 71, + 71, 1155, 71, 71, 1164, 1162, 1165, 1156, 71, 71, + 71, 71, 71, 1166, 1167, 1159, 1163, 71, 1160, 1169, + 1161, 71, 1168, 71, 1172, 71, 1174, 71, 1173, 1170, + 71, 71, 71, 71, 71, 71, 71, 71, 1179, 1180, + 1175, 1171, 1176, 71, 71, 71, 1185, 71, 1181, 1186, + 1177, 71, 71, 1178, 71, 71, 1183, 1189, 71, 1188, + 71, 1182, 1187, 71, 1184, 1193, 71, 71, 71, 71, + 1190, 71, 71, 71, 1191, 1192, 1195, 1199, 71, 71, - 71, 71, 71, 1194, 1197, 71, 1199, 1198, 71, 71, - 71, 1200, 1201, 1202, 71, 71, 71, 1208, 71, 71, - 71, 1205, 71, 71, 1203, 71, 71, 1218, 71, 1204, - 1206, 1212, 71, 1209, 71, 1207, 71, 1211, 1210, 1214, - 71, 1219, 1222, 1213, 1220, 71, 71, 1221, 1215, 1223, - 1216, 1224, 71, 1217, 71, 71, 71, 71, 71, 71, - 1227, 71, 1229, 1226, 1232, 71, 1233, 71, 71, 1230, - 1225, 71, 1234, 71, 71, 1228, 1236, 1237, 1231, 71, - 71, 71, 71, 1238, 71, 71, 71, 71, 1235, 71, - 71, 71, 1244, 71, 1239, 1240, 1242, 1243, 1245, 1249, + 71, 71, 1205, 71, 1194, 71, 1203, 1196, 1201, 71, + 71, 1198, 1202, 1200, 1204, 1207, 1197, 1208, 71, 71, + 1210, 71, 71, 71, 1209, 71, 71, 1211, 71, 1206, + 71, 71, 71, 1214, 71, 71, 1220, 71, 71, 1212, + 1213, 1217, 71, 71, 71, 1215, 3080, 1218, 71, 71, + 1216, 71, 1221, 1231, 1219, 1224, 1226, 71, 1223, 71, + 1222, 71, 1230, 71, 1225, 1227, 1233, 1228, 1232, 71, + 1229, 1234, 71, 71, 71, 1235, 71, 71, 71, 71, + 71, 1239, 1236, 1238, 1241, 1244, 71, 71, 71, 1242, + 71, 1237, 1245, 1246, 71, 71, 1240, 71, 1249, 1243, - 1241, 71, 71, 71, 71, 71, 1246, 1255, 1248, 71, - 1247, 1251, 1253, 71, 71, 71, 1250, 1257, 71, 1256, - 1259, 1261, 1252, 71, 1254, 71, 1262, 71, 71, 71, - 1260, 71, 1266, 71, 1258, 71, 1276, 3053, 1274, 1264, - 71, 1265, 1263, 71, 1275, 1277, 1273, 1279, 1267, 71, - 71, 1268, 1269, 71, 71, 71, 1270, 71, 1278, 1280, - 1281, 71, 1271, 71, 1282, 71, 1272, 71, 1284, 71, - 71, 71, 1285, 71, 1286, 71, 71, 3053, 1283, 1289, - 1291, 1287, 1294, 1288, 1295, 71, 71, 1292, 71, 1297, - 71, 1290, 71, 71, 1293, 1298, 71, 1296, 71, 1303, + 1248, 71, 71, 71, 71, 71, 1250, 71, 71, 71, + 1247, 1256, 71, 71, 71, 71, 1251, 1252, 71, 1254, + 1255, 1257, 1253, 71, 1261, 71, 71, 1258, 71, 1262, + 1267, 1260, 71, 1259, 1265, 1263, 71, 71, 71, 71, + 1269, 71, 1268, 1264, 1271, 71, 1266, 1273, 71, 71, + 1272, 71, 1274, 71, 71, 1278, 3080, 1270, 1286, 1276, + 1275, 1277, 71, 1287, 1285, 71, 1288, 1279, 71, 71, + 1280, 1281, 1291, 1289, 71, 1282, 71, 71, 71, 71, + 71, 1283, 1292, 1290, 1293, 1284, 71, 1294, 71, 1296, + 71, 71, 71, 1297, 71, 1298, 71, 1295, 71, 71, - 1299, 71, 1300, 71, 1301, 71, 1302, 1304, 1305, 1307, - 71, 1308, 1306, 71, 1311, 1313, 71, 71, 71, 1312, - 71, 1309, 1310, 1314, 71, 71, 1316, 71, 1320, 71, - 1315, 71, 1321, 71, 71, 71, 71, 1322, 71, 71, - 1324, 1319, 71, 1317, 1318, 71, 71, 1323, 1326, 71, - 1325, 1329, 1330, 71, 1332, 71, 1327, 71, 71, 1333, - 1331, 1334, 71, 71, 71, 1338, 71, 1328, 1335, 1339, - 1340, 71, 71, 1337, 71, 1341, 71, 1342, 71, 1345, - 71, 1336, 71, 71, 71, 71, 1347, 71, 71, 71, - 1349, 1351, 71, 71, 3053, 1353, 1350, 1343, 71, 1344, + 1299, 1301, 1306, 1303, 71, 1307, 3080, 71, 71, 1300, + 1304, 71, 1308, 1310, 1302, 71, 71, 1305, 1311, 1309, + 1312, 71, 1313, 71, 1314, 71, 1315, 1316, 1317, 71, + 71, 1320, 1318, 1319, 71, 71, 71, 71, 71, 1323, + 71, 1321, 71, 1322, 1324, 71, 1325, 1327, 71, 1329, + 1328, 71, 1332, 1333, 71, 1334, 71, 1326, 71, 71, + 71, 71, 71, 71, 1335, 1337, 71, 1330, 71, 71, + 1331, 1339, 1336, 1342, 71, 1338, 1343, 71, 1345, 71, + 71, 1340, 1346, 71, 1344, 71, 1347, 71, 1351, 71, + 1348, 1341, 71, 1349, 1353, 71, 1350, 71, 1354, 71, - 71, 71, 1346, 1355, 1348, 1356, 1352, 71, 1354, 1357, - 71, 71, 1358, 71, 1360, 1359, 1361, 71, 71, 71, - 71, 1366, 1367, 1369, 1363, 71, 1364, 71, 71, 71, - 1368, 71, 71, 1365, 71, 1362, 1373, 71, 71, 71, - 1370, 71, 1377, 1378, 71, 1372, 1380, 71, 71, 71, - 1379, 1371, 71, 71, 71, 71, 71, 71, 1374, 1375, - 71, 1381, 71, 1387, 1376, 71, 1384, 1382, 71, 1385, - 71, 1392, 71, 1383, 1386, 1391, 71, 1388, 71, 3053, - 71, 1394, 1396, 1390, 71, 1389, 71, 1397, 71, 71, - 71, 1393, 71, 1399, 1400, 71, 71, 1395, 1398, 71, + 71, 71, 1358, 71, 1355, 71, 71, 71, 71, 1360, + 71, 71, 1352, 1362, 71, 71, 1364, 71, 1366, 1363, + 71, 1356, 1357, 71, 71, 1359, 71, 1361, 1368, 1365, + 71, 1370, 1367, 71, 1369, 71, 71, 1379, 1371, 71, + 1372, 1373, 71, 1374, 1375, 71, 71, 71, 71, 1380, + 1381, 1376, 1377, 1382, 1378, 71, 71, 1383, 71, 71, + 1387, 71, 71, 71, 1385, 71, 71, 1384, 1391, 1392, + 1386, 71, 1394, 71, 71, 71, 71, 1393, 71, 71, + 71, 71, 1388, 71, 1401, 1389, 71, 1395, 71, 1390, + 71, 1398, 71, 1396, 1399, 71, 1397, 1405, 71, 1400, - 71, 1405, 1407, 1401, 1406, 1402, 1409, 1403, 71, 1408, - 1404, 71, 71, 71, 71, 1410, 1412, 71, 1414, 1411, - 71, 1413, 71, 71, 71, 1417, 71, 71, 1419, 71, - 71, 1424, 1416, 71, 71, 1418, 71, 1425, 71, 1415, - 1421, 71, 1428, 71, 1420, 1422, 71, 1423, 71, 71, - 1429, 71, 1426, 71, 71, 1427, 71, 1431, 1435, 1437, - 1430, 1432, 71, 1436, 1433, 71, 71, 1440, 71, 71, - 1434, 1442, 71, 71, 1439, 1443, 71, 71, 1446, 1447, - 1438, 1445, 3053, 1441, 71, 71, 71, 1448, 71, 1449, - 1450, 71, 71, 71, 1444, 1453, 1451, 71, 71, 71, + 1406, 71, 71, 1408, 1410, 71, 1402, 71, 1404, 1411, + 71, 71, 71, 1403, 71, 71, 1413, 71, 1407, 1414, + 71, 1409, 1419, 1412, 71, 1420, 1415, 71, 1473, 1416, + 1417, 1423, 71, 1418, 1421, 71, 71, 71, 1422, 1424, + 1426, 71, 71, 71, 71, 1427, 71, 1425, 71, 1431, + 71, 71, 71, 1429, 71, 1433, 71, 1438, 71, 71, + 1428, 1430, 1434, 1439, 71, 1435, 1432, 1442, 71, 71, + 1436, 71, 1437, 71, 71, 71, 1440, 71, 3080, 71, + 1443, 71, 71, 1441, 1449, 1445, 71, 1451, 1444, 1446, + 1447, 71, 71, 1450, 71, 1454, 1448, 1456, 71, 1452, - 71, 1457, 1452, 71, 71, 71, 1456, 71, 71, 1463, - 1460, 1454, 1459, 1455, 1464, 71, 71, 71, 1468, 1465, - 71, 1461, 71, 1458, 1466, 71, 71, 1462, 71, 71, - 71, 71, 1476, 1472, 71, 1471, 1467, 71, 71, 1469, - 1479, 1470, 1477, 71, 71, 71, 71, 1482, 1473, 1475, - 1474, 1481, 71, 71, 71, 71, 71, 71, 71, 1490, - 1478, 71, 1480, 1483, 71, 71, 71, 1491, 1493, 71, - 1487, 1484, 71, 1485, 1486, 1498, 1489, 1492, 1488, 1494, - 71, 71, 71, 71, 71, 1497, 1495, 1496, 71, 1503, - 1500, 71, 71, 71, 1501, 1499, 1507, 71, 71, 1509, + 1453, 71, 71, 71, 71, 1460, 1461, 1455, 1457, 1459, + 71, 71, 71, 71, 1462, 71, 1463, 1464, 71, 71, + 71, 1467, 1458, 1465, 1468, 71, 71, 71, 1471, 1466, + 71, 71, 71, 1470, 71, 71, 1474, 1477, 71, 1479, + 1469, 71, 1478, 71, 1480, 71, 1475, 71, 1482, 71, + 1472, 71, 71, 1476, 71, 1481, 1486, 1483, 1485, 71, + 1484, 1490, 71, 71, 1493, 71, 71, 71, 1491, 1496, + 71, 1487, 1495, 71, 1488, 71, 71, 1489, 71, 71, + 71, 71, 71, 1504, 1494, 71, 71, 71, 1492, 1505, + 1507, 71, 1497, 71, 1501, 1498, 71, 1499, 1500, 1506, - 71, 71, 71, 1508, 71, 71, 1504, 1502, 71, 1506, - 71, 71, 1505, 1512, 1511, 1510, 71, 71, 71, 1518, - 1513, 1514, 1515, 71, 1517, 71, 1519, 71, 1516, 1520, - 71, 71, 1523, 71, 1524, 1522, 1526, 71, 71, 1521, - 71, 1527, 71, 1525, 1528, 71, 71, 71, 71, 1529, - 1531, 71, 1534, 71, 71, 71, 71, 1533, 1530, 71, - 71, 1538, 71, 1540, 71, 71, 1532, 71, 1535, 71, - 1544, 71, 71, 1539, 1537, 1536, 71, 1547, 1541, 1542, - 71, 1545, 1549, 71, 1550, 71, 71, 1552, 71, 1546, - 1543, 1548, 71, 71, 71, 71, 71, 1555, 1558, 71, + 1503, 1509, 1502, 1508, 71, 71, 1511, 71, 71, 1510, + 71, 71, 71, 1514, 71, 71, 1512, 1515, 71, 1518, + 71, 1513, 1522, 71, 71, 1523, 1524, 1519, 1517, 71, + 1516, 71, 71, 71, 1521, 1520, 1527, 1528, 71, 1525, + 71, 71, 1526, 71, 1529, 1533, 1534, 71, 71, 71, + 71, 71, 71, 1538, 1539, 1537, 71, 71, 1530, 1531, + 71, 1541, 71, 1532, 71, 71, 1535, 1542, 1543, 71, + 1536, 71, 71, 1544, 1546, 71, 1540, 71, 1549, 71, + 71, 1545, 71, 71, 1548, 71, 71, 1553, 71, 1555, + 71, 71, 1547, 71, 1550, 1556, 71, 1560, 71, 1554, - 1557, 71, 71, 1554, 71, 1551, 71, 71, 1565, 71, - 1553, 71, 71, 1556, 1559, 1560, 1566, 71, 1563, 71, - 71, 1561, 1562, 71, 1570, 1572, 1569, 71, 71, 1567, - 1574, 1564, 1568, 1573, 71, 1576, 71, 1578, 71, 71, - 1571, 71, 71, 71, 71, 71, 71, 1575, 1577, 1580, - 1581, 71, 1583, 71, 1584, 71, 71, 71, 1579, 1588, - 1585, 71, 1586, 71, 1589, 71, 1582, 1595, 1592, 1590, - 1587, 1593, 71, 71, 71, 71, 71, 1596, 1597, 1600, - 71, 1591, 1603, 1594, 71, 1599, 71, 1602, 71, 71, - 1605, 1604, 71, 1606, 1598, 1607, 71, 71, 71, 71, + 71, 1551, 1552, 71, 71, 1563, 1558, 71, 1557, 1565, + 71, 1566, 1561, 71, 71, 1568, 71, 71, 1559, 1564, + 71, 1562, 71, 71, 1571, 71, 1574, 71, 1570, 71, + 1573, 71, 71, 1567, 71, 71, 1581, 1576, 1569, 71, + 71, 1572, 71, 71, 1582, 71, 1579, 1575, 71, 1590, + 1577, 1578, 1585, 1586, 71, 71, 1588, 71, 71, 1580, + 1583, 1592, 1584, 1589, 71, 1587, 71, 71, 1594, 71, + 71, 71, 71, 1599, 71, 71, 1596, 1591, 1593, 1597, + 71, 1600, 71, 71, 71, 1595, 71, 1604, 1611, 1601, + 71, 1605, 71, 71, 71, 1598, 1608, 71, 1603, 1609, - 71, 71, 1608, 71, 1614, 1601, 1613, 1615, 1617, 1609, - 71, 71, 71, 71, 71, 71, 1610, 1616, 1611, 71, - 1612, 1620, 71, 71, 1619, 71, 71, 71, 1621, 71, - 71, 71, 1629, 1622, 1618, 71, 71, 71, 71, 71, - 71, 1625, 1627, 1626, 1628, 1623, 1624, 1634, 71, 71, - 71, 1632, 71, 71, 1637, 1630, 1631, 1636, 71, 71, - 1633, 71, 71, 71, 1640, 1638, 71, 71, 71, 1635, - 1642, 1645, 1639, 1644, 1646, 71, 71, 1641, 1643, 1651, - 1652, 71, 71, 1647, 1653, 71, 71, 71, 71, 71, - 1648, 1656, 71, 1650, 1654, 1649, 1657, 71, 71, 71, + 1602, 71, 1612, 71, 1606, 71, 1607, 71, 1613, 1619, + 1615, 1610, 1616, 71, 71, 71, 1618, 71, 1621, 1620, + 71, 1622, 71, 1623, 1614, 71, 71, 1624, 1617, 71, + 71, 71, 71, 1630, 1631, 1629, 71, 1633, 1625, 71, + 71, 1632, 71, 71, 1626, 71, 1636, 71, 71, 1627, + 1635, 1628, 71, 1637, 71, 71, 71, 71, 71, 71, + 71, 1645, 71, 71, 71, 1634, 71, 71, 1643, 71, + 1638, 1641, 1642, 1644, 1639, 1640, 71, 1648, 71, 1646, + 1650, 71, 1647, 1652, 1654, 1649, 1651, 71, 1653, 71, + 1655, 71, 71, 71, 71, 71, 71, 71, 3080, 71, - 1658, 71, 71, 1660, 1655, 71, 1661, 71, 1659, 71, - 71, 1662, 1670, 71, 1664, 1663, 1666, 1669, 1668, 1667, - 71, 1665, 71, 71, 71, 71, 71, 71, 71, 71, - 1671, 71, 1679, 1672, 71, 71, 1683, 71, 1674, 1676, - 1673, 1675, 1682, 1681, 71, 1680, 1678, 71, 71, 71, - 1684, 1677, 1690, 1685, 71, 71, 1686, 1691, 71, 71, - 71, 71, 1698, 71, 71, 1687, 1695, 1689, 1692, 1688, - 1693, 1696, 71, 1699, 71, 71, 1701, 71, 1697, 71, - 1700, 1694, 71, 71, 1703, 1705, 1704, 1706, 1709, 1702, - 71, 71, 71, 1707, 71, 71, 71, 71, 71, 1708, + 71, 1658, 1660, 1661, 71, 71, 1662, 1667, 1659, 1657, + 1668, 71, 1663, 1656, 1664, 1669, 71, 1670, 1671, 1665, + 71, 71, 1666, 1672, 1673, 71, 71, 71, 71, 71, + 71, 71, 1676, 1677, 1674, 71, 71, 1685, 71, 71, + 1680, 71, 71, 71, 71, 1675, 1679, 1682, 1678, 71, + 1683, 1684, 1686, 71, 1681, 1691, 1687, 1688, 71, 1689, + 71, 71, 71, 1690, 71, 1695, 71, 71, 71, 1699, + 1692, 71, 1698, 71, 71, 1697, 1703, 71, 1696, 1694, + 71, 71, 1707, 1700, 71, 1693, 1701, 1708, 71, 1702, + 71, 1704, 71, 1713, 71, 1705, 1710, 1712, 1706, 71, - 1710, 1719, 71, 71, 71, 1713, 71, 1714, 71, 71, - 71, 71, 1721, 1722, 1711, 1712, 1715, 1716, 71, 71, - 1717, 71, 1718, 1720, 1723, 71, 1728, 71, 1725, 1724, - 71, 3053, 71, 71, 1732, 71, 71, 71, 1727, 71, - 1726, 1734, 71, 71, 1735, 71, 1730, 1736, 1737, 1729, - 71, 1731, 71, 71, 1738, 71, 1733, 1741, 71, 71, - 1745, 71, 71, 71, 71, 71, 71, 1740, 71, 1752, - 1747, 1743, 1742, 1739, 1744, 71, 1746, 1748, 1749, 71, - 71, 71, 3053, 1750, 1756, 71, 71, 1755, 1751, 1757, - 71, 1753, 1758, 71, 71, 1759, 1761, 71, 1754, 1762, + 1715, 71, 1716, 1718, 1709, 71, 1711, 71, 71, 71, + 1717, 71, 1714, 1719, 71, 1722, 71, 71, 1726, 71, + 1724, 71, 71, 71, 71, 71, 1725, 1727, 1721, 1723, + 71, 1720, 71, 1730, 71, 71, 71, 1736, 71, 1731, + 1738, 1728, 1729, 71, 71, 1732, 71, 1733, 1739, 1734, + 1735, 1741, 71, 71, 71, 71, 1740, 71, 71, 1737, + 1746, 71, 71, 71, 1742, 71, 71, 1750, 71, 1752, + 1745, 1743, 71, 71, 1744, 71, 71, 1748, 1753, 71, + 1747, 1749, 1751, 71, 1754, 1756, 1759, 71, 1755, 71, + 1758, 71, 71, 1763, 71, 1757, 71, 71, 71, 71, - 71, 71, 71, 1760, 71, 71, 1764, 71, 1765, 1763, - 71, 71, 71, 71, 71, 71, 1770, 71, 71, 71, - 1774, 1766, 1771, 1782, 71, 71, 1772, 1775, 1768, 1767, - 1769, 71, 1773, 71, 71, 1783, 1778, 71, 1780, 1777, - 1776, 71, 71, 1779, 71, 71, 1784, 1788, 71, 1781, - 71, 71, 71, 1791, 1792, 71, 1785, 71, 1786, 1793, - 71, 1795, 71, 71, 1787, 1789, 1802, 1790, 1794, 71, - 1796, 1797, 1799, 71, 1801, 71, 1803, 71, 1798, 1800, - 71, 1805, 71, 71, 71, 71, 71, 71, 1807, 1808, - 71, 71, 1809, 1810, 71, 1804, 1811, 1812, 1813, 71, + 71, 71, 71, 1761, 1765, 71, 1774, 71, 1760, 1770, + 1764, 1762, 1766, 1767, 1771, 71, 71, 1768, 71, 1769, + 71, 1775, 1773, 1772, 1776, 71, 71, 1779, 71, 1778, + 71, 1777, 1782, 71, 1780, 71, 71, 71, 71, 1783, + 1781, 71, 71, 71, 71, 71, 71, 1788, 71, 71, + 1792, 71, 71, 1789, 3080, 71, 1798, 1784, 1790, 1786, + 1785, 1787, 71, 1791, 1793, 71, 1801, 1796, 71, 1795, + 1800, 71, 71, 1802, 1797, 71, 71, 1794, 71, 71, + 1799, 1806, 71, 1809, 1810, 71, 71, 1803, 1811, 71, + 71, 1804, 1807, 71, 1808, 71, 1805, 1813, 71, 71, - 71, 1817, 71, 1814, 1819, 71, 1815, 71, 1806, 1820, - 71, 71, 71, 1822, 1816, 71, 1821, 71, 1825, 71, - 1818, 1829, 71, 1823, 71, 1827, 1826, 71, 71, 1831, - 1824, 71, 71, 71, 1834, 1835, 71, 71, 1837, 71, - 1828, 71, 71, 71, 1842, 71, 71, 1843, 71, 71, - 71, 1832, 1839, 1830, 1833, 1840, 71, 1836, 71, 71, - 1845, 71, 1849, 1841, 71, 1846, 1838, 71, 1847, 71, - 1844, 1853, 71, 71, 1852, 1856, 71, 71, 1857, 71, - 1855, 71, 1848, 1851, 71, 1858, 71, 71, 71, 71, - 1850, 71, 1854, 1859, 1864, 1862, 1860, 71, 71, 1861, + 1814, 1817, 71, 71, 1819, 71, 1812, 1818, 1820, 1821, + 71, 1815, 1823, 1822, 1816, 71, 71, 71, 71, 1828, + 1825, 1826, 71, 71, 1827, 71, 71, 71, 71, 1835, + 71, 1837, 71, 71, 71, 71, 1838, 71, 1829, 1830, + 1831, 1824, 71, 71, 1840, 1832, 1839, 1833, 1834, 1842, + 1836, 1843, 71, 1845, 1841, 71, 71, 71, 1847, 71, + 71, 1844, 71, 1849, 71, 71, 1852, 1853, 71, 71, + 1855, 71, 71, 71, 71, 71, 1846, 1861, 71, 1860, + 1850, 71, 1848, 1857, 1858, 71, 1851, 71, 71, 1854, + 71, 71, 71, 1867, 1859, 71, 1865, 1856, 1864, 71, - 1868, 1863, 71, 1867, 71, 71, 71, 71, 71, 71, - 71, 1871, 71, 1876, 71, 1865, 71, 1875, 71, 1870, - 1883, 71, 71, 71, 1866, 1869, 1880, 1872, 1873, 1877, - 71, 1874, 1882, 1878, 71, 1879, 1881, 71, 1884, 1887, - 71, 71, 71, 1894, 71, 71, 71, 71, 1885, 71, - 1891, 71, 71, 1886, 71, 1899, 1889, 1896, 1897, 71, - 71, 1898, 1888, 1890, 71, 71, 1892, 1893, 71, 1895, - 1904, 71, 1906, 1900, 1905, 71, 1901, 1907, 71, 1908, - 1909, 1902, 71, 71, 71, 71, 71, 1913, 1903, 1911, - 71, 71, 71, 71, 71, 1912, 1915, 71, 1918, 71, + 71, 1871, 1862, 1863, 71, 1870, 71, 71, 1874, 1876, + 71, 1875, 71, 1873, 71, 1869, 1866, 71, 71, 71, + 71, 1868, 71, 1877, 1872, 71, 71, 71, 1878, 1882, + 71, 1885, 1879, 71, 1881, 1886, 1887, 71, 71, 1880, + 71, 71, 71, 1883, 1890, 71, 71, 71, 1889, 1895, + 71, 1894, 71, 1884, 71, 71, 71, 1888, 1892, 1899, + 1891, 71, 1900, 1902, 71, 71, 1896, 1893, 71, 1897, + 1901, 1898, 1903, 1906, 71, 71, 1904, 71, 71, 71, + 71, 1905, 71, 1913, 1910, 71, 71, 1916, 71, 71, + 1915, 1908, 71, 1917, 71, 71, 1907, 1909, 1918, 71, - 1920, 71, 1914, 1916, 71, 71, 71, 71, 1910, 1921, - 71, 71, 1924, 1922, 1925, 71, 1926, 1927, 71, 1917, - 1930, 1919, 1928, 71, 1923, 71, 71, 71, 71, 71, - 1929, 1931, 1932, 71, 1933, 71, 1936, 71, 1934, 71, - 1935, 71, 1938, 71, 71, 71, 1942, 71, 71, 1937, - 1941, 1939, 71, 1943, 71, 1940, 71, 1944, 71, 1945, - 1946, 71, 71, 71, 71, 1948, 1953, 1951, 1947, 1952, - 71, 71, 71, 71, 71, 71, 1949, 71, 71, 1958, - 1955, 1950, 71, 1962, 71, 71, 1961, 71, 1954, 1957, - 1959, 1956, 1960, 1963, 71, 71, 71, 1964, 1969, 1966, + 1911, 1914, 1912, 71, 1919, 1923, 71, 1924, 71, 71, + 1920, 1925, 1927, 1928, 71, 1921, 1926, 71, 71, 71, + 71, 1932, 71, 1922, 71, 1930, 1931, 71, 1934, 71, + 71, 1937, 71, 1939, 1933, 1929, 71, 71, 71, 71, + 71, 1935, 71, 71, 71, 1945, 1944, 1943, 1940, 71, + 1941, 1946, 71, 3080, 1938, 1936, 1947, 71, 1949, 1942, + 71, 71, 71, 71, 71, 71, 1950, 1951, 1954, 1948, + 1953, 1952, 71, 71, 71, 1955, 71, 1957, 71, 71, + 1961, 71, 71, 71, 1960, 1956, 1958, 71, 1963, 71, + 1959, 1962, 1964, 1965, 71, 71, 71, 71, 71, 71, - 1968, 71, 71, 71, 1974, 71, 71, 71, 1965, 1967, - 71, 71, 1976, 71, 71, 1977, 1978, 71, 1970, 1971, - 1972, 1973, 1979, 1975, 71, 71, 71, 1982, 71, 71, - 71, 1980, 71, 71, 71, 71, 71, 1983, 71, 71, - 71, 1990, 1985, 71, 1986, 1981, 1987, 1994, 71, 71, - 1984, 1989, 1993, 71, 1991, 71, 1997, 1995, 1992, 1988, - 1998, 71, 71, 1996, 2001, 71, 2000, 71, 71, 1999, - 71, 71, 2003, 71, 71, 2004, 71, 71, 2009, 2005, - 71, 71, 2007, 2002, 71, 71, 2008, 2011, 71, 2006, - 2013, 71, 71, 2015, 2012, 71, 2010, 2016, 71, 71, + 71, 1972, 1970, 71, 1967, 1971, 71, 71, 71, 1966, + 71, 71, 1974, 71, 1968, 71, 1969, 1973, 71, 1977, + 1980, 3080, 1976, 71, 1975, 71, 1981, 1983, 1979, 71, + 1978, 71, 1982, 71, 1984, 71, 1985, 1987, 71, 71, + 71, 71, 1986, 1988, 1993, 71, 71, 1995, 71, 1989, + 71, 1990, 1997, 71, 1991, 1992, 71, 71, 1996, 71, + 71, 2001, 1994, 71, 71, 1998, 1999, 71, 2000, 71, + 71, 71, 2002, 71, 71, 71, 71, 71, 71, 2004, + 2009, 2005, 2006, 2013, 71, 2003, 71, 71, 2008, 2012, + 2016, 2017, 71, 2010, 2014, 2011, 71, 2007, 2015, 71, - 2021, 71, 2019, 2017, 2018, 71, 71, 2014, 71, 71, - 2022, 71, 2020, 71, 2023, 71, 2024, 2027, 71, 71, - 2028, 2031, 3053, 71, 71, 2026, 71, 71, 2025, 2032, - 2029, 2034, 71, 2030, 2033, 2036, 71, 71, 2037, 2035, - 71, 2038, 71, 2039, 71, 71, 2040, 71, 71, 2041, - 2045, 71, 2047, 71, 71, 71, 2043, 2048, 71, 2044, - 71, 71, 2049, 2042, 71, 2052, 2050, 2051, 71, 2053, - 71, 71, 2046, 71, 2054, 2057, 71, 71, 71, 2056, - 71, 71, 71, 71, 71, 71, 71, 3053, 2055, 2058, - 2066, 2059, 2061, 2060, 2063, 2062, 2064, 71, 71, 71, + 71, 2019, 2020, 71, 71, 71, 71, 71, 2022, 71, + 71, 2023, 2018, 71, 2024, 2028, 2026, 2021, 71, 71, + 2030, 2027, 2032, 71, 2025, 71, 71, 71, 71, 2029, + 2035, 2034, 2036, 2031, 71, 71, 71, 2040, 71, 2037, + 71, 71, 71, 71, 71, 2041, 2043, 2046, 71, 71, + 2047, 2033, 71, 2038, 2042, 71, 2039, 2050, 2045, 71, + 71, 2044, 2052, 71, 2051, 71, 71, 2048, 2056, 71, + 71, 2058, 71, 71, 2054, 2049, 71, 2059, 71, 71, + 71, 71, 2055, 2053, 2057, 2061, 71, 2060, 2065, 2067, + 2063, 2062, 71, 2064, 2068, 71, 71, 71, 71, 71, - 71, 2065, 2067, 71, 71, 2069, 2071, 2068, 2075, 2072, - 71, 71, 2077, 71, 71, 2079, 71, 3053, 2070, 2073, - 2076, 2074, 71, 2078, 71, 71, 2081, 2084, 2086, 2080, - 2082, 71, 2085, 71, 71, 2087, 71, 2083, 71, 2088, - 71, 71, 2091, 71, 71, 2092, 2089, 2096, 71, 2095, - 71, 2090, 71, 2097, 71, 2100, 71, 2102, 71, 2093, - 71, 71, 2098, 2101, 2103, 71, 71, 2105, 71, 71, - 2094, 2104, 2099, 71, 71, 71, 71, 71, 2106, 2108, - 2107, 2110, 71, 71, 71, 71, 71, 71, 2113, 2119, - 71, 2117, 2111, 2109, 71, 2114, 71, 2112, 2120, 71, + 2066, 2069, 71, 2072, 2073, 71, 71, 71, 2070, 2071, + 2077, 71, 71, 71, 71, 2074, 2076, 71, 71, 71, + 71, 71, 71, 71, 2078, 2075, 71, 2086, 2081, 2080, + 2079, 2083, 2082, 2084, 71, 2088, 71, 71, 2085, 2087, + 71, 71, 2089, 2091, 71, 2095, 2092, 2097, 71, 71, + 71, 2099, 71, 2096, 71, 2090, 2093, 71, 2094, 2098, + 71, 2101, 3080, 71, 2104, 2102, 2106, 2103, 2100, 2105, + 71, 2107, 71, 71, 71, 71, 2108, 71, 2111, 71, + 71, 2112, 2109, 2110, 2115, 2116, 71, 71, 2117, 71, + 71, 2120, 71, 71, 71, 2113, 2126, 71, 2121, 71, - 2115, 71, 71, 71, 2122, 2116, 71, 71, 71, 2118, - 71, 2121, 2126, 71, 2124, 2129, 71, 71, 2130, 2127, - 71, 71, 2125, 71, 71, 71, 2128, 2123, 71, 71, - 2140, 71, 2131, 71, 71, 71, 2132, 2141, 71, 2139, - 2137, 3053, 2135, 2133, 71, 2134, 2136, 2143, 2142, 71, - 2138, 2144, 71, 2145, 2146, 71, 2147, 71, 71, 2148, - 71, 2150, 2149, 2153, 71, 71, 71, 2151, 71, 71, - 2152, 2154, 71, 2155, 2159, 71, 2160, 71, 71, 2162, - 71, 71, 2164, 71, 2158, 2156, 71, 71, 71, 2157, - 2167, 71, 2166, 2168, 71, 71, 71, 2161, 71, 2163, + 2122, 2118, 2123, 71, 71, 2125, 2114, 71, 2119, 2124, + 71, 71, 71, 71, 2127, 2130, 2128, 71, 71, 71, + 71, 71, 2133, 71, 71, 71, 2137, 2139, 71, 2140, + 71, 71, 2129, 2132, 71, 71, 2131, 2134, 71, 2135, + 2136, 71, 71, 2142, 71, 2141, 2138, 2144, 71, 2146, + 2149, 71, 71, 2145, 2147, 71, 2150, 2143, 71, 71, + 2148, 71, 71, 71, 71, 71, 2160, 71, 71, 71, + 71, 2151, 2161, 71, 2152, 71, 2157, 2159, 71, 2198, + 2155, 2153, 2163, 2154, 2156, 2168, 2158, 71, 2162, 71, + 2165, 2164, 2166, 71, 2167, 71, 71, 2170, 71, 71, - 71, 2165, 2169, 71, 2170, 2173, 2174, 71, 2176, 71, - 2171, 71, 71, 71, 71, 2180, 2179, 2172, 2178, 2182, - 71, 71, 2175, 71, 71, 2186, 71, 71, 71, 2177, - 2181, 71, 71, 2191, 71, 71, 2190, 71, 2184, 71, - 2183, 71, 71, 2185, 2195, 71, 2189, 2187, 71, 2197, - 71, 2188, 2193, 71, 2192, 71, 2194, 71, 2202, 2196, - 71, 71, 2198, 2204, 71, 71, 71, 2205, 2199, 2203, - 71, 2200, 71, 71, 71, 2209, 71, 2208, 2210, 71, - 71, 2201, 2206, 71, 2207, 2212, 71, 71, 2214, 71, - 2219, 2211, 2216, 2221, 2217, 2213, 71, 71, 71, 71, + 2169, 2173, 71, 71, 2174, 71, 71, 2171, 2175, 71, + 2172, 2179, 71, 2180, 71, 71, 2182, 71, 71, 2184, + 71, 2178, 71, 71, 71, 2176, 2177, 71, 2186, 2187, + 71, 2188, 71, 71, 2181, 71, 2183, 2185, 2189, 71, + 71, 2191, 2190, 71, 2193, 2194, 71, 2196, 71, 71, + 71, 2200, 2199, 71, 2192, 2202, 71, 71, 71, 2195, + 71, 2197, 2206, 71, 71, 71, 2201, 71, 71, 2210, + 2211, 71, 2203, 2204, 71, 71, 2205, 71, 71, 71, + 2207, 71, 2209, 2213, 2216, 71, 2218, 2208, 2217, 71, + 2214, 71, 2215, 2212, 71, 2219, 71, 2223, 71, 71, - 2220, 2218, 2215, 2222, 71, 2224, 71, 71, 71, 2223, - 2225, 2226, 71, 71, 71, 2227, 2228, 2232, 2233, 71, - 71, 2229, 2230, 71, 71, 71, 71, 2238, 2231, 2234, - 71, 2237, 71, 71, 71, 2236, 71, 2239, 71, 2235, - 2241, 71, 2242, 2245, 71, 2240, 71, 71, 2243, 71, - 2244, 71, 71, 2246, 71, 2247, 2261, 2249, 71, 2248, - 71, 2252, 71, 2251, 2250, 2253, 2255, 2256, 71, 71, - 2257, 71, 2254, 2258, 71, 71, 2260, 2262, 2259, 2263, - 71, 71, 71, 71, 71, 2265, 71, 71, 71, 2269, - 2270, 71, 71, 71, 2266, 2264, 71, 2272, 71, 3053, + 2225, 71, 71, 71, 2226, 71, 71, 2220, 2224, 2221, + 2230, 2231, 71, 71, 2229, 71, 71, 71, 71, 2227, + 2222, 2228, 2235, 2237, 71, 2233, 2240, 71, 2232, 2238, + 2242, 2239, 71, 71, 2234, 71, 71, 71, 2243, 71, + 2244, 2236, 71, 71, 71, 2247, 71, 71, 2241, 71, + 71, 3080, 2246, 2248, 2253, 2249, 2250, 2252, 2251, 2254, + 71, 71, 2245, 71, 71, 71, 2259, 2255, 71, 2258, + 2256, 71, 71, 2257, 71, 2260, 71, 2264, 2266, 71, + 71, 71, 71, 2261, 71, 71, 71, 71, 2277, 71, + 2268, 2262, 2265, 2263, 2269, 2267, 71, 2272, 71, 2273, - 2267, 71, 2273, 71, 2274, 2271, 2268, 2275, 71, 71, - 71, 71, 2277, 2278, 2276, 2279, 2280, 71, 71, 71, - 71, 71, 71, 2281, 2282, 71, 2286, 71, 2289, 71, - 71, 71, 2288, 71, 71, 2285, 2290, 71, 2283, 2295, - 2284, 71, 2293, 2296, 2294, 2287, 71, 2291, 71, 2292, - 71, 71, 2298, 71, 71, 2301, 2299, 71, 2303, 71, - 2297, 2302, 2305, 71, 71, 71, 71, 2307, 71, 71, - 71, 2304, 71, 71, 2300, 2306, 71, 2311, 2315, 71, - 2317, 2313, 71, 2308, 2309, 2310, 71, 2314, 2316, 71, - 71, 2318, 71, 71, 71, 71, 71, 71, 2326, 2312, + 2270, 2271, 71, 2274, 71, 2278, 71, 2275, 2279, 71, + 71, 2281, 2282, 2280, 2276, 2283, 2284, 71, 71, 71, + 71, 71, 71, 2286, 71, 71, 71, 2290, 2291, 71, + 71, 71, 2287, 2285, 71, 2293, 71, 3080, 2288, 71, + 2294, 71, 2295, 2292, 2289, 2296, 71, 71, 71, 71, + 2298, 2299, 2297, 2300, 2301, 71, 71, 71, 71, 71, + 71, 2302, 2303, 71, 2307, 71, 2310, 71, 71, 71, + 2309, 71, 71, 2306, 2311, 71, 2304, 2316, 2305, 71, + 2314, 2317, 2315, 2308, 71, 2312, 71, 2313, 71, 71, + 2319, 71, 71, 2322, 2320, 71, 2324, 71, 2318, 2323, - 2321, 2324, 71, 71, 71, 2325, 71, 71, 2319, 2323, - 2329, 71, 71, 2322, 71, 2320, 71, 2332, 2333, 71, - 71, 2327, 2328, 71, 71, 2330, 71, 71, 2334, 2336, - 2331, 2337, 2335, 71, 71, 2338, 71, 71, 2339, 71, - 71, 2340, 2342, 71, 2344, 3053, 2341, 2345, 71, 2346, - 71, 2347, 71, 2348, 71, 2349, 2343, 71, 2350, 71, - 2352, 71, 2351, 71, 2353, 71, 71, 71, 2358, 71, - 71, 2360, 71, 2354, 2361, 71, 71, 2355, 71, 71, - 71, 71, 71, 2357, 71, 71, 2356, 2362, 2364, 2359, - 2363, 2365, 71, 2370, 71, 71, 71, 2367, 71, 71, + 2326, 71, 71, 71, 71, 2328, 71, 71, 71, 2325, + 71, 71, 2321, 2327, 71, 2332, 2336, 71, 2338, 2334, + 71, 2329, 2330, 2331, 71, 2335, 2337, 71, 71, 2339, + 71, 71, 71, 71, 71, 71, 2347, 2333, 2342, 2345, + 71, 71, 71, 2346, 71, 71, 2340, 2344, 2350, 71, + 71, 2343, 71, 2341, 71, 2351, 71, 2354, 71, 2348, + 2349, 2355, 71, 2352, 71, 71, 71, 2358, 2353, 2356, + 2359, 71, 2357, 2360, 71, 71, 71, 71, 71, 3080, + 2361, 2364, 71, 2366, 2367, 71, 71, 2363, 2362, 2368, + 71, 2369, 71, 2370, 71, 71, 71, 2365, 2371, 71, - 2366, 71, 2368, 71, 2369, 2371, 71, 2377, 71, 71, - 2378, 2372, 2374, 71, 71, 2373, 71, 2376, 71, 71, - 71, 2384, 2375, 2379, 2380, 2386, 71, 71, 2388, 71, - 71, 2381, 2387, 2385, 2389, 71, 2382, 71, 2390, 2383, - 71, 2391, 71, 2392, 2393, 71, 71, 71, 71, 2395, - 71, 71, 71, 71, 71, 2402, 2394, 71, 71, 2400, - 71, 2406, 2407, 71, 71, 2397, 2396, 71, 71, 71, - 2398, 2399, 2401, 71, 2403, 2404, 2405, 2409, 2410, 71, - 2412, 71, 2411, 71, 71, 2413, 2408, 2414, 71, 71, - 2415, 71, 71, 2421, 71, 2422, 71, 2423, 71, 2416, + 2372, 2373, 71, 2374, 71, 2375, 71, 2376, 71, 2380, + 71, 2377, 71, 2382, 71, 2383, 71, 71, 71, 71, + 71, 71, 71, 71, 2379, 71, 2378, 2386, 2384, 71, + 2385, 2381, 71, 2387, 2389, 2392, 71, 71, 71, 2388, + 71, 2393, 2390, 2391, 71, 71, 2399, 71, 71, 71, + 71, 2394, 71, 2396, 71, 71, 2400, 2395, 2398, 71, + 2408, 3080, 2397, 2401, 2402, 71, 71, 71, 2403, 2406, + 2409, 2410, 71, 2407, 2404, 2411, 71, 2405, 71, 2412, + 71, 2413, 71, 2414, 71, 2415, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 2416, 2424, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 2417, 2418, 2419, 2427, - 2420, 71, 71, 2431, 71, 2425, 2424, 2430, 2432, 71, - 2426, 71, 2428, 2433, 71, 2429, 2434, 71, 71, 71, - 71, 71, 71, 2435, 71, 71, 2440, 2436, 71, 71, - 71, 2438, 2444, 2437, 2445, 71, 71, 2448, 71, 71, - 2439, 71, 2441, 2442, 71, 2443, 2447, 71, 2449, 71, - 2454, 2446, 71, 2451, 2450, 2452, 71, 2456, 71, 71, - 2453, 2455, 71, 71, 2457, 71, 2459, 71, 2458, 2460, - 71, 2462, 71, 71, 2464, 71, 2467, 71, 2463, 71, - 2468, 71, 2461, 2465, 2470, 71, 71, 2466, 71, 71, + 2422, 71, 2428, 2429, 71, 2417, 2419, 2418, 71, 71, + 2421, 2420, 2423, 2425, 71, 2426, 2427, 2431, 2432, 71, + 71, 2430, 71, 2433, 2434, 71, 71, 2435, 71, 2437, + 71, 71, 71, 2443, 71, 2444, 71, 2445, 2436, 71, + 71, 2438, 71, 71, 71, 71, 2439, 2441, 2440, 2449, + 71, 2442, 71, 71, 2453, 2447, 71, 2446, 2452, 2454, + 71, 2448, 71, 71, 2455, 2450, 2456, 71, 71, 71, + 2451, 71, 2458, 71, 71, 2457, 71, 71, 2462, 71, + 71, 2460, 2466, 2467, 71, 71, 71, 2459, 2470, 71, + 2471, 2461, 71, 71, 2463, 2464, 71, 2465, 2469, 71, - 71, 71, 2475, 71, 2477, 71, 71, 71, 2473, 2471, - 2474, 2472, 2478, 2469, 71, 2476, 71, 71, 71, 2479, - 2480, 2481, 71, 71, 71, 2482, 71, 71, 71, 71, - 3053, 2484, 2485, 2487, 2488, 2490, 71, 2483, 2486, 2491, - 71, 2489, 71, 71, 71, 2494, 2496, 3053, 2493, 2492, - 71, 71, 71, 71, 2498, 2497, 71, 2501, 71, 2502, - 71, 2500, 2495, 71, 2504, 71, 2499, 71, 2506, 71, - 2505, 71, 71, 2507, 71, 71, 2503, 2508, 2510, 71, - 2509, 71, 71, 2511, 71, 71, 2512, 71, 2517, 2526, - 2516, 2513, 2518, 71, 71, 2515, 71, 71, 71, 71, + 2468, 2474, 71, 2473, 71, 71, 2475, 2472, 2479, 71, + 71, 2476, 71, 71, 2483, 71, 71, 2482, 2485, 71, + 71, 2481, 2480, 71, 2477, 2478, 71, 71, 2486, 2487, + 2490, 71, 71, 2491, 71, 2484, 2493, 71, 71, 2489, + 71, 71, 2488, 71, 2498, 71, 71, 2500, 71, 71, + 2496, 2494, 2497, 2495, 2501, 71, 2492, 71, 71, 71, + 2502, 2499, 71, 2504, 71, 71, 71, 2505, 71, 71, + 71, 2503, 71, 2507, 2508, 2510, 2515, 2511, 2513, 71, + 2509, 2506, 71, 2512, 2514, 71, 71, 2516, 71, 2519, + 71, 71, 71, 2521, 71, 71, 2520, 2524, 71, 2523, - 2514, 2519, 2521, 71, 71, 2520, 2522, 71, 71, 2524, - 71, 2523, 2525, 71, 71, 2530, 71, 71, 71, 2528, - 71, 2527, 2529, 2535, 71, 2531, 71, 71, 71, 2539, - 71, 71, 71, 71, 2544, 71, 2532, 2537, 2533, 2534, - 71, 71, 2538, 2546, 2543, 2536, 2547, 2541, 2548, 71, - 2540, 71, 71, 2542, 71, 2549, 71, 71, 71, 2550, - 71, 71, 2551, 71, 71, 2554, 2545, 2552, 71, 2557, - 2558, 71, 71, 2553, 2559, 71, 2561, 2555, 71, 2556, - 2560, 71, 71, 2562, 2563, 71, 71, 71, 2567, 71, - 71, 2565, 71, 2568, 71, 71, 2570, 2571, 71, 2566, + 2525, 71, 71, 3080, 2517, 2522, 2518, 2527, 71, 71, + 71, 2529, 2528, 71, 71, 2526, 2530, 71, 2531, 2532, + 2533, 71, 71, 71, 71, 2534, 71, 2535, 71, 2540, + 71, 2539, 2536, 71, 2541, 71, 2538, 71, 2542, 2537, + 71, 71, 2543, 71, 71, 71, 2544, 2545, 2547, 2546, + 2548, 71, 71, 71, 71, 71, 2553, 71, 71, 71, + 71, 71, 2551, 2552, 71, 2550, 2554, 2558, 71, 2549, + 2562, 71, 71, 71, 71, 2561, 71, 2555, 71, 2556, + 2557, 2560, 2566, 2559, 2567, 71, 71, 2569, 2570, 2564, + 3080, 2571, 2563, 71, 71, 71, 2565, 71, 2572, 71, - 2572, 71, 2564, 71, 71, 2574, 2573, 71, 2575, 2569, - 2577, 71, 71, 2578, 2579, 71, 2581, 71, 71, 71, - 71, 2585, 2580, 71, 2576, 2586, 71, 71, 71, 71, - 2588, 2582, 2587, 71, 2584, 2589, 71, 2583, 71, 2594, - 71, 2597, 71, 71, 2593, 71, 2590, 2596, 71, 2591, - 71, 71, 71, 2592, 2600, 2598, 2599, 71, 71, 71, - 2602, 71, 71, 3053, 2605, 2595, 71, 2609, 71, 71, - 71, 71, 71, 2611, 71, 2603, 2604, 2601, 71, 2606, - 2608, 2612, 2607, 2610, 2616, 2613, 2615, 2619, 71, 2617, - 71, 2614, 71, 2618, 71, 2620, 71, 2621, 71, 2622, + 71, 71, 71, 2573, 71, 2574, 71, 71, 2577, 71, + 2575, 2568, 71, 2580, 71, 2576, 2582, 71, 2583, 71, + 2578, 71, 2579, 2584, 71, 2585, 71, 2581, 2587, 71, + 71, 2586, 71, 2591, 2588, 2589, 71, 71, 2592, 71, + 71, 2594, 2595, 71, 2590, 2596, 71, 71, 71, 71, + 2597, 2601, 71, 71, 2602, 2599, 2593, 2603, 71, 71, + 71, 2598, 2605, 71, 71, 71, 2609, 2610, 71, 2600, + 71, 71, 71, 2606, 2604, 2611, 71, 71, 2612, 2608, + 71, 2618, 2607, 2613, 71, 71, 2617, 71, 71, 2621, + 71, 71, 2620, 2614, 71, 71, 2615, 2616, 71, 2622, - 71, 2623, 71, 71, 71, 71, 71, 2625, 2624, 71, - 2631, 71, 71, 71, 2628, 2632, 2634, 71, 71, 2636, - 71, 71, 71, 2626, 3053, 2635, 2629, 2637, 71, 2630, - 2627, 2633, 2638, 71, 71, 71, 71, 2639, 71, 2642, - 2643, 71, 2644, 2640, 2641, 2645, 71, 2647, 71, 71, - 71, 71, 2648, 71, 71, 2651, 71, 2650, 2652, 71, - 71, 2646, 2649, 2653, 71, 2654, 71, 71, 71, 2657, - 71, 71, 71, 3053, 2656, 2662, 71, 2660, 2658, 2655, - 71, 71, 71, 2663, 2704, 2665, 71, 2666, 71, 2667, - 2661, 71, 2659, 2664, 71, 2668, 2669, 71, 2670, 2672, + 71, 2624, 71, 2623, 71, 2626, 71, 71, 71, 2629, + 2619, 2633, 71, 71, 71, 71, 2625, 2627, 2628, 71, + 71, 71, 2632, 2635, 2630, 71, 71, 2631, 2634, 2637, + 2640, 2636, 2638, 2639, 3080, 2641, 71, 2648, 2642, 2643, + 71, 71, 2644, 71, 2645, 71, 2646, 71, 2647, 71, + 71, 71, 2651, 71, 2649, 71, 2655, 71, 71, 71, + 2652, 2656, 2658, 71, 71, 2660, 71, 71, 2662, 71, + 2650, 2659, 2661, 2653, 71, 2654, 71, 2657, 71, 71, + 2667, 71, 71, 2663, 71, 2664, 2668, 2665, 71, 2671, + 71, 71, 71, 2669, 2672, 71, 2675, 2666, 71, 2674, - 71, 2671, 2673, 71, 2674, 71, 71, 71, 71, 71, - 2679, 71, 71, 2678, 2676, 2675, 71, 2680, 71, 2682, - 71, 71, 2687, 2681, 71, 71, 2677, 2683, 71, 2685, - 2689, 71, 2684, 71, 71, 71, 71, 2690, 71, 2686, - 2691, 2692, 71, 2693, 71, 2697, 71, 71, 71, 71, - 2688, 71, 71, 2694, 71, 2700, 71, 71, 2696, 2695, - 2698, 2699, 2705, 2701, 71, 2702, 2707, 71, 2709, 71, - 71, 2703, 2710, 71, 2712, 71, 71, 71, 71, 71, - 2717, 71, 2706, 2708, 2716, 71, 71, 71, 71, 2721, - 71, 2711, 2713, 2714, 2715, 2723, 71, 71, 71, 71, + 71, 2677, 71, 2670, 2673, 2676, 2678, 71, 71, 71, + 71, 71, 2679, 71, 71, 71, 2687, 71, 71, 2682, + 71, 71, 71, 2683, 2685, 2690, 2691, 2681, 71, 2688, + 71, 2692, 71, 2680, 2686, 71, 71, 2693, 2684, 2689, + 2694, 71, 2695, 2697, 71, 2696, 2698, 71, 2699, 71, + 71, 71, 2701, 71, 2704, 2702, 2703, 71, 2705, 2700, + 71, 71, 2706, 2707, 71, 71, 71, 71, 2712, 71, + 71, 2710, 2714, 71, 71, 2716, 71, 71, 71, 2708, + 2715, 71, 2717, 71, 2718, 2711, 2709, 71, 2722, 71, + 71, 71, 71, 71, 2713, 71, 2720, 2719, 71, 2725, - 71, 2725, 71, 2726, 2722, 2718, 2720, 71, 71, 2719, - 2728, 71, 2729, 71, 2731, 71, 71, 2724, 2736, 2733, - 2730, 2727, 2735, 71, 71, 2734, 71, 71, 2740, 71, - 71, 71, 2742, 2741, 2732, 71, 71, 2745, 2738, 2746, - 71, 71, 2737, 71, 2747, 2748, 71, 2739, 2743, 71, - 71, 71, 71, 2753, 2750, 2744, 71, 2751, 71, 71, - 2756, 71, 71, 71, 2749, 71, 2761, 71, 71, 2752, - 2757, 71, 71, 2754, 2755, 2764, 71, 3053, 2760, 71, - 2758, 2763, 2765, 71, 2766, 2767, 71, 2762, 2759, 2769, - 71, 2768, 2770, 71, 2771, 71, 71, 2773, 71, 71, + 71, 2726, 71, 2723, 2724, 71, 71, 2721, 2729, 2727, + 2730, 2732, 71, 2734, 71, 2735, 71, 2728, 71, 2737, + 71, 71, 71, 71, 71, 2733, 71, 71, 2731, 2742, + 71, 2741, 71, 71, 2746, 71, 71, 2738, 2739, 2736, + 2740, 2749, 71, 2743, 71, 71, 2751, 71, 71, 2747, + 2744, 2745, 71, 2752, 71, 2748, 2754, 71, 2755, 71, + 2757, 71, 71, 71, 2750, 71, 2763, 2753, 71, 2762, + 71, 3080, 2760, 2759, 2756, 71, 2766, 71, 71, 71, + 2758, 2767, 2764, 71, 2768, 2761, 71, 2771, 2765, 2772, + 71, 2769, 71, 71, 2774, 2773, 71, 71, 71, 71, - 71, 2772, 71, 71, 71, 2778, 2779, 71, 71, 71, - 71, 2783, 71, 71, 2784, 71, 71, 3053, 2774, 2782, - 71, 2787, 2775, 2780, 2776, 2777, 2788, 71, 2781, 2789, - 71, 71, 71, 2785, 2786, 2792, 2790, 71, 71, 71, - 71, 71, 2795, 71, 71, 2796, 2791, 2794, 71, 2793, - 71, 71, 71, 2799, 71, 71, 71, 2801, 2797, 71, - 2802, 71, 2800, 71, 2798, 71, 71, 71, 71, 71, - 2818, 71, 2811, 2803, 2812, 2804, 2805, 2806, 2814, 2807, - 71, 2813, 2808, 2809, 71, 2815, 71, 2810, 2816, 2819, - 71, 71, 2821, 71, 71, 2820, 2822, 71, 2829, 2817, + 71, 2779, 2776, 2777, 71, 71, 2770, 71, 2782, 71, + 71, 71, 71, 71, 2775, 2787, 71, 2783, 2778, 71, + 71, 2780, 2781, 2790, 71, 2786, 2791, 71, 2784, 2789, + 71, 71, 2788, 2793, 71, 2792, 2785, 2795, 71, 2794, + 2796, 71, 2797, 71, 71, 2799, 71, 71, 71, 2798, + 2800, 71, 71, 2804, 2805, 71, 71, 71, 71, 2809, + 71, 2810, 71, 71, 71, 71, 2811, 2808, 2847, 2801, + 2802, 2806, 71, 2803, 71, 71, 2807, 2815, 71, 2814, + 2816, 71, 71, 2812, 2813, 2819, 71, 2817, 71, 2818, + 71, 71, 2822, 71, 71, 2823, 2821, 71, 2820, 71, - 2823, 2824, 71, 71, 2825, 2826, 71, 71, 2827, 2828, - 71, 71, 2830, 71, 71, 71, 71, 2836, 71, 71, - 2831, 2835, 71, 2839, 2832, 2853, 2833, 71, 71, 2838, - 71, 71, 71, 71, 2834, 71, 2840, 71, 2844, 71, - 2837, 2843, 2874, 2841, 2845, 71, 2846, 71, 2842, 71, - 2847, 71, 2851, 71, 2848, 71, 71, 2852, 71, 71, - 2849, 2857, 71, 2850, 2854, 2860, 71, 2858, 2855, 2861, - 71, 71, 2863, 71, 2909, 71, 2856, 2862, 2859, 2864, - 71, 71, 2866, 71, 2867, 71, 2865, 2868, 71, 2869, - 71, 2870, 71, 2871, 71, 2872, 71, 2873, 71, 2875, + 71, 71, 71, 71, 2826, 71, 71, 2828, 71, 71, + 2829, 71, 2827, 71, 2824, 71, 71, 2825, 71, 71, + 2838, 2839, 2830, 71, 2834, 2831, 2832, 2833, 2835, 2836, + 2841, 71, 71, 3080, 2837, 2904, 71, 2842, 2840, 2843, + 2845, 71, 2846, 71, 2844, 2848, 71, 2849, 71, 2850, + 2851, 71, 71, 2852, 2853, 2856, 71, 2854, 2855, 71, + 71, 2857, 71, 71, 71, 71, 71, 2863, 71, 71, + 71, 2862, 71, 71, 2866, 71, 3080, 2858, 2859, 2865, + 71, 71, 2867, 2860, 71, 2861, 71, 2871, 2872, 71, + 2868, 2873, 71, 2870, 2864, 71, 2874, 71, 2869, 2878, - 71, 71, 71, 71, 71, 71, 2880, 71, 71, 71, - 2876, 71, 2884, 71, 2877, 71, 2886, 71, 71, 2881, - 71, 2882, 2893, 2878, 2879, 2883, 71, 2887, 71, 2888, - 2885, 71, 2890, 71, 71, 71, 2892, 71, 2891, 71, - 2895, 71, 71, 71, 2889, 71, 71, 2899, 2894, 2902, - 71, 71, 2900, 2904, 71, 71, 2896, 2897, 2898, 71, - 2901, 2905, 71, 2903, 2906, 71, 71, 71, 2908, 71, - 71, 71, 71, 2917, 2907, 2910, 2914, 71, 71, 2915, - 2911, 2913, 71, 71, 2916, 71, 71, 71, 71, 71, - 2912, 2918, 71, 71, 71, 71, 71, 2924, 71, 2921, + 2875, 2880, 71, 71, 2879, 71, 2876, 71, 71, 2877, + 71, 71, 71, 2887, 71, 2884, 2885, 2888, 2882, 71, + 2890, 71, 71, 71, 71, 2889, 3080, 2881, 2936, 2883, + 71, 2886, 2891, 71, 2910, 2892, 2893, 71, 2894, 71, + 2895, 71, 2896, 71, 2897, 71, 2898, 71, 2899, 71, + 2900, 71, 71, 2902, 71, 71, 71, 71, 71, 2907, + 71, 2901, 71, 71, 2903, 71, 2911, 2913, 71, 71, + 71, 71, 2908, 2915, 71, 2909, 2905, 2906, 2912, 71, + 2917, 71, 2920, 71, 2919, 71, 71, 2914, 71, 71, + 71, 2922, 2918, 71, 71, 71, 71, 2916, 71, 2921, - 2928, 2919, 2923, 2920, 2925, 2931, 71, 2932, 2929, 71, - 2926, 2922, 71, 2927, 2933, 71, 2930, 71, 2934, 2935, - 71, 2936, 71, 71, 71, 71, 2939, 71, 2937, 2940, - 2941, 71, 2938, 2944, 71, 71, 71, 71, 71, 71, - 71, 2947, 2949, 71, 2952, 71, 2943, 2946, 2945, 71, - 71, 71, 2942, 2950, 2955, 71, 2959, 2948, 71, 2951, - 71, 2956, 71, 2960, 2953, 71, 2957, 71, 2954, 71, - 2958, 71, 71, 2965, 71, 2966, 71, 2964, 71, 2961, - 2962, 71, 71, 71, 71, 71, 71, 2970, 71, 71, - 2963, 2972, 71, 2979, 71, 71, 2969, 71, 2974, 2967, + 2926, 2929, 2923, 71, 2927, 71, 2925, 2924, 2928, 2930, + 2931, 71, 2932, 71, 2933, 71, 71, 71, 71, 2938, + 71, 71, 71, 2942, 71, 2935, 2934, 2941, 71, 2944, + 71, 2940, 71, 71, 71, 71, 71, 2937, 71, 2943, + 71, 2939, 71, 2945, 71, 2951, 71, 3080, 71, 2948, + 71, 2946, 2947, 2950, 2952, 2955, 2958, 71, 71, 71, + 2949, 2953, 2956, 71, 2954, 71, 2957, 2959, 2960, 71, + 71, 2961, 2962, 71, 2963, 71, 71, 71, 2964, 2966, + 71, 71, 2967, 2965, 71, 2968, 2971, 71, 71, 71, + 2969, 71, 71, 2974, 2976, 71, 2970, 71, 2972, 2973, - 2977, 2968, 2975, 71, 2971, 71, 71, 2973, 2978, 2983, - 71, 2976, 71, 71, 2985, 71, 2986, 2980, 2984, 71, - 71, 71, 71, 2981, 2987, 2982, 2988, 2989, 2991, 2992, - 71, 2990, 71, 71, 71, 2994, 71, 2993, 71, 71, - 71, 71, 2995, 3000, 71, 71, 2997, 71, 3003, 71, - 3004, 71, 2996, 71, 71, 71, 71, 71, 3002, 2998, - 2999, 3007, 3005, 3001, 71, 3006, 71, 3011, 71, 3012, - 3010, 71, 71, 3008, 3009, 71, 3015, 71, 3017, 71, - 3018, 3013, 71, 71, 71, 3022, 71, 3019, 71, 71, - 3020, 3016, 71, 3023, 3024, 3025, 71, 3014, 71, 71, + 2979, 71, 71, 71, 2982, 71, 2977, 71, 2983, 2975, + 71, 71, 71, 2986, 2987, 71, 2978, 2980, 2984, 71, + 71, 2981, 71, 71, 71, 71, 2988, 71, 2989, 2991, + 2985, 2992, 71, 2993, 71, 71, 71, 71, 71, 71, + 2997, 2990, 2999, 71, 2994, 2995, 71, 2998, 71, 2996, + 71, 71, 3001, 3004, 71, 3005, 3002, 3000, 3006, 71, + 71, 3010, 71, 71, 3012, 3003, 71, 3013, 3011, 71, + 71, 3007, 3008, 71, 3014, 71, 71, 3018, 3015, 3009, + 3016, 3019, 71, 71, 71, 3021, 71, 71, 71, 3020, + 71, 3022, 71, 71, 3027, 3017, 71, 3024, 71, 3030, - 71, 71, 71, 3021, 71, 3026, 3027, 3029, 3028, 3031, - 71, 71, 71, 71, 71, 3037, 3033, 3034, 71, 3030, - 3032, 3038, 71, 3035, 71, 71, 3041, 3042, 71, 71, - 3044, 71, 3036, 3045, 71, 71, 3043, 3039, 71, 71, - 71, 71, 3046, 3040, 3047, 3048, 3051, 71, 3052, 71, - 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3049, 3053, 3053, - 3050, 43, 43, 43, 43, 43, 43, 43, 48, 48, - 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, - 53, 53, 59, 59, 59, 59, 59, 59, 59, 64, - 64, 64, 64, 64, 64, 64, 74, 74, 3053, 74, + 71, 71, 3031, 71, 71, 71, 71, 3023, 71, 71, + 3034, 3025, 3026, 3032, 3029, 3028, 3033, 71, 3038, 71, + 71, 71, 3037, 71, 3039, 3035, 71, 3036, 71, 3042, + 71, 3044, 71, 3040, 71, 3045, 71, 3046, 3049, 71, + 71, 71, 3043, 3047, 71, 3048, 3050, 3041, 71, 71, + 3051, 3052, 71, 71, 3058, 71, 3053, 71, 71, 3055, + 3054, 71, 3056, 3057, 71, 71, 3060, 71, 71, 3061, + 71, 3064, 3065, 71, 71, 71, 3068, 3059, 3069, 71, + 3080, 71, 3071, 71, 3062, 71, 3063, 3066, 3070, 3072, + 71, 71, 3073, 3067, 71, 71, 3074, 71, 3080, 3075, - 74, 74, 74, 142, 142, 3053, 3053, 3053, 142, 142, - 144, 144, 3053, 3053, 144, 3053, 144, 146, 3053, 3053, - 3053, 3053, 3053, 146, 149, 149, 3053, 3053, 3053, 149, - 149, 151, 3053, 3053, 3053, 3053, 3053, 151, 153, 153, - 3053, 153, 153, 153, 153, 75, 75, 3053, 75, 75, - 75, 75, 13, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053 + 3078, 71, 3079, 71, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080, 3076, 3080, 3077, 43, 43, 43, + 43, 43, 43, 43, 48, 48, 48, 48, 48, 48, + 48, 53, 53, 53, 53, 53, 53, 53, 59, 59, + 59, 59, 59, 59, 59, 64, 64, 64, 64, 64, + 64, 64, 74, 74, 3080, 74, 74, 74, 74, 142, + 142, 3080, 3080, 3080, 142, 142, 144, 144, 3080, 3080, + 144, 3080, 144, 146, 3080, 3080, 3080, 3080, 3080, 146, + 149, 149, 3080, 3080, 3080, 149, 149, 151, 3080, 3080, + 3080, 3080, 3080, 151, 153, 153, 3080, 153, 153, 153, + 153, 75, 75, 3080, 75, 75, 75, 75, 13, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080 } ; -static const flex_int16_t yy_chk[5994] = +static const flex_int16_t yy_chk[6050] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2099,7 +2114,7 @@ static const flex_int16_t yy_chk[5994] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3059, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3086, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, @@ -2111,15 +2126,15 @@ static const flex_int16_t yy_chk[5994] = 28, 69, 28, 27, 35, 52, 32, 84, 52, 35, 63, 63, 32, 35, 40, 33, 32, 109, 40, 35, 37, 37, 35, 72, 109, 37, 38, 72, 40, 35, - 775, 38, 40, 40, 38, 37, 37, 80, 37, 39, + 767, 38, 40, 40, 38, 37, 37, 80, 37, 39, 39, 38, 39, 41, 41, 38, 38, 77, 41, 80, - 77, 39, 41, 58, 775, 58, 58, 39, 58, 66, + 77, 39, 41, 58, 767, 58, 58, 39, 58, 66, 89, 66, 66, 68, 66, 68, 68, 71, 68, 71, 71, 66, 71, 81, 74, 86, 74, 74, 71, 74, 78, 93, 89, 85, 78, 74, 74, 82, 83, 86, 82, 83, 85, 81, 87, 88, 90, 91, 92, 94, - 87, 93, 95, 91, 83, 96, 87, 98, 87, 1007, + 87, 93, 95, 91, 83, 96, 87, 98, 87, 1017, 94, 94, 92, 88, 88, 90, 91, 97, 94, 99, 95, 97, 100, 96, 99, 101, 102, 98, 101, 103, 104, 101, 102, 107, 105, 104, 100, 105, 108, 106, @@ -2143,614 +2158,619 @@ static const flex_int16_t yy_chk[5994] = 174, 175, 175, 177, 174, 178, 179, 169, 177, 174, 178, 185, 184, 181, 174, 180, 173, 176, 179, 181, 174, 174, 183, 186, 187, 185, 188, 183, 184, 189, - 190, 191, 191, 193, 189, 190, 187, 191, 186, 187, - 192, 194, 181, 199, 188, 192, 195, 196, 196, 191, + 190, 194, 192, 193, 189, 190, 187, 192, 186, 187, + 196, 196, 181, 202, 188, 191, 191, 194, 195, 191, - 197, 191, 195, 193, 198, 200, 197, 194, 201, 202, - 198, 200, 197, 199, 201, 203, 208, 204, 205, 206, - 207, 203, 204, 201, 205, 206, 209, 207, 210, 208, - 202, 211, 209, 212, 213, 215, 214, 211, 216, 217, - 215, 218, 213, 219, 222, 220, 224, 216, 210, 214, - 220, 220, 223, 221, 217, 212, 223, 218, 221, 225, - 226, 227, 222, 219, 228, 225, 229, 227, 224, 231, - 230, 229, 230, 232, 235, 233, 234, 236, 226, 226, - 232, 233, 234, 236, 228, 237, 238, 244, 231, 239, - 239, 240, 240, 235, 245, 241, 242, 237, 247, 245, + 197, 191, 198, 193, 195, 199, 197, 208, 198, 212, + 200, 201, 197, 191, 202, 191, 200, 201, 203, 210, + 208, 149, 204, 205, 203, 199, 201, 204, 206, 205, + 207, 212, 209, 214, 206, 211, 213, 207, 209, 210, + 215, 211, 216, 217, 213, 215, 214, 218, 219, 220, + 224, 216, 221, 222, 220, 220, 223, 221, 217, 225, + 223, 226, 228, 218, 227, 225, 231, 235, 219, 229, + 227, 222, 224, 230, 229, 230, 232, 237, 233, 226, + 226, 234, 228, 232, 233, 231, 235, 234, 236, 237, + 238, 239, 239, 241, 236, 240, 240, 242, 244, 241, - 238, 241, 242, 243, 246, 243, 248, 249, 250, 251, - 244, 257, 252, 250, 248, 253, 246, 247, 252, 241, - 254, 253, 243, 255, 256, 254, 257, 249, 255, 258, - 256, 259, 251, 260, 261, 262, 264, 268, 263, 264, - 266, 266, 261, 258, 263, 271, 265, 260, 265, 259, - 267, 269, 269, 267, 272, 268, 270, 270, 277, 273, - 262, 271, 273, 274, 275, 276, 285, 274, 278, 272, - 280, 276, 277, 275, 278, 279, 280, 279, 281, 282, - 282, 283, 281, 284, 286, 285, 283, 287, 288, 284, - 289, 290, 290, 291, 292, 294, 291, 293, 296, 281, + 243, 245, 243, 242, 238, 247, 245, 248, 246, 249, + 251, 250, 252, 148, 262, 248, 250, 241, 252, 243, + 246, 244, 253, 258, 247, 254, 255, 257, 253, 249, + 254, 255, 256, 251, 259, 260, 261, 258, 256, 262, + 263, 265, 257, 265, 261, 264, 263, 268, 264, 260, + 266, 266, 259, 267, 269, 269, 267, 270, 270, 271, + 273, 272, 274, 273, 275, 268, 274, 277, 276, 286, + 279, 278, 279, 275, 276, 271, 272, 278, 280, 281, + 285, 277, 283, 281, 280, 282, 282, 283, 284, 286, + 287, 288, 289, 292, 284, 290, 290, 294, 291, 285, - 149, 293, 298, 289, 286, 287, 295, 295, 297, 288, - 301, 297, 292, 294, 298, 299, 296, 300, 303, 304, - 300, 299, 301, 307, 315, 305, 307, 303, 297, 302, - 305, 306, 308, 315, 306, 148, 306, 304, 302, 309, - 310, 302, 310, 310, 313, 308, 302, 302, 302, 302, - 311, 309, 306, 314, 312, 311, 311, 312, 316, 317, - 317, 313, 319, 319, 313, 318, 320, 316, 314, 321, - 318, 322, 323, 324, 321, 325, 326, 327, 327, 329, - 327, 320, 326, 322, 335, 338, 338, 330, 331, 327, - 325, 323, 330, 324, 331, 332, 333, 146, 335, 329, + 281, 291, 293, 295, 297, 289, 293, 299, 287, 296, + 296, 292, 288, 302, 298, 305, 294, 298, 300, 299, + 301, 295, 297, 301, 300, 302, 306, 304, 309, 308, + 316, 306, 308, 305, 298, 303, 304, 307, 310, 316, + 307, 309, 307, 311, 303, 311, 311, 303, 314, 315, + 310, 312, 303, 303, 303, 303, 312, 312, 307, 313, + 317, 321, 313, 324, 315, 314, 318, 318, 314, 317, + 319, 320, 320, 322, 323, 319, 321, 325, 322, 326, + 331, 327, 324, 330, 332, 331, 323, 327, 328, 328, + 332, 328, 336, 333, 326, 146, 334, 325, 333, 335, - 332, 333, 336, 334, 337, 336, 334, 333, 334, 339, - 340, 340, 341, 337, 344, 339, 342, 341, 336, 342, - 346, 336, 345, 336, 144, 342, 348, 347, 350, 342, - 351, 350, 357, 353, 344, 346, 354, 342, 343, 343, - 348, 343, 347, 345, 351, 354, 355, 350, 353, 356, - 358, 355, 355, 357, 343, 356, 359, 343, 360, 343, - 361, 343, 352, 363, 352, 352, 362, 360, 364, 358, - 365, 359, 362, 367, 352, 368, 352, 352, 352, 361, - 366, 352, 369, 370, 365, 372, 366, 371, 364, 363, - 366, 373, 371, 374, 374, 368, 367, 373, 370, 375, + 328, 334, 335, 330, 335, 337, 336, 334, 337, 338, + 339, 339, 342, 340, 341, 341, 345, 342, 338, 340, + 343, 337, 347, 343, 337, 346, 337, 375, 375, 343, + 349, 351, 348, 343, 351, 352, 345, 347, 354, 355, + 359, 343, 344, 344, 349, 344, 346, 348, 355, 352, + 351, 356, 358, 354, 357, 360, 356, 356, 344, 359, + 357, 344, 361, 344, 362, 344, 353, 364, 353, 353, + 360, 361, 365, 358, 366, 368, 369, 370, 353, 371, + 353, 353, 353, 362, 363, 353, 372, 373, 366, 367, + 363, 372, 365, 364, 371, 367, 369, 370, 368, 367, - 372, 376, 369, 377, 378, 379, 380, 381, 382, 382, - 378, 382, 381, 376, 383, 384, 385, 377, 387, 375, - 387, 386, 380, 388, 389, 390, 390, 388, 389, 391, - 379, 384, 385, 393, 383, 386, 392, 394, 387, 395, - 397, 396, 399, 389, 403, 398, 397, 399, 391, 393, - 396, 392, 400, 395, 398, 394, 400, 401, 402, 407, - 142, 396, 404, 396, 402, 403, 401, 405, 404, 406, - 409, 405, 408, 408, 406, 410, 410, 411, 412, 407, - 413, 413, 411, 409, 414, 415, 416, 417, 418, 415, - 414, 412, 419, 418, 420, 420, 422, 419, 421, 423, + 374, 376, 373, 377, 378, 379, 374, 380, 381, 382, + 384, 379, 385, 386, 382, 377, 383, 383, 378, 383, + 387, 376, 389, 388, 381, 388, 389, 390, 385, 386, + 384, 390, 380, 392, 387, 391, 391, 396, 393, 394, + 395, 397, 398, 388, 400, 399, 390, 404, 398, 400, + 397, 396, 392, 393, 399, 394, 401, 402, 395, 403, + 401, 397, 409, 397, 405, 403, 402, 406, 404, 407, + 405, 406, 407, 408, 410, 410, 411, 414, 408, 412, + 412, 413, 409, 415, 415, 416, 413, 418, 417, 411, + 414, 416, 417, 419, 420, 421, 422, 422, 423, 420, - 424, 416, 425, 420, 429, 425, 427, 426, 417, 429, - 421, 426, 424, 428, 428, 430, 422, 423, 427, 431, - 431, 432, 434, 434, 435, 436, 437, 438, 439, 442, - 441, 444, 443, 436, 447, 437, 430, 444, 446, 447, - 439, 448, 445, 432, 446, 435, 443, 438, 441, 442, - 441, 445, 449, 450, 451, 448, 450, 452, 453, 454, - 449, 456, 455, 449, 453, 455, 457, 456, 451, 458, - 459, 461, 452, 460, 458, 461, 462, 464, 463, 454, - 457, 462, 464, 465, 466, 456, 470, 467, 473, 485, - 508, 472, 459, 463, 460, 472, 471, 474, 475, 465, + 421, 424, 418, 426, 425, 422, 427, 428, 429, 427, + 423, 428, 430, 430, 419, 426, 432, 434, 431, 437, + 429, 424, 425, 431, 433, 433, 436, 436, 438, 439, + 440, 441, 444, 443, 445, 446, 438, 432, 439, 434, + 437, 446, 449, 441, 450, 447, 454, 449, 445, 448, + 440, 443, 444, 443, 447, 448, 451, 452, 450, 453, + 452, 454, 455, 456, 451, 458, 457, 451, 455, 457, + 459, 458, 460, 453, 461, 463, 462, 460, 465, 463, + 464, 466, 467, 456, 459, 464, 466, 468, 469, 458, + 472, 474, 475, 465, 473, 474, 461, 462, 467, 477, - 467, 70, 475, 466, 468, 468, 470, 473, 508, 485, - 468, 471, 468, 474, 477, 479, 476, 478, 468, 480, - 468, 476, 478, 468, 468, 476, 481, 482, 480, 477, - 468, 479, 481, 483, 484, 487, 483, 481, 486, 486, - 488, 488, 490, 482, 489, 492, 491, 493, 494, 495, - 497, 496, 518, 494, 490, 518, 498, 484, 495, 489, - 487, 491, 498, 500, 492, 497, 503, 501, 502, 493, - 496, 501, 500, 504, 502, 505, 506, 507, 503, 509, - 510, 512, 511, 509, 511, 513, 513, 515, 504, 512, - 506, 514, 507, 510, 505, 516, 517, 514, 519, 515, + 476, 469, 479, 477, 144, 482, 468, 470, 470, 473, + 472, 475, 487, 470, 482, 470, 476, 479, 481, 478, + 480, 470, 484, 470, 478, 480, 470, 470, 478, 483, + 486, 489, 487, 470, 481, 483, 485, 481, 484, 485, + 483, 488, 488, 490, 490, 491, 492, 493, 494, 495, + 496, 498, 497, 486, 499, 496, 489, 500, 492, 502, + 491, 497, 493, 500, 507, 505, 506, 494, 502, 499, + 498, 495, 503, 504, 508, 509, 503, 505, 510, 504, + 511, 506, 512, 507, 511, 513, 514, 513, 508, 517, + 509, 515, 515, 516, 514, 512, 510, 518, 519, 516, - 520, 516, 521, 522, 523, 524, 522, 521, 517, 526, - 64, 525, 519, 523, 533, 520, 525, 525, 527, 527, - 523, 524, 526, 523, 528, 528, 529, 530, 530, 531, - 531, 532, 529, 534, 535, 533, 534, 532, 536, 535, - 537, 538, 539, 540, 538, 541, 542, 539, 537, 543, - 542, 545, 544, 546, 547, 543, 544, 536, 546, 548, - 550, 549, 551, 553, 541, 550, 540, 549, 555, 545, - 547, 558, 552, 554, 554, 552, 551, 556, 557, 548, - 552, 553, 556, 557, 552, 558, 555, 559, 561, 562, - 563, 564, 565, 563, 561, 564, 566, 565, 562, 566, + 521, 517, 520, 518, 522, 520, 523, 525, 526, 524, + 519, 523, 524, 142, 521, 527, 525, 528, 535, 522, + 527, 527, 536, 525, 526, 536, 525, 529, 529, 531, + 528, 530, 530, 532, 532, 531, 533, 533, 534, 535, + 537, 538, 539, 540, 534, 537, 540, 541, 542, 543, + 539, 544, 541, 545, 546, 544, 547, 548, 546, 545, + 538, 549, 548, 550, 551, 553, 555, 552, 543, 70, + 551, 542, 552, 554, 547, 557, 554, 549, 558, 553, + 565, 554, 562, 550, 555, 554, 556, 556, 561, 565, + 559, 560, 564, 557, 558, 559, 560, 562, 564, 568, - 567, 570, 559, 568, 569, 567, 572, 571, 570, 573, - 577, 572, 574, 574, 575, 576, 578, 564, 579, 568, - 571, 580, 569, 575, 586, 578, 577, 580, 59, 573, - 579, 581, 582, 584, 576, 582, 584, 581, 583, 583, - 585, 583, 586, 587, 588, 585, 589, 590, 596, 591, - 588, 589, 591, 590, 592, 593, 594, 587, 595, 592, - 593, 593, 598, 599, 597, 601, 54, 596, 596, 594, - 597, 595, 599, 600, 602, 602, 603, 604, 600, 606, - 604, 598, 605, 603, 607, 601, 610, 608, 605, 607, - 612, 606, 608, 608, 614, 604, 609, 609, 611, 613, + 566, 567, 561, 566, 568, 567, 569, 570, 571, 569, + 572, 573, 570, 574, 575, 576, 577, 577, 573, 575, + 578, 579, 580, 581, 571, 582, 574, 567, 572, 578, + 583, 585, 581, 584, 585, 576, 583, 582, 580, 584, + 579, 586, 586, 587, 586, 588, 587, 589, 590, 591, + 588, 592, 593, 601, 594, 591, 592, 594, 593, 595, + 597, 596, 590, 598, 595, 589, 596, 596, 613, 599, + 602, 600, 601, 597, 599, 603, 598, 600, 604, 602, + 603, 605, 605, 606, 607, 608, 64, 607, 599, 599, + 606, 608, 609, 613, 610, 611, 612, 612, 604, 610, - 611, 613, 615, 616, 617, 618, 620, 619, 621, 612, - 620, 610, 614, 619, 622, 623, 624, 621, 625, 626, - 615, 616, 628, 617, 627, 618, 629, 631, 628, 622, - 623, 626, 630, 632, 624, 634, 636, 625, 633, 627, - 629, 635, 633, 637, 630, 638, 631, 640, 640, 639, - 642, 641, 632, 634, 636, 641, 643, 635, 644, 646, - 645, 637, 637, 639, 638, 645, 647, 643, 648, 642, - 649, 650, 644, 651, 652, 646, 650, 649, 653, 652, - 651, 648, 654, 653, 655, 647, 656, 657, 658, 660, - 659, 655, 663, 661, 660, 656, 661, 658, 664, 662, + 611, 611, 607, 614, 609, 614, 615, 616, 617, 616, + 618, 619, 620, 621, 622, 623, 627, 625, 624, 623, + 622, 626, 628, 629, 630, 615, 617, 624, 618, 619, + 632, 620, 625, 621, 627, 629, 626, 631, 633, 630, + 634, 628, 635, 631, 632, 636, 637, 638, 639, 636, + 633, 640, 641, 642, 643, 644, 644, 59, 642, 634, + 646, 635, 647, 638, 637, 651, 639, 648, 643, 640, + 640, 641, 645, 647, 650, 649, 645, 658, 652, 646, + 649, 648, 653, 654, 651, 655, 661, 54, 654, 653, + 650, 652, 655, 656, 657, 658, 659, 660, 656, 657, - 654, 657, 659, 662, 665, 667, 663, 664, 666, 668, - 668, 669, 669, 670, 670, 671, 673, 674, 675, 665, - 669, 676, 666, 674, 671, 676, 667, 677, 678, 679, - 680, 683, 681, 684, 682, 673, 680, 685, 675, 677, - 681, 682, 694, 706, 691, 688, 695, 679, 706, 683, - 696, 694, 695, 678, 698, 698, 701, 685, 684, 686, - 688, 691, 700, 697, 686, 703, 696, 697, 686, 699, - 699, 686, 702, 700, 701, 707, 704, 708, 686, 686, - 53, 686, 704, 709, 710, 703, 702, 705, 705, 705, - 711, 705, 715, 711, 705, 708, 707, 713, 709, 705, + 661, 662, 663, 659, 664, 665, 660, 666, 665, 664, + 662, 666, 667, 668, 663, 669, 671, 670, 672, 672, + 673, 673, 668, 674, 674, 675, 667, 677, 679, 673, + 669, 670, 678, 681, 675, 680, 682, 671, 678, 680, + 683, 684, 685, 688, 686, 681, 677, 684, 679, 687, + 685, 686, 689, 695, 692, 698, 699, 707, 683, 700, + 704, 682, 699, 705, 698, 702, 702, 687, 688, 692, + 695, 704, 689, 690, 706, 700, 701, 707, 690, 711, + 701, 705, 690, 703, 703, 690, 710, 712, 706, 714, + 708, 710, 690, 690, 53, 690, 708, 709, 709, 709, - 712, 712, 714, 714, 713, 705, 705, 715, 717, 710, - 716, 716, 718, 717, 719, 718, 720, 721, 720, 719, - 722, 723, 724, 726, 725, 723, 727, 727, 732, 721, - 728, 726, 729, 730, 730, 731, 733, 789, 734, 722, - 732, 789, 724, 725, 734, 728, 729, 735, 736, 736, - 737, 740, 735, 731, 739, 737, 737, 740, 733, 739, - 741, 744, 742, 743, 744, 745, 741, 742, 746, 743, - 749, 745, 747, 747, 748, 748, 746, 750, 749, 751, - 752, 753, 754, 754, 751, 755, 757, 752, 756, 758, - 760, 767, 757, 761, 755, 750, 756, 763, 762, 760, + 711, 709, 713, 715, 709, 712, 715, 716, 716, 709, + 719, 717, 718, 718, 714, 709, 709, 713, 717, 720, + 720, 721, 726, 723, 722, 719, 721, 722, 723, 724, + 724, 725, 727, 725, 726, 728, 729, 731, 730, 728, + 732, 732, 737, 733, 736, 731, 734, 735, 735, 738, + 740, 727, 48, 739, 737, 740, 729, 730, 733, 739, + 734, 742, 736, 741, 741, 744, 742, 742, 745, 746, + 744, 738, 747, 748, 745, 746, 750, 747, 749, 748, + 751, 749, 750, 752, 752, 753, 753, 754, 751, 755, + 757, 756, 758, 759, 759, 754, 756, 757, 761, 760, - 753, 764, 761, 762, 764, 765, 763, 766, 758, 768, - 765, 769, 771, 771, 770, 772, 767, 773, 768, 770, - 770, 766, 774, 776, 769, 778, 776, 778, 779, 779, - 772, 774, 780, 781, 776, 782, 773, 783, 781, 784, - 785, 786, 787, 788, 792, 790, 791, 48, 794, 793, - 792, 787, 795, 780, 796, 798, 782, 783, 793, 784, - 794, 786, 785, 790, 797, 791, 788, 799, 796, 798, - 797, 795, 799, 800, 800, 801, 802, 803, 804, 805, - 806, 807, 809, 808, 810, 802, 804, 811, 809, 812, - 813, 816, 819, 811, 817, 801, 813, 803, 810, 805, + 763, 765, 773, 762, 766, 769, 761, 755, 760, 762, + 765, 758, 768, 766, 769, 770, 771, 768, 770, 763, + 772, 771, 774, 775, 776, 777, 777, 773, 778, 776, + 776, 774, 779, 780, 772, 781, 775, 782, 789, 784, + 782, 784, 780, 778, 785, 785, 786, 787, 782, 788, + 791, 779, 787, 790, 792, 793, 794, 795, 789, 781, + 796, 795, 797, 798, 793, 800, 799, 786, 801, 798, + 788, 802, 791, 790, 792, 799, 803, 800, 796, 794, + 804, 797, 803, 805, 807, 802, 808, 801, 805, 806, + 806, 809, 810, 811, 804, 808, 812, 813, 817, 814, - 807, 814, 806, 808, 815, 823, 817, 814, 815, 812, - 816, 818, 824, 819, 817, 821, 818, 820, 820, 822, - 825, 821, 822, 823, 826, 824, 825, 827, 827, 828, - 829, 830, 830, 831, 832, 829, 833, 833, 832, 834, - 835, 836, 839, 837, 826, 840, 836, 828, 831, 842, - 843, 845, 845, 846, 849, 847, 896, 846, 851, 840, - 835, 834, 837, 848, 848, 896, 839, 43, 852, 842, - 847, 843, 844, 851, 850, 844, 854, 844, 850, 849, - 853, 844, 852, 844, 856, 853, 855, 858, 844, 859, - 854, 855, 855, 844, 859, 857, 860, 863, 856, 857, + 810, 815, 816, 818, 807, 819, 822, 815, 816, 818, + 822, 809, 817, 811, 820, 821, 813, 823, 812, 814, + 820, 821, 824, 825, 826, 819, 827, 827, 825, 828, + 829, 830, 832, 829, 824, 828, 823, 831, 832, 833, + 834, 834, 824, 835, 841, 826, 836, 837, 837, 830, + 831, 836, 838, 839, 840, 840, 842, 839, 843, 833, + 844, 835, 846, 843, 847, 849, 841, 838, 850, 852, + 852, 853, 854, 855, 855, 853, 842, 856, 847, 844, + 857, 858, 43, 859, 857, 849, 846, 854, 867, 850, + 851, 861, 865, 851, 863, 851, 858, 859, 860, 851, - 861, 862, 858, 864, 859, 861, 865, 866, 860, 869, - 867, 857, 865, 866, 869, 862, 867, 864, 863, 868, - 868, 870, 871, 872, 875, 873, 876, 870, 878, 879, - 879, 876, 880, 877, 882, 883, 875, 880, 884, 892, - 878, 881, 872, 873, 871, 874, 874, 877, 882, 881, - 885, 874, 892, 874, 883, 886, 886, 884, 887, 874, - 889, 891, 887, 893, 874, 874, 889, 890, 885, 893, - 890, 874, 894, 895, 897, 898, 899, 894, 900, 901, - 891, 902, 899, 897, 903, 904, 902, 900, 905, 906, - 909, 898, 895, 907, 908, 910, 909, 913, 901, 904, + 867, 851, 856, 860, 862, 861, 851, 865, 863, 862, + 862, 851, 864, 868, 866, 870, 864, 869, 868, 866, + 871, 872, 875, 875, 873, 878, 874, 872, 864, 866, + 873, 869, 874, 876, 871, 877, 870, 879, 876, 880, + 882, 877, 885, 883, 886, 886, 884, 878, 883, 889, + 887, 890, 882, 888, 885, 887, 879, 880, 881, 881, + 884, 888, 891, 889, 881, 892, 881, 893, 893, 894, + 890, 898, 881, 894, 896, 899, 897, 881, 881, 897, + 896, 891, 901, 892, 881, 900, 902, 901, 899, 904, + 898, 900, 905, 906, 907, 908, 909, 910, 904, 911, - 911, 906, 907, 908, 903, 915, 911, 916, 905, 917, - 918, 919, 910, 913, 928, 920, 921, 922, 925, 915, - 928, 921, 922, 925, 918, 926, 929, 916, 917, 919, - 920, 927, 927, 931, 926, 932, 935, 936, 937, 929, - 932, 932, 933, 933, 934, 938, 933, 934, 939, 931, - 935, 941, 943, 940, 942, 945, 937, 936, 938, 940, - 942, 944, 947, 939, 948, 947, 944, 943, 949, 945, - 950, 941, 951, 949, 952, 950, 953, 954, 956, 952, - 957, 953, 960, 960, 956, 948, 958, 959, 951, 954, - 961, 962, 958, 959, 963, 965, 957, 963, 966, 961, + 907, 905, 910, 912, 908, 902, 913, 915, 914, 906, + 918, 923, 916, 921, 924, 909, 915, 912, 917, 911, + 914, 916, 919, 925, 917, 923, 913, 918, 919, 921, + 926, 927, 928, 929, 924, 930, 933, 934, 929, 936, + 930, 933, 925, 937, 926, 936, 934, 928, 939, 927, + 935, 935, 940, 943, 944, 945, 937, 940, 940, 941, + 941, 946, 942, 941, 939, 942, 949, 943, 947, 948, + 950, 945, 949, 952, 944, 953, 951, 954, 957, 946, + 953, 947, 951, 956, 948, 960, 956, 958, 952, 959, + 950, 954, 958, 961, 959, 962, 963, 965, 961, 957, - 964, 964, 967, 968, 970, 969, 968, 972, 971, 962, - 970, 973, 972, 965, 971, 974, 973, 966, 969, 975, - 974, 977, 967, 978, 979, 975, 980, 981, 981, 982, - 979, 980, 983, 984, 985, 987, 988, 985, 982, 977, - 989, 983, 986, 978, 990, 986, 987, 991, 996, 992, - 993, 984, 989, 991, 988, 992, 994, 995, 995, 997, - 998, 994, 999, 990, 1000, 993, 999, 996, 1001, 1002, - 1003, 1005, 998, 997, 1006, 1006, 1009, 1001, 1008, 1011, - 1012, 1010, 1000, 1014, 1011, 1013, 1013, 14, 1002, 1012, - 1005, 1009, 1008, 1010, 1015, 1003, 1016, 1020, 1021, 1017, + 962, 960, 966, 965, 967, 968, 969, 969, 963, 971, + 967, 968, 970, 972, 973, 973, 972, 974, 966, 975, + 976, 970, 977, 978, 979, 977, 980, 971, 981, 982, + 979, 986, 980, 981, 982, 974, 978, 983, 975, 984, + 976, 987, 983, 989, 988, 984, 990, 990, 989, 986, + 988, 991, 993, 992, 994, 995, 996, 997, 995, 996, + 991, 987, 992, 998, 999, 1000, 1001, 1003, 997, 1002, + 993, 1006, 1001, 994, 1004, 1002, 999, 1005, 1005, 1004, + 1007, 998, 1003, 1008, 1000, 1009, 1010, 1011, 1012, 1009, + 1006, 1013, 1015, 1019, 1007, 1008, 1011, 1016, 1016, 1018, - 1015, 1019, 1016, 1014, 1017, 1018, 1019, 1018, 1022, 1023, - 1024, 1020, 1021, 1022, 1025, 1026, 1027, 1029, 1029, 1030, - 1031, 1025, 1032, 1034, 1023, 1033, 1037, 1037, 1041, 1024, - 1026, 1033, 1043, 1030, 1035, 1027, 1038, 1032, 1031, 1035, - 1040, 1038, 1041, 1034, 1039, 1039, 1042, 1040, 1035, 1042, - 1035, 1043, 1044, 1035, 1045, 1046, 1047, 1048, 1049, 1050, - 1046, 1053, 1048, 1045, 1052, 1052, 1053, 1054, 1055, 1049, - 1044, 1056, 1054, 1057, 1058, 1047, 1056, 1057, 1050, 1059, - 1060, 1061, 1063, 1058, 1062, 1064, 1065, 1066, 1055, 1067, - 1068, 1071, 1064, 1069, 1059, 1060, 1062, 1063, 1065, 1069, + 1020, 1021, 1023, 1023, 1010, 1022, 1021, 1012, 1019, 1024, + 14, 1015, 1020, 1018, 1022, 1025, 1013, 1026, 1028, 1027, + 1028, 1025, 1029, 1026, 1027, 1030, 1031, 1029, 1032, 1024, + 1033, 1034, 1036, 1032, 1035, 1037, 1039, 1039, 1040, 1030, + 1031, 1035, 1041, 1042, 1044, 1033, 13, 1036, 1048, 1043, + 1034, 1045, 1040, 1048, 1037, 1043, 1045, 1051, 1042, 1050, + 1041, 1047, 1047, 1053, 1044, 1045, 1050, 1045, 1049, 1049, + 1045, 1051, 1052, 1054, 1055, 1052, 1056, 1057, 1059, 1058, + 1060, 1056, 1053, 1055, 1058, 1062, 1062, 1063, 1064, 1059, + 1065, 1054, 1063, 1064, 1067, 1066, 1057, 1068, 1067, 1060, - 1061, 1070, 1072, 1073, 1074, 1077, 1066, 1076, 1068, 1078, - 1067, 1071, 1073, 1076, 1079, 1080, 1070, 1078, 1081, 1077, - 1080, 1082, 1072, 1083, 1074, 1084, 1082, 1082, 1085, 1089, - 1081, 1086, 1086, 1088, 1079, 1091, 1091, 13, 1089, 1084, - 1092, 1085, 1083, 1087, 1090, 1092, 1088, 1094, 1087, 1093, - 1090, 1087, 1087, 1094, 1095, 1096, 1087, 1098, 1093, 1095, - 1096, 1101, 1087, 1097, 1097, 1102, 1087, 1099, 1099, 1100, - 1103, 1104, 1100, 1106, 1100, 1105, 1107, 0, 1098, 1103, - 1105, 1101, 1108, 1102, 1109, 1111, 1112, 1106, 1108, 1111, - 1109, 1104, 1110, 1122, 1107, 1112, 1118, 1110, 1113, 1113, + 1066, 1069, 1070, 1071, 1074, 1073, 1068, 1072, 1076, 1075, + 1065, 1074, 1077, 1078, 1080, 1081, 1069, 1070, 1079, 1072, + 1073, 1075, 1071, 1082, 1079, 1083, 1084, 1076, 1087, 1080, + 1086, 1078, 1088, 1077, 1083, 1081, 1086, 1089, 1091, 1090, + 1088, 1093, 1087, 1082, 1090, 1094, 1084, 1092, 1095, 1099, + 1091, 1098, 1092, 1092, 1096, 1096, 0, 1089, 1099, 1094, + 1093, 1095, 1097, 1100, 1098, 1101, 1101, 1097, 1102, 1100, + 1097, 1097, 1104, 1102, 1103, 1097, 1108, 1105, 1104, 1106, + 1111, 1097, 1105, 1103, 1106, 1097, 1107, 1107, 1109, 1109, + 1110, 1112, 1113, 1110, 1114, 1110, 1116, 1108, 1115, 1117, - 1112, 1115, 1112, 1119, 1112, 1117, 1112, 1114, 1114, 1117, - 1114, 1118, 1115, 1120, 1121, 1122, 1124, 1125, 1123, 1121, - 1121, 1119, 1120, 1123, 1126, 1127, 1125, 1128, 1129, 1131, - 1124, 1130, 1130, 1132, 1129, 1133, 1134, 1131, 1136, 1135, - 1133, 1128, 1137, 1126, 1127, 1140, 1138, 1132, 1135, 1149, - 1134, 1138, 1139, 1139, 1141, 1141, 1136, 1142, 1144, 1142, - 1140, 1144, 1146, 1145, 1147, 1148, 1148, 1137, 1145, 1149, - 1150, 1150, 1152, 1147, 1151, 1151, 1153, 1152, 1154, 1155, - 1155, 1146, 1156, 1157, 1158, 1159, 1157, 1160, 1162, 1161, - 1159, 1161, 1164, 1165, 0, 1164, 1160, 1153, 1166, 1154, + 1111, 1113, 1118, 1115, 1122, 1119, 0, 1120, 1118, 1112, + 1116, 1119, 1120, 1122, 1114, 1121, 1128, 1117, 1122, 1121, + 1122, 1125, 1122, 1129, 1122, 1123, 1123, 1124, 1124, 1127, + 1124, 1128, 1125, 1127, 1130, 1133, 1135, 1132, 1139, 1131, + 1136, 1129, 1134, 1130, 1131, 1131, 1132, 1134, 1137, 1136, + 1135, 1138, 1139, 1140, 1141, 1141, 1142, 1133, 1143, 1140, + 1144, 1145, 1146, 1147, 1142, 1144, 1148, 1137, 1149, 1151, + 1138, 1146, 1143, 1149, 1157, 1145, 1150, 1150, 1152, 1152, + 1153, 1147, 1153, 1155, 1151, 1156, 1155, 1158, 1159, 1159, + 1156, 1148, 1160, 1157, 1161, 1161, 1158, 1162, 1162, 1163, - 1167, 1168, 1156, 1166, 1158, 1167, 1162, 1169, 1165, 1168, - 1170, 1172, 1169, 1171, 1171, 1170, 1172, 1173, 1174, 1175, - 1176, 1178, 1179, 1181, 1174, 1180, 1175, 1178, 1179, 1181, - 1180, 1182, 1183, 1176, 1184, 1173, 1185, 1185, 1186, 1188, - 1182, 1189, 1190, 1191, 1192, 1184, 1194, 1195, 1190, 1191, - 1192, 1183, 1194, 1196, 1197, 1198, 1199, 1201, 1186, 1188, - 1202, 1195, 1200, 1200, 1189, 1203, 1197, 1195, 1206, 1198, - 1204, 1205, 1205, 1196, 1199, 1204, 1207, 1201, 1209, 0, - 1211, 1207, 1210, 1203, 1212, 1202, 1213, 1210, 1210, 1214, - 1215, 1206, 1216, 1212, 1213, 1219, 1217, 1209, 1211, 1225, + 1164, 1165, 1166, 1166, 1163, 1167, 1168, 1169, 1170, 1168, + 1171, 1173, 1160, 1170, 1172, 1175, 1172, 1176, 1175, 1171, + 1178, 1164, 1165, 1177, 1188, 1167, 1179, 1169, 1177, 1173, + 1180, 1179, 1176, 1185, 1178, 1181, 1182, 1188, 1180, 1184, + 1181, 1182, 1183, 1183, 1184, 1195, 1186, 1187, 1192, 1190, + 1191, 1185, 1186, 1192, 1187, 1190, 1191, 1193, 1194, 1196, + 1197, 1197, 1198, 1193, 1195, 1200, 1201, 1194, 1202, 1203, + 1196, 1204, 1206, 1207, 1202, 1203, 1208, 1204, 1206, 1209, + 1210, 1211, 1198, 1212, 1212, 1200, 1213, 1207, 1214, 1201, + 1215, 1209, 1216, 1207, 1210, 1218, 1208, 1216, 1219, 1211, - 1218, 1217, 1218, 1214, 1217, 1215, 1221, 1216, 1223, 1219, - 1216, 1222, 1221, 1226, 1227, 1222, 1224, 1229, 1225, 1223, - 1228, 1224, 1224, 1230, 1231, 1228, 1233, 1234, 1230, 1235, - 1236, 1236, 1227, 1237, 1238, 1229, 1239, 1237, 1241, 1226, - 1233, 1242, 1240, 1243, 1231, 1234, 1244, 1235, 1240, 1245, - 1241, 1246, 1238, 1247, 1249, 1239, 1248, 1243, 1247, 1249, - 1242, 1244, 1250, 1248, 1245, 1251, 1252, 1252, 1253, 1255, - 1246, 1254, 1254, 1256, 1251, 1255, 1257, 1266, 1258, 1259, - 1250, 1257, 0, 1253, 1258, 1259, 1260, 1260, 1261, 1261, - 1263, 1263, 1264, 1265, 1256, 1266, 1264, 1267, 1268, 1269, + 1217, 1217, 1221, 1219, 1222, 1223, 1213, 1224, 1215, 1222, + 1222, 1225, 1226, 1214, 1227, 1228, 1224, 1229, 1218, 1225, + 1284, 1221, 1229, 1223, 1231, 1229, 1226, 1238, 1284, 1227, + 1228, 1233, 1230, 1228, 1230, 1234, 1235, 1233, 1231, 1234, + 1236, 1237, 1243, 1239, 1240, 1236, 1236, 1235, 1241, 1240, + 1242, 1245, 1246, 1238, 1247, 1242, 1248, 1248, 1250, 1249, + 1237, 1239, 1243, 1249, 1251, 1245, 1241, 1252, 1253, 1254, + 1246, 1255, 1247, 1252, 1256, 1257, 1250, 1258, 0, 1259, + 1253, 1262, 1261, 1251, 1259, 1255, 1260, 1261, 1254, 1256, + 1257, 1263, 1265, 1260, 1264, 1264, 1258, 1266, 1266, 1262, - 1270, 1270, 1265, 1271, 1272, 1273, 1269, 1274, 1275, 1276, - 1273, 1267, 1272, 1268, 1276, 1276, 1278, 1279, 1279, 1277, - 1280, 1274, 1281, 1271, 1277, 1277, 1282, 1275, 1283, 1284, - 1285, 1286, 1287, 1283, 1289, 1282, 1278, 1288, 1287, 1280, - 1290, 1281, 1288, 1291, 1294, 1292, 1290, 1293, 1284, 1286, - 1285, 1292, 1295, 1293, 1296, 1297, 1298, 1299, 1301, 1301, - 1289, 1300, 1291, 1294, 1302, 1303, 1309, 1302, 1304, 1304, - 1298, 1295, 1308, 1296, 1297, 1309, 1300, 1303, 1299, 1305, - 1305, 1306, 1310, 1307, 1313, 1308, 1306, 1307, 1311, 1313, - 1311, 1314, 1315, 1316, 1311, 1310, 1317, 1317, 1318, 1319, + 1263, 1268, 1267, 1278, 1269, 1270, 1271, 1265, 1267, 1269, + 1279, 1270, 1271, 1272, 1272, 1273, 1273, 1275, 1275, 1276, + 1277, 1278, 1268, 1276, 1279, 1280, 1281, 1282, 1282, 1277, + 1283, 1285, 1286, 1281, 1287, 1290, 1285, 1288, 1292, 1289, + 1280, 1293, 1288, 1288, 1289, 1289, 1286, 1291, 1291, 1294, + 1283, 1295, 1296, 1287, 1297, 1290, 1295, 1292, 1294, 1298, + 1293, 1299, 1301, 1300, 1302, 1303, 1304, 1299, 1300, 1305, + 1302, 1296, 1304, 1306, 1297, 1305, 1307, 1298, 1308, 1309, + 1310, 1311, 1313, 1313, 1303, 1312, 1314, 1315, 1301, 1314, + 1316, 1316, 1306, 1320, 1310, 1307, 1318, 1308, 1309, 1315, - 1320, 1321, 1325, 1318, 1327, 1319, 1314, 1311, 1322, 1316, - 1326, 1331, 1315, 1322, 1321, 1320, 1323, 1324, 1333, 1328, - 1323, 1324, 1325, 1337, 1327, 1328, 1329, 1329, 1326, 1331, - 1334, 1335, 1335, 1343, 1336, 1334, 1339, 1339, 1341, 1333, - 1336, 1341, 1344, 1337, 1342, 1342, 1347, 1346, 1348, 1343, - 1346, 1349, 1349, 1350, 1351, 1352, 1353, 1348, 1344, 1354, - 1356, 1353, 1355, 1355, 1357, 1358, 1347, 1360, 1350, 1359, - 1359, 1361, 1362, 1354, 1352, 1351, 1363, 1362, 1356, 1357, - 1365, 1360, 1364, 1364, 1365, 1366, 1367, 1367, 1368, 1361, - 1358, 1363, 1369, 1370, 1371, 1372, 1375, 1370, 1374, 1374, + 1312, 1318, 1311, 1317, 1317, 1319, 1320, 1321, 1322, 1319, + 1325, 1323, 1327, 1323, 1326, 1328, 1321, 1323, 1329, 1326, + 1331, 1322, 1330, 1330, 1333, 1331, 1332, 1327, 1325, 1334, + 1323, 1335, 1332, 1336, 1329, 1328, 1335, 1336, 1338, 1333, + 1337, 1339, 1334, 1340, 1337, 1341, 1342, 1342, 1344, 1346, + 1347, 1341, 1348, 1348, 1349, 1347, 1350, 1356, 1338, 1339, + 1349, 1352, 1352, 1340, 1354, 1357, 1344, 1354, 1355, 1355, + 1346, 1359, 1360, 1356, 1359, 1361, 1350, 1362, 1362, 1363, + 1364, 1357, 1366, 1365, 1361, 1367, 1369, 1366, 1368, 1368, + 1370, 1371, 1360, 1372, 1363, 1369, 1373, 1373, 1374, 1367, - 1372, 1376, 1377, 1369, 1378, 1366, 1379, 1380, 1380, 1382, - 1368, 1381, 1383, 1371, 1375, 1376, 1381, 1384, 1378, 1385, - 1386, 1377, 1377, 1387, 1385, 1387, 1384, 1390, 1388, 1382, - 1389, 1379, 1383, 1388, 1393, 1391, 1389, 1394, 1394, 1395, - 1386, 1391, 1399, 1396, 1403, 1398, 1402, 1390, 1393, 1396, - 1398, 1400, 1400, 1401, 1401, 1404, 1405, 1407, 1395, 1405, - 1402, 1408, 1403, 1406, 1406, 1409, 1399, 1410, 1409, 1407, - 1404, 1409, 1411, 1410, 1415, 1412, 1414, 1411, 1412, 1415, - 1416, 1408, 1418, 1409, 1417, 1414, 1419, 1417, 1418, 1420, - 1420, 1419, 1421, 1421, 1412, 1422, 1424, 1423, 1425, 1426, + 1376, 1364, 1365, 1375, 1377, 1376, 1371, 1379, 1370, 1378, + 1378, 1379, 1374, 1380, 1381, 1381, 1382, 1383, 1372, 1377, + 1384, 1375, 1385, 1390, 1384, 1386, 1388, 1388, 1383, 1389, + 1386, 1391, 1392, 1380, 1393, 1394, 1394, 1390, 1382, 1395, + 1396, 1385, 1397, 1398, 1395, 1400, 1392, 1389, 1399, 1403, + 1391, 1391, 1398, 1399, 1401, 1403, 1401, 1404, 1402, 1393, + 1396, 1405, 1397, 1402, 1407, 1400, 1409, 1405, 1408, 1408, + 1410, 1413, 1414, 1414, 1412, 1416, 1410, 1404, 1407, 1412, + 1415, 1415, 1417, 1418, 1419, 1409, 1422, 1419, 1424, 1416, + 1420, 1420, 1421, 1423, 1424, 1413, 1423, 1425, 1418, 1423, - 1427, 1422, 1423, 1428, 1429, 1416, 1428, 1430, 1432, 1424, - 1429, 1433, 1431, 1430, 1432, 1437, 1425, 1431, 1426, 1434, - 1427, 1435, 1435, 1436, 1434, 1438, 1439, 1440, 1436, 1441, - 1443, 1444, 1445, 1437, 1433, 1446, 1447, 1448, 1445, 1449, - 1457, 1440, 1443, 1441, 1444, 1438, 1439, 1451, 1451, 1452, - 1455, 1448, 1453, 1454, 1454, 1446, 1447, 1453, 1456, 1458, - 1449, 1459, 1462, 1460, 1457, 1455, 1461, 1463, 1467, 1452, - 1459, 1462, 1456, 1461, 1462, 1465, 1468, 1458, 1460, 1468, - 1469, 1469, 1471, 1463, 1470, 1470, 1472, 1475, 1473, 1476, - 1465, 1473, 1479, 1467, 1471, 1465, 1474, 1474, 1477, 1480, + 1417, 1428, 1425, 1430, 1421, 1426, 1422, 1429, 1426, 1432, + 1428, 1423, 1429, 1431, 1433, 1432, 1431, 1434, 1434, 1433, + 1435, 1435, 1437, 1436, 1426, 1438, 1439, 1437, 1430, 1436, + 1440, 1441, 1442, 1443, 1444, 1442, 1445, 1446, 1438, 1443, + 1444, 1445, 1447, 1446, 1439, 1448, 1449, 1449, 1450, 1440, + 1448, 1441, 1451, 1450, 1452, 1453, 1457, 1454, 1455, 1460, + 1458, 1459, 1461, 1462, 1463, 1447, 1466, 1459, 1457, 1469, + 1451, 1454, 1455, 1458, 1452, 1453, 1470, 1462, 1467, 1460, + 1465, 1465, 1461, 1467, 1469, 1463, 1466, 1468, 1468, 1471, + 1470, 1472, 1473, 1474, 1476, 1475, 1477, 1481, 0, 1479, - 1475, 1478, 1482, 1477, 1472, 1481, 1478, 1483, 1476, 1484, - 1487, 1479, 1486, 1486, 1481, 1480, 1483, 1485, 1484, 1483, - 1488, 1482, 1489, 1485, 1490, 1491, 1495, 1492, 1496, 1498, - 1487, 1497, 1497, 1488, 1499, 1501, 1501, 1500, 1490, 1492, - 1489, 1491, 1500, 1499, 1502, 1498, 1496, 1503, 1504, 1505, - 1501, 1495, 1506, 1502, 1508, 1509, 1502, 1506, 1506, 1510, - 1513, 1511, 1514, 1514, 1520, 1503, 1511, 1505, 1508, 1504, - 1509, 1512, 1521, 1515, 1523, 1516, 1517, 1512, 1513, 1515, - 1516, 1510, 1517, 1518, 1520, 1522, 1521, 1523, 1525, 1518, - 1524, 1522, 1527, 1524, 1525, 1529, 1530, 1531, 1532, 1524, + 1486, 1473, 1475, 1476, 1482, 1485, 1476, 1482, 1474, 1472, + 1483, 1483, 1477, 1471, 1479, 1484, 1484, 1485, 1486, 1479, + 1487, 1489, 1481, 1487, 1488, 1488, 1490, 1491, 1492, 1493, + 1494, 1495, 1491, 1492, 1489, 1496, 1501, 1499, 1497, 1505, + 1495, 1503, 1498, 1499, 1502, 1490, 1494, 1497, 1493, 1504, + 1497, 1498, 1500, 1500, 1496, 1505, 1501, 1502, 1506, 1503, + 1509, 1510, 1512, 1504, 1511, 1511, 1513, 1514, 1515, 1515, + 1506, 1517, 1514, 1518, 1519, 1513, 1517, 1516, 1512, 1510, + 1520, 1524, 1521, 1515, 1525, 1509, 1516, 1521, 1521, 1516, + 1523, 1518, 1526, 1527, 1528, 1519, 1524, 1526, 1520, 1527, - 1527, 1537, 1537, 1533, 1534, 1531, 1535, 1532, 1536, 1541, - 1542, 1540, 1538, 1539, 1529, 1530, 1533, 1534, 1538, 1539, - 1535, 1543, 1536, 1537, 1540, 1544, 1545, 1546, 1542, 1541, - 1547, 0, 1545, 1548, 1550, 1550, 1551, 1552, 1544, 1553, - 1543, 1552, 1554, 1555, 1553, 1556, 1547, 1554, 1555, 1546, - 1557, 1548, 1559, 1561, 1556, 1563, 1551, 1560, 1560, 1562, - 1564, 1564, 1565, 1566, 1569, 1567, 1568, 1559, 1570, 1571, - 1566, 1562, 1561, 1557, 1563, 1571, 1565, 1567, 1568, 1572, - 1573, 1574, 0, 1569, 1575, 1575, 1576, 1574, 1570, 1576, - 1579, 1572, 1577, 1577, 1580, 1579, 1581, 1583, 1573, 1582, + 1529, 1529, 1530, 1532, 1523, 1531, 1525, 1533, 1530, 1532, + 1531, 1535, 1528, 1533, 1536, 1537, 1538, 1539, 1540, 1542, + 1539, 1537, 1544, 1545, 1540, 1546, 1539, 1542, 1536, 1538, + 1547, 1535, 1548, 1546, 1549, 1550, 1551, 1552, 1552, 1547, + 1553, 1544, 1545, 1555, 1557, 1548, 1553, 1549, 1554, 1550, + 1551, 1556, 1556, 1558, 1554, 1559, 1555, 1560, 1562, 1552, + 1561, 1563, 1567, 1564, 1557, 1568, 1561, 1566, 1566, 1568, + 1560, 1558, 1573, 1569, 1559, 1575, 1572, 1563, 1569, 1570, + 1562, 1564, 1567, 1571, 1570, 1572, 1576, 1576, 1571, 1577, + 1575, 1578, 1579, 1580, 1580, 1573, 1581, 1582, 1585, 1586, - 1582, 1586, 1581, 1580, 1584, 1585, 1584, 1587, 1585, 1583, - 1588, 1590, 1589, 1591, 1592, 1594, 1590, 1593, 1595, 1596, - 1594, 1586, 1591, 1600, 1600, 1602, 1592, 1595, 1588, 1587, - 1589, 1597, 1593, 1598, 1599, 1601, 1597, 1603, 1598, 1596, - 1595, 1601, 1604, 1597, 1605, 1606, 1602, 1606, 1611, 1599, - 1614, 1607, 1608, 1608, 1609, 1609, 1603, 1615, 1604, 1610, - 1610, 1612, 1612, 1619, 1605, 1607, 1619, 1607, 1611, 1613, - 1613, 1614, 1616, 1616, 1618, 1617, 1621, 1622, 1615, 1617, - 1618, 1623, 1621, 1624, 1629, 1625, 1630, 1623, 1625, 1626, - 1626, 1627, 1627, 1628, 1631, 1622, 1629, 1629, 1629, 1628, + 1583, 1584, 1588, 1578, 1582, 1589, 1591, 1591, 1577, 1587, + 1581, 1579, 1583, 1584, 1588, 1587, 1590, 1585, 1592, 1586, + 1596, 1592, 1590, 1589, 1593, 1593, 1595, 1597, 1599, 1596, + 1600, 1595, 1600, 1597, 1598, 1598, 1601, 1602, 1603, 1601, + 1599, 1604, 1606, 1605, 1607, 1610, 1608, 1606, 1609, 1612, + 1610, 1614, 1618, 1607, 0, 1611, 1614, 1602, 1608, 1604, + 1603, 1605, 1613, 1609, 1611, 1615, 1617, 1613, 1619, 1612, + 1616, 1616, 1617, 1618, 1613, 1620, 1621, 1611, 1623, 1622, + 1615, 1622, 1624, 1624, 1625, 1625, 1627, 1619, 1626, 1626, + 1630, 1620, 1623, 1631, 1623, 1638, 1621, 1628, 1628, 1629, - 1633, 1632, 1636, 1629, 1635, 1642, 1630, 1632, 1624, 1635, - 1635, 1637, 1638, 1637, 1631, 1639, 1636, 1641, 1640, 1643, - 1633, 1644, 1644, 1638, 1640, 1642, 1641, 1645, 1646, 1646, - 1639, 1647, 1648, 1649, 1649, 1650, 1650, 1651, 1654, 1654, - 1643, 1655, 1659, 1656, 1660, 1663, 1658, 1661, 1661, 1662, - 1660, 1647, 1656, 1645, 1648, 1658, 1666, 1651, 1664, 1665, - 1663, 1667, 1667, 1659, 1668, 1664, 1655, 1669, 1665, 1671, - 1662, 1672, 1673, 1674, 1671, 1675, 1681, 1672, 1676, 1680, - 1674, 1675, 1666, 1669, 1676, 1677, 1677, 1679, 1678, 1682, - 1668, 1683, 1673, 1678, 1683, 1681, 1679, 1684, 1685, 1680, + 1629, 1632, 1632, 1633, 1634, 1635, 1627, 1633, 1635, 1637, + 1634, 1630, 1639, 1638, 1631, 1637, 1640, 1641, 1639, 1644, + 1641, 1642, 1642, 1643, 1643, 1644, 1645, 1646, 1647, 1648, + 1649, 1651, 1652, 1658, 1655, 1648, 1651, 1651, 1645, 1645, + 1645, 1640, 1653, 1654, 1653, 1645, 1652, 1646, 1647, 1655, + 1649, 1656, 1657, 1658, 1654, 1659, 1661, 1656, 1660, 1660, + 1663, 1657, 1662, 1662, 1664, 1665, 1665, 1666, 1666, 1667, + 1670, 1670, 1671, 1675, 1672, 1674, 1659, 1677, 1677, 1676, + 1663, 1678, 1661, 1672, 1674, 1676, 1664, 1681, 1679, 1667, + 1682, 1680, 1683, 1683, 1675, 1684, 1681, 1671, 1680, 1685, - 1687, 1682, 1686, 1686, 1689, 1688, 1687, 1690, 1692, 1693, - 1696, 1690, 1694, 1695, 1695, 1684, 1699, 1694, 1697, 1689, - 1703, 1703, 1700, 1702, 1685, 1688, 1700, 1690, 1692, 1696, - 1701, 1693, 1702, 1697, 1704, 1699, 1701, 1705, 1704, 1706, - 1706, 1707, 1708, 1713, 1709, 1710, 1711, 1712, 1705, 1713, - 1710, 1718, 1715, 1705, 1714, 1718, 1708, 1715, 1716, 1716, - 1717, 1717, 1707, 1709, 1720, 1721, 1711, 1712, 1722, 1714, - 1723, 1723, 1725, 1720, 1724, 1724, 1721, 1725, 1725, 1726, - 1727, 1721, 1728, 1730, 1729, 1726, 1727, 1731, 1722, 1729, - 1733, 1735, 1734, 1731, 1736, 1730, 1734, 1740, 1737, 1738, + 1687, 1688, 1678, 1679, 1689, 1687, 1690, 1688, 1691, 1693, + 1693, 1692, 1696, 1690, 1691, 1685, 1682, 1692, 1694, 1695, + 1697, 1684, 1698, 1694, 1689, 1700, 1699, 1701, 1695, 1699, + 1702, 1702, 1696, 1706, 1698, 1703, 1704, 1705, 1709, 1697, + 1707, 1703, 1704, 1700, 1707, 1710, 1711, 1713, 1706, 1712, + 1712, 1711, 1716, 1701, 1714, 1717, 1718, 1705, 1709, 1717, + 1707, 1719, 1718, 1720, 1720, 1722, 1713, 1710, 1721, 1714, + 1719, 1716, 1721, 1723, 1723, 1724, 1722, 1725, 1726, 1727, + 1728, 1722, 1729, 1730, 1727, 1732, 1731, 1733, 1733, 1730, + 1732, 1725, 1734, 1734, 1735, 1737, 1724, 1726, 1735, 1738, - 1739, 1742, 1733, 1735, 1737, 1743, 1739, 1744, 1728, 1740, - 1750, 1746, 1744, 1742, 1746, 1747, 1747, 1748, 1748, 1736, - 1751, 1738, 1749, 1749, 1743, 1752, 1751, 1753, 1754, 1755, - 1750, 1752, 1753, 1759, 1754, 1757, 1759, 1760, 1755, 1763, - 1757, 1761, 1761, 1764, 1767, 1765, 1766, 1766, 1771, 1760, - 1765, 1763, 1768, 1767, 1769, 1764, 1772, 1768, 1773, 1769, - 1770, 1770, 1774, 1775, 1776, 1772, 1777, 1775, 1771, 1776, - 1778, 1779, 1777, 1780, 1784, 1781, 1773, 1785, 1783, 1783, - 1779, 1774, 1786, 1786, 1787, 1788, 1785, 1789, 1778, 1781, - 1783, 1780, 1784, 1787, 1790, 1796, 1791, 1788, 1796, 1790, + 1728, 1731, 1729, 1739, 1737, 1740, 1740, 1742, 1742, 1746, + 1738, 1743, 1744, 1745, 1748, 1738, 1743, 1743, 1744, 1745, + 1747, 1749, 1751, 1739, 1752, 1747, 1748, 1749, 1752, 1753, + 1754, 1755, 1756, 1757, 1751, 1746, 1758, 1755, 1760, 1757, + 1761, 1753, 1762, 1764, 1765, 1765, 1764, 1762, 1758, 1768, + 1760, 1766, 1766, 0, 1756, 1754, 1767, 1767, 1769, 1761, + 1770, 1773, 1771, 1775, 1769, 1772, 1770, 1771, 1775, 1768, + 1773, 1772, 1777, 1778, 1781, 1777, 1779, 1779, 1782, 1783, + 1784, 1784, 1785, 1786, 1783, 1778, 1781, 1787, 1786, 1789, + 1782, 1785, 1787, 1788, 1788, 1790, 1791, 1792, 1793, 1796, - 1794, 1794, 1797, 1798, 1802, 1800, 1803, 1801, 1789, 1791, - 1802, 1804, 1804, 1805, 1807, 1805, 1806, 1806, 1797, 1798, - 1800, 1801, 1807, 1803, 1809, 1810, 1811, 1811, 1812, 1813, - 1814, 1809, 1815, 1817, 1816, 1819, 1818, 1812, 1821, 1824, - 1822, 1819, 1814, 1825, 1815, 1810, 1816, 1823, 1823, 1828, - 1813, 1818, 1822, 1826, 1819, 1827, 1826, 1824, 1821, 1817, - 1827, 1830, 1831, 1825, 1831, 1832, 1830, 1833, 1834, 1828, - 1836, 1838, 1833, 1839, 1840, 1834, 1841, 1842, 1841, 1836, - 1845, 1847, 1839, 1832, 1852, 1844, 1840, 1844, 1848, 1838, - 1846, 1846, 1853, 1848, 1845, 1849, 1842, 1849, 1850, 1851, + 1794, 1795, 1793, 1797, 1790, 1794, 1798, 1795, 1799, 1789, + 1802, 1803, 1797, 1807, 1791, 1806, 1792, 1796, 1801, 1801, + 1803, 0, 1799, 1805, 1798, 1804, 1804, 1806, 1802, 1809, + 1801, 1808, 1805, 1815, 1807, 1816, 1808, 1812, 1812, 1818, + 1814, 1819, 1809, 1814, 1820, 1821, 1822, 1822, 1828, 1815, + 1820, 1816, 1824, 1824, 1818, 1819, 1823, 1825, 1823, 1827, + 1829, 1829, 1821, 1830, 1831, 1825, 1827, 1832, 1828, 1833, + 1834, 1835, 1830, 1836, 1837, 1839, 1842, 1840, 1843, 1832, + 1837, 1833, 1834, 1841, 1841, 1831, 1845, 1844, 1836, 1840, + 1844, 1845, 1846, 1837, 1842, 1839, 1848, 1835, 1843, 1850, - 1854, 1856, 1852, 1850, 1851, 1855, 1854, 1847, 1857, 1859, - 1855, 1860, 1853, 1864, 1856, 1863, 1857, 1861, 1861, 1862, - 1862, 1865, 0, 1868, 1866, 1860, 1870, 1865, 1859, 1866, - 1863, 1868, 1867, 1864, 1867, 1869, 1869, 1873, 1870, 1868, - 1871, 1871, 1872, 1872, 1874, 1875, 1873, 1877, 1878, 1874, - 1878, 1879, 1880, 1881, 1882, 1884, 1877, 1880, 1880, 1877, - 1885, 1888, 1881, 1875, 1886, 1885, 1882, 1884, 1889, 1886, - 1890, 1892, 1879, 1893, 1888, 1891, 1891, 1894, 1895, 1890, - 1896, 1900, 1898, 1912, 1899, 1901, 1909, 0, 1889, 1892, - 1901, 1893, 1895, 1894, 1898, 1896, 1899, 1902, 1903, 1906, + 1849, 1848, 1849, 1851, 1852, 1854, 1856, 1857, 1851, 1858, + 1860, 1852, 1846, 1859, 1854, 1859, 1857, 1850, 1862, 1863, + 1862, 1858, 1864, 1864, 1856, 1865, 1866, 1868, 1867, 1860, + 1867, 1866, 1868, 1863, 1869, 1870, 1871, 1872, 1875, 1869, + 1873, 1874, 1877, 1872, 1878, 1873, 1875, 1879, 1879, 1880, + 1880, 1865, 1881, 1870, 1874, 1882, 1871, 1883, 1878, 1884, + 1885, 1877, 1885, 1883, 1884, 1886, 1887, 1881, 1888, 1888, + 1890, 1890, 1889, 1894, 1887, 1882, 1891, 1891, 1892, 1898, + 1893, 1896, 1887, 1886, 1889, 1893, 1897, 1892, 1897, 1899, + 1896, 1894, 1900, 1896, 1899, 1899, 1901, 1903, 1904, 1905, - 1908, 1900, 1902, 1911, 1910, 1906, 1908, 1903, 1912, 1909, - 1917, 1913, 1914, 1914, 1915, 1916, 1916, 0, 1906, 1910, - 1913, 1911, 1918, 1915, 1920, 1919, 1918, 1921, 1922, 1917, - 1919, 1926, 1921, 1921, 1922, 1923, 1924, 1920, 1925, 1924, - 1931, 1923, 1929, 1929, 1930, 1930, 1925, 1932, 1932, 1931, - 1934, 1926, 1933, 1933, 1935, 1936, 1938, 1938, 1937, 1930, - 1944, 1936, 1934, 1937, 1939, 1939, 1940, 1941, 1947, 1949, - 1930, 1940, 1935, 1941, 1943, 1945, 1948, 1952, 1943, 1945, - 1944, 1948, 1950, 1951, 1953, 1954, 1955, 1956, 1951, 1957, - 1957, 1955, 1949, 1947, 1958, 1952, 1959, 1950, 1958, 1960, + 1898, 1900, 1907, 1904, 1905, 1908, 1911, 1909, 1901, 1903, + 1910, 1910, 1912, 1913, 1914, 1907, 1909, 1915, 1919, 1917, + 1931, 1918, 1920, 1928, 1911, 1908, 1922, 1920, 1914, 1913, + 1912, 1917, 1915, 1918, 1921, 1922, 1925, 1927, 1919, 1921, + 1930, 1929, 1925, 1927, 1932, 1931, 1928, 1933, 1933, 1936, + 1934, 1935, 1935, 1932, 1939, 1925, 1929, 1937, 1930, 1934, + 1938, 1937, 0, 1945, 1940, 1938, 1941, 1939, 1936, 1940, + 1940, 1942, 1941, 1943, 1944, 1950, 1943, 1942, 1948, 1948, + 1949, 1949, 1944, 1945, 1950, 1951, 1951, 1952, 1952, 1953, + 1954, 1955, 1962, 1956, 1963, 1949, 1962, 1955, 1956, 1957, - 1953, 1961, 1962, 1963, 1960, 1954, 1965, 1964, 1966, 1956, - 1969, 1959, 1964, 1970, 1962, 1967, 1967, 1971, 1969, 1965, - 1972, 1973, 1963, 1974, 1979, 1975, 1966, 1961, 1976, 1977, - 1980, 1980, 1970, 1983, 1981, 1982, 1971, 1981, 1984, 1979, - 1976, 0, 1974, 1972, 1988, 1973, 1975, 1983, 1982, 1989, - 1977, 1984, 1985, 1985, 1986, 1986, 1987, 1987, 1991, 1988, - 1990, 1990, 1989, 1992, 1992, 1996, 1993, 1991, 1995, 1997, - 1991, 1993, 1998, 1995, 1999, 1999, 2000, 2000, 2001, 2002, - 2002, 2003, 2004, 2004, 1998, 1996, 2005, 2006, 2009, 1997, - 2007, 2007, 2006, 2008, 2008, 2010, 2011, 2001, 2012, 2003, + 1957, 1953, 1958, 1958, 1959, 1960, 1949, 1966, 1954, 1959, + 1967, 1960, 1964, 1968, 1963, 1967, 1964, 1970, 1969, 1971, + 1973, 1974, 1970, 1972, 1975, 1977, 1974, 1976, 1976, 1977, + 1978, 1980, 1966, 1969, 1982, 1981, 1968, 1971, 1979, 1972, + 1973, 1984, 1985, 1979, 1983, 1978, 1975, 1981, 1988, 1983, + 1986, 1986, 1989, 1982, 1984, 1990, 1988, 1980, 1991, 1992, + 1985, 1993, 1998, 1994, 1995, 1996, 1999, 1999, 2002, 2000, + 2007, 1989, 2000, 2038, 1990, 2001, 1995, 1998, 2003, 2038, + 1993, 1991, 2002, 1992, 1994, 2007, 1996, 2008, 2001, 2004, + 2004, 2003, 2005, 2005, 2006, 2006, 2009, 2009, 2010, 2012, - 2014, 2005, 2009, 2016, 2010, 2014, 2015, 2015, 2017, 2017, - 2011, 2018, 2019, 2020, 2021, 2021, 2020, 2012, 2019, 2022, - 2022, 2023, 2016, 2024, 2025, 2026, 2026, 2028, 2029, 2018, - 2021, 2030, 2031, 2032, 2032, 2033, 2031, 2034, 2024, 2038, - 2023, 2035, 2039, 2025, 2037, 2037, 2030, 2028, 2040, 2039, - 2041, 2029, 2034, 2042, 2033, 2043, 2035, 2044, 2044, 2038, - 2045, 2046, 2040, 2046, 2047, 2049, 2052, 2047, 2041, 2045, - 2050, 2042, 2053, 2051, 2054, 2050, 2056, 2049, 2051, 2062, - 2066, 2043, 2047, 2055, 2047, 2053, 2060, 2058, 2055, 2059, - 2061, 2052, 2058, 2063, 2059, 2054, 2061, 2067, 2064, 2063, + 2008, 2011, 2011, 2014, 2012, 2015, 2016, 2010, 2014, 2017, + 2010, 2018, 2018, 2019, 2019, 2020, 2021, 2021, 2022, 2023, + 2023, 2017, 2024, 2025, 2028, 2015, 2016, 2030, 2025, 2026, + 2026, 2027, 2027, 2029, 2020, 2031, 2022, 2024, 2028, 2033, + 2035, 2030, 2029, 2037, 2033, 2034, 2034, 2036, 2036, 2039, + 2040, 2040, 2039, 2042, 2031, 2041, 2041, 2044, 2043, 2035, + 2047, 2037, 2045, 2045, 2048, 2050, 2040, 2049, 2058, 2050, + 2051, 2051, 2042, 2043, 2052, 2054, 2044, 2055, 2053, 2059, + 2047, 2060, 2049, 2053, 2057, 2057, 2059, 2048, 2058, 2061, + 2054, 2062, 2055, 2052, 2063, 2060, 2064, 2064, 2066, 2065, - 2062, 2060, 2056, 2064, 2065, 2066, 2069, 2070, 2068, 2065, - 2067, 2068, 2071, 2072, 2073, 2069, 2070, 2074, 2075, 2078, - 2084, 2071, 2072, 2074, 2075, 2076, 2080, 2082, 2073, 2076, - 2081, 2081, 2086, 2082, 2087, 2080, 2083, 2083, 2089, 2078, - 2084, 2093, 2084, 2088, 2088, 2083, 2090, 2092, 2086, 2094, - 2087, 2095, 2099, 2089, 2100, 2090, 2107, 2093, 2097, 2092, - 2098, 2097, 2107, 2095, 2094, 2098, 2100, 2101, 2101, 2102, - 2102, 2106, 2099, 2104, 2104, 2105, 2106, 2108, 2105, 2109, - 2109, 2110, 2112, 2108, 2111, 2111, 2113, 2114, 2115, 2115, - 2116, 2117, 2118, 2125, 2112, 2110, 2116, 2118, 2120, 0, + 2066, 2067, 2069, 2072, 2067, 2070, 2071, 2061, 2065, 2062, + 2070, 2071, 2073, 2074, 2069, 2076, 2080, 2075, 2078, 2067, + 2063, 2067, 2075, 2078, 2079, 2073, 2081, 2082, 2072, 2079, + 2083, 2080, 2081, 2084, 2074, 2085, 2083, 2086, 2084, 2087, + 2085, 2076, 2088, 2093, 2089, 2088, 2090, 2091, 2082, 2092, + 2098, 0, 2087, 2089, 2094, 2090, 2091, 2093, 2092, 2095, + 2094, 2106, 2086, 2096, 2100, 2095, 2102, 2096, 2101, 2101, + 2098, 2104, 2102, 2100, 2103, 2103, 2107, 2106, 2108, 2108, + 2109, 2110, 2112, 2103, 2113, 2115, 2114, 2119, 2121, 2121, + 2110, 2104, 2107, 2104, 2112, 2109, 2117, 2115, 2118, 2117, - 2113, 2121, 2120, 2124, 2121, 2117, 2114, 2122, 2122, 2123, - 2128, 2126, 2124, 2125, 2123, 2126, 2127, 2127, 2131, 2130, - 2132, 2133, 2134, 2128, 2130, 2135, 2134, 2136, 2137, 2139, - 2138, 2144, 2136, 2141, 2137, 2133, 2138, 2142, 2131, 2144, - 2132, 2145, 2142, 2145, 2143, 2135, 2148, 2139, 2151, 2141, - 2143, 2149, 2149, 2150, 2152, 2152, 2150, 2154, 2155, 2156, - 2148, 2154, 2157, 2157, 2155, 2163, 2158, 2161, 2161, 2166, - 2165, 2156, 2169, 2170, 2151, 2158, 2171, 2169, 2173, 2173, - 2177, 2171, 2172, 2163, 2165, 2166, 2177, 2172, 2175, 2175, - 2178, 2178, 2179, 2180, 2183, 2181, 2187, 2184, 2188, 2170, + 2113, 2114, 2120, 2118, 2122, 2122, 2126, 2119, 2124, 2124, + 2125, 2126, 2127, 2125, 2120, 2128, 2129, 2129, 2127, 2130, + 2132, 2128, 2131, 2131, 2133, 2134, 2135, 2135, 2136, 2137, + 2138, 2145, 2132, 2130, 2136, 2138, 2140, 0, 2133, 2141, + 2140, 2144, 2141, 2137, 2134, 2142, 2142, 2143, 2148, 2146, + 2144, 2145, 2143, 2146, 2147, 2147, 2151, 2150, 2152, 2153, + 2154, 2148, 2150, 2155, 2154, 2156, 2157, 2159, 2158, 2164, + 2156, 2161, 2157, 2153, 2158, 2162, 2151, 2164, 2152, 2165, + 2162, 2165, 2163, 2155, 2168, 2159, 2171, 2161, 2163, 2169, + 2169, 2170, 2172, 2172, 2170, 2174, 2175, 2176, 2168, 2174, - 2181, 2185, 2185, 2189, 2188, 2187, 2193, 2190, 2179, 2184, - 2192, 2192, 2194, 2183, 2199, 2180, 2196, 2196, 2197, 2197, - 2200, 2189, 2190, 2198, 2203, 2193, 2201, 2204, 2198, 2200, - 2194, 2201, 2199, 2202, 2205, 2202, 2207, 2206, 2203, 2208, - 2214, 2204, 2206, 2213, 2208, 0, 2205, 2209, 2209, 2210, - 2210, 2211, 2211, 2212, 2212, 2213, 2207, 2215, 2214, 2216, - 2216, 2218, 2215, 2217, 2217, 2219, 2220, 2221, 2222, 2222, - 2223, 2224, 2224, 2218, 2225, 2225, 2226, 2219, 2227, 2229, - 2230, 2228, 2232, 2221, 2233, 2236, 2220, 2226, 2228, 2223, - 2227, 2229, 2231, 2234, 2234, 2237, 2235, 2231, 2239, 2238, + 2177, 2177, 2175, 2183, 2178, 2181, 2181, 2186, 2185, 2176, + 2189, 2190, 2171, 2178, 2191, 2189, 2193, 2193, 2197, 2191, + 2192, 2183, 2185, 2186, 2197, 2192, 2195, 2195, 2198, 2198, + 2199, 2200, 2203, 2201, 2207, 2204, 2208, 2190, 2201, 2205, + 2205, 2209, 2208, 2207, 2214, 2210, 2199, 2204, 2212, 2212, + 2215, 2203, 2213, 2200, 2220, 2213, 2217, 2217, 2221, 2209, + 2210, 2218, 2218, 2214, 2219, 2222, 2224, 2221, 2215, 2219, + 2222, 2223, 2220, 2223, 2225, 2226, 2227, 2228, 2229, 0, + 2224, 2227, 2235, 2229, 2230, 2230, 2234, 2226, 2225, 2231, + 2231, 2232, 2232, 2233, 2233, 2239, 2236, 2228, 2234, 2240, - 2230, 2242, 2232, 2240, 2233, 2235, 2241, 2241, 2243, 2244, - 2242, 2236, 2238, 2246, 2247, 2237, 2248, 2240, 2249, 2250, - 2251, 2249, 2239, 2243, 2244, 2251, 2260, 2252, 2253, 2253, - 2262, 2246, 2252, 2250, 2254, 2254, 2247, 2255, 2255, 2248, - 2257, 2257, 2259, 2259, 2260, 2261, 2264, 2265, 2266, 2262, - 2268, 2267, 2269, 2270, 2271, 2270, 2261, 2272, 2273, 2268, - 2274, 2274, 2276, 2276, 2277, 2265, 2264, 2283, 2278, 2284, - 2266, 2267, 2269, 2281, 2271, 2272, 2273, 2278, 2279, 2279, - 2282, 2282, 2281, 2285, 2286, 2283, 2277, 2284, 2287, 2288, - 2285, 2290, 2289, 2291, 2291, 2292, 2292, 2293, 2294, 2286, + 2235, 2236, 2237, 2237, 2238, 2238, 2241, 2239, 2242, 2243, + 2243, 2240, 2244, 2245, 2245, 2246, 2246, 2247, 2248, 2251, + 2249, 2250, 2253, 2254, 2242, 2257, 2241, 2249, 2247, 2252, + 2248, 2244, 2256, 2250, 2252, 2255, 2255, 2258, 2260, 2251, + 2259, 2256, 2253, 2254, 2261, 2262, 2262, 2263, 2264, 2265, + 2267, 2257, 2268, 2259, 2269, 2272, 2263, 2258, 2261, 2271, + 2272, 0, 2260, 2264, 2265, 2273, 2270, 2281, 2267, 2270, + 2273, 2274, 2274, 2271, 2268, 2275, 2275, 2269, 2276, 2276, + 2278, 2278, 2280, 2280, 2282, 2281, 2283, 2285, 2286, 2287, + 2288, 2289, 2290, 2292, 2291, 2282, 2291, 2293, 2294, 2298, - 2295, 2296, 2298, 2293, 2297, 2299, 2287, 2288, 2289, 2297, - 2290, 2301, 2300, 2301, 2306, 2295, 2294, 2300, 2302, 2302, - 2296, 2303, 2298, 2303, 2309, 2299, 2304, 2304, 2308, 2310, - 2311, 2312, 2313, 2306, 2314, 2317, 2312, 2308, 2321, 2318, - 2330, 2310, 2318, 2309, 2319, 2319, 2320, 2322, 2322, 2325, - 2311, 2331, 2313, 2314, 2323, 2317, 2321, 2328, 2323, 2326, - 2330, 2320, 2334, 2326, 2325, 2327, 2327, 2332, 2332, 2335, - 2328, 2331, 2336, 2338, 2334, 2341, 2336, 2342, 2335, 2337, - 2337, 2339, 2339, 2340, 2341, 2343, 2344, 2344, 2340, 2349, - 2349, 2350, 2338, 2342, 2351, 2351, 2352, 2343, 2353, 2354, + 2289, 2295, 2295, 2297, 2297, 2283, 2286, 2285, 2299, 2304, + 2288, 2287, 2290, 2292, 2302, 2293, 2294, 2299, 2300, 2300, + 2305, 2298, 2306, 2302, 2303, 2303, 2307, 2304, 2308, 2306, + 2309, 2310, 2311, 2312, 2312, 2313, 2313, 2314, 2305, 2315, + 2316, 2307, 2317, 2314, 2318, 2319, 2308, 2310, 2309, 2318, + 2320, 2311, 2322, 2321, 2322, 2316, 2327, 2315, 2321, 2323, + 2323, 2317, 2324, 2329, 2324, 2319, 2325, 2325, 2330, 2331, + 2320, 2332, 2329, 2333, 2334, 2327, 2335, 2338, 2333, 2339, + 2342, 2331, 2339, 2340, 2340, 2341, 2344, 2330, 2343, 2343, + 2344, 2332, 2346, 2349, 2334, 2335, 2351, 2338, 2342, 2347, - 2357, 2355, 2356, 2356, 2359, 2359, 2364, 2362, 2354, 2352, - 2355, 2353, 2362, 2350, 2363, 2357, 2365, 2366, 2367, 2363, - 2364, 2365, 2368, 2371, 2369, 2366, 2374, 2379, 2372, 2373, - 0, 2368, 2369, 2372, 2373, 2375, 2375, 2367, 2371, 2376, - 2376, 2374, 2377, 2378, 2380, 2379, 2381, 0, 2378, 2377, - 2382, 2384, 2381, 2383, 2383, 2382, 2385, 2386, 2386, 2387, - 2387, 2385, 2380, 2390, 2391, 2391, 2384, 2392, 2393, 2402, - 2392, 2415, 2394, 2393, 2393, 2395, 2390, 2394, 2396, 2397, - 2395, 2398, 2399, 2397, 2396, 2400, 2398, 2401, 2403, 2415, - 2402, 2399, 2404, 2406, 2403, 2401, 2405, 2408, 2404, 2411, + 2341, 2348, 2348, 2347, 2352, 2353, 2349, 2346, 2354, 2354, + 2356, 2351, 2357, 2358, 2359, 2359, 2360, 2358, 2361, 2361, + 2363, 2357, 2356, 2362, 2352, 2353, 2364, 2365, 2362, 2363, + 2366, 2366, 2371, 2371, 2372, 2360, 2373, 2373, 2374, 2365, + 2375, 2376, 2364, 2377, 2378, 2378, 2379, 2381, 2381, 2384, + 2376, 2374, 2377, 2375, 2384, 2385, 2372, 2386, 2387, 2388, + 2385, 2379, 2389, 2387, 2390, 2393, 2391, 2388, 2396, 2399, + 2394, 2386, 2395, 2390, 2391, 2394, 2399, 2395, 2397, 2397, + 2393, 2389, 2400, 2396, 2398, 2398, 2401, 2400, 2402, 2403, + 2406, 2404, 2405, 2405, 2407, 2403, 2404, 2408, 2408, 2407, - 2400, 2405, 2408, 2409, 2413, 2406, 2409, 2414, 2416, 2413, - 2417, 2411, 2414, 2418, 2419, 2419, 2420, 2423, 2424, 2417, - 2425, 2416, 2418, 2426, 2426, 2420, 2427, 2429, 2428, 2430, - 2430, 2431, 2433, 2435, 2437, 2437, 2423, 2428, 2424, 2425, - 2436, 2438, 2429, 2439, 2436, 2427, 2440, 2433, 2441, 2439, - 2431, 2443, 2440, 2435, 2441, 2442, 2442, 2444, 2446, 2443, - 2447, 2449, 2444, 2450, 2451, 2449, 2438, 2446, 2453, 2453, - 2454, 2454, 2458, 2447, 2455, 2455, 2458, 2450, 2459, 2451, - 2457, 2457, 2463, 2459, 2461, 2461, 2464, 2465, 2466, 2468, - 2476, 2464, 2474, 2466, 2466, 2469, 2469, 2471, 2471, 2465, + 2409, 2409, 2412, 0, 2401, 2406, 2402, 2413, 2413, 2414, + 2424, 2415, 2414, 2416, 2417, 2412, 2415, 2415, 2416, 2417, + 2418, 2419, 2420, 2421, 2422, 2419, 2418, 2420, 2423, 2425, + 2428, 2424, 2421, 2427, 2426, 2425, 2423, 2433, 2427, 2422, + 2426, 2430, 2428, 2435, 2431, 2436, 2430, 2431, 2435, 2433, + 2436, 2437, 2438, 2439, 2440, 2441, 2441, 2442, 2445, 2446, + 2451, 2447, 2439, 2440, 2449, 2438, 2442, 2448, 2448, 2437, + 2452, 2452, 2450, 2453, 2455, 2451, 2457, 2445, 2458, 2446, + 2447, 2450, 2458, 2449, 2459, 2459, 2460, 2461, 2462, 2455, + 0, 2463, 2453, 2461, 2462, 2465, 2457, 2463, 2464, 2464, - 2472, 2472, 2463, 2473, 2478, 2474, 2473, 2482, 2476, 2468, - 2479, 2479, 2480, 2480, 2481, 2481, 2483, 2483, 2484, 2485, - 2486, 2487, 2482, 2493, 2478, 2488, 2488, 2487, 2489, 2494, - 2492, 2484, 2489, 2495, 2486, 2492, 2492, 2485, 2496, 2497, - 2498, 2500, 2500, 2499, 2496, 2497, 2493, 2499, 2505, 2494, - 2503, 2506, 2508, 2495, 2506, 2503, 2505, 2509, 2510, 2511, - 2509, 2512, 2513, 0, 2511, 2498, 2514, 2515, 2515, 2516, - 2517, 2518, 2519, 2517, 2522, 2510, 2510, 2508, 2520, 2512, - 2514, 2517, 2513, 2516, 2521, 2518, 2520, 2523, 2523, 2521, - 2521, 2519, 2528, 2522, 2524, 2524, 2525, 2525, 2526, 2526, + 2466, 2468, 2469, 2465, 2471, 2466, 2472, 2473, 2471, 2476, + 2468, 2460, 2475, 2475, 2486, 2469, 2477, 2477, 2478, 2478, + 2472, 2481, 2473, 2480, 2480, 2481, 2482, 2476, 2484, 2484, + 2487, 2482, 2488, 2489, 2486, 2487, 2491, 2499, 2489, 2489, + 2492, 2492, 2494, 2494, 2488, 2495, 2495, 2496, 2497, 2501, + 2496, 2502, 2502, 2503, 2503, 2499, 2491, 2504, 2504, 2505, + 2507, 2497, 2506, 2506, 2508, 2509, 2510, 2511, 2511, 2501, + 2516, 2512, 2510, 2507, 2505, 2512, 2517, 2518, 2515, 2509, + 2519, 2520, 2508, 2515, 2515, 2521, 2519, 2520, 2522, 2523, + 2523, 2531, 2522, 2516, 2526, 2528, 2517, 2518, 2529, 2526, - 2527, 2527, 2529, 2530, 2531, 2532, 2533, 2529, 2528, 2534, - 2536, 2536, 2537, 2538, 2532, 2537, 2540, 2540, 2541, 2542, - 2542, 2550, 2543, 2530, 0, 2541, 2533, 2543, 2546, 2534, - 2531, 2538, 2545, 2545, 2547, 2548, 2553, 2546, 2552, 2550, - 2551, 2551, 2552, 2547, 2548, 2553, 2554, 2555, 2557, 2556, - 2561, 2565, 2555, 2555, 2566, 2561, 2567, 2557, 2562, 2562, - 2569, 2554, 2556, 2564, 2564, 2565, 2570, 2573, 2574, 2569, - 2575, 2578, 2580, 0, 2567, 2576, 2626, 2574, 2570, 2566, - 2582, 2576, 2583, 2578, 2626, 2582, 2585, 2583, 2584, 2584, - 2575, 2587, 2573, 2580, 2594, 2585, 2587, 2588, 2588, 2590, + 2533, 2529, 2532, 2528, 2534, 2532, 2535, 2536, 2537, 2534, + 2521, 2538, 2538, 2542, 2539, 2541, 2531, 2533, 2533, 2545, + 2540, 2551, 2537, 2540, 2535, 2543, 2554, 2536, 2539, 2541, + 2544, 2540, 2542, 2543, 0, 2544, 2544, 2551, 2545, 2546, + 2546, 2547, 2547, 2548, 2548, 2549, 2549, 2550, 2550, 2552, + 2553, 2555, 2554, 2556, 2552, 2557, 2559, 2559, 2560, 2561, + 2555, 2560, 2563, 2563, 2564, 2565, 2565, 2566, 2568, 2568, + 2553, 2564, 2566, 2556, 2569, 2557, 2570, 2561, 2571, 2573, + 2574, 2574, 2575, 2569, 2576, 2570, 2575, 2571, 2577, 2578, + 2580, 2579, 2581, 2576, 2578, 2578, 2581, 2573, 2589, 2580, - 2590, 2588, 2591, 2591, 2592, 2592, 2593, 2595, 2596, 2602, - 2598, 2603, 2599, 2596, 2594, 2593, 2598, 2599, 2600, 2601, - 2601, 2605, 2606, 2600, 2604, 2607, 2595, 2602, 2606, 2604, - 2608, 2608, 2603, 2610, 2614, 2611, 2612, 2610, 2616, 2605, - 2611, 2612, 2613, 2613, 2615, 2618, 2618, 2620, 2621, 2624, - 2607, 2622, 2625, 2614, 2623, 2622, 2628, 2627, 2616, 2615, - 2620, 2621, 2627, 2623, 2630, 2624, 2629, 2629, 2632, 2632, - 2635, 2625, 2633, 2633, 2637, 2637, 2639, 2640, 2641, 2642, - 2644, 2644, 2628, 2630, 2642, 2645, 2646, 2647, 2649, 2649, - 2650, 2635, 2639, 2640, 2641, 2651, 2651, 2654, 2656, 2657, + 2585, 2586, 2586, 2577, 2579, 2585, 2588, 2588, 2590, 2591, + 2593, 2594, 2589, 2597, 2599, 2598, 2600, 2602, 2604, 2593, + 2606, 2607, 2600, 2594, 2598, 2606, 2607, 2591, 2609, 2602, + 2608, 2608, 2618, 2590, 2599, 2611, 2619, 2609, 2597, 2604, + 2611, 2612, 2612, 2614, 2614, 2612, 2615, 2615, 2616, 2616, + 2617, 2620, 2618, 2623, 2622, 2619, 2620, 2624, 2623, 2617, + 2622, 2626, 2624, 2625, 2625, 2627, 2628, 2629, 2630, 2631, + 2635, 2628, 2632, 2632, 2630, 2635, 2634, 2636, 2638, 2626, + 2634, 2639, 2636, 2637, 2637, 2629, 2627, 2640, 2642, 2642, + 2644, 2645, 2647, 2648, 2631, 2646, 2639, 2638, 2649, 2646, - 2660, 2655, 2664, 2656, 2650, 2645, 2647, 2655, 2662, 2646, - 2658, 2658, 2659, 2659, 2661, 2661, 2663, 2654, 2665, 2662, - 2660, 2657, 2664, 2666, 2665, 2663, 2667, 2668, 2669, 2669, - 2670, 2671, 2671, 2670, 2661, 2676, 2675, 2677, 2667, 2678, - 2678, 2679, 2666, 2677, 2679, 2680, 2681, 2668, 2675, 2683, - 2685, 2680, 2684, 2686, 2683, 2676, 2687, 2684, 2690, 2686, - 2688, 2688, 2691, 2692, 2681, 2693, 2694, 2694, 2695, 2685, - 2690, 2701, 2696, 2687, 2687, 2698, 2698, 0, 2693, 2700, - 2691, 2696, 2699, 2699, 2700, 2701, 2702, 2695, 2692, 2703, - 2703, 2702, 2704, 2704, 2705, 2705, 2706, 2708, 2708, 2711, + 2650, 2647, 2652, 2644, 2645, 2651, 2654, 2640, 2650, 2648, + 2651, 2653, 2653, 2656, 2656, 2657, 2657, 2649, 2659, 2661, + 2661, 2663, 2664, 2669, 2665, 2654, 2666, 2670, 2652, 2668, + 2668, 2666, 2671, 2673, 2673, 2674, 2675, 2663, 2664, 2659, + 2665, 2676, 2676, 2669, 2679, 2682, 2680, 2691, 2681, 2674, + 2670, 2671, 2680, 2681, 2685, 2675, 2683, 2683, 2684, 2684, + 2686, 2686, 2687, 2688, 2679, 2689, 2691, 2682, 2693, 2690, + 2692, 0, 2688, 2687, 2685, 2690, 2694, 2694, 2695, 2700, + 2686, 2695, 2692, 2696, 2696, 2689, 2701, 2702, 2693, 2703, + 2703, 2700, 2704, 2702, 2705, 2704, 2706, 2708, 2709, 2710, - 2713, 2706, 2714, 2715, 2716, 2716, 2718, 2718, 2720, 2719, - 2721, 2722, 2722, 2725, 2724, 2726, 2727, 0, 2711, 2721, - 2724, 2727, 2713, 2719, 2714, 2715, 2730, 2730, 2720, 2732, - 2732, 2733, 2734, 2725, 2726, 2735, 2733, 2736, 2741, 2737, - 2739, 2735, 2738, 2738, 2742, 2739, 2734, 2737, 2743, 2736, - 2744, 2745, 2747, 2743, 2748, 2749, 2750, 2745, 2741, 2751, - 2747, 2758, 2744, 2752, 2742, 2753, 2754, 2755, 2762, 2757, - 2766, 2766, 2755, 2748, 2757, 2749, 2750, 2751, 2759, 2752, - 2760, 2758, 2753, 2753, 2759, 2760, 2763, 2754, 2762, 2767, - 2767, 2768, 2772, 2772, 2778, 2768, 2774, 2774, 2778, 2763, + 2705, 2711, 2708, 2709, 2712, 2715, 2701, 2711, 2713, 2713, + 2716, 2717, 2718, 2720, 2706, 2719, 2719, 2715, 2710, 2726, + 2721, 2712, 2712, 2723, 2723, 2718, 2724, 2724, 2716, 2721, + 2725, 2736, 2720, 2726, 2727, 2725, 2717, 2728, 2728, 2727, + 2729, 2729, 2730, 2730, 2731, 2733, 2733, 2738, 2739, 2731, + 2736, 2740, 2741, 2741, 2743, 2743, 2745, 2744, 2746, 2747, + 2747, 2748, 2748, 2751, 2794, 2752, 2750, 2746, 2794, 2738, + 2739, 2744, 2750, 2740, 2753, 2760, 2745, 2756, 2756, 2753, + 2758, 2758, 2759, 2751, 2752, 2761, 2762, 2759, 2763, 2760, + 2765, 2761, 2764, 2764, 2767, 2765, 2763, 2768, 2762, 2769, - 2775, 2775, 2781, 2775, 2776, 2776, 2784, 2776, 2777, 2777, - 2782, 2777, 2780, 2780, 2785, 2790, 2786, 2787, 2787, 2792, - 2781, 2786, 2791, 2792, 2782, 2805, 2784, 2793, 2794, 2791, - 2796, 2805, 2797, 2831, 2785, 2801, 2793, 2798, 2798, 2806, - 2790, 2797, 2831, 2794, 2799, 2799, 2800, 2800, 2796, 2802, - 2801, 2803, 2804, 2807, 2802, 2808, 2809, 2804, 2804, 2811, - 2803, 2809, 2810, 2803, 2806, 2812, 2812, 2810, 2807, 2813, - 2883, 2814, 2815, 2815, 2883, 2813, 2808, 2814, 2811, 2816, - 2816, 2817, 2820, 2820, 2823, 2823, 2817, 2824, 2824, 2825, - 2825, 2826, 2826, 2827, 2827, 2828, 2828, 2829, 2829, 2832, + 2770, 2771, 2773, 2774, 2769, 2775, 2776, 2771, 2778, 2777, + 2773, 2779, 2770, 2780, 2767, 2781, 2783, 2768, 2784, 2788, + 2781, 2783, 2774, 2861, 2778, 2775, 2776, 2777, 2779, 2779, + 2785, 2789, 2786, 0, 2780, 2861, 2785, 2786, 2784, 2788, + 2792, 2792, 2793, 2793, 2789, 2798, 2798, 2800, 2800, 2801, + 2801, 2804, 2801, 2802, 2802, 2804, 2802, 2803, 2803, 2807, + 2803, 2806, 2806, 2811, 2808, 2812, 2813, 2814, 2814, 2817, + 2819, 2813, 2818, 2820, 2819, 2821, 0, 2807, 2808, 2818, + 2823, 2828, 2820, 2811, 2824, 2812, 2825, 2825, 2826, 2826, + 2821, 2827, 2827, 2824, 2817, 2829, 2828, 2830, 2823, 2831, - 2832, 2833, 2834, 2835, 2839, 2837, 2838, 2838, 2840, 2847, - 2833, 2842, 2842, 2841, 2834, 2843, 2844, 2844, 2849, 2839, - 2851, 2840, 2854, 2835, 2837, 2841, 2848, 2847, 2854, 2848, - 2843, 2850, 2850, 2853, 2855, 2856, 2853, 2857, 2851, 2858, - 2856, 2861, 2859, 2862, 2849, 2865, 2874, 2861, 2855, 2874, - 2876, 2881, 2862, 2877, 2877, 2884, 2857, 2858, 2859, 2882, - 2865, 2878, 2878, 2876, 2879, 2879, 2885, 2887, 2882, 2891, - 2888, 2889, 2892, 2892, 2881, 2884, 2889, 2890, 2893, 2890, - 2885, 2888, 2894, 2896, 2891, 2895, 2897, 2898, 2899, 2901, - 2887, 2893, 2900, 2902, 2907, 2903, 2908, 2899, 2910, 2896, + 2829, 2832, 2833, 2834, 2831, 2831, 2830, 2832, 2835, 2830, + 2836, 2837, 2838, 2839, 2839, 2836, 2837, 2840, 2834, 2841, + 2842, 2842, 2868, 2840, 2910, 2841, 0, 2833, 2910, 2835, + 2844, 2838, 2843, 2843, 2868, 2844, 2847, 2847, 2850, 2850, + 2851, 2851, 2852, 2852, 2853, 2853, 2854, 2854, 2855, 2855, + 2856, 2856, 2858, 2859, 2859, 2860, 2862, 2866, 2864, 2865, + 2865, 2858, 2867, 2870, 2860, 2869, 2869, 2871, 2871, 2874, + 2875, 2876, 2866, 2875, 2878, 2867, 2862, 2864, 2870, 2877, + 2877, 2880, 2881, 2884, 2880, 2882, 2883, 2874, 2881, 2885, + 2886, 2883, 2878, 2892, 2888, 2889, 2903, 2876, 2901, 2882, - 2903, 2894, 2898, 2895, 2900, 2909, 2909, 2910, 2907, 2915, - 2901, 2897, 2916, 2902, 2911, 2911, 2908, 2912, 2912, 2913, - 2913, 2914, 2914, 2917, 2918, 2919, 2917, 2920, 2915, 2918, - 2919, 2921, 2916, 2922, 2923, 2924, 2925, 2926, 2928, 2922, - 2929, 2925, 2927, 2927, 2930, 2930, 2921, 2924, 2923, 2932, - 2934, 2940, 2920, 2928, 2937, 2937, 2941, 2926, 2939, 2929, - 2938, 2938, 2941, 2942, 2932, 2943, 2939, 2944, 2934, 2942, - 2940, 2945, 2946, 2947, 2947, 2948, 2948, 2946, 2950, 2943, - 2944, 2951, 2953, 2954, 2956, 2959, 2957, 2954, 2958, 2960, - 2945, 2957, 2961, 2964, 2964, 2962, 2953, 2967, 2959, 2950, + 2888, 2901, 2884, 2908, 2889, 2912, 2886, 2885, 2892, 2903, + 2904, 2904, 2905, 2905, 2906, 2906, 2909, 2911, 2914, 2912, + 2915, 2917, 2916, 2917, 2918, 2909, 2908, 2916, 2919, 2919, + 2920, 2915, 2921, 2923, 2922, 2924, 2926, 2911, 2925, 2918, + 2928, 2914, 2927, 2920, 2929, 2926, 2935, 0, 2934, 2923, + 2930, 2921, 2922, 2925, 2927, 2930, 2936, 2936, 2937, 2942, + 2924, 2928, 2934, 2943, 2929, 2947, 2935, 2937, 2938, 2938, + 2939, 2939, 2940, 2940, 2941, 2941, 2944, 2945, 2942, 2944, + 2946, 2948, 2945, 2943, 2950, 2946, 2949, 2951, 2952, 2953, + 2947, 2955, 2949, 2952, 2954, 2954, 2948, 2956, 2950, 2951, - 2962, 2951, 2960, 2963, 2956, 2968, 2969, 2958, 2963, 2970, - 2970, 2961, 2977, 2971, 2972, 2973, 2973, 2967, 2971, 2974, - 2972, 2975, 2976, 2968, 2974, 2969, 2975, 2976, 2978, 2980, - 2980, 2977, 2981, 2985, 2978, 2982, 2982, 2981, 2984, 2986, - 2987, 2988, 2984, 2989, 2990, 2991, 2986, 2993, 2993, 2989, - 2995, 2995, 2985, 2996, 2998, 2999, 2997, 3000, 2991, 2987, - 2988, 2997, 2996, 2990, 3002, 2996, 3001, 3001, 3003, 3002, - 3000, 3005, 3007, 2998, 2999, 3006, 3006, 3008, 3008, 3009, - 3009, 3003, 3010, 3011, 3012, 3013, 3013, 3010, 3014, 3019, - 3011, 3007, 3015, 3014, 3015, 3016, 3016, 3005, 3017, 3018, + 2957, 2957, 2959, 2961, 2964, 2964, 2955, 2965, 2965, 2953, + 2966, 2967, 2970, 2968, 2969, 2971, 2956, 2959, 2966, 2968, + 2969, 2961, 2972, 2977, 2973, 2978, 2970, 2983, 2971, 2973, + 2967, 2974, 2974, 2975, 2975, 2980, 2981, 2984, 2985, 2986, + 2981, 2972, 2984, 2987, 2977, 2978, 2988, 2983, 2989, 2980, + 2990, 2994, 2986, 2989, 2995, 2990, 2987, 2985, 2991, 2991, + 2996, 2997, 2997, 2998, 2999, 2988, 3000, 3000, 2998, 3001, + 2999, 2994, 2995, 3002, 3001, 3003, 3004, 3005, 3002, 2996, + 3003, 3007, 3007, 3005, 3008, 3009, 3009, 3011, 3012, 3008, + 3013, 3011, 3014, 3015, 3016, 3004, 3017, 3013, 3020, 3020, - 3021, 3024, 3020, 3012, 3028, 3017, 3018, 3020, 3019, 3023, - 3023, 3026, 3027, 3029, 3030, 3030, 3026, 3027, 3033, 3021, - 3024, 3032, 3032, 3028, 3034, 3035, 3035, 3036, 3036, 3037, - 3039, 3039, 3029, 3040, 3040, 3041, 3037, 3033, 3047, 3043, - 3046, 3048, 3041, 3034, 3043, 3046, 3049, 3049, 3050, 3050, - 0, 0, 0, 0, 0, 0, 0, 3047, 0, 0, - 3048, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3055, 3055, - 3055, 3055, 3055, 3055, 3055, 3056, 3056, 3056, 3056, 3056, - 3056, 3056, 3057, 3057, 3057, 3057, 3057, 3057, 3057, 3058, - 3058, 3058, 3058, 3058, 3058, 3058, 3060, 3060, 0, 3060, + 3016, 3018, 3022, 3022, 3023, 3024, 3025, 3012, 3026, 3027, + 3024, 3014, 3015, 3023, 3018, 3017, 3023, 3028, 3028, 3029, + 3030, 3032, 3027, 3034, 3029, 3025, 3039, 3026, 3033, 3033, + 3035, 3035, 3037, 3030, 3036, 3036, 3038, 3037, 3040, 3040, + 3046, 3041, 3034, 3038, 3048, 3039, 3041, 3032, 3042, 3044, + 3042, 3043, 3043, 3045, 3050, 3050, 3044, 3047, 3051, 3046, + 3045, 3053, 3047, 3048, 3054, 3055, 3053, 3056, 3060, 3054, + 3057, 3057, 3059, 3059, 3061, 3062, 3062, 3051, 3063, 3063, + 0, 3064, 3066, 3066, 3055, 3068, 3056, 3060, 3064, 3067, + 3067, 3070, 3068, 3061, 3073, 3074, 3070, 3075, 0, 3073, - 3060, 3060, 3060, 3061, 3061, 0, 0, 0, 3061, 3061, - 3062, 3062, 0, 0, 3062, 0, 3062, 3063, 0, 0, - 0, 0, 0, 3063, 3064, 3064, 0, 0, 0, 3064, - 3064, 3065, 0, 0, 0, 0, 0, 3065, 3066, 3066, - 0, 3066, 3066, 3066, 3066, 3067, 3067, 0, 3067, 3067, - 3067, 3067, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, 3053, - 3053, 3053, 3053 + 3076, 3076, 3077, 3077, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3074, 0, 3075, 3081, 3081, 3081, + 3081, 3081, 3081, 3081, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3084, 3084, + 3084, 3084, 3084, 3084, 3084, 3085, 3085, 3085, 3085, 3085, + 3085, 3085, 3087, 3087, 0, 3087, 3087, 3087, 3087, 3088, + 3088, 0, 0, 0, 3088, 3088, 3089, 3089, 0, 0, + 3089, 0, 3089, 3090, 0, 0, 0, 0, 0, 3090, + 3091, 3091, 0, 0, 0, 3091, 3091, 3092, 0, 0, + 0, 0, 0, 3092, 3093, 3093, 0, 3093, 3093, 3093, + 3093, 3094, 3094, 0, 3094, 3094, 3094, 3094, 3080, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, + 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080 } ; static yy_state_type yy_last_accepting_state; @@ -2949,7 +2969,7 @@ static void config_end_include(void) } #endif -#line 2951 "" +#line 2971 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2958,9 +2978,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2960 "" +#line 2980 "" -#line 2962 "" +#line 2982 "" #define INITIAL 0 #define quotedstring 1 @@ -3182,7 +3202,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3184 "" +#line 3204 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3215,13 +3235,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3054 ) + if ( yy_current_state >= 3081 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5953 ); + while ( yy_base[yy_current_state] != 6009 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3471,17 +3491,17 @@ YY_RULE_SETUP case 45: YY_RULE_SETUP #line 252 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_TLS_USE_SNI) } YY_BREAK case 46: YY_RULE_SETUP #line 253 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 47: YY_RULE_SETUP #line 254 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 48: YY_RULE_SETUP @@ -3491,1056 +3511,1056 @@ YY_RULE_SETUP case 49: YY_RULE_SETUP #line 256 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 50: YY_RULE_SETUP #line 257 "./util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 51: YY_RULE_SETUP #line 258 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 52: YY_RULE_SETUP #line 259 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 53: YY_RULE_SETUP #line 260 "./util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 54: YY_RULE_SETUP #line 261 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 55: YY_RULE_SETUP #line 262 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 56: YY_RULE_SETUP #line 263 "./util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 57: YY_RULE_SETUP #line 264 "./util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_IP_DSCP) } YY_BREAK case 58: YY_RULE_SETUP #line 265 "./util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 59: YY_RULE_SETUP #line 266 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 60: YY_RULE_SETUP #line 267 "./util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 61: YY_RULE_SETUP #line 268 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 62: YY_RULE_SETUP #line 269 "./util/configlexer.lex" -{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 63: YY_RULE_SETUP #line 270 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 64: YY_RULE_SETUP #line 271 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 65: YY_RULE_SETUP #line 272 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 66: YY_RULE_SETUP #line 273 "./util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 67: YY_RULE_SETUP #line 274 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 68: YY_RULE_SETUP #line 275 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 69: YY_RULE_SETUP #line 276 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 70: YY_RULE_SETUP #line 277 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 71: YY_RULE_SETUP #line 278 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 72: YY_RULE_SETUP #line 279 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 73: YY_RULE_SETUP #line 280 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 74: YY_RULE_SETUP #line 281 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 75: YY_RULE_SETUP #line 282 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 76: YY_RULE_SETUP #line 283 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 77: YY_RULE_SETUP #line 284 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 78: YY_RULE_SETUP #line 285 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 79: YY_RULE_SETUP #line 286 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 80: YY_RULE_SETUP #line 287 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 81: YY_RULE_SETUP #line 288 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 82: YY_RULE_SETUP #line 289 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 83: YY_RULE_SETUP #line 290 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 84: YY_RULE_SETUP #line 291 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 85: YY_RULE_SETUP #line 292 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 86: YY_RULE_SETUP #line 293 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 87: YY_RULE_SETUP #line 294 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 88: YY_RULE_SETUP #line 295 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 89: YY_RULE_SETUP #line 296 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 90: YY_RULE_SETUP #line 297 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 91: YY_RULE_SETUP #line 298 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 92: YY_RULE_SETUP #line 299 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 93: YY_RULE_SETUP #line 300 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 94: YY_RULE_SETUP #line 301 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 95: YY_RULE_SETUP #line 302 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 96: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 97: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 98: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 99: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 100: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 101: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 102: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 103: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 104: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 105: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 106: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 107: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 108: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 109: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 110: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 111: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 112: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 113: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 114: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 115: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 116: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 117: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 118: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 119: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 120: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 121: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 122: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 123: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 124: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 125: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 126: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 127: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 128: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 129: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 130: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 131: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 132: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 133: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 134: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 135: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 136: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 137: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 138: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 139: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 140: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 141: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 142: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 143: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 144: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 145: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 146: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 147: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 148: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 149: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 150: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 151: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 152: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 153: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 154: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 155: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 156: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 157: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 158: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 159: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 160: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 161: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 162: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 163: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 164: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 165: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 166: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 167: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 168: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 169: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 170: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 171: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 172: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 173: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 174: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 175: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 176: YY_RULE_SETUP -#line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 383 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 177: YY_RULE_SETUP -#line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 384 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 178: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 179: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 180: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 181: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 182: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 183: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 184: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 185: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 186: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 187: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 188: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 189: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 190: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 191: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 192: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 193: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 194: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 195: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 196: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 197: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 198: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 199: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 200: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 201: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 202: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 203: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 204: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 205: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 206: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 207: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 208: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 209: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 231: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 232: YY_RULE_SETUP -#line 441 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 440 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 233: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 441 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 234: YY_RULE_SETUP -#line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 443 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 235: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 236: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 237: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 238: YY_RULE_SETUP -#line 449 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 448 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 239: YY_RULE_SETUP -#line 451 "./util/configlexer.lex" +#line 449 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 240: YY_RULE_SETUP -#line 453 "./util/configlexer.lex" +#line 451 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 241: YY_RULE_SETUP -#line 455 "./util/configlexer.lex" +#line 453 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 457 "./util/configlexer.lex" +#line 455 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP -#line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 457 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 244: YY_RULE_SETUP -#line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 459 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 245: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 246: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 256: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 257: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 258: YY_RULE_SETUP @@ -4550,195 +4570,210 @@ YY_RULE_SETUP case 259: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 260: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 270: YY_RULE_SETUP -#line 487 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 486 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 271: YY_RULE_SETUP -#line 489 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 487 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 272: YY_RULE_SETUP -#line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 489 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 273: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 274: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 290: -/* rule 290 can match eol */ YY_RULE_SETUP #line 508 "./util/configlexer.lex" +{ YDVAR(1, VAR_IPSET_NAME_V6) } + YY_BREAK +case 291: +YY_RULE_SETUP +#line 509 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 292: +YY_RULE_SETUP +#line 510 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 293: +/* rule 293 can match eol */ +YY_RULE_SETUP +#line 511 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 291: +case 294: YY_RULE_SETUP -#line 511 "./util/configlexer.lex" +#line 514 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 512 "./util/configlexer.lex" +#line 515 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 292: +case 295: YY_RULE_SETUP -#line 517 "./util/configlexer.lex" +#line 520 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 293: -/* rule 293 can match eol */ +case 296: +/* rule 296 can match eol */ YY_RULE_SETUP -#line 518 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 294: +case 297: YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 523 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4751,34 +4786,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 295: +case 298: YY_RULE_SETUP -#line 532 "./util/configlexer.lex" +#line 535 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 533 "./util/configlexer.lex" +#line 536 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 296: +case 299: YY_RULE_SETUP -#line 538 "./util/configlexer.lex" +#line 541 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 297: -/* rule 297 can match eol */ +case 300: +/* rule 300 can match eol */ YY_RULE_SETUP -#line 539 "./util/configlexer.lex" +#line 542 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 298: +case 301: YY_RULE_SETUP -#line 541 "./util/configlexer.lex" +#line 544 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4791,38 +4826,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 299: +case 302: YY_RULE_SETUP -#line 553 "./util/configlexer.lex" +#line 556 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 555 "./util/configlexer.lex" +#line 558 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 300: -YY_RULE_SETUP -#line 559 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 301: -/* rule 301 can match eol */ -YY_RULE_SETUP -#line 560 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK -case 302: -YY_RULE_SETUP -#line 561 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } - YY_BREAK case 303: YY_RULE_SETUP #line 562 "./util/configlexer.lex" +{ LEXOUT(("ISP ")); /* ignore */ } + YY_BREAK +case 304: +/* rule 304 can match eol */ +YY_RULE_SETUP +#line 563 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 305: +YY_RULE_SETUP +#line 564 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 306: +YY_RULE_SETUP +#line 565 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4830,27 +4865,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 567 "./util/configlexer.lex" +#line 570 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 304: +case 307: YY_RULE_SETUP -#line 571 "./util/configlexer.lex" +#line 574 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 305: -/* rule 305 can match eol */ +case 308: +/* rule 308 can match eol */ YY_RULE_SETUP -#line 572 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 306: +case 309: YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 577 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4860,7 +4895,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 580 "./util/configlexer.lex" +#line 583 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4872,33 +4907,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 307: +case 310: YY_RULE_SETUP -#line 591 "./util/configlexer.lex" +#line 594 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 308: +case 311: YY_RULE_SETUP -#line 595 "./util/configlexer.lex" +#line 598 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 309: +case 312: YY_RULE_SETUP -#line 599 "./util/configlexer.lex" +#line 602 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 310: +case 313: YY_RULE_SETUP -#line 603 "./util/configlexer.lex" +#line 606 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4900 "" +#line 4935 "" case YY_END_OF_BUFFER: { @@ -5193,7 +5228,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3054 ) + if ( yy_current_state >= 3081 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5221,11 +5256,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3054 ) + if ( yy_current_state >= 3081 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3053); + yy_is_jam = (yy_current_state == 3080); return yy_is_jam ? 0 : yy_current_state; } @@ -5864,6 +5899,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 603 "./util/configlexer.lex" +#line 606 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index c445c433b..d20c8f5ed 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -249,6 +249,7 @@ tls-session-ticket-keys{COLON} { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } tls-ciphers{COLON} { YDVAR(1, VAR_TLS_CIPHERS) } tls-ciphersuites{COLON} { YDVAR(1, VAR_TLS_CIPHERSUITES) } https-port{COLON} { YDVAR(1, VAR_HTTPS_PORT) } +tls-use-sni{COLON} { YDVAR(1, VAR_TLS_USE_SNI) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } @@ -260,6 +261,7 @@ so-sndbuf{COLON} { YDVAR(1, VAR_SO_SNDBUF) } so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) } ip-transparent{COLON} { YDVAR(1, VAR_IP_TRANSPARENT) } ip-freebind{COLON} { YDVAR(1, VAR_IP_FREEBIND) } +ip-dscp{COLON} { YDVAR(1, VAR_IP_DSCP) } chroot{COLON} { YDVAR(1, VAR_CHROOT) } username{COLON} { YDVAR(1, VAR_USERNAME) } directory{COLON} { YDVAR(1, VAR_DIRECTORY) } @@ -500,6 +502,7 @@ secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) } redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) } redis-timeout{COLON} { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +redis-expire-records{COLON} { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } ipset{COLON} { YDVAR(0, VAR_IPSET) } name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } diff --git a/util/configparser.c b/util/configparser.c index 830b79915..0069a96e3 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -300,115 +300,118 @@ extern int yydebug; VAR_RESPONSE_IP_DATA = 429, VAR_HARDEN_ALGO_DOWNGRADE = 430, VAR_IP_TRANSPARENT = 431, - VAR_DISABLE_DNSSEC_LAME_CHECK = 432, - VAR_IP_RATELIMIT = 433, - VAR_IP_RATELIMIT_SLABS = 434, - VAR_IP_RATELIMIT_SIZE = 435, - VAR_RATELIMIT = 436, - VAR_RATELIMIT_SLABS = 437, - VAR_RATELIMIT_SIZE = 438, - VAR_RATELIMIT_FOR_DOMAIN = 439, - VAR_RATELIMIT_BELOW_DOMAIN = 440, - VAR_IP_RATELIMIT_FACTOR = 441, - VAR_RATELIMIT_FACTOR = 442, - VAR_SEND_CLIENT_SUBNET = 443, - VAR_CLIENT_SUBNET_ZONE = 444, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, - VAR_CLIENT_SUBNET_OPCODE = 446, - VAR_MAX_CLIENT_SUBNET_IPV4 = 447, - VAR_MAX_CLIENT_SUBNET_IPV6 = 448, - VAR_MIN_CLIENT_SUBNET_IPV4 = 449, - VAR_MIN_CLIENT_SUBNET_IPV6 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, - VAR_CAPS_WHITELIST = 453, - VAR_CACHE_MAX_NEGATIVE_TTL = 454, - VAR_PERMIT_SMALL_HOLDDOWN = 455, - VAR_QNAME_MINIMISATION = 456, - VAR_QNAME_MINIMISATION_STRICT = 457, - VAR_IP_FREEBIND = 458, - VAR_DEFINE_TAG = 459, - VAR_LOCAL_ZONE_TAG = 460, - VAR_ACCESS_CONTROL_TAG = 461, - VAR_LOCAL_ZONE_OVERRIDE = 462, - VAR_ACCESS_CONTROL_TAG_ACTION = 463, - VAR_ACCESS_CONTROL_TAG_DATA = 464, - VAR_VIEW = 465, - VAR_ACCESS_CONTROL_VIEW = 466, - VAR_VIEW_FIRST = 467, - VAR_SERVE_EXPIRED = 468, - VAR_SERVE_EXPIRED_TTL = 469, - VAR_SERVE_EXPIRED_TTL_RESET = 470, - VAR_SERVE_EXPIRED_REPLY_TTL = 471, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 + VAR_IP_DSCP = 432, + VAR_DISABLE_DNSSEC_LAME_CHECK = 433, + VAR_IP_RATELIMIT = 434, + VAR_IP_RATELIMIT_SLABS = 435, + VAR_IP_RATELIMIT_SIZE = 436, + VAR_RATELIMIT = 437, + VAR_RATELIMIT_SLABS = 438, + VAR_RATELIMIT_SIZE = 439, + VAR_RATELIMIT_FOR_DOMAIN = 440, + VAR_RATELIMIT_BELOW_DOMAIN = 441, + VAR_IP_RATELIMIT_FACTOR = 442, + VAR_RATELIMIT_FACTOR = 443, + VAR_SEND_CLIENT_SUBNET = 444, + VAR_CLIENT_SUBNET_ZONE = 445, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 446, + VAR_CLIENT_SUBNET_OPCODE = 447, + VAR_MAX_CLIENT_SUBNET_IPV4 = 448, + VAR_MAX_CLIENT_SUBNET_IPV6 = 449, + VAR_MIN_CLIENT_SUBNET_IPV4 = 450, + VAR_MIN_CLIENT_SUBNET_IPV6 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 452, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 453, + VAR_CAPS_WHITELIST = 454, + VAR_CACHE_MAX_NEGATIVE_TTL = 455, + VAR_PERMIT_SMALL_HOLDDOWN = 456, + VAR_QNAME_MINIMISATION = 457, + VAR_QNAME_MINIMISATION_STRICT = 458, + VAR_IP_FREEBIND = 459, + VAR_DEFINE_TAG = 460, + VAR_LOCAL_ZONE_TAG = 461, + VAR_ACCESS_CONTROL_TAG = 462, + VAR_LOCAL_ZONE_OVERRIDE = 463, + VAR_ACCESS_CONTROL_TAG_ACTION = 464, + VAR_ACCESS_CONTROL_TAG_DATA = 465, + VAR_VIEW = 466, + VAR_ACCESS_CONTROL_VIEW = 467, + VAR_VIEW_FIRST = 468, + VAR_SERVE_EXPIRED = 469, + VAR_SERVE_EXPIRED_TTL = 470, + VAR_SERVE_EXPIRED_TTL_RESET = 471, + VAR_SERVE_EXPIRED_REPLY_TTL = 472, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 473, + VAR_FAKE_DSA = 474, + VAR_FAKE_SHA1 = 475, + VAR_LOG_IDENTITY = 476, + VAR_HIDE_TRUSTANCHOR = 477, + VAR_TRUST_ANCHOR_SIGNALING = 478, + VAR_AGGRESSIVE_NSEC = 479, + VAR_USE_SYSTEMD = 480, + VAR_SHM_ENABLE = 481, + VAR_SHM_KEY = 482, + VAR_ROOT_KEY_SENTINEL = 483, + VAR_DNSCRYPT = 484, + VAR_DNSCRYPT_ENABLE = 485, + VAR_DNSCRYPT_PORT = 486, + VAR_DNSCRYPT_PROVIDER = 487, + VAR_DNSCRYPT_SECRET_KEY = 488, + VAR_DNSCRYPT_PROVIDER_CERT = 489, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 491, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 492, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 493, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 494, + VAR_IPSECMOD_ENABLED = 495, + VAR_IPSECMOD_HOOK = 496, + VAR_IPSECMOD_IGNORE_BOGUS = 497, + VAR_IPSECMOD_MAX_TTL = 498, + VAR_IPSECMOD_WHITELIST = 499, + VAR_IPSECMOD_STRICT = 500, + VAR_CACHEDB = 501, + VAR_CACHEDB_BACKEND = 502, + VAR_CACHEDB_SECRETSEED = 503, + VAR_CACHEDB_REDISHOST = 504, + VAR_CACHEDB_REDISPORT = 505, + VAR_CACHEDB_REDISTIMEOUT = 506, + VAR_CACHEDB_REDISEXPIRERECORDS = 507, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 508, + VAR_FOR_UPSTREAM = 509, + VAR_AUTH_ZONE = 510, + VAR_ZONEFILE = 511, + VAR_MASTER = 512, + VAR_URL = 513, + VAR_FOR_DOWNSTREAM = 514, + VAR_FALLBACK_ENABLED = 515, + VAR_TLS_ADDITIONAL_PORT = 516, + VAR_LOW_RTT = 517, + VAR_LOW_RTT_PERMIL = 518, + VAR_FAST_SERVER_PERMIL = 519, + VAR_FAST_SERVER_NUM = 520, + VAR_ALLOW_NOTIFY = 521, + VAR_TLS_WIN_CERT = 522, + VAR_TCP_CONNECTION_LIMIT = 523, + VAR_FORWARD_NO_CACHE = 524, + VAR_STUB_NO_CACHE = 525, + VAR_LOG_SERVFAIL = 526, + VAR_DENY_ANY = 527, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 528, + VAR_LOG_TAG_QUERYREPLY = 529, + VAR_STREAM_WAIT_SIZE = 530, + VAR_TLS_CIPHERS = 531, + VAR_TLS_CIPHERSUITES = 532, + VAR_TLS_USE_SNI = 533, + VAR_IPSET = 534, + VAR_IPSET_NAME_V4 = 535, + VAR_IPSET_NAME_V6 = 536, + VAR_TLS_SESSION_TICKET_KEYS = 537, + VAR_RPZ = 538, + VAR_TAGS = 539, + VAR_RPZ_ACTION_OVERRIDE = 540, + VAR_RPZ_CNAME_OVERRIDE = 541, + VAR_RPZ_LOG = 542, + VAR_RPZ_LOG_NAME = 543 }; #endif /* Tokens. */ @@ -586,115 +589,118 @@ extern int yydebug; #define VAR_RESPONSE_IP_DATA 429 #define VAR_HARDEN_ALGO_DOWNGRADE 430 #define VAR_IP_TRANSPARENT 431 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 -#define VAR_IP_RATELIMIT 433 -#define VAR_IP_RATELIMIT_SLABS 434 -#define VAR_IP_RATELIMIT_SIZE 435 -#define VAR_RATELIMIT 436 -#define VAR_RATELIMIT_SLABS 437 -#define VAR_RATELIMIT_SIZE 438 -#define VAR_RATELIMIT_FOR_DOMAIN 439 -#define VAR_RATELIMIT_BELOW_DOMAIN 440 -#define VAR_IP_RATELIMIT_FACTOR 441 -#define VAR_RATELIMIT_FACTOR 442 -#define VAR_SEND_CLIENT_SUBNET 443 -#define VAR_CLIENT_SUBNET_ZONE 444 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 -#define VAR_CLIENT_SUBNET_OPCODE 446 -#define VAR_MAX_CLIENT_SUBNET_IPV4 447 -#define VAR_MAX_CLIENT_SUBNET_IPV6 448 -#define VAR_MIN_CLIENT_SUBNET_IPV4 449 -#define VAR_MIN_CLIENT_SUBNET_IPV6 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 -#define VAR_CAPS_WHITELIST 453 -#define VAR_CACHE_MAX_NEGATIVE_TTL 454 -#define VAR_PERMIT_SMALL_HOLDDOWN 455 -#define VAR_QNAME_MINIMISATION 456 -#define VAR_QNAME_MINIMISATION_STRICT 457 -#define VAR_IP_FREEBIND 458 -#define VAR_DEFINE_TAG 459 -#define VAR_LOCAL_ZONE_TAG 460 -#define VAR_ACCESS_CONTROL_TAG 461 -#define VAR_LOCAL_ZONE_OVERRIDE 462 -#define VAR_ACCESS_CONTROL_TAG_ACTION 463 -#define VAR_ACCESS_CONTROL_TAG_DATA 464 -#define VAR_VIEW 465 -#define VAR_ACCESS_CONTROL_VIEW 466 -#define VAR_VIEW_FIRST 467 -#define VAR_SERVE_EXPIRED 468 -#define VAR_SERVE_EXPIRED_TTL 469 -#define VAR_SERVE_EXPIRED_TTL_RESET 470 -#define VAR_SERVE_EXPIRED_REPLY_TTL 471 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 -#define VAR_FAKE_DSA 473 -#define VAR_FAKE_SHA1 474 -#define VAR_LOG_IDENTITY 475 -#define VAR_HIDE_TRUSTANCHOR 476 -#define VAR_TRUST_ANCHOR_SIGNALING 477 -#define VAR_AGGRESSIVE_NSEC 478 -#define VAR_USE_SYSTEMD 479 -#define VAR_SHM_ENABLE 480 -#define VAR_SHM_KEY 481 -#define VAR_ROOT_KEY_SENTINEL 482 -#define VAR_DNSCRYPT 483 -#define VAR_DNSCRYPT_ENABLE 484 -#define VAR_DNSCRYPT_PORT 485 -#define VAR_DNSCRYPT_PROVIDER 486 -#define VAR_DNSCRYPT_SECRET_KEY 487 -#define VAR_DNSCRYPT_PROVIDER_CERT 488 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 -#define VAR_IPSECMOD_ENABLED 494 -#define VAR_IPSECMOD_HOOK 495 -#define VAR_IPSECMOD_IGNORE_BOGUS 496 -#define VAR_IPSECMOD_MAX_TTL 497 -#define VAR_IPSECMOD_WHITELIST 498 -#define VAR_IPSECMOD_STRICT 499 -#define VAR_CACHEDB 500 -#define VAR_CACHEDB_BACKEND 501 -#define VAR_CACHEDB_SECRETSEED 502 -#define VAR_CACHEDB_REDISHOST 503 -#define VAR_CACHEDB_REDISPORT 504 -#define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 -#define VAR_FOR_UPSTREAM 507 -#define VAR_AUTH_ZONE 508 -#define VAR_ZONEFILE 509 -#define VAR_MASTER 510 -#define VAR_URL 511 -#define VAR_FOR_DOWNSTREAM 512 -#define VAR_FALLBACK_ENABLED 513 -#define VAR_TLS_ADDITIONAL_PORT 514 -#define VAR_LOW_RTT 515 -#define VAR_LOW_RTT_PERMIL 516 -#define VAR_FAST_SERVER_PERMIL 517 -#define VAR_FAST_SERVER_NUM 518 -#define VAR_ALLOW_NOTIFY 519 -#define VAR_TLS_WIN_CERT 520 -#define VAR_TCP_CONNECTION_LIMIT 521 -#define VAR_FORWARD_NO_CACHE 522 -#define VAR_STUB_NO_CACHE 523 -#define VAR_LOG_SERVFAIL 524 -#define VAR_DENY_ANY 525 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 -#define VAR_LOG_TAG_QUERYREPLY 527 -#define VAR_STREAM_WAIT_SIZE 528 -#define VAR_TLS_CIPHERS 529 -#define VAR_TLS_CIPHERSUITES 530 -#define VAR_IPSET 531 -#define VAR_IPSET_NAME_V4 532 -#define VAR_IPSET_NAME_V6 533 -#define VAR_TLS_SESSION_TICKET_KEYS 534 -#define VAR_RPZ 535 -#define VAR_TAGS 536 -#define VAR_RPZ_ACTION_OVERRIDE 537 -#define VAR_RPZ_CNAME_OVERRIDE 538 -#define VAR_RPZ_LOG 539 -#define VAR_RPZ_LOG_NAME 540 +#define VAR_IP_DSCP 432 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 433 +#define VAR_IP_RATELIMIT 434 +#define VAR_IP_RATELIMIT_SLABS 435 +#define VAR_IP_RATELIMIT_SIZE 436 +#define VAR_RATELIMIT 437 +#define VAR_RATELIMIT_SLABS 438 +#define VAR_RATELIMIT_SIZE 439 +#define VAR_RATELIMIT_FOR_DOMAIN 440 +#define VAR_RATELIMIT_BELOW_DOMAIN 441 +#define VAR_IP_RATELIMIT_FACTOR 442 +#define VAR_RATELIMIT_FACTOR 443 +#define VAR_SEND_CLIENT_SUBNET 444 +#define VAR_CLIENT_SUBNET_ZONE 445 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 446 +#define VAR_CLIENT_SUBNET_OPCODE 447 +#define VAR_MAX_CLIENT_SUBNET_IPV4 448 +#define VAR_MAX_CLIENT_SUBNET_IPV6 449 +#define VAR_MIN_CLIENT_SUBNET_IPV4 450 +#define VAR_MIN_CLIENT_SUBNET_IPV6 451 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 452 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 453 +#define VAR_CAPS_WHITELIST 454 +#define VAR_CACHE_MAX_NEGATIVE_TTL 455 +#define VAR_PERMIT_SMALL_HOLDDOWN 456 +#define VAR_QNAME_MINIMISATION 457 +#define VAR_QNAME_MINIMISATION_STRICT 458 +#define VAR_IP_FREEBIND 459 +#define VAR_DEFINE_TAG 460 +#define VAR_LOCAL_ZONE_TAG 461 +#define VAR_ACCESS_CONTROL_TAG 462 +#define VAR_LOCAL_ZONE_OVERRIDE 463 +#define VAR_ACCESS_CONTROL_TAG_ACTION 464 +#define VAR_ACCESS_CONTROL_TAG_DATA 465 +#define VAR_VIEW 466 +#define VAR_ACCESS_CONTROL_VIEW 467 +#define VAR_VIEW_FIRST 468 +#define VAR_SERVE_EXPIRED 469 +#define VAR_SERVE_EXPIRED_TTL 470 +#define VAR_SERVE_EXPIRED_TTL_RESET 471 +#define VAR_SERVE_EXPIRED_REPLY_TTL 472 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 473 +#define VAR_FAKE_DSA 474 +#define VAR_FAKE_SHA1 475 +#define VAR_LOG_IDENTITY 476 +#define VAR_HIDE_TRUSTANCHOR 477 +#define VAR_TRUST_ANCHOR_SIGNALING 478 +#define VAR_AGGRESSIVE_NSEC 479 +#define VAR_USE_SYSTEMD 480 +#define VAR_SHM_ENABLE 481 +#define VAR_SHM_KEY 482 +#define VAR_ROOT_KEY_SENTINEL 483 +#define VAR_DNSCRYPT 484 +#define VAR_DNSCRYPT_ENABLE 485 +#define VAR_DNSCRYPT_PORT 486 +#define VAR_DNSCRYPT_PROVIDER 487 +#define VAR_DNSCRYPT_SECRET_KEY 488 +#define VAR_DNSCRYPT_PROVIDER_CERT 489 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 491 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 493 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 494 +#define VAR_IPSECMOD_ENABLED 495 +#define VAR_IPSECMOD_HOOK 496 +#define VAR_IPSECMOD_IGNORE_BOGUS 497 +#define VAR_IPSECMOD_MAX_TTL 498 +#define VAR_IPSECMOD_WHITELIST 499 +#define VAR_IPSECMOD_STRICT 500 +#define VAR_CACHEDB 501 +#define VAR_CACHEDB_BACKEND 502 +#define VAR_CACHEDB_SECRETSEED 503 +#define VAR_CACHEDB_REDISHOST 504 +#define VAR_CACHEDB_REDISPORT 505 +#define VAR_CACHEDB_REDISTIMEOUT 506 +#define VAR_CACHEDB_REDISEXPIRERECORDS 507 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 508 +#define VAR_FOR_UPSTREAM 509 +#define VAR_AUTH_ZONE 510 +#define VAR_ZONEFILE 511 +#define VAR_MASTER 512 +#define VAR_URL 513 +#define VAR_FOR_DOWNSTREAM 514 +#define VAR_FALLBACK_ENABLED 515 +#define VAR_TLS_ADDITIONAL_PORT 516 +#define VAR_LOW_RTT 517 +#define VAR_LOW_RTT_PERMIL 518 +#define VAR_FAST_SERVER_PERMIL 519 +#define VAR_FAST_SERVER_NUM 520 +#define VAR_ALLOW_NOTIFY 521 +#define VAR_TLS_WIN_CERT 522 +#define VAR_TCP_CONNECTION_LIMIT 523 +#define VAR_FORWARD_NO_CACHE 524 +#define VAR_STUB_NO_CACHE 525 +#define VAR_LOG_SERVFAIL 526 +#define VAR_DENY_ANY 527 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 528 +#define VAR_LOG_TAG_QUERYREPLY 529 +#define VAR_STREAM_WAIT_SIZE 530 +#define VAR_TLS_CIPHERS 531 +#define VAR_TLS_CIPHERSUITES 532 +#define VAR_TLS_USE_SNI 533 +#define VAR_IPSET 534 +#define VAR_IPSET_NAME_V4 535 +#define VAR_IPSET_NAME_V6 536 +#define VAR_TLS_SESSION_TICKET_KEYS 537 +#define VAR_RPZ 538 +#define VAR_TAGS 539 +#define VAR_RPZ_ACTION_OVERRIDE 540 +#define VAR_RPZ_CNAME_OVERRIDE 541 +#define VAR_RPZ_LOG 542 +#define VAR_RPZ_LOG_NAME 543 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -705,7 +711,7 @@ union YYSTYPE char* str; -#line 709 "util/configparser.c" /* yacc.c:355 */ +#line 715 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -722,7 +728,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 726 "util/configparser.c" /* yacc.c:358 */ +#line 732 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -964,21 +970,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 606 +#define YYLAST 611 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 286 +#define YYNTOKENS 289 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 309 +#define YYNNTS 312 /* YYNRULES -- Number of rules. */ -#define YYNRULES 596 +#define YYNRULES 602 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 887 +#define YYNSTATES 896 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 540 +#define YYMAXUTOK 543 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -1041,73 +1047,74 @@ static const yytype_uint16 yytranslate[] = 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285 + 285, 286, 287, 288 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 178, 178, 178, 179, 179, 180, 180, 181, 181, - 181, 182, 182, 183, 183, 184, 188, 193, 194, 195, - 195, 195, 196, 196, 197, 197, 197, 198, 198, 199, - 199, 199, 200, 200, 201, 201, 201, 202, 202, 202, - 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, - 208, 208, 209, 209, 210, 210, 211, 211, 211, 212, - 212, 212, 213, 213, 213, 214, 214, 215, 215, 216, - 216, 217, 217, 218, 218, 218, 219, 219, 220, 220, - 221, 221, 221, 222, 222, 223, 223, 224, 224, 225, - 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, - 230, 230, 231, 231, 231, 232, 232, 233, 233, 233, - 234, 234, 234, 235, 235, 235, 236, 236, 236, 236, - 237, 238, 238, 238, 239, 240, 240, 240, 241, 241, - 242, 242, 243, 243, 243, 244, 244, 245, 245, 245, - 246, 246, 247, 247, 248, 249, 249, 250, 250, 251, - 251, 252, 253, 253, 254, 254, 255, 255, 256, 256, - 257, 257, 258, 258, 258, 259, 259, 260, 260, 261, - 261, 262, 262, 263, 263, 264, 264, 265, 265, 265, - 266, 266, 266, 267, 267, 267, 268, 268, 269, 270, - 270, 271, 271, 272, 272, 273, 273, 274, 274, 274, - 275, 275, 275, 276, 276, 276, 277, 277, 278, 278, - 279, 279, 281, 293, 294, 295, 295, 295, 295, 295, - 296, 296, 298, 310, 311, 312, 312, 312, 312, 313, - 313, 315, 329, 330, 331, 331, 331, 331, 332, 332, - 332, 334, 351, 352, 353, 353, 353, 353, 354, 354, - 354, 355, 358, 377, 394, 402, 412, 420, 437, 438, - 439, 439, 439, 439, 439, 440, 440, 440, 441, 441, - 443, 452, 461, 472, 481, 490, 499, 510, 519, 531, - 545, 560, 571, 588, 605, 622, 639, 654, 669, 682, - 697, 706, 715, 724, 733, 742, 751, 760, 769, 778, - 787, 796, 805, 814, 823, 836, 845, 858, 867, 876, - 885, 892, 899, 908, 915, 924, 932, 939, 946, 954, - 963, 972, 981, 995, 1004, 1013, 1022, 1031, 1040, 1049, - 1056, 1063, 1089, 1097, 1104, 1111, 1118, 1125, 1133, 1141, - 1149, 1156, 1167, 1178, 1185, 1194, 1203, 1212, 1219, 1226, - 1234, 1242, 1252, 1262, 1272, 1280, 1293, 1304, 1312, 1325, - 1334, 1343, 1352, 1362, 1372, 1380, 1393, 1402, 1410, 1419, - 1427, 1440, 1449, 1456, 1466, 1476, 1486, 1496, 1506, 1516, - 1526, 1536, 1543, 1550, 1557, 1566, 1575, 1584, 1593, 1600, - 1610, 1630, 1637, 1655, 1668, 1681, 1690, 1699, 1708, 1717, - 1727, 1737, 1748, 1757, 1766, 1775, 1784, 1793, 1802, 1815, - 1828, 1837, 1844, 1853, 1862, 1871, 1880, 1888, 1901, 1909, - 1950, 1957, 1972, 1982, 1992, 1999, 2006, 2013, 2022, 2030, - 2044, 2065, 2086, 2098, 2110, 2122, 2131, 2152, 2162, 2171, - 2179, 2187, 2200, 2213, 2228, 2243, 2252, 2261, 2267, 2276, - 2285, 2295, 2305, 2318, 2331, 2343, 2357, 2369, 2383, 2393, - 2400, 2407, 2416, 2425, 2435, 2445, 2455, 2462, 2469, 2478, - 2487, 2497, 2507, 2514, 2521, 2528, 2536, 2546, 2556, 2566, - 2576, 2615, 2625, 2633, 2641, 2656, 2665, 2670, 2671, 2672, - 2672, 2672, 2673, 2673, 2673, 2674, 2674, 2676, 2686, 2695, - 2702, 2709, 2716, 2723, 2730, 2737, 2742, 2743, 2744, 2744, - 2745, 2745, 2745, 2746, 2747, 2747, 2748, 2748, 2749, 2749, - 2750, 2751, 2752, 2753, 2754, 2755, 2757, 2766, 2773, 2780, - 2789, 2796, 2803, 2810, 2817, 2826, 2835, 2842, 2849, 2859, - 2869, 2879, 2889, 2899, 2909, 2914, 2915, 2916, 2918, 2924, - 2934, 2941, 2950, 2958, 2963, 2964, 2966, 2966, 2966, 2967, - 2967, 2968, 2969, 2970, 2971, 2972, 2974, 2984, 2993, 3000, - 3009, 3016, 3025, 3033, 3046, 3054, 3067, 3072, 3073, 3074, - 3074, 3075, 3075, 3075, 3077, 3089, 3101, 3113, 3128, 3141, - 3152, 3157, 3158, 3159, 3159, 3161, 3176 + 0, 180, 180, 180, 181, 181, 182, 182, 183, 183, + 183, 184, 184, 185, 185, 186, 190, 195, 196, 197, + 197, 197, 198, 198, 199, 199, 199, 200, 200, 201, + 201, 201, 202, 202, 203, 203, 203, 204, 204, 204, + 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, + 210, 210, 211, 211, 212, 212, 213, 213, 213, 214, + 214, 214, 215, 215, 215, 216, 216, 217, 217, 218, + 218, 219, 219, 220, 220, 220, 221, 221, 222, 222, + 223, 223, 223, 224, 224, 225, 225, 226, 226, 227, + 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, + 232, 232, 233, 233, 233, 234, 234, 235, 235, 235, + 236, 236, 236, 237, 237, 237, 238, 238, 238, 238, + 239, 240, 240, 240, 241, 242, 242, 242, 243, 243, + 244, 244, 245, 245, 245, 246, 246, 247, 247, 247, + 248, 249, 249, 250, 250, 251, 252, 252, 253, 253, + 254, 254, 255, 256, 256, 257, 257, 258, 258, 259, + 259, 260, 260, 261, 261, 261, 262, 262, 263, 263, + 264, 264, 265, 265, 266, 266, 267, 267, 268, 268, + 268, 269, 269, 269, 270, 270, 270, 271, 271, 272, + 273, 273, 274, 274, 275, 275, 276, 276, 277, 277, + 277, 278, 278, 278, 279, 279, 279, 280, 280, 281, + 281, 282, 282, 283, 285, 297, 298, 299, 299, 299, + 299, 299, 300, 300, 302, 314, 315, 316, 316, 316, + 316, 317, 317, 319, 333, 334, 335, 335, 335, 335, + 336, 336, 336, 338, 355, 356, 357, 357, 357, 357, + 358, 358, 358, 359, 362, 381, 398, 406, 416, 424, + 441, 442, 443, 443, 443, 443, 443, 444, 444, 444, + 445, 445, 447, 456, 465, 476, 485, 494, 503, 514, + 523, 535, 549, 564, 575, 592, 609, 626, 643, 658, + 673, 686, 701, 710, 719, 728, 737, 746, 755, 764, + 773, 782, 791, 800, 809, 818, 827, 840, 849, 862, + 871, 880, 889, 896, 903, 912, 919, 928, 936, 943, + 950, 958, 965, 974, 983, 992, 1006, 1015, 1024, 1033, + 1042, 1051, 1060, 1067, 1074, 1100, 1108, 1115, 1122, 1129, + 1136, 1144, 1152, 1160, 1167, 1178, 1189, 1196, 1205, 1214, + 1223, 1230, 1237, 1245, 1253, 1263, 1273, 1283, 1297, 1305, + 1318, 1329, 1337, 1350, 1359, 1368, 1377, 1387, 1397, 1405, + 1418, 1427, 1435, 1444, 1452, 1465, 1474, 1481, 1491, 1501, + 1511, 1521, 1531, 1541, 1551, 1561, 1568, 1575, 1582, 1591, + 1600, 1609, 1618, 1625, 1635, 1655, 1662, 1680, 1693, 1706, + 1715, 1724, 1733, 1742, 1752, 1762, 1773, 1782, 1791, 1800, + 1809, 1818, 1827, 1840, 1853, 1862, 1869, 1878, 1887, 1896, + 1905, 1913, 1926, 1934, 1975, 1982, 1997, 2007, 2017, 2024, + 2031, 2038, 2047, 2055, 2069, 2090, 2111, 2123, 2135, 2147, + 2156, 2177, 2187, 2196, 2204, 2212, 2225, 2238, 2253, 2268, + 2277, 2286, 2292, 2301, 2310, 2320, 2330, 2343, 2356, 2368, + 2382, 2394, 2408, 2418, 2425, 2432, 2441, 2450, 2460, 2470, + 2480, 2487, 2494, 2503, 2512, 2522, 2532, 2539, 2546, 2553, + 2561, 2571, 2581, 2591, 2601, 2640, 2650, 2658, 2666, 2681, + 2690, 2695, 2696, 2697, 2697, 2697, 2698, 2698, 2698, 2699, + 2699, 2701, 2711, 2720, 2727, 2734, 2741, 2748, 2755, 2762, + 2767, 2768, 2769, 2769, 2770, 2770, 2770, 2771, 2772, 2772, + 2773, 2773, 2774, 2774, 2775, 2776, 2777, 2778, 2779, 2780, + 2782, 2791, 2798, 2805, 2814, 2821, 2828, 2835, 2842, 2851, + 2860, 2867, 2874, 2884, 2894, 2904, 2914, 2924, 2934, 2939, + 2940, 2941, 2943, 2949, 2959, 2966, 2975, 2983, 2988, 2989, + 2991, 2991, 2991, 2992, 2992, 2993, 2994, 2995, 2996, 2997, + 2999, 3009, 3018, 3025, 3034, 3041, 3050, 3058, 3071, 3079, + 3092, 3097, 3098, 3099, 3099, 3100, 3100, 3100, 3101, 3103, + 3115, 3127, 3139, 3154, 3167, 3180, 3191, 3196, 3197, 3198, + 3198, 3200, 3215 }; #endif @@ -1177,7 +1184,7 @@ static const char *const yytname[] = "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG", "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE", - "VAR_IP_TRANSPARENT", "VAR_DISABLE_DNSSEC_LAME_CHECK", + "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", @@ -1209,26 +1216,26 @@ static const char *const yytname[] = "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST", "VAR_CACHEDB_REDISPORT", - "VAR_CACHEDB_REDISTIMEOUT", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", - "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", - "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", - "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", - "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", - "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", - "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", - "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", - "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", - "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", - "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", - "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", - "VAR_RPZ_LOG_NAME", "$accept", "toplevelvars", "toplevelvar", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", - "server_verbosity", "server_statistics_interval", + "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS", + "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM", + "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL", + "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT", + "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL", + "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT", + "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE", + "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT", + "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", + "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET", + "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", + "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", + "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "$accept", + "toplevelvars", "toplevelvar", "serverstart", "contents_server", + "content_server", "stubstart", "contents_stub", "content_stub", + "forwardstart", "contents_forward", "content_forward", "viewstart", + "contents_view", "content_view", "authstart", "contents_auth", + "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", + "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz", + "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -1249,19 +1256,20 @@ static const char *const yytname[] = "server_tls_cert_bundle", "server_tls_win_cert", "server_tls_additional_port", "server_tls_ciphers", "server_tls_ciphersuites", "server_tls_session_ticket_keys", - "server_https_port", "server_use_systemd", "server_do_daemonize", - "server_use_syslog", "server_log_time_ascii", "server_log_queries", - "server_log_replies", "server_log_tag_queryreply", "server_log_servfail", - "server_log_local_actions", "server_chroot", "server_username", - "server_directory", "server_logfile", "server_pidfile", - "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor", - "server_auto_trust_anchor_file", "server_trust_anchor_file", - "server_trusted_keys_file", "server_trust_anchor", - "server_trust_anchor_signaling", "server_root_key_sentinel", - "server_domain_insecure", "server_hide_identity", "server_hide_version", - "server_hide_trustanchor", "server_identity", "server_version", - "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", - "server_ip_transparent", "server_ip_freebind", "server_stream_wait_size", + "server_https_port", "server_tls_use_sni", "server_use_systemd", + "server_do_daemonize", "server_use_syslog", "server_log_time_ascii", + "server_log_queries", "server_log_replies", "server_log_tag_queryreply", + "server_log_servfail", "server_log_local_actions", "server_chroot", + "server_username", "server_directory", "server_logfile", + "server_pidfile", "server_root_hints", "server_dlv_anchor_file", + "server_dlv_anchor", "server_auto_trust_anchor_file", + "server_trust_anchor_file", "server_trusted_keys_file", + "server_trust_anchor", "server_trust_anchor_signaling", + "server_root_key_sentinel", "server_domain_insecure", + "server_hide_identity", "server_hide_version", "server_hide_trustanchor", + "server_identity", "server_version", "server_so_rcvbuf", + "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent", + "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size", "server_edns_buffer_size", "server_msg_buffer_size", "server_msg_cache_size", "server_msg_cache_slabs", "server_num_queries_per_thread", "server_jostle_timeout", @@ -1343,9 +1351,9 @@ static const char *const yytname[] = "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", "cachedbstart", "contents_cachedb", "content_cachedb", "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", - "redis_server_port", "redis_timeout", "server_tcp_connection_limit", - "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", - "ipset_name_v6", YY_NULLPTR + "redis_server_port", "redis_timeout", "redis_expire_records", + "server_tcp_connection_limit", "ipsetstart", "contents_ipset", + "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; #endif @@ -1382,14 +1390,14 @@ static const yytype_uint16 yytoknum[] = 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540 + 535, 536, 537, 538, 539, 540, 541, 542, 543 }; # endif -#define YYPACT_NINF -271 +#define YYPACT_NINF -274 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-271))) + (!!((Yystate) == (-274))) #define YYTABLE_NINF -1 @@ -1400,95 +1408,96 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -271, 0, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, 269, -42, - -38, -41, -21, -43, -44, -88, -103, -205, -230, -270, - 2, 3, 11, 12, 24, 25, 26, 27, 28, 31, - 32, 33, 34, 36, 37, 38, 39, 40, 50, 51, - 52, 53, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 87, 88, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 204, 205, - 206, 207, 208, 209, 210, 212, 213, 214, 215, 217, - 220, 222, 234, 236, 237, 238, 239, 240, 241, 242, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 267, 268, 303, 304, 305, 306, 310, 311, - 312, 354, 355, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 356, 357, 358, - 359, 360, 361, 362, -271, -271, -271, -271, -271, -271, - -271, -271, 366, 370, 371, 396, 397, 398, -271, -271, - -271, -271, -271, -271, -271, 401, 412, 413, 414, 415, - 416, 417, -271, -271, -271, -271, -271, -271, -271, -271, - 418, 419, 420, 421, 422, 423, 424, 425, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 426, 427, 428, - 429, 430, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, 469, 471, 487, 488, 489, 490, 491, - 492, -271, -271, -271, -271, -271, -271, -271, -271, -271, - 493, 494, 495, 496, 497, 504, 505, 506, 507, 508, - 509, 511, 512, 513, 514, 515, 516, 517, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 520, -271, -271, - 523, 526, 527, 535, 536, 537, 539, 540, 541, 542, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, 543, 544, 545, 546, 547, -271, -271, -271, -271, - -271, -271, 548, 549, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 550, 551, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, 552, 553, 554, -271, -271, - -271, -271, -271, -271, -271, -271, -271, 555, 556, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, 557, 558, - 559, 560, 561, 562, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, 563, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, 564, -271, -271, 565, 566, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, 567, 568, 569, -271, - -271, -271, -271, -271, -271, -271, -271 + -274, 0, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, 272, -42, + -38, -41, -7, -43, -30, -138, -103, -178, -173, -273, + 2, 3, 24, 25, 26, 28, 31, 32, 33, 34, + 36, 37, 38, 39, 40, 52, 53, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 87, 88, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 202, 206, + 207, 208, 209, 210, 211, 212, 214, 215, 216, 217, + 220, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 238, 244, 246, 247, 248, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 270, 271, 306, 307, 308, 309, + 313, 314, 315, 357, 358, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, 359, 360, 361, 362, 363, 364, 365, -274, -274, + -274, -274, -274, -274, -274, -274, 369, 373, 374, 399, + 400, 401, -274, -274, -274, -274, -274, -274, -274, 404, + 415, 416, 417, 418, 419, 420, -274, -274, -274, -274, + -274, -274, -274, -274, 421, 422, 423, 424, 425, 426, + 427, 428, -274, -274, -274, -274, -274, -274, -274, -274, + -274, 429, 430, 431, 432, 433, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, 473, 475, 491, + 492, 493, 494, 495, 496, -274, -274, -274, -274, -274, + -274, -274, -274, -274, 497, 498, 499, 500, 501, 508, + 509, 510, 511, 512, 513, 514, 516, 517, 518, 519, + 520, 521, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, 522, -274, -274, 525, 528, 531, 532, 541, 542, + 543, 545, 546, 547, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, 548, 549, 550, 551, 552, + 553, -274, -274, -274, -274, -274, -274, -274, 554, 555, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, 556, 557, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, 558, 559, 560, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, 561, 562, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, 563, 564, 565, 566, 567, + 568, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, 569, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, 570, -274, -274, 571, 572, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, 573, 574, 575, -274, -274, + -274, -274, -274, -274, -274, -274 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1496,9 +1505,9 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 212, 222, 486, 544, 505, 231, - 553, 576, 241, 590, 257, 3, 18, 214, 224, 233, - 243, 259, 488, 507, 546, 555, 578, 592, 4, 5, + 2, 0, 1, 16, 214, 224, 490, 548, 509, 233, + 557, 580, 243, 596, 259, 3, 18, 216, 226, 235, + 245, 261, 492, 511, 550, 559, 582, 598, 4, 5, 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1519,144 +1528,147 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 17, 19, 20, 83, 86, 95, 183, - 184, 21, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 34, 74, 22, 87, 88, 45, 67, 82, - 23, 24, 27, 28, 25, 26, 29, 30, 31, 32, - 33, 118, 195, 119, 121, 122, 123, 197, 202, 198, - 209, 210, 211, 124, 179, 84, 73, 99, 116, 117, - 207, 204, 120, 35, 36, 37, 38, 39, 75, 89, - 90, 105, 61, 71, 62, 187, 188, 100, 55, 56, - 186, 57, 58, 109, 113, 128, 137, 162, 208, 110, - 68, 40, 41, 42, 97, 129, 130, 131, 43, 44, - 46, 47, 49, 50, 48, 135, 51, 52, 53, 59, - 78, 114, 92, 136, 85, 158, 93, 94, 111, 112, - 205, 98, 54, 76, 79, 60, 63, 101, 102, 77, - 159, 103, 64, 65, 66, 196, 115, 172, 173, 174, - 175, 176, 177, 185, 104, 72, 106, 107, 108, 160, - 69, 70, 91, 80, 81, 96, 125, 126, 206, 127, - 132, 133, 134, 163, 164, 166, 168, 169, 167, 170, - 180, 138, 139, 142, 143, 140, 141, 144, 145, 147, - 146, 199, 201, 200, 161, 171, 189, 191, 190, 192, - 193, 194, 165, 178, 181, 182, 203, 0, 0, 0, - 0, 0, 0, 0, 213, 215, 216, 217, 219, 220, - 221, 218, 0, 0, 0, 0, 0, 0, 223, 225, - 226, 227, 228, 229, 230, 0, 0, 0, 0, 0, - 0, 0, 232, 234, 235, 238, 239, 236, 240, 237, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 244, - 245, 246, 247, 251, 248, 249, 250, 0, 0, 0, - 0, 0, 262, 266, 267, 268, 269, 258, 260, 261, - 263, 264, 265, 0, 0, 0, 0, 0, 0, 0, - 0, 487, 489, 491, 490, 496, 492, 493, 494, 495, + 0, 0, 0, 0, 0, 17, 19, 20, 83, 86, + 95, 184, 185, 21, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 34, 74, 22, 87, 88, 45, + 67, 82, 23, 24, 27, 28, 25, 26, 29, 30, + 31, 32, 33, 118, 196, 119, 121, 122, 123, 198, + 203, 199, 210, 211, 212, 124, 213, 180, 84, 73, + 99, 116, 117, 208, 205, 120, 35, 36, 37, 38, + 39, 75, 89, 90, 105, 61, 71, 62, 188, 189, + 100, 55, 56, 187, 57, 58, 109, 113, 128, 137, + 163, 140, 209, 110, 68, 40, 41, 42, 97, 129, + 130, 131, 43, 44, 46, 47, 49, 50, 48, 135, + 51, 52, 53, 59, 78, 114, 92, 136, 85, 159, + 93, 94, 111, 112, 206, 98, 54, 76, 79, 60, + 63, 101, 102, 77, 160, 103, 64, 65, 66, 197, + 115, 173, 174, 175, 176, 177, 178, 186, 104, 72, + 106, 107, 108, 161, 69, 70, 91, 80, 81, 96, + 125, 126, 207, 127, 132, 133, 134, 164, 165, 167, + 169, 170, 168, 171, 181, 138, 139, 143, 144, 141, + 142, 145, 146, 148, 147, 200, 202, 201, 162, 172, + 190, 192, 191, 193, 194, 195, 166, 179, 182, 183, + 204, 0, 0, 0, 0, 0, 0, 0, 215, 217, + 218, 219, 221, 222, 223, 220, 0, 0, 0, 0, + 0, 0, 225, 227, 228, 229, 230, 231, 232, 0, + 0, 0, 0, 0, 0, 0, 234, 236, 237, 240, + 241, 238, 242, 239, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 246, 247, 248, 249, 253, 250, 251, + 252, 0, 0, 0, 0, 0, 264, 268, 269, 270, + 271, 260, 262, 263, 265, 266, 267, 0, 0, 0, + 0, 0, 0, 0, 0, 491, 493, 495, 494, 500, + 496, 497, 498, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 506, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 0, 545, 547, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 554, 556, 557, 558, 560, 561, 559, 562, 563, 564, - 565, 0, 0, 0, 0, 0, 577, 579, 580, 581, - 582, 583, 0, 0, 591, 593, 594, 271, 270, 277, - 290, 288, 300, 296, 297, 301, 298, 299, 302, 303, - 304, 305, 306, 329, 330, 331, 332, 333, 357, 358, - 359, 364, 365, 293, 366, 367, 370, 368, 369, 372, - 373, 374, 388, 344, 345, 347, 348, 375, 391, 338, - 340, 392, 398, 399, 400, 294, 356, 416, 417, 339, - 411, 322, 289, 334, 389, 395, 376, 0, 0, 420, - 295, 272, 321, 380, 273, 291, 292, 335, 336, 418, - 378, 382, 383, 274, 421, 360, 387, 323, 343, 393, - 394, 397, 410, 337, 414, 412, 413, 349, 355, 384, - 385, 350, 351, 377, 402, 324, 325, 328, 307, 309, - 310, 311, 312, 313, 319, 422, 423, 425, 361, 362, - 363, 371, 426, 427, 428, 0, 0, 0, 379, 352, - 549, 437, 441, 439, 438, 442, 440, 0, 0, 445, - 446, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 381, 396, 415, 450, 451, 353, 429, 0, 0, - 0, 0, 0, 0, 403, 404, 405, 406, 407, 408, - 409, 550, 346, 341, 401, 320, 275, 276, 342, 452, - 454, 453, 455, 456, 457, 308, 315, 447, 449, 448, - 314, 0, 327, 386, 424, 326, 354, 316, 317, 318, - 458, 459, 460, 464, 463, 461, 462, 465, 466, 467, - 468, 470, 469, 479, 0, 483, 484, 0, 0, 485, - 471, 477, 472, 473, 474, 476, 478, 475, 252, 253, - 254, 255, 256, 497, 499, 498, 501, 502, 503, 504, - 500, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 548, - 566, 567, 568, 571, 569, 570, 572, 573, 574, 575, - 584, 585, 586, 587, 588, 595, 596, 390, 419, 436, - 551, 552, 443, 444, 430, 431, 0, 0, 0, 435, - 589, 480, 481, 482, 434, 432, 433 + 0, 0, 510, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, + 529, 0, 549, 551, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 558, 560, 561, 562, 564, 565, + 563, 566, 567, 568, 569, 0, 0, 0, 0, 0, + 0, 581, 583, 584, 585, 586, 587, 588, 0, 0, + 597, 599, 600, 273, 272, 279, 292, 290, 302, 298, + 299, 303, 300, 301, 304, 305, 306, 307, 308, 332, + 333, 334, 335, 336, 361, 362, 363, 368, 369, 295, + 370, 371, 374, 372, 373, 376, 377, 378, 392, 347, + 348, 350, 351, 379, 395, 341, 343, 396, 402, 403, + 404, 296, 360, 420, 421, 342, 415, 325, 291, 337, + 393, 399, 380, 0, 0, 424, 297, 274, 324, 384, + 275, 293, 294, 338, 339, 422, 382, 386, 387, 276, + 425, 364, 391, 326, 346, 397, 398, 401, 414, 340, + 418, 416, 417, 352, 359, 388, 389, 353, 354, 381, + 406, 327, 328, 331, 309, 311, 312, 313, 314, 315, + 321, 426, 427, 429, 365, 366, 367, 375, 430, 431, + 432, 0, 0, 0, 383, 355, 357, 553, 441, 445, + 443, 442, 446, 444, 0, 0, 449, 450, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 385, 400, + 419, 454, 455, 356, 433, 0, 0, 0, 0, 0, + 0, 407, 408, 409, 410, 411, 412, 413, 554, 349, + 344, 405, 323, 277, 278, 345, 456, 458, 457, 459, + 460, 461, 310, 317, 451, 453, 452, 316, 0, 330, + 390, 428, 329, 358, 318, 319, 322, 320, 462, 463, + 464, 468, 467, 465, 466, 469, 470, 471, 472, 474, + 473, 483, 0, 487, 488, 0, 0, 489, 475, 481, + 476, 477, 478, 480, 482, 479, 254, 255, 256, 257, + 258, 501, 503, 502, 505, 506, 507, 508, 504, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 552, 570, 571, + 572, 575, 573, 574, 576, 577, 578, 579, 589, 590, + 591, 592, 593, 594, 601, 602, 394, 423, 440, 555, + 556, 447, 448, 434, 435, 0, 0, 0, 439, 595, + 484, 485, 486, 438, 436, 437 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -23, 570, 571, - 572, 573, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - -271, -271, -271, -271, -271, -271, -271, -271, -271 + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -23, + 249, 576, 577, 578, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 15, 16, 28, 233, 17, 29, 434, 18, - 30, 448, 19, 31, 462, 20, 32, 478, 492, 493, - 494, 495, 496, 21, 33, 497, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 435, 436, 437, 438, 439, 440, - 441, 449, 450, 451, 452, 453, 454, 479, 480, 481, - 482, 483, 484, 485, 486, 463, 464, 465, 466, 467, - 468, 469, 22, 34, 511, 512, 513, 514, 515, 516, - 517, 518, 519, 23, 35, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 24, 36, 558, 559, 422, 423, - 424, 425, 25, 37, 570, 571, 572, 573, 574, 575, - 576, 577, 578, 579, 580, 26, 38, 586, 587, 588, - 589, 590, 591, 426, 27, 39, 594, 595, 596 + -1, 1, 15, 16, 28, 235, 17, 29, 438, 18, + 30, 452, 19, 31, 466, 20, 32, 482, 496, 497, + 498, 499, 500, 21, 33, 501, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 439, 440, 441, 442, + 443, 444, 445, 453, 454, 455, 456, 457, 458, 483, + 484, 485, 486, 487, 488, 489, 490, 467, 468, 469, + 470, 471, 472, 473, 22, 34, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 23, 35, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 24, 36, 562, 563, + 426, 427, 428, 429, 25, 37, 574, 575, 576, 577, + 578, 579, 580, 581, 582, 583, 584, 26, 38, 591, + 592, 593, 594, 595, 596, 597, 430, 27, 39, 600, + 601, 602 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1664,80 +1676,81 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 470, 427, 455, 428, 429, 442, 592, 593, 557, - 498, 3, 597, 598, 443, 444, 581, 582, 583, 584, - 585, 599, 600, 470, 560, 561, 562, 563, 564, 565, - 566, 567, 568, 569, 601, 602, 603, 604, 605, 456, - 457, 606, 607, 608, 609, 4, 610, 611, 612, 613, - 614, 5, 503, 504, 505, 506, 507, 508, 509, 510, - 615, 616, 617, 618, 458, 430, 520, 521, 522, 523, - 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, - 534, 535, 536, 537, 619, 620, 621, 622, 623, 624, - 625, 626, 627, 628, 629, 6, 431, 630, 631, 445, - 432, 446, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 7, 641, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, - 659, 660, 459, 460, 661, 662, 663, 664, 665, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 8, 680, 681, 682, 683, 684, 685, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, - 696, 461, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, - 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, - 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, - 9, 472, 473, 474, 735, 736, 737, 738, 739, 740, - 741, 477, 742, 743, 744, 745, 433, 746, 10, 447, - 747, 471, 748, 472, 473, 474, 475, 476, 487, 488, - 489, 490, 491, 477, 749, 11, 750, 751, 752, 753, - 754, 755, 756, 12, 757, 758, 759, 760, 761, 762, - 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 13, 779, 780, 0, - 14, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 781, 782, 783, 784, 72, 73, 74, - 785, 786, 787, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 788, 789, 790, 791, 792, 793, - 794, 795, 796, 116, 117, 118, 797, 119, 120, 121, - 798, 799, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 800, 801, 802, 146, - 147, 803, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 804, 805, 806, 807, 808, 809, 810, 811, - 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, - 822, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 823, - 196, 824, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 825, 826, 827, - 828, 829, 830, 831, 832, 833, 834, 835, 212, 213, - 214, 215, 216, 217, 836, 837, 838, 839, 840, 841, - 218, 842, 843, 844, 845, 846, 847, 848, 219, 220, - 849, 221, 222, 850, 223, 224, 851, 852, 225, 226, - 227, 228, 229, 230, 231, 853, 854, 855, 232, 856, - 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, + 2, 474, 431, 459, 432, 433, 446, 598, 599, 561, + 502, 3, 603, 604, 447, 448, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 605, 606, 607, 474, 608, 460, + 461, 609, 610, 611, 612, 4, 613, 614, 615, 616, + 617, 5, 564, 565, 566, 567, 568, 569, 570, 571, + 572, 573, 618, 619, 462, 434, 507, 508, 509, 510, + 511, 512, 513, 514, 585, 586, 587, 588, 589, 590, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, + 630, 631, 632, 633, 634, 6, 435, 635, 636, 449, + 436, 450, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 7, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 463, 464, 666, 667, 668, 669, 670, 671, + 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, + 682, 683, 684, 8, 685, 686, 687, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 465, 703, 704, 705, 706, 707, 708, 709, + 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, + 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 9, 741, 476, 477, 478, 742, 743, 744, 745, + 746, 747, 748, 481, 749, 750, 751, 752, 437, 10, + 753, 451, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 491, 492, 493, 494, 495, 11, 475, 763, 476, + 477, 478, 479, 480, 764, 12, 765, 766, 767, 481, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, + 778, 779, 780, 781, 782, 783, 784, 785, 786, 13, + 787, 788, 503, 14, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 789, 790, 791, 792, + 72, 73, 74, 793, 794, 795, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 796, 797, 798, + 799, 800, 801, 802, 803, 804, 116, 117, 118, 805, + 119, 120, 121, 806, 807, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 808, + 809, 810, 146, 147, 811, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 812, 813, 814, 815, 816, + 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 831, 197, 832, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 833, 834, 835, 836, 837, 838, 839, 840, 841, + 842, 843, 213, 214, 215, 216, 217, 218, 844, 845, + 846, 847, 848, 849, 850, 219, 851, 852, 853, 854, + 855, 856, 857, 220, 221, 858, 222, 223, 859, 224, + 225, 860, 861, 226, 227, 228, 229, 230, 231, 232, + 233, 862, 863, 864, 234, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 891, 892, 893, 894, 895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 499, 500, 501, 502 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 504, + 505, 506 }; static const yytype_int16 yycheck[] = { - 0, 44, 44, 44, 46, 47, 44, 277, 278, 112, - 33, 11, 10, 10, 52, 53, 246, 247, 248, 249, - 250, 10, 10, 44, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 10, 10, 10, 10, 10, 80, - 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, - 10, 51, 96, 97, 98, 99, 100, 101, 102, 103, - 10, 10, 10, 10, 105, 107, 154, 155, 156, 157, + 0, 44, 44, 44, 46, 47, 44, 280, 281, 112, + 33, 11, 10, 10, 52, 53, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 10, 10, 10, 10, 10, 10, + 168, 169, 170, 171, 10, 10, 10, 44, 10, 80, + 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, + 10, 51, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 10, 10, 105, 107, 96, 97, 98, 99, + 100, 101, 102, 103, 247, 248, 249, 250, 251, 252, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 95, 138, 10, 10, 137, 142, 139, 10, 10, 10, 10, 10, 10, 10, 10, 10, 111, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1746,60 +1759,61 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 153, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 212, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 213, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 210, 254, 255, 256, 10, 10, 10, 10, 10, 10, - 10, 264, 10, 10, 10, 10, 268, 10, 228, 267, - 10, 252, 10, 254, 255, 256, 257, 258, 281, 282, - 283, 284, 285, 264, 10, 245, 10, 10, 10, 10, - 10, 10, 10, 253, 10, 10, 10, 10, 10, 10, + 10, 211, 10, 256, 257, 258, 10, 10, 10, 10, + 10, 10, 10, 266, 10, 10, 10, 10, 270, 229, + 10, 269, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 284, 285, 286, 287, 288, 246, 254, 10, 256, + 257, 258, 259, 260, 10, 255, 10, 10, 10, 266, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 276, 10, 10, -1, - 280, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 10, 10, 10, 10, 48, 49, 50, - 10, 10, 10, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 104, 105, 106, 10, 108, 109, 110, - 10, 10, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 10, 10, 10, 140, - 141, 10, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 10, - 211, 10, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 239, 240, - 241, 242, 243, 244, 10, 10, 10, 10, 10, 10, - 251, 10, 10, 10, 10, 10, 10, 10, 259, 260, - 10, 262, 263, 10, 265, 266, 10, 10, 269, 270, - 271, 272, 273, 274, 275, 10, 10, 10, 279, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 279, + 10, 10, 33, 283, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 10, 10, 10, 10, + 48, 49, 50, 10, 10, 10, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 104, 105, 106, 10, + 108, 109, 110, 10, 10, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 10, + 10, 10, 140, 141, 10, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 10, 212, 10, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 240, 241, 242, 243, 244, 245, 10, 10, + 10, 10, 10, 10, 10, 253, 10, 10, 10, 10, + 10, 10, 10, 261, 262, 10, 264, 265, 10, 267, + 268, 10, 10, 271, 272, 273, 274, 275, 276, 277, + 278, 10, 10, 10, 282, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, 33, 33, 33 + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + 33, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 287, 0, 11, 45, 51, 95, 111, 153, 210, - 228, 245, 253, 276, 280, 288, 289, 292, 295, 298, - 301, 309, 528, 539, 560, 568, 581, 590, 290, 293, - 296, 299, 302, 310, 529, 540, 561, 569, 582, 591, + 0, 290, 0, 11, 45, 51, 95, 111, 153, 211, + 229, 246, 255, 279, 283, 291, 292, 295, 298, 301, + 304, 312, 533, 544, 565, 573, 586, 596, 293, 296, + 299, 302, 305, 313, 534, 545, 566, 574, 587, 597, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -1815,47 +1829,48 @@ static const yytype_uint16 yystos[] = 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 211, 213, 214, 215, + 204, 205, 206, 207, 208, 209, 210, 212, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 239, 240, 241, 242, 243, 244, 251, 259, - 260, 262, 263, 265, 266, 269, 270, 271, 272, 273, - 274, 275, 279, 291, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 564, 565, 566, 567, 589, 44, 46, 47, - 107, 138, 142, 268, 294, 500, 501, 502, 503, 504, - 505, 506, 44, 52, 53, 137, 139, 267, 297, 507, - 508, 509, 510, 511, 512, 44, 80, 81, 105, 173, - 174, 212, 300, 521, 522, 523, 524, 525, 526, 527, - 44, 252, 254, 255, 256, 257, 258, 264, 303, 513, - 514, 515, 516, 517, 518, 519, 520, 281, 282, 283, - 284, 285, 304, 305, 306, 307, 308, 311, 513, 514, - 515, 516, 517, 96, 97, 98, 99, 100, 101, 102, - 103, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 112, 562, 563, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 246, 247, 248, 249, 250, 583, 584, 585, 586, - 587, 588, 277, 278, 592, 593, 594, 10, 10, 10, + 226, 227, 228, 240, 241, 242, 243, 244, 245, 253, + 261, 262, 264, 265, 267, 268, 271, 272, 273, 274, + 275, 276, 277, 278, 282, 294, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 569, 570, 571, 572, + 595, 44, 46, 47, 107, 138, 142, 270, 297, 505, + 506, 507, 508, 509, 510, 511, 44, 52, 53, 137, + 139, 269, 300, 512, 513, 514, 515, 516, 517, 44, + 80, 81, 105, 173, 174, 213, 303, 526, 527, 528, + 529, 530, 531, 532, 44, 254, 256, 257, 258, 259, + 260, 266, 306, 518, 519, 520, 521, 522, 523, 524, + 525, 284, 285, 286, 287, 288, 307, 308, 309, 310, + 311, 314, 518, 519, 520, 521, 522, 96, 97, 98, + 99, 100, 101, 102, 103, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 546, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, + 564, 112, 567, 568, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 247, 248, 249, 250, 251, + 252, 588, 589, 590, 591, 592, 593, 594, 280, 281, + 598, 599, 600, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1884,72 +1899,73 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 286, 287, 287, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 289, 290, 290, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 292, 293, 293, 294, 294, 294, 294, 294, - 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, - 297, 298, 299, 299, 300, 300, 300, 300, 300, 300, - 300, 301, 302, 302, 303, 303, 303, 303, 303, 303, - 303, 303, 304, 305, 306, 307, 308, 309, 310, 310, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 529, 530, - 530, 530, 530, 530, 530, 530, 530, 531, 532, 533, - 534, 535, 536, 537, 538, 539, 540, 540, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 561, 562, 563, 564, - 565, 566, 567, 568, 569, 569, 570, 570, 570, 570, - 570, 570, 570, 570, 570, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, - 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 591, 592, 592, 593, 594 + 0, 289, 290, 290, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 292, 293, 293, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 295, 296, 296, 297, 297, 297, + 297, 297, 297, 297, 298, 299, 299, 300, 300, 300, + 300, 300, 300, 301, 302, 302, 303, 303, 303, 303, + 303, 303, 303, 304, 305, 305, 306, 306, 306, 306, + 306, 306, 306, 306, 307, 308, 309, 310, 311, 312, + 313, 313, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, + 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, + 533, 534, 534, 535, 535, 535, 535, 535, 535, 535, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 545, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, + 566, 567, 568, 569, 570, 571, 572, 573, 574, 574, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 587, 588, 588, 588, 588, 588, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 597, 598, + 598, 599, 600 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1976,45 +1992,46 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 1, 2, 0, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 3, 4, 4, 4, 3, + 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, - 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, + 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 2, 2, - 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, - 1, 2, 0, 1, 1, 2, 2 + 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, + 1, 2, 2 }; @@ -2691,15 +2708,15 @@ yyreduce: switch (yyn) { case 16: -#line 189 "./util/configparser.y" /* yacc.c:1646 */ +#line 191 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2699 "util/configparser.c" /* yacc.c:1646 */ +#line 2716 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 282 "./util/configparser.y" /* yacc.c:1646 */ + case 214: +#line 286 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2710,11 +2727,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2714 "util/configparser.c" /* yacc.c:1646 */ +#line 2731 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: -#line 299 "./util/configparser.y" /* yacc.c:1646 */ + case 224: +#line 303 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2725,11 +2742,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2729 "util/configparser.c" /* yacc.c:1646 */ +#line 2746 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 316 "./util/configparser.y" /* yacc.c:1646 */ + case 233: +#line 320 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2742,11 +2759,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2746 "util/configparser.c" /* yacc.c:1646 */ +#line 2763 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: -#line 335 "./util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 339 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2762,11 +2779,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2766 "util/configparser.c" /* yacc.c:1646 */ +#line 2783 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 359 "./util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 363 "./util/configparser.y" /* yacc.c:1646 */ { uint8_t* bitlist; size_t len = 0; @@ -2783,11 +2800,11 @@ yyreduce: } } -#line 2787 "util/configparser.c" /* yacc.c:1646 */ +#line 2804 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 378 "./util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 382 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2802,21 +2819,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2806 "util/configparser.c" /* yacc.c:1646 */ +#line 2823 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 395 "./util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 399 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2816 "util/configparser.c" /* yacc.c:1646 */ +#line 2833 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 403 "./util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 407 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2824,21 +2841,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2828 "util/configparser.c" /* yacc.c:1646 */ +#line 2845 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 413 "./util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 417 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2838 "util/configparser.c" /* yacc.c:1646 */ +#line 2855 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 421 "./util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 425 "./util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2854,11 +2871,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2858 "util/configparser.c" /* yacc.c:1646 */ +#line 2875 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 444 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 448 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2866,11 +2883,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2870 "util/configparser.c" /* yacc.c:1646 */ +#line 2887 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 453 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 457 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2878,11 +2895,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2882 "util/configparser.c" /* yacc.c:1646 */ +#line 2899 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 462 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 466 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2892,11 +2909,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2896 "util/configparser.c" /* yacc.c:1646 */ +#line 2913 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 473 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 477 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2904,11 +2921,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2908 "util/configparser.c" /* yacc.c:1646 */ +#line 2925 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 482 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 486 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2916,11 +2933,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2920 "util/configparser.c" /* yacc.c:1646 */ +#line 2937 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 491 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 495 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2928,11 +2945,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2932 "util/configparser.c" /* yacc.c:1646 */ +#line 2949 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 500 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 504 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2942,11 +2959,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2946 "util/configparser.c" /* yacc.c:1646 */ +#line 2963 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 511 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 515 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2954,11 +2971,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2958 "util/configparser.c" /* yacc.c:1646 */ +#line 2975 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 520 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 524 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2969,11 +2986,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2973 "util/configparser.c" /* yacc.c:1646 */ +#line 2990 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 532 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 536 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2985,11 +3002,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2989 "util/configparser.c" /* yacc.c:1646 */ +#line 3006 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 546 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 550 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3003,11 +3020,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3007 "util/configparser.c" /* yacc.c:1646 */ +#line 3024 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 561 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 565 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3017,11 +3034,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3021 "util/configparser.c" /* yacc.c:1646 */ +#line 3038 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 572 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 576 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3037,11 +3054,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3041 "util/configparser.c" /* yacc.c:1646 */ +#line 3058 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 589 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 593 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3057,11 +3074,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3061 "util/configparser.c" /* yacc.c:1646 */ +#line 3078 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 606 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 610 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3077,11 +3094,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3081 "util/configparser.c" /* yacc.c:1646 */ +#line 3098 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 623 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 627 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3097,11 +3114,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3101 "util/configparser.c" /* yacc.c:1646 */ +#line 3118 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 640 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 644 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3115,11 +3132,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3119 "util/configparser.c" /* yacc.c:1646 */ +#line 3136 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 655 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 659 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3133,11 +3150,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3137 "util/configparser.c" /* yacc.c:1646 */ +#line 3154 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 670 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 674 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3149,11 +3166,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3153 "util/configparser.c" /* yacc.c:1646 */ +#line 3170 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 683 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 687 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3167,11 +3184,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3171 "util/configparser.c" /* yacc.c:1646 */ +#line 3188 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 698 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 702 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3179,11 +3196,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3183 "util/configparser.c" /* yacc.c:1646 */ +#line 3200 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 707 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 711 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3191,11 +3208,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3195 "util/configparser.c" /* yacc.c:1646 */ +#line 3212 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 716 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 720 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3203,11 +3220,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3207 "util/configparser.c" /* yacc.c:1646 */ +#line 3224 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 725 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 729 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3215,11 +3232,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3219 "util/configparser.c" /* yacc.c:1646 */ +#line 3236 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 734 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 738 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3227,11 +3244,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3231 "util/configparser.c" /* yacc.c:1646 */ +#line 3248 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 743 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 747 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3239,11 +3256,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3243 "util/configparser.c" /* yacc.c:1646 */ +#line 3260 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 752 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 756 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3251,11 +3268,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3255 "util/configparser.c" /* yacc.c:1646 */ +#line 3272 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 761 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 765 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3263,11 +3280,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3267 "util/configparser.c" /* yacc.c:1646 */ +#line 3284 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 770 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 774 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3275,11 +3292,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3279 "util/configparser.c" /* yacc.c:1646 */ +#line 3296 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 779 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 783 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3287,11 +3304,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3291 "util/configparser.c" /* yacc.c:1646 */ +#line 3308 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 788 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 792 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3299,11 +3316,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3303 "util/configparser.c" /* yacc.c:1646 */ +#line 3320 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 797 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 801 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3311,11 +3328,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3315 "util/configparser.c" /* yacc.c:1646 */ +#line 3332 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 806 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 810 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3323,11 +3340,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3327 "util/configparser.c" /* yacc.c:1646 */ +#line 3344 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 815 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3335,11 +3352,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3339 "util/configparser.c" /* yacc.c:1646 */ +#line 3356 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 824 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 828 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3351,11 +3368,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3355 "util/configparser.c" /* yacc.c:1646 */ +#line 3372 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 837 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 841 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3363,11 +3380,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3367 "util/configparser.c" /* yacc.c:1646 */ +#line 3384 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 846 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 850 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3379,11 +3396,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3383 "util/configparser.c" /* yacc.c:1646 */ +#line 3400 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 859 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3391,11 +3408,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3395 "util/configparser.c" /* yacc.c:1646 */ +#line 3412 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 868 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 872 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3403,11 +3420,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3407 "util/configparser.c" /* yacc.c:1646 */ +#line 3424 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 877 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 881 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3415,31 +3432,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3419 "util/configparser.c" /* yacc.c:1646 */ +#line 3436 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 886 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 890 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3429 "util/configparser.c" /* yacc.c:1646 */ +#line 3446 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 893 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 897 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3439 "util/configparser.c" /* yacc.c:1646 */ +#line 3456 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 900 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 904 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3447,21 +3464,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3451 "util/configparser.c" /* yacc.c:1646 */ +#line 3468 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 909 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 913 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3461 "util/configparser.c" /* yacc.c:1646 */ +#line 3478 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 916 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 920 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3469,65 +3486,76 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3473 "util/configparser.c" /* yacc.c:1646 */ +#line 3490 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 925 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 929 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3484 "util/configparser.c" /* yacc.c:1646 */ +#line 3501 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 933 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 937 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3494 "util/configparser.c" /* yacc.c:1646 */ +#line 3511 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 940 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 944 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3504 "util/configparser.c" /* yacc.c:1646 */ +#line 3521 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 947 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 951 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3515 "util/configparser.c" /* yacc.c:1646 */ +#line 3532 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 955 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 959 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); } -#line 3527 "util/configparser.c" /* yacc.c:1646 */ +#line 3543 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 964 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 966 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 3555 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 323: +#line 975 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3535,11 +3563,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3539 "util/configparser.c" /* yacc.c:1646 */ +#line 3567 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 973 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 984 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3547,11 +3575,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3551 "util/configparser.c" /* yacc.c:1646 */ +#line 3579 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 982 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 993 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3564,11 +3592,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3568 "util/configparser.c" /* yacc.c:1646 */ +#line 3596 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 996 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1007 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3576,11 +3604,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3580 "util/configparser.c" /* yacc.c:1646 */ +#line 3608 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1005 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1016 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3588,11 +3616,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3592 "util/configparser.c" /* yacc.c:1646 */ +#line 3620 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1014 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1025 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3600,11 +3628,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3604 "util/configparser.c" /* yacc.c:1646 */ +#line 3632 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1023 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1034 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3612,11 +3640,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3616 "util/configparser.c" /* yacc.c:1646 */ +#line 3644 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1032 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1043 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3624,11 +3652,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3628 "util/configparser.c" /* yacc.c:1646 */ +#line 3656 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1041 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1052 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3636,31 +3664,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3640 "util/configparser.c" /* yacc.c:1646 */ +#line 3668 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1050 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1061 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3650 "util/configparser.c" /* yacc.c:1646 */ +#line 3678 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1057 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1068 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3660 "util/configparser.c" /* yacc.c:1646 */ +#line 3688 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1064 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1075 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3685,105 +3713,105 @@ yyreduce: } } } -#line 3689 "util/configparser.c" /* yacc.c:1646 */ +#line 3717 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1090 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1101 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3700 "util/configparser.c" /* yacc.c:1646 */ +#line 3728 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1098 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1109 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3710 "util/configparser.c" /* yacc.c:1646 */ +#line 3738 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1105 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1116 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3720 "util/configparser.c" /* yacc.c:1646 */ +#line 3748 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1112 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1123 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3730 "util/configparser.c" /* yacc.c:1646 */ +#line 3758 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1119 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1130 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3740 "util/configparser.c" /* yacc.c:1646 */ +#line 3768 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1126 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1137 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3751 "util/configparser.c" /* yacc.c:1646 */ +#line 3779 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1134 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1145 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3762 "util/configparser.c" /* yacc.c:1646 */ +#line 3790 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1142 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1153 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3773 "util/configparser.c" /* yacc.c:1646 */ +#line 3801 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1150 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1161 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3783 "util/configparser.c" /* yacc.c:1646 */ +#line 3811 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1157 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1168 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3793,11 +3821,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3797 "util/configparser.c" /* yacc.c:1646 */ +#line 3825 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1168 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1179 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3807,21 +3835,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3811 "util/configparser.c" /* yacc.c:1646 */ +#line 3839 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1179 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1190 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3821 "util/configparser.c" /* yacc.c:1646 */ +#line 3849 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1186 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1197 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3829,11 +3857,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3833 "util/configparser.c" /* yacc.c:1646 */ +#line 3861 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1195 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1206 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3841,11 +3869,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3845 "util/configparser.c" /* yacc.c:1646 */ +#line 3873 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1204 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1215 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3853,53 +3881,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3857 "util/configparser.c" /* yacc.c:1646 */ +#line 3885 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1213 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1224 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3867 "util/configparser.c" /* yacc.c:1646 */ +#line 3895 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1220 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1231 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3877 "util/configparser.c" /* yacc.c:1646 */ +#line 3905 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1227 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1238 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3888 "util/configparser.c" /* yacc.c:1646 */ +#line 3916 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1235 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1246 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3899 "util/configparser.c" /* yacc.c:1646 */ +#line 3927 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1243 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1254 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3908,11 +3936,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3912 "util/configparser.c" /* yacc.c:1646 */ +#line 3940 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1253 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1264 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3921,11 +3949,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3925 "util/configparser.c" /* yacc.c:1646 */ +#line 3953 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1263 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1274 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3934,22 +3962,39 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3938 "util/configparser.c" /* yacc.c:1646 */ +#line 3966 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1273 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1284 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) + yyerror("number expected"); + else if (atoi((yyvsp[0].str)) > 63) + yyerror("value too large (max 63)"); + else if (atoi((yyvsp[0].str)) < 0) + yyerror("value too small (min 0)"); + else + cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); + } +#line 3983 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 358: +#line 1298 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3949 "util/configparser.c" /* yacc.c:1646 */ +#line 3994 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1281 "./util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1306 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3961,11 +4006,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3965 "util/configparser.c" /* yacc.c:1646 */ +#line 4010 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1294 "./util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1319 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3975,22 +4020,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3979 "util/configparser.c" /* yacc.c:1646 */ +#line 4024 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1305 "./util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1330 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3990 "util/configparser.c" /* yacc.c:1646 */ +#line 4035 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1313 "./util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1338 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4002,11 +4047,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4006 "util/configparser.c" /* yacc.c:1646 */ +#line 4051 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1326 "./util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1351 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4014,11 +4059,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4018 "util/configparser.c" /* yacc.c:1646 */ +#line 4063 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1335 "./util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1360 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4026,11 +4071,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4030 "util/configparser.c" /* yacc.c:1646 */ +#line 4075 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1344 "./util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1369 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4038,11 +4083,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4042 "util/configparser.c" /* yacc.c:1646 */ +#line 4087 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1353 "./util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1378 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4051,11 +4096,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4055 "util/configparser.c" /* yacc.c:1646 */ +#line 4100 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1363 "./util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1388 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4064,22 +4109,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4068 "util/configparser.c" /* yacc.c:1646 */ +#line 4113 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1373 "./util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1398 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4079 "util/configparser.c" /* yacc.c:1646 */ +#line 4124 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1381 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1406 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4091,11 +4136,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4095 "util/configparser.c" /* yacc.c:1646 */ +#line 4140 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1394 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1419 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4103,22 +4148,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4107 "util/configparser.c" /* yacc.c:1646 */ +#line 4152 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1403 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1428 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4118 "util/configparser.c" /* yacc.c:1646 */ +#line 4163 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1411 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1436 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4126,22 +4171,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4130 "util/configparser.c" /* yacc.c:1646 */ +#line 4175 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1420 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 1445 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4141 "util/configparser.c" /* yacc.c:1646 */ +#line 4186 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1428 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 1453 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4153,11 +4198,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4157 "util/configparser.c" /* yacc.c:1646 */ +#line 4202 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 1441 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 1466 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4165,21 +4210,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4169 "util/configparser.c" /* yacc.c:1646 */ +#line 4214 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 1450 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 1475 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4179 "util/configparser.c" /* yacc.c:1646 */ +#line 4224 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 1457 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 1482 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4188,11 +4233,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4192 "util/configparser.c" /* yacc.c:1646 */ +#line 4237 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 1467 "./util/configparser.y" /* yacc.c:1646 */ + case 378: +#line 1492 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4201,11 +4246,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4205 "util/configparser.c" /* yacc.c:1646 */ +#line 4250 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 1477 "./util/configparser.y" /* yacc.c:1646 */ + case 379: +#line 1502 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4214,11 +4259,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4218 "util/configparser.c" /* yacc.c:1646 */ +#line 4263 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 1487 "./util/configparser.y" /* yacc.c:1646 */ + case 380: +#line 1512 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4227,11 +4272,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4231 "util/configparser.c" /* yacc.c:1646 */ +#line 4276 "util/configparser.c" /* yacc.c:1646 */ break; - case 377: -#line 1497 "./util/configparser.y" /* yacc.c:1646 */ + case 381: +#line 1522 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4240,11 +4285,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4244 "util/configparser.c" /* yacc.c:1646 */ +#line 4289 "util/configparser.c" /* yacc.c:1646 */ break; - case 378: -#line 1507 "./util/configparser.y" /* yacc.c:1646 */ + case 382: +#line 1532 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4253,11 +4298,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4257 "util/configparser.c" /* yacc.c:1646 */ +#line 4302 "util/configparser.c" /* yacc.c:1646 */ break; - case 379: -#line 1517 "./util/configparser.y" /* yacc.c:1646 */ + case 383: +#line 1542 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4266,11 +4311,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4270 "util/configparser.c" /* yacc.c:1646 */ +#line 4315 "util/configparser.c" /* yacc.c:1646 */ break; - case 380: -#line 1527 "./util/configparser.y" /* yacc.c:1646 */ + case 384: +#line 1552 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4279,41 +4324,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4283 "util/configparser.c" /* yacc.c:1646 */ +#line 4328 "util/configparser.c" /* yacc.c:1646 */ break; - case 381: -#line 1537 "./util/configparser.y" /* yacc.c:1646 */ + case 385: +#line 1562 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4293 "util/configparser.c" /* yacc.c:1646 */ +#line 4338 "util/configparser.c" /* yacc.c:1646 */ break; - case 382: -#line 1544 "./util/configparser.y" /* yacc.c:1646 */ + case 386: +#line 1569 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4303 "util/configparser.c" /* yacc.c:1646 */ +#line 4348 "util/configparser.c" /* yacc.c:1646 */ break; - case 383: -#line 1551 "./util/configparser.y" /* yacc.c:1646 */ + case 387: +#line 1576 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4313 "util/configparser.c" /* yacc.c:1646 */ +#line 4358 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1558 "./util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 1583 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4321,11 +4366,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4325 "util/configparser.c" /* yacc.c:1646 */ +#line 4370 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1567 "./util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 1592 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4333,11 +4378,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4337 "util/configparser.c" /* yacc.c:1646 */ +#line 4382 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 1576 "./util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 1601 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4345,11 +4390,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4349 "util/configparser.c" /* yacc.c:1646 */ +#line 4394 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 1585 "./util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 1610 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4357,21 +4402,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" /* yacc.c:1646 */ +#line 4406 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 1594 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 1619 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4371 "util/configparser.c" /* yacc.c:1646 */ +#line 4416 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 1601 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 1626 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4380,11 +4425,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4384 "util/configparser.c" /* yacc.c:1646 */ +#line 4429 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 1611 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 1636 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4403,21 +4448,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4407 "util/configparser.c" /* yacc.c:1646 */ +#line 4452 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 1631 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 1656 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4417 "util/configparser.c" /* yacc.c:1646 */ +#line 4462 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 1638 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 1663 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4434,11 +4479,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4438 "util/configparser.c" /* yacc.c:1646 */ +#line 4483 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 1656 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 1681 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4450,11 +4495,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4454 "util/configparser.c" /* yacc.c:1646 */ +#line 4499 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 1669 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 1694 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4466,11 +4511,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4470 "util/configparser.c" /* yacc.c:1646 */ +#line 4515 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 1682 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 1707 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4478,11 +4523,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4482 "util/configparser.c" /* yacc.c:1646 */ +#line 4527 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 1691 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 1716 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4490,11 +4535,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4494 "util/configparser.c" /* yacc.c:1646 */ +#line 4539 "util/configparser.c" /* yacc.c:1646 */ break; - case 397: -#line 1700 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 1725 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4502,11 +4547,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4506 "util/configparser.c" /* yacc.c:1646 */ +#line 4551 "util/configparser.c" /* yacc.c:1646 */ break; - case 398: -#line 1709 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 1734 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4514,11 +4559,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4518 "util/configparser.c" /* yacc.c:1646 */ +#line 4563 "util/configparser.c" /* yacc.c:1646 */ break; - case 399: -#line 1718 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 1743 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4527,11 +4572,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4531 "util/configparser.c" /* yacc.c:1646 */ +#line 4576 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 1728 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 1753 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4540,11 +4585,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4544 "util/configparser.c" /* yacc.c:1646 */ +#line 4589 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 1738 "./util/configparser.y" /* yacc.c:1646 */ + case 405: +#line 1763 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4554,11 +4599,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4558 "util/configparser.c" /* yacc.c:1646 */ +#line 4603 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 1749 "./util/configparser.y" /* yacc.c:1646 */ + case 406: +#line 1774 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4566,11 +4611,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4570 "util/configparser.c" /* yacc.c:1646 */ +#line 4615 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 1758 "./util/configparser.y" /* yacc.c:1646 */ + case 407: +#line 1783 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4578,11 +4623,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4582 "util/configparser.c" /* yacc.c:1646 */ +#line 4627 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 1767 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 1792 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4590,11 +4635,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4594 "util/configparser.c" /* yacc.c:1646 */ +#line 4639 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 1776 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 1801 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4602,11 +4647,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4606 "util/configparser.c" /* yacc.c:1646 */ +#line 4651 "util/configparser.c" /* yacc.c:1646 */ break; - case 406: -#line 1785 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 1810 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4614,11 +4659,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4618 "util/configparser.c" /* yacc.c:1646 */ +#line 4663 "util/configparser.c" /* yacc.c:1646 */ break; - case 407: -#line 1794 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 1819 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4626,11 +4671,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4630 "util/configparser.c" /* yacc.c:1646 */ +#line 4675 "util/configparser.c" /* yacc.c:1646 */ break; - case 408: -#line 1803 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 1828 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4642,11 +4687,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4646 "util/configparser.c" /* yacc.c:1646 */ +#line 4691 "util/configparser.c" /* yacc.c:1646 */ break; - case 409: -#line 1816 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 1841 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4658,11 +4703,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4662 "util/configparser.c" /* yacc.c:1646 */ +#line 4707 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 1829 "./util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 1854 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4670,21 +4715,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4674 "util/configparser.c" /* yacc.c:1646 */ +#line 4719 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 1838 "./util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 1863 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4684 "util/configparser.c" /* yacc.c:1646 */ +#line 4729 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 1845 "./util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 1870 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4692,11 +4737,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4696 "util/configparser.c" /* yacc.c:1646 */ +#line 4741 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 1854 "./util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 1879 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4704,11 +4749,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4708 "util/configparser.c" /* yacc.c:1646 */ +#line 4753 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 1863 "./util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 1888 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4716,11 +4761,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4720 "util/configparser.c" /* yacc.c:1646 */ +#line 4765 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 1872 "./util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 1897 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4729,22 +4774,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4733 "util/configparser.c" /* yacc.c:1646 */ +#line 4778 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 1881 "./util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 1906 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4744 "util/configparser.c" /* yacc.c:1646 */ +#line 4789 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 1889 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 1914 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4756,22 +4801,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4760 "util/configparser.c" /* yacc.c:1646 */ +#line 4805 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 1902 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 1927 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4771 "util/configparser.c" /* yacc.c:1646 */ +#line 4816 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 1910 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 1935 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4811,21 +4856,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4815 "util/configparser.c" /* yacc.c:1646 */ +#line 4860 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 1951 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 1976 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4825 "util/configparser.c" /* yacc.c:1646 */ +#line 4870 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 1958 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 1983 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4839,11 +4884,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4843 "util/configparser.c" /* yacc.c:1646 */ +#line 4888 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 1973 "./util/configparser.y" /* yacc.c:1646 */ + case 426: +#line 1998 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4852,11 +4897,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4856 "util/configparser.c" /* yacc.c:1646 */ +#line 4901 "util/configparser.c" /* yacc.c:1646 */ break; - case 423: -#line 1983 "./util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2008 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4865,41 +4910,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4869 "util/configparser.c" /* yacc.c:1646 */ +#line 4914 "util/configparser.c" /* yacc.c:1646 */ break; - case 424: -#line 1993 "./util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2018 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4879 "util/configparser.c" /* yacc.c:1646 */ +#line 4924 "util/configparser.c" /* yacc.c:1646 */ break; - case 425: -#line 2000 "./util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2025 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4889 "util/configparser.c" /* yacc.c:1646 */ +#line 4934 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2007 "./util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2032 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4899 "util/configparser.c" /* yacc.c:1646 */ +#line 4944 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2014 "./util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2039 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4907,22 +4952,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4911 "util/configparser.c" /* yacc.c:1646 */ +#line 4956 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2023 "./util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2048 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 4922 "util/configparser.c" /* yacc.c:1646 */ +#line 4967 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2031 "./util/configparser.y" /* yacc.c:1646 */ + case 433: +#line 2056 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4935,11 +4980,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4939 "util/configparser.c" /* yacc.c:1646 */ +#line 4984 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2045 "./util/configparser.y" /* yacc.c:1646 */ + case 434: +#line 2070 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4959,11 +5004,11 @@ yyreduce: } } } -#line 4963 "util/configparser.c" /* yacc.c:1646 */ +#line 5008 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2066 "./util/configparser.y" /* yacc.c:1646 */ + case 435: +#line 2091 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4983,11 +5028,11 @@ yyreduce: } } } -#line 4987 "util/configparser.c" /* yacc.c:1646 */ +#line 5032 "util/configparser.c" /* yacc.c:1646 */ break; - case 432: -#line 2087 "./util/configparser.y" /* yacc.c:1646 */ + case 436: +#line 2112 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4998,11 +5043,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5002 "util/configparser.c" /* yacc.c:1646 */ +#line 5047 "util/configparser.c" /* yacc.c:1646 */ break; - case 433: -#line 2099 "./util/configparser.y" /* yacc.c:1646 */ + case 437: +#line 2124 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5013,11 +5058,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5017 "util/configparser.c" /* yacc.c:1646 */ +#line 5062 "util/configparser.c" /* yacc.c:1646 */ break; - case 434: -#line 2111 "./util/configparser.y" /* yacc.c:1646 */ + case 438: +#line 2136 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5028,11 +5073,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5032 "util/configparser.c" /* yacc.c:1646 */ +#line 5077 "util/configparser.c" /* yacc.c:1646 */ break; - case 435: -#line 2123 "./util/configparser.y" /* yacc.c:1646 */ + case 439: +#line 2148 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5040,11 +5085,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5044 "util/configparser.c" /* yacc.c:1646 */ +#line 5089 "util/configparser.c" /* yacc.c:1646 */ break; - case 436: -#line 2132 "./util/configparser.y" /* yacc.c:1646 */ + case 440: +#line 2157 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5064,11 +5109,11 @@ yyreduce: } } } -#line 5068 "util/configparser.c" /* yacc.c:1646 */ +#line 5113 "util/configparser.c" /* yacc.c:1646 */ break; - case 437: -#line 2153 "./util/configparser.y" /* yacc.c:1646 */ + case 441: +#line 2178 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5076,11 +5121,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5080 "util/configparser.c" /* yacc.c:1646 */ +#line 5125 "util/configparser.c" /* yacc.c:1646 */ break; - case 438: -#line 2163 "./util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2188 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5088,33 +5133,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5092 "util/configparser.c" /* yacc.c:1646 */ +#line 5137 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2172 "./util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2197 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5103 "util/configparser.c" /* yacc.c:1646 */ +#line 5148 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2180 "./util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2205 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5114 "util/configparser.c" /* yacc.c:1646 */ +#line 5159 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2188 "./util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2213 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5126,11 +5171,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5130 "util/configparser.c" /* yacc.c:1646 */ +#line 5175 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2201 "./util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2226 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5142,11 +5187,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5146 "util/configparser.c" /* yacc.c:1646 */ +#line 5191 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2214 "./util/configparser.y" /* yacc.c:1646 */ + case 447: +#line 2239 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5160,11 +5205,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5164 "util/configparser.c" /* yacc.c:1646 */ +#line 5209 "util/configparser.c" /* yacc.c:1646 */ break; - case 444: -#line 2229 "./util/configparser.y" /* yacc.c:1646 */ + case 448: +#line 2254 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5178,11 +5223,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5182 "util/configparser.c" /* yacc.c:1646 */ +#line 5227 "util/configparser.c" /* yacc.c:1646 */ break; - case 445: -#line 2244 "./util/configparser.y" /* yacc.c:1646 */ + case 449: +#line 2269 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5190,11 +5235,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5194 "util/configparser.c" /* yacc.c:1646 */ +#line 5239 "util/configparser.c" /* yacc.c:1646 */ break; - case 446: -#line 2253 "./util/configparser.y" /* yacc.c:1646 */ + case 450: +#line 2278 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5202,20 +5247,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5206 "util/configparser.c" /* yacc.c:1646 */ +#line 5251 "util/configparser.c" /* yacc.c:1646 */ break; - case 447: -#line 2262 "./util/configparser.y" /* yacc.c:1646 */ + case 451: +#line 2287 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5215 "util/configparser.c" /* yacc.c:1646 */ +#line 5260 "util/configparser.c" /* yacc.c:1646 */ break; - case 448: -#line 2268 "./util/configparser.y" /* yacc.c:1646 */ + case 452: +#line 2293 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5223,11 +5268,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5227 "util/configparser.c" /* yacc.c:1646 */ +#line 5272 "util/configparser.c" /* yacc.c:1646 */ break; - case 449: -#line 2277 "./util/configparser.y" /* yacc.c:1646 */ + case 453: +#line 2302 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5235,11 +5280,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5239 "util/configparser.c" /* yacc.c:1646 */ +#line 5284 "util/configparser.c" /* yacc.c:1646 */ break; - case 450: -#line 2286 "./util/configparser.y" /* yacc.c:1646 */ + case 454: +#line 2311 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5248,11 +5293,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5252 "util/configparser.c" /* yacc.c:1646 */ +#line 5297 "util/configparser.c" /* yacc.c:1646 */ break; - case 451: -#line 2296 "./util/configparser.y" /* yacc.c:1646 */ + case 455: +#line 2321 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5261,11 +5306,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5265 "util/configparser.c" /* yacc.c:1646 */ +#line 5310 "util/configparser.c" /* yacc.c:1646 */ break; - case 452: -#line 2306 "./util/configparser.y" /* yacc.c:1646 */ + case 456: +#line 2331 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5277,11 +5322,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5281 "util/configparser.c" /* yacc.c:1646 */ +#line 5326 "util/configparser.c" /* yacc.c:1646 */ break; - case 453: -#line 2319 "./util/configparser.y" /* yacc.c:1646 */ + case 457: +#line 2344 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5293,11 +5338,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5297 "util/configparser.c" /* yacc.c:1646 */ +#line 5342 "util/configparser.c" /* yacc.c:1646 */ break; - case 454: -#line 2332 "./util/configparser.y" /* yacc.c:1646 */ + case 458: +#line 2357 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5308,11 +5353,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5312 "util/configparser.c" /* yacc.c:1646 */ +#line 5357 "util/configparser.c" /* yacc.c:1646 */ break; - case 455: -#line 2344 "./util/configparser.y" /* yacc.c:1646 */ + case 459: +#line 2369 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5325,11 +5370,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5329 "util/configparser.c" /* yacc.c:1646 */ +#line 5374 "util/configparser.c" /* yacc.c:1646 */ break; - case 456: -#line 2358 "./util/configparser.y" /* yacc.c:1646 */ + case 460: +#line 2383 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5340,11 +5385,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5344 "util/configparser.c" /* yacc.c:1646 */ +#line 5389 "util/configparser.c" /* yacc.c:1646 */ break; - case 457: -#line 2370 "./util/configparser.y" /* yacc.c:1646 */ + case 461: +#line 2395 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5357,11 +5402,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5361 "util/configparser.c" /* yacc.c:1646 */ +#line 5406 "util/configparser.c" /* yacc.c:1646 */ break; - case 458: -#line 2384 "./util/configparser.y" /* yacc.c:1646 */ + case 462: +#line 2409 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5370,31 +5415,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5374 "util/configparser.c" /* yacc.c:1646 */ +#line 5419 "util/configparser.c" /* yacc.c:1646 */ break; - case 459: -#line 2394 "./util/configparser.y" /* yacc.c:1646 */ + case 463: +#line 2419 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5384 "util/configparser.c" /* yacc.c:1646 */ +#line 5429 "util/configparser.c" /* yacc.c:1646 */ break; - case 460: -#line 2401 "./util/configparser.y" /* yacc.c:1646 */ + case 464: +#line 2426 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5394 "util/configparser.c" /* yacc.c:1646 */ +#line 5439 "util/configparser.c" /* yacc.c:1646 */ break; - case 461: -#line 2408 "./util/configparser.y" /* yacc.c:1646 */ + case 465: +#line 2433 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5402,11 +5447,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5406 "util/configparser.c" /* yacc.c:1646 */ +#line 5451 "util/configparser.c" /* yacc.c:1646 */ break; - case 462: -#line 2417 "./util/configparser.y" /* yacc.c:1646 */ + case 466: +#line 2442 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5414,11 +5459,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5418 "util/configparser.c" /* yacc.c:1646 */ +#line 5463 "util/configparser.c" /* yacc.c:1646 */ break; - case 463: -#line 2426 "./util/configparser.y" /* yacc.c:1646 */ + case 467: +#line 2451 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5427,11 +5472,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5431 "util/configparser.c" /* yacc.c:1646 */ +#line 5476 "util/configparser.c" /* yacc.c:1646 */ break; - case 464: -#line 2436 "./util/configparser.y" /* yacc.c:1646 */ + case 468: +#line 2461 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5440,11 +5485,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5444 "util/configparser.c" /* yacc.c:1646 */ +#line 5489 "util/configparser.c" /* yacc.c:1646 */ break; - case 465: -#line 2446 "./util/configparser.y" /* yacc.c:1646 */ + case 469: +#line 2471 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5453,31 +5498,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5457 "util/configparser.c" /* yacc.c:1646 */ +#line 5502 "util/configparser.c" /* yacc.c:1646 */ break; - case 466: -#line 2456 "./util/configparser.y" /* yacc.c:1646 */ + case 470: +#line 2481 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5467 "util/configparser.c" /* yacc.c:1646 */ +#line 5512 "util/configparser.c" /* yacc.c:1646 */ break; - case 467: -#line 2463 "./util/configparser.y" /* yacc.c:1646 */ + case 471: +#line 2488 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5477 "util/configparser.c" /* yacc.c:1646 */ +#line 5522 "util/configparser.c" /* yacc.c:1646 */ break; - case 468: -#line 2470 "./util/configparser.y" /* yacc.c:1646 */ + case 472: +#line 2495 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5485,11 +5530,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5489 "util/configparser.c" /* yacc.c:1646 */ +#line 5534 "util/configparser.c" /* yacc.c:1646 */ break; - case 469: -#line 2479 "./util/configparser.y" /* yacc.c:1646 */ + case 473: +#line 2504 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5497,11 +5542,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5501 "util/configparser.c" /* yacc.c:1646 */ +#line 5546 "util/configparser.c" /* yacc.c:1646 */ break; - case 470: -#line 2488 "./util/configparser.y" /* yacc.c:1646 */ + case 474: +#line 2513 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5510,11 +5555,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5514 "util/configparser.c" /* yacc.c:1646 */ +#line 5559 "util/configparser.c" /* yacc.c:1646 */ break; - case 471: -#line 2498 "./util/configparser.y" /* yacc.c:1646 */ + case 475: +#line 2523 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5523,52 +5568,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5527 "util/configparser.c" /* yacc.c:1646 */ +#line 5572 "util/configparser.c" /* yacc.c:1646 */ break; - case 472: -#line 2508 "./util/configparser.y" /* yacc.c:1646 */ + case 476: +#line 2533 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5537 "util/configparser.c" /* yacc.c:1646 */ +#line 5582 "util/configparser.c" /* yacc.c:1646 */ break; - case 473: -#line 2515 "./util/configparser.y" /* yacc.c:1646 */ + case 477: +#line 2540 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5547 "util/configparser.c" /* yacc.c:1646 */ +#line 5592 "util/configparser.c" /* yacc.c:1646 */ break; - case 474: -#line 2522 "./util/configparser.y" /* yacc.c:1646 */ + case 478: +#line 2547 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5557 "util/configparser.c" /* yacc.c:1646 */ +#line 5602 "util/configparser.c" /* yacc.c:1646 */ break; - case 475: -#line 2529 "./util/configparser.y" /* yacc.c:1646 */ + case 479: +#line 2554 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5568 "util/configparser.c" /* yacc.c:1646 */ +#line 5613 "util/configparser.c" /* yacc.c:1646 */ break; - case 476: -#line 2537 "./util/configparser.y" /* yacc.c:1646 */ + case 480: +#line 2562 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5577,11 +5622,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5581 "util/configparser.c" /* yacc.c:1646 */ +#line 5626 "util/configparser.c" /* yacc.c:1646 */ break; - case 477: -#line 2547 "./util/configparser.y" /* yacc.c:1646 */ + case 481: +#line 2572 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5590,11 +5635,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5594 "util/configparser.c" /* yacc.c:1646 */ +#line 5639 "util/configparser.c" /* yacc.c:1646 */ break; - case 478: -#line 2557 "./util/configparser.y" /* yacc.c:1646 */ + case 482: +#line 2582 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5603,11 +5648,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5607 "util/configparser.c" /* yacc.c:1646 */ +#line 5652 "util/configparser.c" /* yacc.c:1646 */ break; - case 479: -#line 2567 "./util/configparser.y" /* yacc.c:1646 */ + case 483: +#line 2592 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5616,11 +5661,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5620 "util/configparser.c" /* yacc.c:1646 */ +#line 5665 "util/configparser.c" /* yacc.c:1646 */ break; - case 480: -#line 2577 "./util/configparser.y" /* yacc.c:1646 */ + case 484: +#line 2602 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5658,11 +5703,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5662 "util/configparser.c" /* yacc.c:1646 */ +#line 5707 "util/configparser.c" /* yacc.c:1646 */ break; - case 481: -#line 2616 "./util/configparser.y" /* yacc.c:1646 */ + case 485: +#line 2641 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5671,33 +5716,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5675 "util/configparser.c" /* yacc.c:1646 */ +#line 5720 "util/configparser.c" /* yacc.c:1646 */ break; - case 482: -#line 2626 "./util/configparser.y" /* yacc.c:1646 */ + case 486: +#line 2651 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5686 "util/configparser.c" /* yacc.c:1646 */ +#line 5731 "util/configparser.c" /* yacc.c:1646 */ break; - case 483: -#line 2634 "./util/configparser.y" /* yacc.c:1646 */ + case 487: +#line 2659 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5697 "util/configparser.c" /* yacc.c:1646 */ +#line 5742 "util/configparser.c" /* yacc.c:1646 */ break; - case 484: -#line 2642 "./util/configparser.y" /* yacc.c:1646 */ + case 488: +#line 2667 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5711,11 +5756,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5715 "util/configparser.c" /* yacc.c:1646 */ +#line 5760 "util/configparser.c" /* yacc.c:1646 */ break; - case 485: -#line 2657 "./util/configparser.y" /* yacc.c:1646 */ + case 489: +#line 2682 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5723,19 +5768,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5727 "util/configparser.c" /* yacc.c:1646 */ +#line 5772 "util/configparser.c" /* yacc.c:1646 */ break; - case 486: -#line 2666 "./util/configparser.y" /* yacc.c:1646 */ + case 490: +#line 2691 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5735 "util/configparser.c" /* yacc.c:1646 */ +#line 5780 "util/configparser.c" /* yacc.c:1646 */ break; - case 497: -#line 2677 "./util/configparser.y" /* yacc.c:1646 */ + case 501: +#line 2702 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5744,11 +5789,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5748 "util/configparser.c" /* yacc.c:1646 */ +#line 5793 "util/configparser.c" /* yacc.c:1646 */ break; - case 498: -#line 2687 "./util/configparser.y" /* yacc.c:1646 */ + case 502: +#line 2712 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5756,79 +5801,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5760 "util/configparser.c" /* yacc.c:1646 */ +#line 5805 "util/configparser.c" /* yacc.c:1646 */ break; - case 499: -#line 2696 "./util/configparser.y" /* yacc.c:1646 */ + case 503: +#line 2721 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5770 "util/configparser.c" /* yacc.c:1646 */ +#line 5815 "util/configparser.c" /* yacc.c:1646 */ break; - case 500: -#line 2703 "./util/configparser.y" /* yacc.c:1646 */ + case 504: +#line 2728 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5780 "util/configparser.c" /* yacc.c:1646 */ +#line 5825 "util/configparser.c" /* yacc.c:1646 */ break; - case 501: -#line 2710 "./util/configparser.y" /* yacc.c:1646 */ + case 505: +#line 2735 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5790 "util/configparser.c" /* yacc.c:1646 */ +#line 5835 "util/configparser.c" /* yacc.c:1646 */ break; - case 502: -#line 2717 "./util/configparser.y" /* yacc.c:1646 */ + case 506: +#line 2742 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5800 "util/configparser.c" /* yacc.c:1646 */ +#line 5845 "util/configparser.c" /* yacc.c:1646 */ break; - case 503: -#line 2724 "./util/configparser.y" /* yacc.c:1646 */ + case 507: +#line 2749 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5810 "util/configparser.c" /* yacc.c:1646 */ +#line 5855 "util/configparser.c" /* yacc.c:1646 */ break; - case 504: -#line 2731 "./util/configparser.y" /* yacc.c:1646 */ + case 508: +#line 2756 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5820 "util/configparser.c" /* yacc.c:1646 */ +#line 5865 "util/configparser.c" /* yacc.c:1646 */ break; - case 505: -#line 2738 "./util/configparser.y" /* yacc.c:1646 */ + case 509: +#line 2763 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5828 "util/configparser.c" /* yacc.c:1646 */ +#line 5873 "util/configparser.c" /* yacc.c:1646 */ break; - case 526: -#line 2758 "./util/configparser.y" /* yacc.c:1646 */ + case 530: +#line 2783 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5836,31 +5881,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5840 "util/configparser.c" /* yacc.c:1646 */ +#line 5885 "util/configparser.c" /* yacc.c:1646 */ break; - case 527: -#line 2767 "./util/configparser.y" /* yacc.c:1646 */ + case 531: +#line 2792 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5850 "util/configparser.c" /* yacc.c:1646 */ +#line 5895 "util/configparser.c" /* yacc.c:1646 */ break; - case 528: -#line 2774 "./util/configparser.y" /* yacc.c:1646 */ + case 532: +#line 2799 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 5860 "util/configparser.c" /* yacc.c:1646 */ +#line 5905 "util/configparser.c" /* yacc.c:1646 */ break; - case 529: -#line 2781 "./util/configparser.y" /* yacc.c:1646 */ + case 533: +#line 2806 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5868,51 +5913,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5872 "util/configparser.c" /* yacc.c:1646 */ +#line 5917 "util/configparser.c" /* yacc.c:1646 */ break; - case 530: -#line 2790 "./util/configparser.y" /* yacc.c:1646 */ + case 534: +#line 2815 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 5882 "util/configparser.c" /* yacc.c:1646 */ +#line 5927 "util/configparser.c" /* yacc.c:1646 */ break; - case 531: -#line 2797 "./util/configparser.y" /* yacc.c:1646 */ + case 535: +#line 2822 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 5892 "util/configparser.c" /* yacc.c:1646 */ +#line 5937 "util/configparser.c" /* yacc.c:1646 */ break; - case 532: -#line 2804 "./util/configparser.y" /* yacc.c:1646 */ + case 536: +#line 2829 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 5902 "util/configparser.c" /* yacc.c:1646 */ +#line 5947 "util/configparser.c" /* yacc.c:1646 */ break; - case 533: -#line 2811 "./util/configparser.y" /* yacc.c:1646 */ + case 537: +#line 2836 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 5912 "util/configparser.c" /* yacc.c:1646 */ +#line 5957 "util/configparser.c" /* yacc.c:1646 */ break; - case 534: -#line 2818 "./util/configparser.y" /* yacc.c:1646 */ + case 538: +#line 2843 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5920,11 +5965,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5924 "util/configparser.c" /* yacc.c:1646 */ +#line 5969 "util/configparser.c" /* yacc.c:1646 */ break; - case 535: -#line 2827 "./util/configparser.y" /* yacc.c:1646 */ + case 539: +#line 2852 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5932,31 +5977,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5936 "util/configparser.c" /* yacc.c:1646 */ +#line 5981 "util/configparser.c" /* yacc.c:1646 */ break; - case 536: -#line 2836 "./util/configparser.y" /* yacc.c:1646 */ + case 540: +#line 2861 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5946 "util/configparser.c" /* yacc.c:1646 */ +#line 5991 "util/configparser.c" /* yacc.c:1646 */ break; - case 537: -#line 2843 "./util/configparser.y" /* yacc.c:1646 */ + case 541: +#line 2868 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5956 "util/configparser.c" /* yacc.c:1646 */ +#line 6001 "util/configparser.c" /* yacc.c:1646 */ break; - case 538: -#line 2850 "./util/configparser.y" /* yacc.c:1646 */ + case 542: +#line 2875 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5965,11 +6010,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5969 "util/configparser.c" /* yacc.c:1646 */ +#line 6014 "util/configparser.c" /* yacc.c:1646 */ break; - case 539: -#line 2860 "./util/configparser.y" /* yacc.c:1646 */ + case 543: +#line 2885 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5978,11 +6023,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5982 "util/configparser.c" /* yacc.c:1646 */ +#line 6027 "util/configparser.c" /* yacc.c:1646 */ break; - case 540: -#line 2870 "./util/configparser.y" /* yacc.c:1646 */ + case 544: +#line 2895 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5991,11 +6036,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5995 "util/configparser.c" /* yacc.c:1646 */ +#line 6040 "util/configparser.c" /* yacc.c:1646 */ break; - case 541: -#line 2880 "./util/configparser.y" /* yacc.c:1646 */ + case 545: +#line 2905 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6004,11 +6049,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6008 "util/configparser.c" /* yacc.c:1646 */ +#line 6053 "util/configparser.c" /* yacc.c:1646 */ break; - case 542: -#line 2890 "./util/configparser.y" /* yacc.c:1646 */ + case 546: +#line 2915 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6017,11 +6062,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6021 "util/configparser.c" /* yacc.c:1646 */ +#line 6066 "util/configparser.c" /* yacc.c:1646 */ break; - case 543: -#line 2900 "./util/configparser.y" /* yacc.c:1646 */ + case 547: +#line 2925 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6030,29 +6075,29 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6034 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 544: -#line 2910 "./util/configparser.y" /* yacc.c:1646 */ - { - OUTYY(("\nP(python:)\n")); - } -#line 6042 "util/configparser.c" /* yacc.c:1646 */ +#line 6079 "util/configparser.c" /* yacc.c:1646 */ break; case 548: -#line 2919 "./util/configparser.y" /* yacc.c:1646 */ +#line 2935 "./util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("\nP(python:)\n")); + } +#line 6087 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 552: +#line 2944 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6052 "util/configparser.c" /* yacc.c:1646 */ +#line 6097 "util/configparser.c" /* yacc.c:1646 */ break; - case 549: -#line 2925 "./util/configparser.y" /* yacc.c:1646 */ + case 553: +#line 2950 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6061,21 +6106,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6065 "util/configparser.c" /* yacc.c:1646 */ +#line 6110 "util/configparser.c" /* yacc.c:1646 */ break; - case 550: -#line 2935 "./util/configparser.y" /* yacc.c:1646 */ + case 554: +#line 2960 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6075 "util/configparser.c" /* yacc.c:1646 */ +#line 6120 "util/configparser.c" /* yacc.c:1646 */ break; - case 551: -#line 2942 "./util/configparser.y" /* yacc.c:1646 */ + case 555: +#line 2967 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6083,30 +6128,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6087 "util/configparser.c" /* yacc.c:1646 */ +#line 6132 "util/configparser.c" /* yacc.c:1646 */ break; - case 552: -#line 2951 "./util/configparser.y" /* yacc.c:1646 */ + case 556: +#line 2976 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6098 "util/configparser.c" /* yacc.c:1646 */ +#line 6143 "util/configparser.c" /* yacc.c:1646 */ break; - case 553: -#line 2959 "./util/configparser.y" /* yacc.c:1646 */ + case 557: +#line 2984 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6106 "util/configparser.c" /* yacc.c:1646 */ +#line 6151 "util/configparser.c" /* yacc.c:1646 */ break; - case 566: -#line 2975 "./util/configparser.y" /* yacc.c:1646 */ + case 570: +#line 3000 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6114,11 +6159,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6118 "util/configparser.c" /* yacc.c:1646 */ +#line 6163 "util/configparser.c" /* yacc.c:1646 */ break; - case 567: -#line 2985 "./util/configparser.y" /* yacc.c:1646 */ + case 571: +#line 3010 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6126,21 +6171,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6130 "util/configparser.c" /* yacc.c:1646 */ +#line 6175 "util/configparser.c" /* yacc.c:1646 */ break; - case 568: -#line 2994 "./util/configparser.y" /* yacc.c:1646 */ + case 572: +#line 3019 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6140 "util/configparser.c" /* yacc.c:1646 */ +#line 6185 "util/configparser.c" /* yacc.c:1646 */ break; - case 569: -#line 3001 "./util/configparser.y" /* yacc.c:1646 */ + case 573: +#line 3026 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6148,21 +6193,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6152 "util/configparser.c" /* yacc.c:1646 */ +#line 6197 "util/configparser.c" /* yacc.c:1646 */ break; - case 570: -#line 3010 "./util/configparser.y" /* yacc.c:1646 */ + case 574: +#line 3035 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6162 "util/configparser.c" /* yacc.c:1646 */ +#line 6207 "util/configparser.c" /* yacc.c:1646 */ break; - case 571: -#line 3017 "./util/configparser.y" /* yacc.c:1646 */ + case 575: +#line 3042 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6170,22 +6215,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6174 "util/configparser.c" /* yacc.c:1646 */ +#line 6219 "util/configparser.c" /* yacc.c:1646 */ break; - case 572: -#line 3026 "./util/configparser.y" /* yacc.c:1646 */ + case 576: +#line 3051 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6185 "util/configparser.c" /* yacc.c:1646 */ +#line 6230 "util/configparser.c" /* yacc.c:1646 */ break; - case 573: -#line 3034 "./util/configparser.y" /* yacc.c:1646 */ + case 577: +#line 3059 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6197,22 +6242,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6201 "util/configparser.c" /* yacc.c:1646 */ +#line 6246 "util/configparser.c" /* yacc.c:1646 */ break; - case 574: -#line 3047 "./util/configparser.y" /* yacc.c:1646 */ + case 578: +#line 3072 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6212 "util/configparser.c" /* yacc.c:1646 */ +#line 6257 "util/configparser.c" /* yacc.c:1646 */ break; - case 575: -#line 3055 "./util/configparser.y" /* yacc.c:1646 */ + case 579: +#line 3080 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6224,19 +6269,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6228 "util/configparser.c" /* yacc.c:1646 */ +#line 6273 "util/configparser.c" /* yacc.c:1646 */ break; - case 576: -#line 3068 "./util/configparser.y" /* yacc.c:1646 */ + case 580: +#line 3093 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 6236 "util/configparser.c" /* yacc.c:1646 */ +#line 6281 "util/configparser.c" /* yacc.c:1646 */ break; - case 584: -#line 3078 "./util/configparser.y" /* yacc.c:1646 */ + case 589: +#line 3104 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6247,11 +6292,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6251 "util/configparser.c" /* yacc.c:1646 */ +#line 6296 "util/configparser.c" /* yacc.c:1646 */ break; - case 585: -#line 3090 "./util/configparser.y" /* yacc.c:1646 */ + case 590: +#line 3116 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6262,11 +6307,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6266 "util/configparser.c" /* yacc.c:1646 */ +#line 6311 "util/configparser.c" /* yacc.c:1646 */ break; - case 586: -#line 3102 "./util/configparser.y" /* yacc.c:1646 */ + case 591: +#line 3128 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6277,11 +6322,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6281 "util/configparser.c" /* yacc.c:1646 */ +#line 6326 "util/configparser.c" /* yacc.c:1646 */ break; - case 587: -#line 3114 "./util/configparser.y" /* yacc.c:1646 */ + case 592: +#line 3140 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6295,11 +6340,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6299 "util/configparser.c" /* yacc.c:1646 */ +#line 6344 "util/configparser.c" /* yacc.c:1646 */ break; - case 588: -#line 3129 "./util/configparser.y" /* yacc.c:1646 */ + case 593: +#line 3155 "./util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6311,11 +6356,27 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6315 "util/configparser.c" /* yacc.c:1646 */ +#line 6360 "util/configparser.c" /* yacc.c:1646 */ break; - case 589: -#line 3142 "./util/configparser.y" /* yacc.c:1646 */ + case 594: +#line 3168 "./util/configparser.y" /* yacc.c:1646 */ + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0); + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free((yyvsp[0].str)); + } +#line 6376 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 595: +#line 3181 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6325,19 +6386,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6329 "util/configparser.c" /* yacc.c:1646 */ +#line 6390 "util/configparser.c" /* yacc.c:1646 */ break; - case 590: -#line 3153 "./util/configparser.y" /* yacc.c:1646 */ + case 596: +#line 3192 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(ipset:)\n")); } -#line 6337 "util/configparser.c" /* yacc.c:1646 */ +#line 6398 "util/configparser.c" /* yacc.c:1646 */ break; - case 595: -#line 3162 "./util/configparser.y" /* yacc.c:1646 */ + case 601: +#line 3201 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6351,11 +6412,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6355 "util/configparser.c" /* yacc.c:1646 */ +#line 6416 "util/configparser.c" /* yacc.c:1646 */ break; - case 596: -#line 3177 "./util/configparser.y" /* yacc.c:1646 */ + case 602: +#line 3216 "./util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6369,11 +6430,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6373 "util/configparser.c" /* yacc.c:1646 */ +#line 6434 "util/configparser.c" /* yacc.c:1646 */ break; -#line 6377 "util/configparser.c" /* yacc.c:1646 */ +#line 6438 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -6601,7 +6662,7 @@ yyreturn: #endif return yyresult; } -#line 3191 "./util/configparser.y" /* yacc.c:1906 */ +#line 3230 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 117b1e5fe..9b2d0f424 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -219,115 +219,118 @@ extern int yydebug; VAR_RESPONSE_IP_DATA = 429, VAR_HARDEN_ALGO_DOWNGRADE = 430, VAR_IP_TRANSPARENT = 431, - VAR_DISABLE_DNSSEC_LAME_CHECK = 432, - VAR_IP_RATELIMIT = 433, - VAR_IP_RATELIMIT_SLABS = 434, - VAR_IP_RATELIMIT_SIZE = 435, - VAR_RATELIMIT = 436, - VAR_RATELIMIT_SLABS = 437, - VAR_RATELIMIT_SIZE = 438, - VAR_RATELIMIT_FOR_DOMAIN = 439, - VAR_RATELIMIT_BELOW_DOMAIN = 440, - VAR_IP_RATELIMIT_FACTOR = 441, - VAR_RATELIMIT_FACTOR = 442, - VAR_SEND_CLIENT_SUBNET = 443, - VAR_CLIENT_SUBNET_ZONE = 444, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 445, - VAR_CLIENT_SUBNET_OPCODE = 446, - VAR_MAX_CLIENT_SUBNET_IPV4 = 447, - VAR_MAX_CLIENT_SUBNET_IPV6 = 448, - VAR_MIN_CLIENT_SUBNET_IPV4 = 449, - VAR_MIN_CLIENT_SUBNET_IPV6 = 450, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 451, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 452, - VAR_CAPS_WHITELIST = 453, - VAR_CACHE_MAX_NEGATIVE_TTL = 454, - VAR_PERMIT_SMALL_HOLDDOWN = 455, - VAR_QNAME_MINIMISATION = 456, - VAR_QNAME_MINIMISATION_STRICT = 457, - VAR_IP_FREEBIND = 458, - VAR_DEFINE_TAG = 459, - VAR_LOCAL_ZONE_TAG = 460, - VAR_ACCESS_CONTROL_TAG = 461, - VAR_LOCAL_ZONE_OVERRIDE = 462, - VAR_ACCESS_CONTROL_TAG_ACTION = 463, - VAR_ACCESS_CONTROL_TAG_DATA = 464, - VAR_VIEW = 465, - VAR_ACCESS_CONTROL_VIEW = 466, - VAR_VIEW_FIRST = 467, - VAR_SERVE_EXPIRED = 468, - VAR_SERVE_EXPIRED_TTL = 469, - VAR_SERVE_EXPIRED_TTL_RESET = 470, - VAR_SERVE_EXPIRED_REPLY_TTL = 471, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 472, - VAR_FAKE_DSA = 473, - VAR_FAKE_SHA1 = 474, - VAR_LOG_IDENTITY = 475, - VAR_HIDE_TRUSTANCHOR = 476, - VAR_TRUST_ANCHOR_SIGNALING = 477, - VAR_AGGRESSIVE_NSEC = 478, - VAR_USE_SYSTEMD = 479, - VAR_SHM_ENABLE = 480, - VAR_SHM_KEY = 481, - VAR_ROOT_KEY_SENTINEL = 482, - VAR_DNSCRYPT = 483, - VAR_DNSCRYPT_ENABLE = 484, - VAR_DNSCRYPT_PORT = 485, - VAR_DNSCRYPT_PROVIDER = 486, - VAR_DNSCRYPT_SECRET_KEY = 487, - VAR_DNSCRYPT_PROVIDER_CERT = 488, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 489, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 490, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 491, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 492, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 493, - VAR_IPSECMOD_ENABLED = 494, - VAR_IPSECMOD_HOOK = 495, - VAR_IPSECMOD_IGNORE_BOGUS = 496, - VAR_IPSECMOD_MAX_TTL = 497, - VAR_IPSECMOD_WHITELIST = 498, - VAR_IPSECMOD_STRICT = 499, - VAR_CACHEDB = 500, - VAR_CACHEDB_BACKEND = 501, - VAR_CACHEDB_SECRETSEED = 502, - VAR_CACHEDB_REDISHOST = 503, - VAR_CACHEDB_REDISPORT = 504, - VAR_CACHEDB_REDISTIMEOUT = 505, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 506, - VAR_FOR_UPSTREAM = 507, - VAR_AUTH_ZONE = 508, - VAR_ZONEFILE = 509, - VAR_MASTER = 510, - VAR_URL = 511, - VAR_FOR_DOWNSTREAM = 512, - VAR_FALLBACK_ENABLED = 513, - VAR_TLS_ADDITIONAL_PORT = 514, - VAR_LOW_RTT = 515, - VAR_LOW_RTT_PERMIL = 516, - VAR_FAST_SERVER_PERMIL = 517, - VAR_FAST_SERVER_NUM = 518, - VAR_ALLOW_NOTIFY = 519, - VAR_TLS_WIN_CERT = 520, - VAR_TCP_CONNECTION_LIMIT = 521, - VAR_FORWARD_NO_CACHE = 522, - VAR_STUB_NO_CACHE = 523, - VAR_LOG_SERVFAIL = 524, - VAR_DENY_ANY = 525, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 526, - VAR_LOG_TAG_QUERYREPLY = 527, - VAR_STREAM_WAIT_SIZE = 528, - VAR_TLS_CIPHERS = 529, - VAR_TLS_CIPHERSUITES = 530, - VAR_IPSET = 531, - VAR_IPSET_NAME_V4 = 532, - VAR_IPSET_NAME_V6 = 533, - VAR_TLS_SESSION_TICKET_KEYS = 534, - VAR_RPZ = 535, - VAR_TAGS = 536, - VAR_RPZ_ACTION_OVERRIDE = 537, - VAR_RPZ_CNAME_OVERRIDE = 538, - VAR_RPZ_LOG = 539, - VAR_RPZ_LOG_NAME = 540 + VAR_IP_DSCP = 432, + VAR_DISABLE_DNSSEC_LAME_CHECK = 433, + VAR_IP_RATELIMIT = 434, + VAR_IP_RATELIMIT_SLABS = 435, + VAR_IP_RATELIMIT_SIZE = 436, + VAR_RATELIMIT = 437, + VAR_RATELIMIT_SLABS = 438, + VAR_RATELIMIT_SIZE = 439, + VAR_RATELIMIT_FOR_DOMAIN = 440, + VAR_RATELIMIT_BELOW_DOMAIN = 441, + VAR_IP_RATELIMIT_FACTOR = 442, + VAR_RATELIMIT_FACTOR = 443, + VAR_SEND_CLIENT_SUBNET = 444, + VAR_CLIENT_SUBNET_ZONE = 445, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 446, + VAR_CLIENT_SUBNET_OPCODE = 447, + VAR_MAX_CLIENT_SUBNET_IPV4 = 448, + VAR_MAX_CLIENT_SUBNET_IPV6 = 449, + VAR_MIN_CLIENT_SUBNET_IPV4 = 450, + VAR_MIN_CLIENT_SUBNET_IPV6 = 451, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 452, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 453, + VAR_CAPS_WHITELIST = 454, + VAR_CACHE_MAX_NEGATIVE_TTL = 455, + VAR_PERMIT_SMALL_HOLDDOWN = 456, + VAR_QNAME_MINIMISATION = 457, + VAR_QNAME_MINIMISATION_STRICT = 458, + VAR_IP_FREEBIND = 459, + VAR_DEFINE_TAG = 460, + VAR_LOCAL_ZONE_TAG = 461, + VAR_ACCESS_CONTROL_TAG = 462, + VAR_LOCAL_ZONE_OVERRIDE = 463, + VAR_ACCESS_CONTROL_TAG_ACTION = 464, + VAR_ACCESS_CONTROL_TAG_DATA = 465, + VAR_VIEW = 466, + VAR_ACCESS_CONTROL_VIEW = 467, + VAR_VIEW_FIRST = 468, + VAR_SERVE_EXPIRED = 469, + VAR_SERVE_EXPIRED_TTL = 470, + VAR_SERVE_EXPIRED_TTL_RESET = 471, + VAR_SERVE_EXPIRED_REPLY_TTL = 472, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 473, + VAR_FAKE_DSA = 474, + VAR_FAKE_SHA1 = 475, + VAR_LOG_IDENTITY = 476, + VAR_HIDE_TRUSTANCHOR = 477, + VAR_TRUST_ANCHOR_SIGNALING = 478, + VAR_AGGRESSIVE_NSEC = 479, + VAR_USE_SYSTEMD = 480, + VAR_SHM_ENABLE = 481, + VAR_SHM_KEY = 482, + VAR_ROOT_KEY_SENTINEL = 483, + VAR_DNSCRYPT = 484, + VAR_DNSCRYPT_ENABLE = 485, + VAR_DNSCRYPT_PORT = 486, + VAR_DNSCRYPT_PROVIDER = 487, + VAR_DNSCRYPT_SECRET_KEY = 488, + VAR_DNSCRYPT_PROVIDER_CERT = 489, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 490, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 491, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 492, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 493, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 494, + VAR_IPSECMOD_ENABLED = 495, + VAR_IPSECMOD_HOOK = 496, + VAR_IPSECMOD_IGNORE_BOGUS = 497, + VAR_IPSECMOD_MAX_TTL = 498, + VAR_IPSECMOD_WHITELIST = 499, + VAR_IPSECMOD_STRICT = 500, + VAR_CACHEDB = 501, + VAR_CACHEDB_BACKEND = 502, + VAR_CACHEDB_SECRETSEED = 503, + VAR_CACHEDB_REDISHOST = 504, + VAR_CACHEDB_REDISPORT = 505, + VAR_CACHEDB_REDISTIMEOUT = 506, + VAR_CACHEDB_REDISEXPIRERECORDS = 507, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 508, + VAR_FOR_UPSTREAM = 509, + VAR_AUTH_ZONE = 510, + VAR_ZONEFILE = 511, + VAR_MASTER = 512, + VAR_URL = 513, + VAR_FOR_DOWNSTREAM = 514, + VAR_FALLBACK_ENABLED = 515, + VAR_TLS_ADDITIONAL_PORT = 516, + VAR_LOW_RTT = 517, + VAR_LOW_RTT_PERMIL = 518, + VAR_FAST_SERVER_PERMIL = 519, + VAR_FAST_SERVER_NUM = 520, + VAR_ALLOW_NOTIFY = 521, + VAR_TLS_WIN_CERT = 522, + VAR_TCP_CONNECTION_LIMIT = 523, + VAR_FORWARD_NO_CACHE = 524, + VAR_STUB_NO_CACHE = 525, + VAR_LOG_SERVFAIL = 526, + VAR_DENY_ANY = 527, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 528, + VAR_LOG_TAG_QUERYREPLY = 529, + VAR_STREAM_WAIT_SIZE = 530, + VAR_TLS_CIPHERS = 531, + VAR_TLS_CIPHERSUITES = 532, + VAR_TLS_USE_SNI = 533, + VAR_IPSET = 534, + VAR_IPSET_NAME_V4 = 535, + VAR_IPSET_NAME_V6 = 536, + VAR_TLS_SESSION_TICKET_KEYS = 537, + VAR_RPZ = 538, + VAR_TAGS = 539, + VAR_RPZ_ACTION_OVERRIDE = 540, + VAR_RPZ_CNAME_OVERRIDE = 541, + VAR_RPZ_LOG = 542, + VAR_RPZ_LOG_NAME = 543 }; #endif /* Tokens. */ @@ -505,115 +508,118 @@ extern int yydebug; #define VAR_RESPONSE_IP_DATA 429 #define VAR_HARDEN_ALGO_DOWNGRADE 430 #define VAR_IP_TRANSPARENT 431 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 432 -#define VAR_IP_RATELIMIT 433 -#define VAR_IP_RATELIMIT_SLABS 434 -#define VAR_IP_RATELIMIT_SIZE 435 -#define VAR_RATELIMIT 436 -#define VAR_RATELIMIT_SLABS 437 -#define VAR_RATELIMIT_SIZE 438 -#define VAR_RATELIMIT_FOR_DOMAIN 439 -#define VAR_RATELIMIT_BELOW_DOMAIN 440 -#define VAR_IP_RATELIMIT_FACTOR 441 -#define VAR_RATELIMIT_FACTOR 442 -#define VAR_SEND_CLIENT_SUBNET 443 -#define VAR_CLIENT_SUBNET_ZONE 444 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 445 -#define VAR_CLIENT_SUBNET_OPCODE 446 -#define VAR_MAX_CLIENT_SUBNET_IPV4 447 -#define VAR_MAX_CLIENT_SUBNET_IPV6 448 -#define VAR_MIN_CLIENT_SUBNET_IPV4 449 -#define VAR_MIN_CLIENT_SUBNET_IPV6 450 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 451 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 452 -#define VAR_CAPS_WHITELIST 453 -#define VAR_CACHE_MAX_NEGATIVE_TTL 454 -#define VAR_PERMIT_SMALL_HOLDDOWN 455 -#define VAR_QNAME_MINIMISATION 456 -#define VAR_QNAME_MINIMISATION_STRICT 457 -#define VAR_IP_FREEBIND 458 -#define VAR_DEFINE_TAG 459 -#define VAR_LOCAL_ZONE_TAG 460 -#define VAR_ACCESS_CONTROL_TAG 461 -#define VAR_LOCAL_ZONE_OVERRIDE 462 -#define VAR_ACCESS_CONTROL_TAG_ACTION 463 -#define VAR_ACCESS_CONTROL_TAG_DATA 464 -#define VAR_VIEW 465 -#define VAR_ACCESS_CONTROL_VIEW 466 -#define VAR_VIEW_FIRST 467 -#define VAR_SERVE_EXPIRED 468 -#define VAR_SERVE_EXPIRED_TTL 469 -#define VAR_SERVE_EXPIRED_TTL_RESET 470 -#define VAR_SERVE_EXPIRED_REPLY_TTL 471 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 472 -#define VAR_FAKE_DSA 473 -#define VAR_FAKE_SHA1 474 -#define VAR_LOG_IDENTITY 475 -#define VAR_HIDE_TRUSTANCHOR 476 -#define VAR_TRUST_ANCHOR_SIGNALING 477 -#define VAR_AGGRESSIVE_NSEC 478 -#define VAR_USE_SYSTEMD 479 -#define VAR_SHM_ENABLE 480 -#define VAR_SHM_KEY 481 -#define VAR_ROOT_KEY_SENTINEL 482 -#define VAR_DNSCRYPT 483 -#define VAR_DNSCRYPT_ENABLE 484 -#define VAR_DNSCRYPT_PORT 485 -#define VAR_DNSCRYPT_PROVIDER 486 -#define VAR_DNSCRYPT_SECRET_KEY 487 -#define VAR_DNSCRYPT_PROVIDER_CERT 488 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 489 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 490 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 491 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 492 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 493 -#define VAR_IPSECMOD_ENABLED 494 -#define VAR_IPSECMOD_HOOK 495 -#define VAR_IPSECMOD_IGNORE_BOGUS 496 -#define VAR_IPSECMOD_MAX_TTL 497 -#define VAR_IPSECMOD_WHITELIST 498 -#define VAR_IPSECMOD_STRICT 499 -#define VAR_CACHEDB 500 -#define VAR_CACHEDB_BACKEND 501 -#define VAR_CACHEDB_SECRETSEED 502 -#define VAR_CACHEDB_REDISHOST 503 -#define VAR_CACHEDB_REDISPORT 504 -#define VAR_CACHEDB_REDISTIMEOUT 505 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 506 -#define VAR_FOR_UPSTREAM 507 -#define VAR_AUTH_ZONE 508 -#define VAR_ZONEFILE 509 -#define VAR_MASTER 510 -#define VAR_URL 511 -#define VAR_FOR_DOWNSTREAM 512 -#define VAR_FALLBACK_ENABLED 513 -#define VAR_TLS_ADDITIONAL_PORT 514 -#define VAR_LOW_RTT 515 -#define VAR_LOW_RTT_PERMIL 516 -#define VAR_FAST_SERVER_PERMIL 517 -#define VAR_FAST_SERVER_NUM 518 -#define VAR_ALLOW_NOTIFY 519 -#define VAR_TLS_WIN_CERT 520 -#define VAR_TCP_CONNECTION_LIMIT 521 -#define VAR_FORWARD_NO_CACHE 522 -#define VAR_STUB_NO_CACHE 523 -#define VAR_LOG_SERVFAIL 524 -#define VAR_DENY_ANY 525 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 526 -#define VAR_LOG_TAG_QUERYREPLY 527 -#define VAR_STREAM_WAIT_SIZE 528 -#define VAR_TLS_CIPHERS 529 -#define VAR_TLS_CIPHERSUITES 530 -#define VAR_IPSET 531 -#define VAR_IPSET_NAME_V4 532 -#define VAR_IPSET_NAME_V6 533 -#define VAR_TLS_SESSION_TICKET_KEYS 534 -#define VAR_RPZ 535 -#define VAR_TAGS 536 -#define VAR_RPZ_ACTION_OVERRIDE 537 -#define VAR_RPZ_CNAME_OVERRIDE 538 -#define VAR_RPZ_LOG 539 -#define VAR_RPZ_LOG_NAME 540 +#define VAR_IP_DSCP 432 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 433 +#define VAR_IP_RATELIMIT 434 +#define VAR_IP_RATELIMIT_SLABS 435 +#define VAR_IP_RATELIMIT_SIZE 436 +#define VAR_RATELIMIT 437 +#define VAR_RATELIMIT_SLABS 438 +#define VAR_RATELIMIT_SIZE 439 +#define VAR_RATELIMIT_FOR_DOMAIN 440 +#define VAR_RATELIMIT_BELOW_DOMAIN 441 +#define VAR_IP_RATELIMIT_FACTOR 442 +#define VAR_RATELIMIT_FACTOR 443 +#define VAR_SEND_CLIENT_SUBNET 444 +#define VAR_CLIENT_SUBNET_ZONE 445 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 446 +#define VAR_CLIENT_SUBNET_OPCODE 447 +#define VAR_MAX_CLIENT_SUBNET_IPV4 448 +#define VAR_MAX_CLIENT_SUBNET_IPV6 449 +#define VAR_MIN_CLIENT_SUBNET_IPV4 450 +#define VAR_MIN_CLIENT_SUBNET_IPV6 451 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 452 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 453 +#define VAR_CAPS_WHITELIST 454 +#define VAR_CACHE_MAX_NEGATIVE_TTL 455 +#define VAR_PERMIT_SMALL_HOLDDOWN 456 +#define VAR_QNAME_MINIMISATION 457 +#define VAR_QNAME_MINIMISATION_STRICT 458 +#define VAR_IP_FREEBIND 459 +#define VAR_DEFINE_TAG 460 +#define VAR_LOCAL_ZONE_TAG 461 +#define VAR_ACCESS_CONTROL_TAG 462 +#define VAR_LOCAL_ZONE_OVERRIDE 463 +#define VAR_ACCESS_CONTROL_TAG_ACTION 464 +#define VAR_ACCESS_CONTROL_TAG_DATA 465 +#define VAR_VIEW 466 +#define VAR_ACCESS_CONTROL_VIEW 467 +#define VAR_VIEW_FIRST 468 +#define VAR_SERVE_EXPIRED 469 +#define VAR_SERVE_EXPIRED_TTL 470 +#define VAR_SERVE_EXPIRED_TTL_RESET 471 +#define VAR_SERVE_EXPIRED_REPLY_TTL 472 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 473 +#define VAR_FAKE_DSA 474 +#define VAR_FAKE_SHA1 475 +#define VAR_LOG_IDENTITY 476 +#define VAR_HIDE_TRUSTANCHOR 477 +#define VAR_TRUST_ANCHOR_SIGNALING 478 +#define VAR_AGGRESSIVE_NSEC 479 +#define VAR_USE_SYSTEMD 480 +#define VAR_SHM_ENABLE 481 +#define VAR_SHM_KEY 482 +#define VAR_ROOT_KEY_SENTINEL 483 +#define VAR_DNSCRYPT 484 +#define VAR_DNSCRYPT_ENABLE 485 +#define VAR_DNSCRYPT_PORT 486 +#define VAR_DNSCRYPT_PROVIDER 487 +#define VAR_DNSCRYPT_SECRET_KEY 488 +#define VAR_DNSCRYPT_PROVIDER_CERT 489 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 490 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 491 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 492 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 493 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 494 +#define VAR_IPSECMOD_ENABLED 495 +#define VAR_IPSECMOD_HOOK 496 +#define VAR_IPSECMOD_IGNORE_BOGUS 497 +#define VAR_IPSECMOD_MAX_TTL 498 +#define VAR_IPSECMOD_WHITELIST 499 +#define VAR_IPSECMOD_STRICT 500 +#define VAR_CACHEDB 501 +#define VAR_CACHEDB_BACKEND 502 +#define VAR_CACHEDB_SECRETSEED 503 +#define VAR_CACHEDB_REDISHOST 504 +#define VAR_CACHEDB_REDISPORT 505 +#define VAR_CACHEDB_REDISTIMEOUT 506 +#define VAR_CACHEDB_REDISEXPIRERECORDS 507 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 508 +#define VAR_FOR_UPSTREAM 509 +#define VAR_AUTH_ZONE 510 +#define VAR_ZONEFILE 511 +#define VAR_MASTER 512 +#define VAR_URL 513 +#define VAR_FOR_DOWNSTREAM 514 +#define VAR_FALLBACK_ENABLED 515 +#define VAR_TLS_ADDITIONAL_PORT 516 +#define VAR_LOW_RTT 517 +#define VAR_LOW_RTT_PERMIL 518 +#define VAR_FAST_SERVER_PERMIL 519 +#define VAR_FAST_SERVER_NUM 520 +#define VAR_ALLOW_NOTIFY 521 +#define VAR_TLS_WIN_CERT 522 +#define VAR_TCP_CONNECTION_LIMIT 523 +#define VAR_FORWARD_NO_CACHE 524 +#define VAR_STUB_NO_CACHE 525 +#define VAR_LOG_SERVFAIL 526 +#define VAR_DENY_ANY 527 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 528 +#define VAR_LOG_TAG_QUERYREPLY 529 +#define VAR_STREAM_WAIT_SIZE 530 +#define VAR_TLS_CIPHERS 531 +#define VAR_TLS_CIPHERSUITES 532 +#define VAR_TLS_USE_SNI 533 +#define VAR_IPSET 534 +#define VAR_IPSET_NAME_V4 535 +#define VAR_IPSET_NAME_V6 536 +#define VAR_TLS_SESSION_TICKET_KEYS 537 +#define VAR_RPZ 538 +#define VAR_TAGS 539 +#define VAR_RPZ_ACTION_OVERRIDE 540 +#define VAR_RPZ_CNAME_OVERRIDE 541 +#define VAR_RPZ_LOG 542 +#define VAR_RPZ_LOG_NAME 543 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -624,7 +630,7 @@ union YYSTYPE char* str; -#line 628 "util/configparser.h" /* yacc.c:1909 */ +#line 634 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 7498ab4f9..67281d3d3 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -130,6 +130,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT +%token VAR_IP_DSCP %token VAR_DISABLE_DNSSEC_LAME_CHECK %token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE @@ -162,6 +163,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED %token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT +%token VAR_CACHEDB_REDISEXPIRERECORDS %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL @@ -169,7 +171,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY -%token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES +%token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME @@ -243,6 +245,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | server_infra_cache_min_rtt | server_harden_algo_downgrade | server_ip_transparent | server_ip_ratelimit | server_ratelimit | + server_ip_dscp | server_ip_ratelimit_slabs | server_ratelimit_slabs | server_ip_ratelimit_size | server_ratelimit_size | server_ratelimit_for_domain | @@ -276,7 +279,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_tcp_connection_limit | server_log_servfail | server_deny_any | server_unknown_server_time_limit | server_log_tag_queryreply | server_stream_wait_size | server_tls_ciphers | - server_tls_ciphersuites | server_tls_session_ticket_keys + server_tls_ciphersuites | server_tls_session_ticket_keys | + server_tls_use_sni ; stubstart: VAR_STUB_ZONE { @@ -957,6 +961,13 @@ server_https_port: VAR_HTTPS_PORT STRING_ARG if(atoi($2) == 0) yyerror("port number expected"); else cfg_parser->cfg->https_port = atoi($2); + }; +server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG + { + OUTYY(("P(server_tls_use_sni:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tls_use_sni = (strcmp($2, "yes")==0); free($2); } ; @@ -1269,6 +1280,20 @@ server_ip_freebind: VAR_IP_FREEBIND STRING_ARG free($2); } ; +server_ip_dscp: VAR_IP_DSCP STRING_ARG + { + OUTYY(("P(server_ip_dscp:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else if (atoi($2) > 63) + yyerror("value too large (max 63)"); + else if (atoi($2) < 0) + yyerror("value too small (min 0)"); + else + cfg_parser->cfg->ip_dscp = atoi($2); + free($2); + } + ; server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG { OUTYY(("P(server_stream_wait_size:%s)\n", $2)); @@ -3072,7 +3097,8 @@ cachedbstart: VAR_CACHEDB contents_cachedb: contents_cachedb content_cachedb | ; content_cachedb: cachedb_backend_name | cachedb_secret_seed | - redis_server_host | redis_server_port | redis_timeout + redis_server_host | redis_server_port | redis_timeout | + redis_expire_records ; cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG { @@ -3138,6 +3164,19 @@ redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG free($2); } ; +redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG + { + #if defined(USE_CACHEDB) && defined(USE_REDIS) + OUTYY(("P(redis_expire_records:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->redis_expire_records = (strcmp($2, "yes")==0); + #else + OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); + #endif + free($2); + } + ; server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", $2, $3)); diff --git a/util/net_help.c b/util/net_help.c index 82d37f489..908ce48d2 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -70,8 +70,8 @@ uint16_t EDNS_ADVERTISED_SIZE = 4096; /** minimal responses when positive answer: default is no */ int MINIMAL_RESPONSES = 0; -/** rrset order roundrobin: default is no */ -int RRSET_ROUNDROBIN = 0; +/** rrset order roundrobin: default is yes */ +int RRSET_ROUNDROBIN = 1; /** log tag queries with name instead of 'info' for filtering */ int LOG_TAG_QUERYREPLY = 0; @@ -1252,11 +1252,13 @@ int check_auth_name_for_ssl(char* auth_name) } /** set the authname on an SSL structure, SSL* ssl */ -int set_auth_name_on_ssl(void* ssl, char* auth_name) +int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni) { if(!auth_name) return 1; #ifdef HAVE_SSL - (void)SSL_set_tlsext_host_name(ssl, auth_name); + if(use_sni) { + (void)SSL_set_tlsext_host_name(ssl, auth_name); + } #else (void)ssl; #endif diff --git a/util/net_help.h b/util/net_help.h index d9ee37ad0..c1bb13923 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -453,9 +453,10 @@ int check_auth_name_for_ssl(char* auth_name); * set auth name on SSL for verification * @param ssl: SSL* to set * @param auth_name: if NULL nothing happens, otherwise the name to check. + * @param use_sni: if SNI will be used. * @return 1 on success or NULL auth_name, 0 on failure. */ -int set_auth_name_on_ssl(void* ssl, char* auth_name); +int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni); /** * Initialize openssl locking for thread safety diff --git a/util/netevent.c b/util/netevent.c index d3802e4f6..5bd74e172 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -3651,7 +3651,10 @@ comm_point_send_reply(struct comm_reply *repinfo) if(repinfo->c->tcp_parent->dtenv != NULL && repinfo->c->tcp_parent->dtenv->log_client_response_messages) dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, - &repinfo->addr, repinfo->c->type, repinfo->c->buffer); + &repinfo->addr, repinfo->c->type, + ( repinfo->c->tcp_req_info + ? repinfo->c->tcp_req_info->spool_buffer + : repinfo->c->buffer )); #endif if(repinfo->c->tcp_req_info) { tcp_req_info_send_reply(repinfo->c->tcp_req_info);